Assemble modular ads from Supabase components and deploy to Facebook Ads Manager via the Marketing API. Supports preview, single/batch deploy, and status tracking. Uses ad_components table for A/B testing at scale.
Assemble ads from database components and deploy to Facebook. Reads from Supabase ad_components + messages tables, assembles full ad copy, uploads images, and creates Campaign → Ad Set → Ad in Facebook Ads Manager.
1. Facebook prerequisites (one-time, manual):
ads_management permission2. Store credentials:
python3 scripts/fb_deploy.py --setup
Prompts for access token, ad account ID, and page ID. Validates against FB API and saves to ~/.config/ad-engine/fb_config.json.
Preview assembled ads (no deployment):
# Preview a single ad
python3 scripts/fb_deploy.py --preview --message-id 8555
# Preview all draft ads for a campaign
python3 scripts/fb_deploy.py --preview --campaign-id 43
# Preview as JSON
python3 scripts/fb_deploy.py --preview --campaign-id 43 --json
Deploy a single ad:
python3 scripts/fb_deploy.py --deploy \
--message-id 8556 \
--image /path/to/security-audit-ad.png \
--landing-url "https://calendly.com/your-link" \
--objective messages
Deploy all draft ads for a campaign:
python3 scripts/fb_deploy.py --deploy \
--campaign-id 43 \
--image-dir /path/to/ad-images/ \
--landing-url "https://calendly.com/your-link" \
--objective messages
Dry run (preview what would be created):
python3 scripts/fb_deploy.py --deploy \
--campaign-id 43 \
--image-dir /path/to/images/ \
--landing-url "https://calendly.com/link" \
--dry-run
Check deployed ad status + live metrics:
python3 scripts/fb_deploy.py --status --campaign-id 43
| Parameter | Required | Description |
|---|---|---|
--preview | One of | Preview assembled ads without deploying |
--deploy | these | Deploy ads to Facebook |
--status | three | Check status of deployed ads |
--setup | Configure Facebook credentials | |
--message-id | For single | Specific message ID to preview/deploy |
--campaign-id | For batch | All draft ads in a campaign |
--image | Deploy single | Image file path |
--image-dir | Deploy batch | Directory of images (matched by angle name in filename) |
--landing-url | Deploy | Booking/landing page URL |
--objective | No | leads (default), messages, or link_clicks |
--dry-run | No | Preview deployment without creating anything |
--json | No | Output as JSON |
When using --image-dir for batch deploy, name images by angle:
security-audit-ad.png → matches angle "security_audit"
setup-is-hell-ad.png → matches angle "setup_is_hell"
dm-trigger-checklist.png → matches angle "dm_trigger"
anti-wrapper-graveyard.png → matches angle "anti_wrapper"
messages table (content_type = 'fb_ad')extra_data.componentsad_components table{{merge_tags}}See AD_ENGINE_SPEC.md for full schema documentation.
psycopg2-binary — Supabase Postgres connectionfacebook-business — Facebook Marketing API SDKrequests — HTTP client