openai-ads
Skill107 starsChanged 5 months agoMITView on GitHub
Plan and manage OpenAI Ads (ChatGPT ads) campaigns end-to-end via the Hyper MCP — API-key auth, account discovery, geo targeting, image upload, chat_card and product-feed creatives, custom audiences, conversion tracking, status flow, and insights, with integer-micros money values. Use when the user wants to launch OpenAI ads, ChatGPT ads, chat card ads, manage OpenAI ad groups or audiences, or pull OpenAI Ads insights.
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 20
If openai_ads_ad_accounts_get is not found, the integration to connect is OpenAI Ads.
- Distinctive: line 24
Every tool in this skill is named by its canonical tool name.
- Very specific: line 32
If a tool is not found: in Hyper chat, find its toolkit id with discover_toolkits and pass it to enable_toolkit.
- Distinctive: line 85
Run these after connect:
- Very specific: line 101
If success=False because the cache is empty, refresh once:
- Distinctive: line 109
Before creating anything, confirm with the user:
- Distinctive: line 122
If anything is missing, ask.
- Distinctive: line 144
Use geo exclusions; use included geos and audience exclusions instead.
- Very specific: line 146
Treat archive as reversible.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OpenAI Ads Campaigns
Strategic guide for managing the OpenAI Advertiser API. All operations go
through https://api.ads.openai.com/v1.
Requirements
- Hyper MCP installed and connected. https://app.hyperfx.ai/mcp
- OpenAI Ads integration connected (an OpenAI Ads API key, scoped to one ad account) at https://app.hyperfx.ai/apps.
If openai_ads_ad_accounts_get is not found, the integration to connect is OpenAI Ads. After connecting, openai_ads_health_check() verifies the key — if connected=false, the API key is missing, invalid, or expired.
How to run the tools in this skill
Every tool in this skill is named by its canonical tool name. Run it with the call your surface gives you:
| Surface | Find a tool | Run it |
| Hyper chat | Call the tool by its name; search_tools(queries=["<provider> <action>"]) shows its parameters | <name>(...) |
| MCP client (Claude, Cursor, Codex, ChatGPT) | search("<what you want to do>"), then describe("<name>") | call_read("<name>", {...}), call_write or call_destructive: the one that describe names in call_with |
| Hyper CLI | hyperai search "<what you want to do>", then hyperai describe <name> | hyperai call <name> --json '{...}' |
If a tool is not found: in Hyper chat, find its toolkit id with discover_toolkits and pass it to enable_toolkit. On an MCP client or the CLI, tell the user which integration to connect in Hyper.
Out of scope — defer to other skills
- Creative generation (ad imagery, copy) →
ad-creative-generation/image-generation. - Cross-platform campaign launches → use this skill for OpenAI Ads, then invoke
meta-ads/google-adsseparately.
Critical Rules
CRITICAL: Auth is bearer API-key auth, not OAuth. One Ads API key is scoped to exactly one ad account. There is no
list ad accountsendpoint;openai_ads_ad_accounts_getreturns the connected account for that key.
CRITICAL: All money values on inputs are integer micros.
$1.00 = 1_000_000micros.$50/day = 50_000_000. Thedaily_spend_limit_microsminimum is1_000_000($1). The ad groupmax_bid_microsis capped at100_000_000($100). Insights responses use plain floats in account currency, not micros.
CRITICAL: Always create campaigns, ad groups, and ads with
status="paused". Surface what was created to the user, then activate using the dedicated activate endpoint after approval.
CRITICAL: Ads have
review_status. New ads enterin_reviewand will not serve untilreview_status="approved", even ifstatus="active".
CRITICAL:
chat_cardcreatives requiretarget_urlandfile_id. Upload the image first viaopenai_ads_images_upload, then pass the returnedfile_idtoopenai_ads_create. PNG, 1024x1024, <= 1 MB.
IMPORTANT: Creative types are
chat_cardandproduct_ad_template. Product-ad templates get image and destination URL from the selected product feed item, so they do not requirefile_idortarget_url.
IMPORTANT: Campaign
bidding_typecan beimpressionsorclicks. Ad groupbilling_event_typecan beimpressionorclick.
Tool surface
| Job | Tools |
| Account | openai_ads_ad_accounts_get, openai_ads_update_ad_account, openai_ads_activate_ad_account, openai_ads_pause_ad_account, openai_ads_health_check |
| Campaigns | openai_ads_campaigns_create, openai_ads_campaigns_get, openai_ads_campaigns_list, openai_ads_campaigns_update, openai_ads_campaigns_pause, openai_ads_campaigns_activate, openai_ads_campaigns_archive |
| Ad groups | openai_ads_ad_groups_create, openai_ads_ad_groups_get, openai_ads_ad_groups_list, openai_ads_ad_groups_update, openai_ads_ad_groups_pause, openai_ads_ad_groups_activate, openai_ads_ad_groups_archive |
| Ads | openai_ads_create, openai_ads_get, openai_ads_list, openai_ads_update, openai_ads_pause, openai_ads_activate, openai_ads_archive |
| Images & targeting | openai_ads_images_upload, openai_ads_search_geo_locations |
| Audiences | openai_ads_create_custom_audience, openai_ads_create_custom_audience_upload, openai_ads_get_custom_audience, openai_ads_list_custom_audiences, openai_ads_archive_custom_audience |
| Conversions | openai_ads_create_conversion_pixel, openai_ads_create_conversion_api_key, openai_ads_create_conversion_event_setting, openai_ads_list_conversion_event_settings, openai_ads_get_conversion_insights |
| Insights | openai_ads_account_insights_get, openai_ads_campaign_insights_get, openai_ads_ad_group_insights_get, openai_ads_insights_get |
| Cache snapshot | openai_ads_cache, openai_ads_caches_get, openai_ads_caches_refresh |
Phase 1: Account Discovery
Run these after connect:
openai_ads_ad_accounts_get()
openai_ads_campaigns_list(limit=100)
openai_ads_list_custom_audiences(limit=100)
openai_ads_list_conversion_event_settings(limit=100)The connect-time context builder may have already populated a cached snapshot. Prefer:
openai_ads_caches_get()If success=False because the cache is empty, refresh once:
openai_ads_caches_refresh()Phase 2: Plan and Confirm
Before creating anything, confirm with the user:
- Objective in plain language.
- Daily and/or lifetime budget in account currency.
- Target geos: simple country codes like
["US", "GB"], or location IDs fromopenai_ads_search_geo_locations. - Any custom audiences to include or exclude.
- Whether this is a normal
chat_cardcampaign or a product-feed campaign. - Headline (
title, <= 50 chars), body (<= 100 chars), and click-through URL forchat_card. - One image asset for
chat_card, either a public URL or a base64 blob. - Max bid in micros (
max_bid_micros; for example2_000_000). - Optional
context_hints, short natural-language phrases that describe when the ad should show. - Optional conversion event setting IDs to attach to the campaign.
If anything is missing, ask. Do not invent budgets, geos, or copy.
All reference files live in
references/. Read them atreferences/<file>(e.g.references/campaign-creation.md).
Routing table
| The user wants to… | Read these files first |
| Launch a chat card or product-feed campaign | Phases 1–2 above → references/campaign-creation.md |
| Target regions / DMAs / custom geo | references/campaign-creation.md — Geo Targeting |
| Create or manage custom audiences | references/audiences-and-conversions.md |
| Set up conversion tracking (pixel, API key, event settings) | references/audiences-and-conversions.md |
| Activate after review | references/campaign-creation.md — Activation |
| Pull insights / manage status / refresh the cache snapshot | references/insights-and-operations.md |
Safety Rules
Never:
- Pass dollar amounts directly. All money inputs are micros.
- Activate a campaign, ad group, ad, or account without explicit user approval.
- Skip image upload for a
chat_card; it needs a realfile_id. - Use geo exclusions; use included geos and audience exclusions instead.
- Assume an ad is delivering just because
status="active". Always checkreview_status. - Treat
archiveas reversible. - Promise paid traffic on a new ad. New ads sit in
review_status="in_review"until OpenAI approves them.
In this repository31 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ad-creative-generationSkill
- amazon-adsSkill
- analytics-insightsSkill
- blog-generationSkill
- brand-contextSkill
- cold-email-outreachSkill
- competitor-intelSkill
- customer-researchSkill
- email-lifecycleSkill
- gmailSkill
- google-adsSkill
- google-sheetsSkill
- hyper-cliSkill
- image-generationSkill
- instagramSkill
- linkedinSkill
- meta-ads-librarySkill
- meta-adsSkill
- pinterest-adsSkill
- reddit-adsSkill
- redditSkill
- seo-researchSkill
- slackSkill
- snapchat-adsSkill
- tiktok-adsSkill
- tiktokSkill
- twilioSkill
- video-generationSkill
- youtubeSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

