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.
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.