Inspiration

Every small business owner we know has the same dead-end folder: marketing videos they made (or AI made for them) that never became actual ads. Ads Manager is a part-time job — uploading, copywriting, campaign/ad-set/ad hierarchies, placements, review states, budgets. Agents shouldn't just answer questions about ads; they should run them.

What it does

IgniteAds is a task-completing agent, not a chatbot. One mission — "launch this video as an ad" — becomes a fully autonomous multi-step plan:

  1. Pulls the video + its generation script from our creative platform (or any video URL)
  2. Gemini 2.5 Flash writes policy-safe ad copy (primary text / headline / description) grounded in the video script + brand kit
  3. Resolves the Meta identity chain — page, Instagram actor, auto-creating a page-backed Instagram account when none exists
  4. Builds the full chain on the Meta Marketing API: video upload → creative → campaign → ad set → ad
  5. Launches everything PAUSED — the human gives one typed ACTIVATE to start spend
  6. Monitors review status and pulls daily Insights (impressions, clicks, CTR, spend) back into the loop

How we built it

  • 3-layer agent architecture: markdown directives (SOPs) → agent orchestration → deterministic Python tools. The LLM never improvises an API call; it decides, deterministic code executes.
  • Idempotent step-resume state machine: each Graph API step persists its platform ID to Firestore before the next step. Interrupt it anywhere and resume — zero duplicates, zero double spend. Our first production launch survived 2 failures and 3 resume cycles and completed cleanly.
  • Google Cloud: Cloud Run (FastAPI), Firestore (multi-tenant launch state), Cloud Tasks (durable async), Firebase Auth + Hosting (Angular dashboard), Cloud Build deploys, Gemini for copy.
  • Guardrails for an agent that spends money: PAUSED-first, hard budget caps, typed human confirmation for activation, full Graph API audit log.

Challenges we ran into

The Meta API's real surface diverges from its docs — all found in ONE live launch: video creatives require an Instagram actor even for Facebook-only placements; Graph v23 renamed instagram_actor_idinstagram_user_id without fanfare; campaigns now require is_adset_budget_sharing_enabled. Our self-annealing loop (fix the tool → update the directive → the agent never hits it again) turned each failure into permanent knowledge.

Accomplishments we're proud of

A real, verifiable launch: our agent created a live (paused) campaign — video, creative, campaign, ad set, ad — on a real Meta ad account, visible in Ads Manager, in under 2 minutes of agent time.

What we learned

Idempotency is the most important property of an agent with a wallet. And PAUSED-first is the right trust contract between humans and autonomous systems: the agent does 100% of the work; the human spends one word of attention exactly where it matters.

What's next

Multi-tenant OAuth (Meta App Review in progress), Google Ads as a second platform behind the same abstraction, and the full closed loop: performance data → Gemini proposes new creative variants → auto-generate → relaunch.

Built With

Share this project:

Updates