ChatGPT Ads Integration
Publish ads that appear inside ChatGPT responses as a “chat card” — a title, body, image, and click-through URL — and manage them conversationally from ChatGPT, Claude, or any supported AI client. ChatGPT Ads (OpenAI Ads) is a pay-per-click auction. Adspirer turns the launch, management, and measurement of these ads into plain-language requests across 36 tools: describe the ad you want and the agent builds the campaign, ad group, image upload, and chat_card ad for you — every object created PAUSED until you resume it.Prerequisites
- An OpenAI Ads (Advertiser) account with an Advertiser API key (generated in OpenAI Ads Manager → Settings → API keys)
- Adspirer account connected via ChatGPT, Claude Code, or any supported AI client
- A public image URL (PNG or JPG) for the ad creative
Connecting ChatGPT Ads
ChatGPT Ads is the first Adspirer platform that connects with a pasted API key instead of an OAuth browser login. You connect once in the Adspirer web app — the chat agent never asks for your key.- In OpenAI Ads Manager, go to Settings → API keys and generate (or copy) your Advertiser API key
- Open the Adspirer web app and go to the Connections tab
- Click “Connect ChatGPT Ads”
- Paste your Advertiser API key and save — the key is stored encrypted
Managing several ChatGPT Ads accounts
Agencies and multi-brand advertisers can connect more than one ChatGPT Ads account. In the Connections tab, use “Connect another account” and paste that account’s own Advertiser API key. Each account is disconnected on its own, so removing one leaves the rest alone. How many you can keep active at once depends on your plan — see pricing. From chat, nothing changes while you have a single account connected: every tool uses it automatically and you never pass an account ID. Once you have two or more, tell the agent which account you mean. Ask forlist_chatgpt_accounts to see each one with its account_id, name, and currency, then name the account in your request. If a request is ambiguous, the agent comes back with the list of your accounts rather than guessing at one — pick the one you meant and it re-runs against it.
See every connected ChatGPT Ads account with its ID and currency.
Optional: Conversions step
In the same Connect flow, set up conversion measurement (recommended). You can configure one or both:- Client-side Pixel — a small JS snippet you add to your site
<head>, configured with your Pixel ID - Conversions API (server-side) — paste a Conversions API key for more reliable attribution
order_created, lead_created, subscription_created, and trial_started. You can also configure and verify conversions from chat (see Conversion Tracking below).
What You Can Do (36 Tools)
ChatGPT Ads is driven through Adspirer’s conversational tools. Connecting and disconnecting are done in the web app, not via a chat tool — everything else is available from your AI assistant.Accounts
list_chatgpt_accounts— Your connected ChatGPT Ads account(s), each with name,account_id, currency, and account review status
Campaigns
list_chatgpt_campaigns/get_chatgpt_campaign— List campaigns or get the full detail of onecreate_chatgpt_campaign— Create a campaign (created PAUSED), with a budget, a bidding type, and included/excluded locationsupdate_chatgpt_campaign— Change budget, bidding, schedule, or targeting. Only the targeting side you name changes; the other is preservedpause_chatgpt_campaign/resume_chatgpt_campaign— Stop serving, or resume to go livearchive_chatgpt_campaign— Archive a campaign. Permanent — asks you to confirm first
Ad Groups
list_chatgpt_ad_groups/get_chatgpt_ad_group— List ad groups or get onecreate_chatgpt_ad_group— Add an ad group (bid + targeting) to a campaignupdate_chatgpt_ad_group— Update bid, schedule, or targetingpause_chatgpt_ad_group/resume_chatgpt_ad_group/archive_chatgpt_ad_group— Control ad-group state. Archiving is permanent and asks you to confirm
Ads
list_chatgpt_ads/get_chatgpt_ad— List ads or get onecreate_chatgpt_ad— Create a chat_card ad (title, body, image, destination URL)update_chatgpt_ad— Update an ad’s creativepause_chatgpt_ad/resume_chatgpt_ad/archive_chatgpt_ad— Control ad state. Archiving is permanent and asks you to confirm
Launch & Creative
launch_chatgpt_ad— The one-shot orchestrator. Builds the whole paused ad in one step from URL + headline + body + image + budget + geo (creates the campaign, ad group, image upload, and chat_card ad)upload_chatgpt_creative— Upload a chat_card image from a public URLchatgpt_geo_lookup— Resolve a location like “California” to a valid targeting value (used for both included and excluded locations)
Insights
get_chatgpt_performance— Headline metrics: impressions, clicks, spend, CTR, CPC (plus conversions once the pixel/CAPI is live)get_chatgpt_insights— Scoped, detailed insights with selectable fields, filters, sort, pagination, and zero-impression rows
Conversions
set_chatgpt_conversions_config/get_chatgpt_conversions_config— Configure (or review) your Pixel and Conversions API setuplist_chatgpt_conversion_events— See the conversion events being recordedtest_chatgpt_conversion— Send a test conversion to confirm tracking works end to end
Conversions Setup
Create the measurement sources themselves without leaving the conversation.create_chatgpt_pixel— Create a web measurement pixel and get the ready-to-paste site snippet backlist_chatgpt_pixels— List your pixels, each with its Source ID and short Pixel IDcreate_chatgpt_conversions_api_key— Create a server-side Conversions API key (shown once; saved encrypted so Adspirer can start sending events)create_chatgpt_event_setting— Tie a conversion event (order_created,lead_created, a custom event) to a pixel or Conversions API sourcelist_chatgpt_event_settings— List your conversion event settings with their event type, source, and attribution window
How a Launch Works
Launching never spends money on its own. Everything is created paused, and you resume it when you’re ready.You describe the ad
The agent builds everything — PAUSED
launch_chatgpt_ad resolves the location, creates the campaign + ad group, uploads the image from your URL, and builds the chat_card ad. Nothing serves or spends yet. (Prefer step-by-step control? The agent can build the same tree with create_chatgpt_campaign → create_chatgpt_ad_group → upload_chatgpt_creative → create_chatgpt_ad.)You review
You resume to go live
resume_chatgpt_campaign takes it live — subject to OpenAI’s review. Want to stop again? pause_chatgpt_campaign.Budgets, Bidding, and Targeting
Money is in your account’s currency
ChatGPT Ads accounts don’t all bill in dollars — AUD, BRL, CAD, GBP, MXN, and NZD are all in use. Every budget and bid you give the agent is read as your account’s own currency, never USD and never cents: ask for a budget of25 and you get 25 a day in whatever currency the account bills in. list_chatgpt_accounts shows each account’s currency.
Create and update responses read the applied budget and bidding back to you in that currency, so you can confirm the number that landed rather than assume it.
Bidding type
create_chatgpt_campaign and update_chatgpt_campaign take a bidding_type:
conversions needs exactly one conversion event to optimize toward, passed as conversion_event_setting_ids. Get the ID from list_chatgpt_event_settings, or create the event first with create_chatgpt_event_setting (see Conversion Tracking). Ask for conversions bidding without one and the agent says so before sending the request.
Move a ChatGPT Ads campaign onto conversions bidding.
Including and excluding locations
Target places by name or by OpenAI location ID, and exclude them the same way:location_query/location_ids— where the campaign should serveexclude_location_query/exclude_location_ids— where it shouldn’t
update_chatgpt_campaign also compares OpenAI’s response against what you asked for and names any field OpenAI left at its previous value, so an edit that didn’t take is never reported as done.
Add a location exclusion without disturbing existing targeting.
Example Prompts
Launch an Ad
Launch a ChatGPT chat_card ad — created paused so you review before it goes live.
Check Performance
ChatGPT Ads metrics for the week — impressions, clicks, spend, CTR, CPC.
Pause or Adjust Budget
Pause a ChatGPT campaign or change its daily budget.
Creative Requirements
The ChatGPT ad renders as a single chat_card — a title, body, image, and destination URL.Conversion Tracking
Conversion measurement is optional but recommended. Set it up in the Conversions step of the Connect flow (see Connecting ChatGPT Ads), or configure and verify it from chat withset_chatgpt_conversions_config and test_chatgpt_conversion. You can use either or both methods:
- Client-side Pixel — add a small JS snippet to your site
<head>, configured with your Pixel ID - Conversions API (server-side) — paste a Conversions API key for more reliable attribution
test_chatgpt_conversion to fire a test event and confirm tracking works, then list_chatgpt_conversion_events to see what’s being recorded. Once the pixel or Conversions API is live, conversions appear alongside impressions, clicks, spend, CTR, and CPC in get_chatgpt_performance.
Creating the pixel and API key from chat
You no longer need OpenAI Ads Manager to create the measurement sources — the agent can build them for you and hand back what you need.Create the pixel
create_chatgpt_pixel creates a web measurement pixel and returns the site snippet ready to paste into your <head>, plus two identifiers: a short Pixel ID for the snippet and Conversions API, and a Source ID (cds_…) you use in the next step. Automatic Advanced Matching — which hashes the customer details your site forms collect so more conversions match — is on by default; ask for it off if you’d rather opt out.Add a Conversions API key (optional)
create_chatgpt_conversions_api_key creates a server-side key. The secret is shown once and can never be retrieved again, so copy it if you need it elsewhere. By default Adspirer stores it encrypted so it can start sending server-side conversions immediately.Define what counts as a conversion
create_chatgpt_event_setting ties an event — order_created, lead_created, one of the other supported types, or a custom event of your own — to a pixel or Conversions API source, with an attribution window (OpenAI recommends 30 days). list_chatgpt_event_settings shows what you’ve defined.Ad Review and Policy
Safety Guardrails
These are built into the tools, not optional settings:- Everything is created PAUSED. Nothing serves or spends until you resume it with
resume_chatgpt_campaign. - The agent speaks in your account’s currency, never micros, and reads the applied budget back to you after a create or update.
- Archiving asks first. OpenAI has no un-archive endpoint, so
archive_chatgpt_campaign,archive_chatgpt_ad_group, andarchive_chatgpt_adrequire an explicit confirmation — and the agent offers pausing instead when that’s what you meant. - Targeting edits never widen your reach by accident. Changing one side of a campaign’s location targeting preserves the other, and an unresolvable location leaves targeting untouched rather than clearing it.
- Review status is reported honestly — no false “live” claims while review is pending or rejected. An update that OpenAI silently ignored is reported as ignored, not as applied.
Best Use Cases for ChatGPT Ads
- Reaching people inside ChatGPT — put your offer in front of users at the moment they’re asking an AI for help
- Simple, single-card creative — one headline, one short body line, one image, one link; no video production required
- Pay-per-click testing — start at OpenAI’s 25-a-day daily minimum, review before you resume, and read CTR/CPC before scaling
Troubleshooting
”Not connected” — ChatGPT Ads doesn’t appear
ChatGPT Ads is connected in the web app, not from chat. Open the Adspirer web app → Connections tab → “Connect ChatGPT Ads” and paste your Advertiser API key. Then ask your assistant to “Check my connected ad platforms.""Invalid API key”
The pasted key is wrong, revoked, or for the wrong account. Generate a fresh Advertiser API key in OpenAI Ads Manager → Settings → API keys, then re-paste it in the Connections tab. Remember: one key = one ad account.Ad stuck in review
OpenAI reviews both the account and each ad before it can serve.in_review is normal for new ads and accounts. AI-related advertisers face extra scrutiny — if the ad is rejected, the category may be disallowed (see Ad Review and Policy). Use list_chatgpt_accounts to check the account review status.
A budget change didn’t take effect
Budget updates on ChatGPT Ads campaigns used to report success without changing anything — the value reached OpenAI in the wrong shape and was discarded. That’s fixed. If a campaign has been spending at an old rate since you changed it from chat, check the current budget withget_chatgpt_campaign and set it again; the response now reads back the budget that actually applied.
Image rejected
Make the image square and at least 256×256 px, in PNG or JPG, served from a public, reachable URL. Non-PNG/JPG files and unreachable URLs are rejected up front; non-square or undersized images warn and may be rejected at review.FAQ
Why do I paste a key instead of logging in?
Why do I paste a key instead of logging in?
Can I connect more than one ChatGPT Ads account?
Can I connect more than one ChatGPT Ads account?
list_chatgpt_accounts shows each one’s account_id, name, and currency. Leave it ambiguous and the agent replies with your account list instead of picking one for you.Can Adspirer create my ChatGPT Ads pixel for me?
Can Adspirer create my ChatGPT Ads pixel for me?
create_chatgpt_pixel creates the pixel and returns the site snippet ready to paste into your <head>, so you don’t have to open OpenAI Ads Manager. create_chatgpt_conversions_api_key does the same for server-side tracking, and create_chatgpt_event_setting defines what counts as a conversion.All three create something permanent — OpenAI has no delete endpoint for them — so the agent confirms with you first and won’t overwrite a pixel or key you already have unless you tell it to. A Conversions API key’s secret is shown once and can’t be retrieved again.How is ChatGPT Ads billed in Adspirer?
How is ChatGPT Ads billed in Adspirer?
Can the agent spend money without my approval?
Can the agent spend money without my approval?
resume_chatgpt_campaign. The agent always speaks in your account’s own currency (not micros) and reads the applied budget back to you, so the number is clear before you go live, and you can pause_chatgpt_campaign at any time. Archiving — the one irreversible action, since OpenAI has no un-archive — needs an explicit confirmation of its own.What image do I need?
What image do I need?
Is my ChatGPT Ads API key secure?
Is my ChatGPT Ads API key secure?
What metrics can I see?
What metrics can I see?
get_chatgpt_performance reports impressions, clicks, spend, CTR, and CPC. get_chatgpt_insights gives a scoped, detailed view with selectable fields, filters, sort, and pagination. Once you’ve configured the client-side Pixel or the Conversions API, conversions (order_created, lead_created, subscription_created, trial_started) appear alongside those metrics.
