1
0 Comments

I broke Meta's Ads API 374 times on purpose. The documentation became the moat for my $19/mo SaaS.

When I tell other founders the story of how I built Adbloop, I usually start with the spreadsheet.

It's a Google Sheet with 374 rows. Each row is one Meta Marketing API call I made on purpose to break something. Sometimes I broke it by passing weird field combinations. Sometimes by hitting it at the wrong rate. Sometimes by sending objectives Meta's docs swore would work but didn't.

108 of those rows surfaced bugs — real, reproducible, undocumented Meta API failures that silently kill ad campaigns in production. Meta's official documentation will not warn you about most of them. A few of them I've watched cost agencies five-figure budgets while their campaigns showed "Active" in Ads Manager and delivered exactly zero impressions.

That spreadsheet is the moat for my SaaS.

[SCREENSHOT: the redacted spreadsheet preview — show row count visible, "Solution" column intentionally masked as "✓ Adbloop handles correctly". The point of the visual is to prove the volume and structure exists, not to give away the fixes.]

This is the part where I should probably explain what Adbloop does. It's a Meta Ads bulk campaign creation platform — one subscription, two surfaces (a dashboard at app.adbloop.com and a Google Sheets Add-on). Pro is $19/month. Agency is $49/month. The nearest comparable tool charges $479/month.

I'm a solo founder. The build took 10 months. I launched on April 22, 2026 — about three weeks ago as I write this.

I want to tell you why the spreadsheet matters more than the product, and why "documentation as moat" might be the most underrated competitive strategy for indie founders trying to enter a crowded category.


The setup: a category where everyone has the same feature page

Meta ads tooling looks like a brutal category to break into. Madgicx, AdEspresso, Birch, Smartly.io, Adriel, Funnel.io — dozens of products. Many funded. All with effectively the same feature page: bulk creation, automated rules, A/B testing, creative library, analytics dashboard.

When I started building Adbloop in mid-2025, the obvious advice was "don't." Or, if you must, "find a niche." E-commerce only. Agencies only. A specific vertical.

I ignored that advice for one reason: I'd been launching ads myself for clients, and I'd noticed something nobody on those feature pages was saying.

Meta's Marketing API is a minefield.

Not in the "rate limits are tight" way (they are — 100,000 points per hour at Standard tier, plus 40 points per active ad). I mean in the specific way that the API will return HTTP 200, Ads Manager will show your campaign as Active, and the campaign will deliver zero impressions for three days while you debug your audiences, your creative, and your pixel — only to find out the actual cause is a field combination Meta accepts but secretly hates.

Most competing tools? They translate your inputs into Meta's API and pass through the response. If Meta says 200, the tool says success. The silent failure becomes your problem.

I decided I wanted a tool that would catch these things before the API call left my server.


The 374-test grind

This is where the spreadsheet started. Months 3 through 7 of the 10-month build went almost entirely into it.

I took the six Meta campaign objectives (Awareness, Traffic, Engagement, Leads, App Promotion, Sales). I took the ~30 conversion locations Meta supports (Website, App, Messenger, WhatsApp, Calls, Instant Forms, etc.). I generated every plausible combination of objective × destination × promoted object × optimization goal × bid strategy, and I started launching test campaigns against my own ad account at ₹1/day budgets.

For each combination, I logged:

  • The exact API payload sent

  • The exact response (success vs. error code vs. silent fail)

  • Whether the campaign actually delivered when active

  • The fix, if there was one

374 tests later, I had 108 documented failures I could now prevent.

I'm going to share the shape of three representative bugs without naming the specific fields, values, or fixes — those stay inside Adbloop. The point isn't to teach you the bugs; it's to show you the kind of work I'm talking about:

1. The silent-delivery bug. A single configuration value — valid on inspection — that causes engagement-objective campaigns with website destinations to launch successfully on paper and deliver absolutely nothing in reality. Meta returns 200 OK. Ads Manager shows Active. Zero impressions for 72+ hours. No error, no notification. A freelancer I know burned ₹40,000 of a client's budget on this single bug before realizing the campaigns weren't actually delivering. Took her a week of frantic debugging to find it.

2. The "wrong-level" config bug. A setting that needs to live at one specific level of the campaign hierarchy but is silently accepted at another. Meta runs your campaign on default optimization for the first 24 hours, then "corrects" itself — by which point your day-1 delivery numbers are already trashed and the data is unusable for any test read. The worst part: most media buyers blame the creative or the audience, because the campaign technically launched fine.

3. The undocumented-compatibility bug. An optimization goal whose Meta documentation implies it works with only one event type. Reality: it works with multiple event types — the highest-converting ones, specifically. Tools that follow the documentation literally end up disabling it for the very combinations that convert best, leaving advertisers without their strongest setup and assuming the issue is on their end.

