The clients
Emma Labs, then a second configuration and deployment for Cashew, a London voice-marketing platform. Both wanted ads shipped without a person sitting in Ads Manager for every campaign.
What was built
A self-serve web tool. The user signs in, connects their Meta Business Manager through Facebook OAuth, and the app pulls their ad accounts, Pages, campaigns and ad sets from the Marketing API. A guided wizard covers account and Page selection, creative upload and ad details, with a review step before anything goes live. A non-technical user never opens Ads Manager.
n8n workflows that create the ads. The ad-creation call runs in an n8n workflow rather than in the app, so the write path can be changed, paused or extended without a front-end release.
Handling partial OAuth consent
Meta lets a user grant some permission scopes and decline others, and most integrations break when a scope is missing. Here each API call is mapped to the permission it requires, and the app records which scopes were actually granted. A missing scope disables the feature that needs it instead of failing mid-flow.
Stack
- App: React, Vite, Tailwind
- Identity and data: Facebook OAuth, Supabase (Auth, Postgres, Storage)
- Ads: Meta Marketing API
- Automation: n8n, as the ad-submission backend
- Deployment: Netlify
Credentials
Our Apollo.io node is published on npm as
n8n-nodes-apollo (MIT, maintainer arturl95,
14 resources, source public). We hold n8n Verified Creator status.