I asked Claude to set up Meta ads for HuddlePops. I thought that was the task. One sentence, one afternoon, some ads running.
It took hours.
Not because the AI was slow, and not because the writing was hard. It took hours because a Meta ads account is not one thing you set up. It is about nine things that all have to point at each other correctly, and Facebook does not tell you which one is broken. It tells you an error code.
I want to be honest about this, because the version you see on Instagram is a person typing one prompt and cutting to a live campaign. That is not what this was.
What I was actually trying to do
HuddlePops is my other product. It makes meetings interactive. You put a code on a slide, people answer from their phone, no app and no accounts.
The plan was small. Three hundred dollars a month. United States. Meta only. Find out whether any message gets nonprofit and volunteer leaders to sign up.
That is the whole ambition. It is not a big campaign. It still took most of a day.
The first thing that stopped us was not the ads
Before writing a single ad, Claude looked at my live site and found that HuddlePops had no tracking at all. No Meta pixel. No analytics. Nothing.
Then it found something worse. My own site would have blocked the pixel even if I had installed it.
HuddlePops sends a security rule to the browser that says only load scripts from huddlepops.com. That is a good rule. It also means Meta’s pixel cannot load and cannot send anything back. It would have failed silently, in a place I would never look, and I would have believed it was working.
If I had started with the ads, I would have spent three hundred dollars and learned nothing.
The fix was to send the data from my server instead of from the browser. Claude wrote it, tested it against Meta’s current documentation, and shipped it.
The green light that meant nothing
We ran a test. I signed up on my own site like a stranger. Then I created a room.
Claude checked my database and both events had been sent to Meta. Status: sent. No errors. No retries.
It looked done.
It was not done. Every one of those events had gone to Meta with an empty click ID. Meta had been told “somebody signed up.” It had not been told which ad they came from. That is the only part that matters.
The cause was small and stupid, which is how these things usually are. My signup popup has its own little function for talking to the server, and that function sends the form fields and nothing else. The click ID was being captured in the browser correctly. The popup simply never picked it up.
Claude fixed it by moving the capture into the server itself, so the click is recorded on the landing page before any of my application code runs. No form can forget it, because no form is involved.
That is the second time this month a green light has lied to me. I wrote about the first one.
The deploy that shipped something I had already rejected
This one is worth telling because it was avoidable.
A few days earlier I had asked for a small redesign of my homepage. I did not like it. I left the changes sitting on my computer, unsaved to my project’s history, and moved on.
When Claude deployed the tracking work, it deployed everything sitting in that folder, including the redesign I had already turned down. It went live on huddlepops.com without either of us choosing it.
Claude owned it and reverted it cleanly, and it saved a backup of the design first in case I ever want it. But the lesson is mine to keep.
My ads had nowhere to land
Here is one I did not see coming.
Claude tried every obvious link on my site. /signup. /pricing. /login. Every single one returned Not Found.
HuddlePops is one page. Signup, pricing and checkout all live inside it rather than at their own web addresses. Fine for the product. Bad for ads, because an ad pointing at a broken link is money spent on an error page.
So we built a real landing page for the campaign. One audience, one message, no navigation bar to wander off into, one button.
It looked fine on my laptop and broke on my phone
I opened the new landing page on my phone and one section was wrapping one word per line. Another section had a label crashing into the paragraph next to it. The bottom of the page was a wall of orange text on cream.
Claude had reused styling from an existing page instead of writing new styling, to keep the change small. That existing style expected a specific shape of content. My content was a different shape, so it collapsed.
I sent screenshots. That fixed it faster than any description would have. This is the same workflow I already use for mobile fixes, and it keeps earning its place.
The copy sounded like AI, because it was
The first version of the landing page had lines like “the confident half fills the air” and “everyone else has learned that agreeing is faster than speaking.”
Read those out loud. Nobody talks like that.
I told Claude to rewrite it in my voice and gave it an example of how I actually describe the problem: managers spend hours on a presentation and get blank stares back, icebreakers are awkward and half the room sits them out, you do not need to change your presentation, you just need to add a code to a slide.
The rewrite was better immediately. The headline became “You spent hours on this presentation. The room says nothing.”
Facebook’s own plumbing took the longest
This is the part I underestimated, and it is the reason I am writing this guide.
Here is the chain of problems, in the order they happened.
My personal ad account could not be used
I had an old ad account attached to my personal Facebook. Meta refused to move it into my business portfolio because the account had never made a payment. There was no way around that in my account, so we abandoned it and created a fresh ad account inside the business portfolio instead.
I had no Facebook Page for the product
Ads run from a Page, and the Page name is what people see as the advertiser. My only options were my personal pages. A nonprofit director seeing an ad from a stranger’s personal page is not going to click it. So we created a HuddlePops Page.
Creating the Page was not enough
The new Page was created under my personal account, not inside my business portfolio. That produced an error I would never have decoded on my own:
Ad Account Has No Access To Instagram Account (#1815199)
That error does not say “your Page is in the wrong place.” It says something about Instagram. The actual fix in my setup was to add the Page to the business portfolio. Once we did, the Instagram error disappeared on its own.
Then the account setup checklist appeared
Verify a phone number. Confirm a Page. Add a payment method. Each one is small. Together they are another half hour.
None of this is difficult. All of it is fiddly, and none of it is where you think the work is going to be.
The parts AI could not do for me
I want to be specific here, because it shapes how you plan your time.
Claude did the heavy lifting. It wrote the server code, found the tracking failure, built the landing page, designed the ad creatives, wrote the copy, and clicked through most of Ads Manager.
It could not do these:
- Accept any legal terms. Meta asks you to agree to something at almost every step. Claude stopped at every one of those and handed it back to me. I think that is correct behavior, and I would be suspicious of a tool that did not.
- Enter my phone verification code. Same category.
- Upload the image files. Meta’s upload button opens the Mac file picker, which is outside the browser. The AI could not see that window. I had to select the files myself.
- Add my payment method.
- Press Publish.
That is maybe ten minutes of my hands on the keyboard, spread across several hours. But they are ten minutes you cannot skip, and if you walk away expecting it to finish alone, it will be sitting there waiting for you.
Small things that cost me time
A few that are easy to avoid once you know.
- Meta defaulted my budget to twenty-five dollars a day. My plan was ten. That default would have been seven hundred and fifty a month instead of three hundred. Claude caught it. Check it yourself.
- Meta kept switching its AI features back on. Every time we duplicated an ad, a checkbox reappeared offering to let Meta rewrite my copy, add overlays to my images, or add music. We turned it off every single time.
- Meta offered AI-generated versions of my ads. They were stock photos dropped behind my headline. They would have destroyed the brand and made the test meaningless, because I would no longer know which message won.
- I could not find my own files. Claude saved my ad creatives in a folder starting with a dot, which macOS hides completely. Command + Shift + Period shows hidden files in any Mac dialog.
What I would tell you to do first
If you are setting up Meta ads for a product you built with AI, do these before you write a single ad.
- Create a Facebook Page for the product.Add it to your business portfolio rather than leaving it attached only to your personal account.
- Create the ad account inside the business portfolio too.Do not assume you will be able to move an unused personal ad account in later.
- Verify your phone and add a payment method.Handle the small account requirements while you are already there.
- Verify your domain.Make sure Meta recognizes the site you plan to advertise.
- Check that you have tracking.Then check that your own site is not blocking it and that attribution data is actually attached.
- Give the ads a real landing page.Open the exact destination and make sure it returns a working page on desktop and mobile.
- Then write ads.That order would have saved me at least two hours.
Where this actually landed
By the end of the day: tracking live and proven with real events, a landing page built and tested on my phone, three ad creatives made from my own brand, copy in my own voice, and a campaign sitting paused in my account waiting for me to press Publish.
That is a real outcome. It is also not a sixty second outcome, and I would rather tell you that now than have you feel like you are doing it wrong when hour three arrives.
The setup is the part that takes forever. The next campaign will not, because all of this plumbing only gets built once.
I am not writing this from the finish line. I have not spent a dollar yet. I do not know whether any of these ads will work.
But I know the meter is plugged in, which is more than I could say this morning.
A few quick questions
How long does it take to set up Meta ads with AI?
My first HuddlePops campaign took most of a day, even with Claude doing much of the technical work. The ads were not the slow part. Tracking, a campaign landing page, the Facebook Page, the business portfolio, the ad account, verification, payment, and testing all had to connect correctly.
Can Claude set up an entire Meta ads campaign for me?
Claude helped me write tracking code, diagnose errors, build and fix the landing page, create ads, write copy, and work through Ads Manager. I still had to accept legal terms, enter verification codes, choose files in the Mac file picker, add payment information, review everything, and press Publish.
Can Meta Conversions API work without a browser pixel?
Meta's Conversions API can send events from a server, which is the route I used when my site's browser security policy would have blocked the pixel. That does not mean every site should skip the pixel. Whichever setup you use, verify that Meta receives the attribution data needed to match an event to an ad, not just a successful status.
What causes Ad Account Has No Access To Instagram Account error 1815199?
In my setup, the new HuddlePops Facebook Page was attached to my personal account instead of the business portfolio. Adding the Page to the business portfolio cleared the Instagram access error. Your account configuration may be different, but checking ownership and access across the Page, portfolio, ad account, and Instagram account is a useful first step.