With a single Zernio Ads API, Meta(FB/IG)·Google·TikTok·LinkedIn·Pinterest·X manage paid campaigns across 7 platforms. No developer app, app review, or platform-specific SDK — just one Bearer token. If you already use the Zernio publishing (posting) API, use the same account/key as is. (Verified: zernio.com public docs, 2026-07-16)
Money gate (MANDATORY — the reason this skill exists)
- Explicit approval per campaign: Present platform + budget (amount/daily·total) + duration + targeting to the user, and do not call any ads endpoint before receiving an explicit "go". "Look into ads for me" is not approval; "run it with this budget" is approval.
- Timeout ≠ failure: On an ambiguous error/timeout,
GET /v1/ads/campaignslist first — blind retry = duplicate campaign = duplicate billing. - ASSERT the status in the creation response — if it differs from intent (e.g., live immediately), report to the user immediately.
- All calls use Python urllib + utf-8 (on Windows, curl+cp1252 crashes on emoji responses). Updates use PUT (on this server PATCH is 405).
- Measurement prerequisites: GA4↔Google Ads linking, conversion events, and landing URL UTMs must be in place (analytics-setup skill). Do not start spending without measurement.
- A/B is not optional, it's the default: creative per campaign at least 2, recommended 3–4
(vary the hook axis × visual axis — generate variant sets with the image-gen skill). A single-creative
campaign is spending without learning. Naming
{campaign}_{axis}to track performance, and pause losing creatives with PUT at the 24–48h check.
Setup
- 키: env
ZERNIO_API_KEY(do not record the value in files/chats). - Base
https://zernio.com/api/v1,Authorization: Bearer $ZERNIO_API_KEY. - Connect ad accounts: Zernio Dashboard → Accounts, connect each platform's ad account
(Meta는
act_…). VERIFY:GET /v1/accountscheck platform + adAccount. - Full docs: docs.zernio.com (ads/boost-post, platforms/meta-ads, etc.).
A. Boost an organic post (the most common path)
Use the postId of a post published/scheduled via Zernio as is.
POST /v1/ads/boost
{
"postId": "POST_ID",
"accountId": "ACCOUNT_ID",
"adAccountId": "act_123456789",
"platform": "facebook",
"name": "Summer sale boost",
"goal": "traffic",
"budget": { "amount": 25, "type": "daily" },
"schedule": { "startDate": "2026-01-15", "endDate": "2026-01-22" },
"targeting": { "age_min": 25, "age_max": 55, "countries": ["US", "GB"] }
}
B. Standalone campaign (starting from creative)
POST /v1/ads/create
{
"platform": "metaads",
"accountId": "acc_metaads_123",
"adAccountId": "act_1234567890",
"name": "Spring sale - US Feed",
"goal": "conversions",
"budget": { "amount": 75, "type": "daily" },
"schedule": { "startDate": "...", "endDate": "..." },
"placements": ["facebook_feeds", "instagram_feeds", "instagram_reels"],
"creative": {
"headline": "...", "body": "...",
"imageUrl": "https://...",
"callToAction": "SHOP_NOW",
"landingPageUrl": "https://...?utm_source=facebook&utm_medium=cpc&utm_campaign=..."
},
"targeting": { "age_min": 25, "age_max": 55, "countries": ["US"],
"interests": [{ "id": "6003139266461", "name": "DevOps" }] }
}
- Feed image: JPEG/PNG ≤30MB, recommended 1080×1080 (1:1) or 1200×628 (1.91:1).
- landingPageUrl must have UTM (lowercase + underscores).
C. Audience
POST /v1/ads/audiences— custom audience (customer list / website / lookalike).POST /v1/ads/audiences/{id}/users— add customer list (SHA-256 hashing automatic). You can push your CRM's lead list and use it as the seed for retargeting/lookalike (crm-connect skill).
D. Operations · analytics loop
GET /v1/ads/{id}— status/spend.PUT /v1/ads/{id}— edit budget·schedule·targeting, pause.GET /v1/ads/{id}/analytics— spend, impressions, clicks, CTR, CPC, CPM, ROAS (age/gender/country/device breakdown).GET /v1/ads/campaigns— full list.- Reporting: You need to look at Zernio analytics (platform metrics) + GA4 (post-landing conversions) together to capture the funnel. First check within 24–48h of launch (delivery, CTR, CPC); subsequent budget adjustments require user approval again.
Completion check
- Measurement prerequisites completed (GA4↔Ads, conversions, UTM — seo-setup MEASUREMENT)
- Check platform + adAccount in GET /v1/accounts
- User approval: explicit "go" with platform/budget/period/targeting
- ASSERT creation response status + record campaign ID
- First analytics check report after 24–48h