All docs
Connect

ChatGPT Ads: connect, report and manage campaigns

TL;DR

ChatGPT Ads connects to OpenAI's Ads API with an API key from ChatGPT Ads Manager. The agent reads the ad account, campaigns, ad groups, ads, reports, conversions, audiences, pixels and feeds, and prepares changes. Everything it creates starts paused; turning spending on, archiving, audience uploads and spend-limit changes always wait for a person; by default every other change waits for your approval unless auto-approve is on.

Connect

  1. 1In ChatGPT Ads Manager, open Settings → API keys and create a key for the ad account.
  2. 2On Integrations, press Connect with an API key on the ChatGPT Ads card, paste the key and press Check and save. The key is checked with OpenAI before it is saved and is stored encrypted.
  3. 3The ad account the key reaches becomes a row. A teammate can add their own key for the same account; Refresh accounts re-reads each key.

Tools

ToolKindWhat it does
list_ad_accounts / get_ad_accountReadThe ad account: status, review, currency, time zone
list_campaigns / get_campaignReadCampaigns: status, objective, bidding, budget (whole units)
list_ad_groups / get_ad_groupReadAd groups: status, context hints, bidding, targeting
list_ads / get_ad / preview_ad / get_landing_page_crawlReadAds with their review status and why one is not serving; a preview; what the review read on the landing page
report / conversion_insightsReadPerformance by account, campaign, ad group or ad; conversion events and sales by day
list_custom_audiences / get_custom_audience / list_pixels / list_conversion_events / list_feedsReadAudiences (never the people in them), pixels and their recent events, product feeds
geo_lookup / get_audit_logs / get_account_health / getReadLocation ids for targeting, who changed what, whether the account can deliver, any other read on the account
create_campaign / create_ad_group / create_adWriteAlways created paused
update_campaign / update_ad_group / update_adWriteBudgets, bids, targeting, context hints and ad copy — read first, shown before and after
set_campaign_status / set_ad_group_status / set_ad_statusWritePause; ACTIVE and ARCHIVED always wait for a person
upload_image / create_custom_audience / create_pixel / set_daily_spend_limitWriteAn ad image, an empty audience, a pixel, the account's daily spend limit
add_audience_members / archive_custom_audienceWriteAlways wait for a person (personal data; archiving cannot be undone)
mutateWriteAny other Ads API write on the selected ad account (no DELETE)
Over MCP and the REST API the names are chatgpt_ads__<tool> (for example chatgpt_ads__report).

Approvals and safety

  • By default every write waits for your approval card; with auto-approve on (per task, schedule or project) ordinary writes apply inside your spend caps and protected campaigns.
  • Always a person's decision, on every lane and whatever the approval setting: setting a campaign, ad group or ad ACTIVE, archiving anything (it cannot be undone), adding or removing audience members, and spend-limit changes through the gateway.
  • Campaigns, ad groups and ads are always created paused. There is no delete on the Ads API — pause is the stop.
  • Emails and phone numbers for an audience are hashed on our server before they are sent. Money is in whole units of the account currency in every argument and result.

Troubleshooting

What you seeWhat it meansWhat to do
A daily budget refused as too smallOpenAI refused budgets below $25 a day on our test accountUse at least 25 in the account currency
A feature refused (several images, conversion bidding, spend-limit windows)OpenAI switches these on per accountAsk OpenAI to enable it for your account
Account health says not servingOften a missing payment method or ads in reviewAdd billing in Ads Manager; check list_ads for review status
401 after a key was revokedThe key no longer worksPaste a new key on the card
Platform overview: ChatGPT Ads.

Frequently asked questions

Can the agent start spending on ChatGPT Ads by itself?
No. Everything it creates starts paused, and activating a campaign, ad group or ad always waits for a person, whatever the approval setting.
Does it work over MCP and the REST API?
Yes — the same tools as chatgpt_ads__<tool>, with the same approvals and limits; describe_tool shows each tool's policy.

Related

Connect your platforms
Natively connect Google Ads, Microsoft Advertising, DV360, Campaign Manager 360, Search Ads 360, Meta Ads, TikTok Ads, Reddit Ads, Pinterest Ads, Snapchat Ads, LinkedIn Ads, X Ads, Spotify Ads, ChatGPT Ads, AppLovin, Google Ad Manager, AdSense, AdMob, Google Analytics, Search Console, BigQuery, Tag Manager, Merchant Center, YouTube, Klaviyo, HubSpot, GitHub, Shopify, SHOPLINE and Stripe — plus 250+ more apps (Gmail, Outlook, Slack, Notion, Salesforce…) via Composio and your own tools via custom MCP. Pick accounts with the context picker and run one task across an entire MCC.
Approvals & workflow
Plan → approve → execute. How writes pause at an approval gate by default, in-app or by email magic-link, with pre-approval, auto-approve, stale-state checks and the audit log.
Projects: let the agent plan, run and monitor a campaign over weeks
A project groups the tasks, schedules, milestones and checklist items behind one goal, with its budget and KPIs, and an overseer agent that reads every channel's numbers and runs the optimization — moving budget, adjusting bids and creatives, sending reports and email. Every change follows the project's approval setting: by default each one waits for your approval, and auto-approve is a per-project opt-in.
Microsoft Clarity: connect projects and read site behaviour
Connect each Microsoft Clarity project with its Data Export token. The agent reads sessions, engagement and friction signals for the last 1–3 days and ranks landing pages — read-only, inside Clarity's 10 requests per project per day.