You're three examples in and you're already thinking "I would never have figured this out without burning real money on it." That's the point.

I'm not going to publish the specific fixes — every one of those 108 entries is something Adbloop handles in production code that competitors haven't built. The spreadsheet itself stays internal. What gets exposed publicly is the volume, the structure, and Meta's own Verified Tech Provider stamp that says the integration is rigorous.


When the moat got a Meta-issued stamp

Three months into building, I applied for Meta Verified Tech Provider status. This requires Meta App Review approval, technical compliance with their Marketing API standards, and demonstrated production usage.

I got approved on April 18, 2026 — four days before launch.

[SCREENSHOT: Meta Verified Tech Provider confirmation from your Meta Business / App dashboard — the official status screen]

This matters more than I initially realized. Most Meta ads tools are NOT verified. They operate through the API but don't have Meta's explicit stamp. When I list it on Adbloop's site, on LinkedIn, in cold emails to agencies, it does something specific in the buyer's brain: it changes the question from "is this tool legit?" to "what's the deal with this specific tool?"

That's a much better question to have to answer.

The Verified Tech Provider status is, in a sense, Meta itself confirming that the 108-fix moat is real. They reviewed the integration. They know what it does.

The competitor at $479/mo? Verified. Most of the $49–$99/mo competitors? Not verified. So Adbloop is sitting in a strange spot: the price of a $19/mo tool, the legitimacy stamp of a $479/mo tool, with a documentation moat that Meta themselves validated.

That's the moat. Not the bulk creation feature. Not the Google Sheets surface. The 108 specific things competitors would have to test for themselves to catch up — and the more I document, the wider the gap gets.


Three patterns I think generalize

Here's the lesson I think applies to other indie hackers in crowded categories:

In crowded SaaS categories, your moat is rarely a feature. It's a body of specific knowledge that took painful, unglamorous hours to acquire — and that you guard like a recipe.

If you're looking at a category with 20 competitors, the question isn't "what new feature can I add?" — they'll copy it in a quarter. The question is "what is everyone in this space getting wrong silently?" and then "am I willing to spend three months documenting the wrongness in a structured way?"

Three patterns I've noticed:

1. The moat lives in support tickets, not feature pages. What are your competitors' users complaining about that has nothing to do with the public roadmap? That's the gap. Read 200 support threads on Reddit or Twitter for any tool in your category and the pattern shows up fast. The product team is shipping features; the users are quietly suffering through specific bugs nobody's documenting.

2. The moat is both the product and the marketing — but you have to choose what to expose. "108 documented edge cases" is a specific, falsifiable claim. The count and the credential (Meta Verified) are public assets. The contents stay internal. Generic "AI-powered automation" gets ignored on sight; specific numbers with a refusal-to-share-details signals real work.

3. The moat compounds into a content engine, but only the meta-pattern, not the specifics. Each documented bug is one content brick — describable in shape, protected in detail. You can write 50 blog posts about the kind of work you did without ever publishing the actual answer key. Competitors who want the answer key have to do the work.

The trap, of course, is that "documenting edge cases" looks like make-work on day one. It pays off slowly. You can spend a quarter doing it before the first paying customer signs up. I did.

But once it's in place, it's the kind of thing investors call "defensibility," competitors call "annoying," and users call "the reason I'm staying."


Where I am, in numbers

I'm three weeks into post-launch as I write this. Some numbers in the spirit of building in public:

  • Build time: 10 months solo

  • Launched: April 22, 2026

  • Pricing: $19/mo Pro, $49/mo Agency (annual saves ~20%); ₹999/mo Pro, ₹2,999/mo Agency for the Indian market

  • Two surfaces: SaaS Dashboard (app.adbloop.com) + Google Sheets Add-on (live on Workspace Marketplace). One subscription unlocks both.

  • Speed benchmark (Dashboard): 150 campaigns launched in ~6 minutes flat

  • Solo founder. Built and shipped end to end. No funding.

I'm not sharing MRR yet — too early, too noisy. But the moat is real, the docs are still growing (109 will be in there by next week), and the strategy is to keep documenting until the body of edge-case fixes is so thick that "let's just build our own" stops being a rational sentence for any agency considering an alternative.


If you want to see it

If you run Meta ads, or you have a client/teammate who does, Adbloop is at app.adbloop.com/signup. Free to start. The 108 fixes run silently in the background whether you notice them or not — which is sort of the point.

If you're an indie hacker working on something in another category — I'd genuinely love to hear what your version of the spreadsheet looks like. What's the specific, painful, slowly-accumulated body of knowledge that nobody else in your category has bothered to map?

Drop it in the comments. I'm collecting examples for a follow-up post on what "documentation moats" look like across different SaaS verticals.

posted to Icon for Adbloop
Adbloop