Case study · SaaS

AdPilot — Meta Ads automation as a productized SaaS

Small businesses running Meta Ads burn hours every week on the same setup steps — duplicating audiences, refreshing creatives, rebuilding campaign structures from scratch. The work is mechanical but the tools are built for agencies, not operators.

ClientAdPilot202612 weeksRead3 min
Next.jsSupabaseStripeMeta Ads APIVercelTypeScript
~30sSetup time
2–4 hrsTime saved / launch
BetaActive users
LiveStripe billing
Back to Case Studies

The problem

Meta Ads Manager is built for agencies who run hundreds of campaigns. For an SMB owner running one or two evergreen campaigns, the surface area is overwhelming. Every weekly refresh is a 2–4 hour ritual: build the audience, duplicate the ad set, rotate the creative, fix the budget, double-check the pixel, hit publish. Get any one of those wrong and you bleed money for a week before you notice.

I'd been running this workflow manually for clients for two years. The same 40 clicks, the same fifteen places to make a mistake. AdPilot was the straightforward answer: take the muscle memory and ship it as software.

The approach

One opinionated path, not a feature surface. AdPilot doesn't try to replace Ads Manager. It exposes exactly the levers an SMB needs — goal, audience, creative, budget — and hides everything else. The decisions a generalist would punt on (campaign structure, audience overlap, conversion event mapping) are baked into the templates.

Meta Marketing API as the only integration target. No third-party middleware. The app authenticates the user's Business Manager directly, provisions the structure server-side, and stores nothing about the audience beyond what Meta returns.

Architecture:

  • Next.js 15 App Router for the operator dashboard, with React Server Components doing the heavy reads from Supabase.
  • Supabase for auth, RLS-isolated tenant data, and the campaign-state ledger. Every published campaign is event-sourced so refreshes are diffs, not rebuilds.
  • Stripe Billing with metered usage on top of three subscription tiers.
  • Meta Marketing API wrapped in a thin server-side client that retries rate-limit errors with exponential backoff and reports failures back to the operator as actionable diffs ("Audience X is missing — recreate or switch?").

The hard part wasn't the integration. It was the UX rule that any setup step that takes more than one decision gets removed.

The outcome

A subscriber goes from signup to a live, monitored campaign in roughly thirty seconds. The first refresh that used to take an afternoon takes a glance at the dashboard and one click. Stripe billing is live, the API rate-limit behavior has held up under sustained beta usage, and the support burden so far has been "I'd like to add a goal type" rather than "your tool broke something."

It's also the case study that informs everything else EMB does — the discipline of removing decisions, not adding features, applies just as cleanly to client engagements.

Outcome

AdPilot turns a multi-hour Meta Ads workflow into a 30-second setup: pick a goal, pick a target, ship. Subscribers launch and refresh campaigns end-to-end without ever opening Ads Manager.

Lets build your first one.

Describe whats eating your teams time. Our AI will scope the automation in seconds — completely free.

Or book a call directly