# Amazon Ads Integration | Adspirer Source: https://www.adspirer.com/docs/ad-platforms/amazon-ads Manage Amazon Ads with AI — 61 tools for Sponsored Products, Sponsored Brands, and Sponsored Display. Create campaigns by ASIN, track ACOS and ROAS, and find wasted spend. # Amazon Ads Integration Adspirer's newest ad platform brings Amazon advertising to your AI assistant. Create and manage Sponsored Products, Sponsored Brands, and Sponsored Display campaigns with 61 specialized tools. Build campaigns from your ASINs and SKUs, run AUTO or MANUAL keyword targeting, get Amazon-native bid and keyword recommendations, and track ACOS and ROAS — all from a conversation. Multi-region advertiser profiles (NA, EU, FE) are discovered and routed automatically, and every campaign is created PAUSED so you can review before it spends. ## Prerequisites * An Amazon Advertising account ([create one here](https://advertising.amazon.com)) * Products listed on Amazon under a Seller or Vendor account * Amazon Brand Registry — required for Sponsored Brands campaigns * Adspirer account connected via [Claude Code](/docs/ai-clients/claude-code), [Cursor](/docs/ai-clients/cursor), or any [supported AI client](https://www.adspirer.com/integrations) ## Connecting Amazon Ads Adspirer connects to Amazon Ads through OAuth using Login with Amazon (LwA). Once you've set up Adspirer with your AI client, connect Amazon: 1. Open your AI assistant (ChatGPT, Claude, Claude Code, etc.) 2. Say: "Connect my Amazon Ads account" 3. Adspirer opens your browser for Amazon authorization 4. Sign in with Login with Amazon and approve the requested permissions (read campaign data, create campaigns, manage budgets) 5. On connect, Adspirer imports each Amazon advertiser profile as an ad account — the first becomes active, and you can activate the others later Adspirer discovers advertiser profiles across all three Amazon regions (NA, EU, and FE) and routes requests to the correct one automatically. Tokens refresh server-side, and your credentials are never stored client-side. Verify the connection: ``` Check my connected ad platforms ``` You should see your Amazon advertiser profiles listed with profile name, account ID, region, and active status. To target a specific Amazon account, the assistant uses that profile's ID (`profile_id`) — find them anytime with `list_amazon_profiles`. There is no Amazon sandbox — campaigns run against production. To protect your spend, Adspirer creates everything PAUSED so you can review the campaign before launching it. ## What You Can Do (61 Tools) ### Accounts * `list_amazon_profiles` -- List your Amazon advertiser profiles across NA, EU, and FE, with profile IDs, regions, and active status ### Campaign Management (SP + SB + SD) * `list_amazon_campaigns` -- List campaigns across Sponsored Products, Brands, and Display with status and budget * `create_amazon_sp_campaign` -- Create a Sponsored Products campaign (created PAUSED) * `create_amazon_sb_campaign` -- Create a Sponsored Brands campaign (created PAUSED) * `create_amazon_sd_campaign` -- Create a Sponsored Display campaign (created PAUSED) * `update_amazon_campaigns` -- Update name, budget, or bidding strategy across campaign types * `pause_amazon_campaigns` -- Pause one or more campaigns * `resume_amazon_campaigns` -- Resume paused campaigns * `delete_amazon_campaigns` -- Archive campaigns ### Sponsored Products Structure * `list_amazon_ad_groups` / `create_amazon_ad_groups` / `update_amazon_ad_groups` / `delete_amazon_ad_groups` -- Manage ad groups within Sponsored Products campaigns * `list_amazon_product_ads` / `add_amazon_product_ads` / `update_amazon_product_ads` / `delete_amazon_product_ads` -- Manage the product ads (your ASINs/SKUs) inside each ad group * `list_amazon_keywords` / `add_amazon_keywords` / `update_amazon_keywords` / `delete_amazon_keywords` -- Manage keywords for MANUAL targeting (bids, match types) * `list_amazon_negative_keywords` / `add_amazon_negative_keywords` / `delete_amazon_negative_keywords` -- Block irrelevant search terms to cut wasted spend * `list_amazon_targets` / `add_amazon_targets` / `update_amazon_targets` / `delete_amazon_targets` -- Manage product and category targeting ### Sponsored Brands Structure * `list_amazon_sb_ad_groups` -- List Sponsored Brands ad groups * `list_amazon_sb_ads` / `update_amazon_sb_ads` / `create_amazon_sb_ad` -- Manage Sponsored Brands ads across all 7 ad types (productCollection, video, brandVideo, storeSpotlight, autoCollection, manualCollection, productCollectionExtended) * `list_amazon_sb_creatives` / `update_amazon_sb_creative` -- Manage Sponsored Brands creative assets * `list_amazon_sb_keywords` / `add_amazon_sb_keywords` / `update_amazon_sb_keywords` / `delete_amazon_sb_keywords` -- Manage Sponsored Brands keywords * `add_amazon_sb_negative_keywords` -- Add negative keywords to Sponsored Brands campaigns * `list_amazon_sb_targets` / `add_amazon_sb_targets` / `update_amazon_sb_targets` -- Manage Sponsored Brands product and category targets * `add_amazon_sb_themes` -- Add theme-based targets to Sponsored Brands campaigns ### Creative Assets * `upload_amazon_asset` -- Upload a creative asset (for example a brand logo required by productCollection ads) * `search_amazon_assets` -- Find existing assets in your Amazon account library * `get_amazon_moderation` -- Read an ad's review status: APPROVED, IN\_PROGRESS, REJECTED, or FAILED, broken out per component (image, text, video). On a rejection you get the policy violation and what it objected to, instead of an ad that silently never runs. Works for Sponsored Products, Sponsored Display, and Sponsored Brands Check the moderation status of my Amazon ad and tell me if anything was rejected and why. **Sponsored Products ad extensions are console-only.** Amazon's Ads API accepts ad extensions for Sponsored Brands, Sponsored Display, and Amazon DSP, but not for Sponsored Products — those have to be created in the Amazon Ads console. Ask for one on a Sponsored Products campaign and Adspirer tells you that plainly rather than returning Amazon's cryptic `ACTION_NOT_SUPPORTED`. ### Recommendations & Budget Intelligence * `get_amazon_keyword_recommendations` -- Suggested Sponsored Products keywords for your ASINs * `get_amazon_bid_recommendations` -- Suggested Sponsored Products bids by keyword or target * `get_amazon_sb_keyword_recommendations` -- Suggested keywords for Sponsored Brands * `get_amazon_sb_bid_recommendations` -- Suggested bids for Sponsored Brands * `get_amazon_budget_recommendations` -- Recommended budget changes based on performance * `get_amazon_budget_usage` -- How much of each campaign's budget is being consumed ### Reporting & Analytics * `get_amazon_campaign_performance` -- Campaign metrics including impressions, clicks, spend, sales, ACOS, and ROAS * `get_amazon_search_terms` -- The actual search terms shoppers used to find your ads * `get_amazon_report` -- Retrieve an async Amazon report by report ID once it's ready ### Amazon-Specific Analytics * `analyze_amazon_wasted_spend` -- Find keywords and targets spending without converting * `optimize_amazon_budget` -- Budget reallocation recommendations based on ACOS and ROAS * `get_amazon_product_performance` -- Per-ASIN/SKU performance breakdown * `analyze_amazon_placements` -- Compare performance across placements (top of search, product pages, rest of search) * `analyze_amazon_targeting` -- Evaluate keyword and product targeting effectiveness * `get_amazon_purchased_products` -- Cross-sell view of what shoppers actually bought after clicking your ads ### Power Tool * `amazon_unified_api` -- Direct access to Amazon's Advertising API for advanced operations not covered by the dedicated tools above ### Large accounts: paging through long lists Accounts with thousands of product ads or a big asset library used to hit a wall — a long list would be cut off partway through, and the tail was simply unreachable. Three places now page properly: * **`list_amazon_product_ads`** returns a continuation token when there is more to fetch, so your assistant can keep going until the list is done. You can also narrow it up front by state or by ad group instead of paging through everything. * **`search_amazon_assets`** pages through the asset library rather than stopping at the first batch. * **`get_amazon_product_performance`** returns the page you asked for. It used to always render the top 20 no matter which page you requested, so ASIN 40 was invisible. Rows come back compact, which is what makes a long list survive the trip in one piece. List every enabled product ad in my Amazon ad group, paging through all of them, then show me per-ASIN performance for the second page. ## Sponsored Products Creation Workflow Sponsored Products campaigns follow this workflow: ``` 1. get_connections_status ↓ (verify Amazon Ads is connected) 2. list_amazon_profiles ↓ (pick the advertiser profile / region to advertise under) 3. get_amazon_keyword_recommendations + get_amazon_bid_recommendations ↓ (find keywords for your ASINs and suggested bids) 4. create_amazon_sp_campaign ↓ (campaign created PAUSED — you review before launching) ``` A Sponsored Products campaign has a full structure underneath it: campaign → ad groups → product ads (your ASINs/SKUs) → keywords (AUTO or MANUAL targeting) → product/category targets → negative keywords. You can build all of it in one conversation or add to an existing campaign later. ## Example Prompts ### Check Performance Pull my Amazon Ads performance for the last 30 days. Show impressions, clicks, spend, sales, ACOS, and ROAS. Which Sponsored Products campaigns have the lowest ACOS? ### Create a Sponsored Products Campaign Create a Sponsored Products campaign for ASIN B08XXXXXXX: * Targeting: MANUAL keyword targeting * Budget: \$40/day * Get keyword and bid recommendations first * Add the top recommended keywords with suggested bids Build it PAUSED so I can review before launching. ### Find Wasted Spend Analyze my Amazon Ads for wasted spend over the last 60 days. Which keywords are spending with no sales or a very high ACOS? Suggest negative keywords I should add. ### Launch a Sponsored Brands Campaign Launch a Sponsored Brands campaign: * Ad type: productCollection * Feature ASINs: B08XXXXXXX, B09YYYYYYY, B07ZZZZZZZ * Brand logo: \[provide image URL or upload one] * Budget: \$75/day * Get Sponsored Brands keyword and bid recommendations first Create it PAUSED for review. ## ACOS, ROAS, and Amazon-Native Metrics Amazon reporting uses retail-specific metrics that differ from other ad platforms. Adspirer surfaces them directly: * **Impressions, clicks, CTR, spend** -- standard delivery metrics * **Purchases and sales** -- units ordered and attributed revenue * **ACOS (advertising cost of sales)** -- ad spend ÷ attributed sales, expressed as a percentage. Lower is better. ACOS is the metric most Amazon advertisers optimize toward. * **ROAS (return on ad spend)** -- attributed sales ÷ ad spend. ROAS is the inverse of ACOS: higher is better. * **Per-ASIN / per-SKU performance** -- see which products your ads are actually selling, not just campaign totals * **Cross-sell / purchased products** -- what shoppers bought after clicking, even if it wasn't the advertised ASIN The key difference from Google, Meta, TikTok, and LinkedIn: Amazon attributes sales of your actual products, so ACOS and ROAS are tied to real retail revenue rather than off-platform conversion events. Use `get_amazon_campaign_performance` for the rollup, `get_amazon_product_performance` for the per-ASIN view, and `get_amazon_purchased_products` for the cross-sell view. ### Reporting is asynchronous Amazon Reporting v3 generates reports asynchronously. Adspirer requests a report, then polls Amazon until it's ready, and `get_amazon_report` retrieves it by `report_id` once complete. For large date ranges, a report may still be processing when first requested — ask the assistant to check again in a moment, or pass the `report_id` to `get_amazon_report`. **Analytics now serve instantly.** Adspirer keeps a nightly-refreshed analytics store of your Amazon performance, so the deeper analytics tools — wasted-spend detection, budget optimization, per-ASIN and purchased-products views, and targeting analysis — return **immediately** instead of waiting on a live Amazon report to generate. Point-in-time reports (`get_amazon_report`) still fetch fresh from Amazon when you need the very latest numbers. ## Sponsored Brands & Brand Registry Sponsored Brands campaigns require Amazon Brand Registry. Sellers supply a brand entity ID during creation, and productCollection ads require a brand logo asset. Upload one with `upload_amazon_asset` (or reference an existing asset with `search_amazon_assets`) before creating the ad. If your brand isn't enrolled in Brand Registry, you can still run Sponsored Products and Sponsored Display campaigns. Sponsored Brands supports all 7 ad types — productCollection, video, brandVideo, storeSpotlight, autoCollection, manualCollection, and productCollectionExtended — plus a full creative asset pipeline and keyword, target, and theme management. ## Best Use Cases for Amazon Ads * **Product launches:** Drive visibility for new ASINs that have no organic ranking yet * **Category capture:** Show up when shoppers search for your product category (high purchase intent) * **Brand defense and conquest:** Protect your branded search and target competitor products with Sponsored Display * **Best-seller scaling:** Pour budget into proven ASINs with strong ACOS to grow share * **Cross-sell and catalog depth:** Use purchased-products data to find which products to advertise together **Not ideal for:** B2B lead generation (use [LinkedIn Ads](/docs/ad-platforms/linkedin-ads)), products sold off Amazon or on your own store (use [Google Ads](/docs/ad-platforms/google-ads) or [Meta Ads](/docs/ad-platforms/meta-ads)), brand awareness to a younger consumer audience (use [TikTok Ads](/docs/ad-platforms/tiktok-ads)). ## Troubleshooting ### "Amazon account not connected" error Re-authenticate with Login with Amazon: ``` Connect my Amazon Ads account ``` If you manage multiple advertiser profiles, confirm the right one is active. List them with `list_amazon_profiles` and ask the assistant to switch to the correct `profile_id` (and region) before creating or pulling data. ### "Brand Registry required" error on Sponsored Brands Sponsored Brands campaigns need an enrolled brand. Make sure your brand is in Amazon Brand Registry and that you've supplied the brand entity ID. For productCollection ads, upload a brand logo with `upload_amazon_asset` first. If you don't have Brand Registry, run Sponsored Products or Sponsored Display instead. ### "Report still processing" / no report data yet Amazon reports are asynchronous (Reporting v3). The report is requested, then polled until Amazon finishes generating it. If a report isn't ready on the first try, wait a moment and retrieve it again with `get_amazon_report` using the `report_id`. Large date ranges take longer to generate. ### Campaign created but not spending This is expected. Adspirer creates every Amazon campaign PAUSED because campaigns run against production (there's no Amazon sandbox). Review the campaign, then ask the assistant to resume it with `resume_amazon_campaigns`. If you're using [agent skills](/docs/agent-skills/overview), the AI enforces the correct workflow automatically. ## FAQ Adspirer pricing is based on tool calls, not ad spend. Free tier: 15 calls/month. Plus: $49/mo for 150 calls. Pro: $99/mo for 600 calls. Max: \$199/mo for 3,000 calls. A typical Sponsored Products campaign creation uses a handful of tool calls (profiles, recommendations, create). See [full pricing](https://www.adspirer.com/pricing). Yes. On connect, Adspirer discovers your advertiser profiles across all three Amazon regions — North America (NA), Europe (EU), and Far East (FE) — and routes requests to the correct region automatically. Each profile is imported as a separate ad account. Use `list_amazon_profiles` to see them and target a specific one by its `profile_id`. **Sponsored Products (SP):** Keyword- and product-targeted ads that promote individual listings in search results and on product pages. The workhorse of Amazon advertising. No Brand Registry required. **Sponsored Brands (SB):** Brand-building ads (logo, custom headline, multiple products, or video) shown in prominent placements. Requires Amazon Brand Registry and supports all 7 ad types. **Sponsored Display (SD):** Audience and contextual targeting (audiences-remarketing plus contextual) shown on and off Amazon — strong for retargeting and competitor-product placements. Only for Sponsored Brands. Sponsored Products and Sponsored Display work without it. To run Sponsored Brands, enroll your brand in Brand Registry, supply the brand entity ID, and upload a brand logo with `upload_amazon_asset` for productCollection ads. No. There is no Amazon sandbox, so campaigns run against production. Adspirer creates everything PAUSED so you can review it first. When you're ready, ask the assistant to resume the campaign with `resume_amazon_campaigns`. Yes. Adspirer connects via OAuth through Login with Amazon — your Amazon credentials are never stored client-side. Tokens refresh server-side, and all connections are HTTPS-encrypted. You can revoke access at any time from your Amazon account's connected-apps settings. ## Related Documentation * [Google Ads Integration](/docs/ad-platforms/google-ads) * [Meta Ads Integration](/docs/ad-platforms/meta-ads) * [TikTok Ads Integration](/docs/ad-platforms/tiktok-ads) * [LinkedIn Ads Integration](/docs/ad-platforms/linkedin-ads) * [ChatGPT Ads Integration](/docs/ad-platforms/chatgpt-ads) * [Campaign Creation Workflows](/docs/agent-skills/workflows) * [Pricing & Plans](https://www.adspirer.com/pricing) * [Prompt Engineering Playbook](/docs/agent-skills/prompt-engineering-playbook) — A custom skill, dossier, and prompt book generated from your Amazon Ads account (\$39 one-time) # ChatGPT Ads Integration | Adspirer Source: https://www.adspirer.com/docs/ad-platforms/chatgpt-ads Run ads inside ChatGPT (OpenAI Ads) with AI — 36 tools to launch, manage, and measure chat_card ads from a conversation, all created paused. # 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](/docs/ai-clients/chatgpt), [Claude Code](/docs/ai-clients/claude-code), or any [supported AI client](https://www.adspirer.com/integrations) * 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. **One API key = exactly one ad account.** Unlike Google, Meta, TikTok, LinkedIn, and Amazon (which use an OAuth browser redirect and import several accounts at once), a ChatGPT Ads key maps to a single advertiser account. To manage more than one account, connect one key per account. 1. In OpenAI Ads Manager, go to **Settings → API keys** and generate (or copy) your **Advertiser API key** 2. Open the Adspirer web app and go to the **Connections** tab 3. Click **"Connect ChatGPT Ads"** 4. **Paste your Advertiser API key** and save — the key is stored **encrypted** Once connected, the account joins your Adspirer **multi-account switcher** and is usable from chat. Verify the connection from your AI assistant: ``` Check my connected ad platforms ``` You should see your ChatGPT Ads account listed with its name, account ID, and review status. ### 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](https://www.adspirer.com/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 for `list_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. List my ChatGPT Ads accounts with their account IDs and currencies, then show me last week's spend for the Northwind Retail one. ### 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 ``, configured with your **Pixel ID** * **Conversions API (server-side)** — paste a **Conversions API key** for more reliable attribution Supported events include `order_created`, `lead_created`, `subscription_created`, and `trial_started`. You can also configure and verify conversions from chat (see [Conversion Tracking](#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 one * `create_chatgpt_campaign` -- Create a campaign (created PAUSED), with a budget, a bidding type, and included/excluded locations * `update_chatgpt_campaign` -- Change budget, bidding, schedule, or targeting. Only the targeting side you name changes; the other is preserved * `pause_chatgpt_campaign` / `resume_chatgpt_campaign` -- Stop serving, or resume to go live * `archive_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 one * `create_chatgpt_ad_group` -- Add an ad group (bid + targeting) to a campaign * `update_chatgpt_ad_group` -- Update bid, schedule, or targeting * `pause_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 one * `create_chatgpt_ad` -- Create a chat\_card ad (title, body, image, destination URL) * `update_chatgpt_ad` -- Update an ad's creative * `pause_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 URL * `chatgpt_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 setup * `list_chatgpt_conversion_events` -- See the conversion events being recorded * `test_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 back * `list_chatgpt_pixels` -- List your pixels, each with its **Source ID** and short **Pixel ID** * `create_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 source * `list_chatgpt_event_settings` -- List your conversion event settings with their event type, source, and attribution window The object model (Account → Campaign → Ad Group → Ad) is hidden by the agent — you just describe the ad you want, and it builds the right structure. Budgets and bids are in **your account's own currency**, never micros — see [Budgets, bidding, and targeting](#budgets-bidding-and-targeting). ## How a Launch Works Launching never spends money on its own. Everything is created **paused**, and you resume it when you're ready. "Run a ChatGPT ad for adspirer.com, \$25/day, target California, headline 'Your AI Paid Media Agent', body 'Run ads from ChatGPT', use this image: \[url]." `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`.) Check the campaign, budget, and creative. The agent reports the ad's review status honestly — it never claims an ad is "live" while review is pending or rejected. On your say-so, `resume_chatgpt_campaign` takes it live — subject to OpenAI's review. Want to stop again? `pause_chatgpt_campaign`. ``` launch_chatgpt_ad → everything created PAUSED ↓ you review the budget + creative ↓ resume_chatgpt_campaign → live (pending review) ``` ## 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 of `25` 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. | Setting | Minimum | Maximum | | -------------------- | ------------------------------- | ------------------------ | | **Daily budget** | 25 per day, in account currency | — | | **Lifetime budget** | 1, in account currency | — | | **Ad group max bid** | 0.000001, in account currency | 100, in account currency | OpenAI's floor for a **daily** budget is 25 a day, not 1. A smaller daily budget is caught before the request is sent, with your account's currency named in the message. ### Bidding type `create_chatgpt_campaign` and `update_chatgpt_campaign` take a `bidding_type`: | `bidding_type` | What it does | | -------------- | --------------------------------------------------------------------------------------- | | `clicks` | Pay per click (CPC). The Adspirer default | | `impressions` | Pay per thousand impressions (CPM). OpenAI's own default | | `conversions` | oCPC — optimizes toward the clicks most likely to convert, still billed per valid click | `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](#conversion-tracking)). Ask for conversions bidding without one and the agent says so before sending the request. List my ChatGPT Ads conversion event settings, then switch my Spring Launch campaign to conversions bidding against the order\_created one. ### 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** serve * `exclude_location_query` / `exclude_location_ids` — where it **shouldn't** Editing targeting only changes the side you name. Add an exclusion and your existing included locations stay exactly as they were. A location the agent can't resolve is treated as an **error**, not an empty list — a misspelled place name leaves your targeting untouched and tells you so. To genuinely serve everywhere, ask for targeting to be cleared; the agent uses `clear_targeting` rather than inferring it from an empty list. `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. My ChatGPT Ads campaign targets California. Keep that, but exclude Los Angeles, and show me the targeting that ended up applied. ## Example Prompts ### Launch an Ad Run a ChatGPT ad for adspirer.com. Budget: \$25/day, target California. Headline: "Your AI Paid Media Agent" Body: "Run ads from ChatGPT" Image: \[public PNG/JPG URL] Build it paused so I can review before resuming it. ### Check Performance How's my ChatGPT ad doing this week? Show impressions, clicks, spend, CTR, and CPC. Include conversions if the pixel is live. ### Pause or Adjust Budget Pause my ChatGPT campaign. Then bump the budget to \$50/day, but keep it paused until I resume it. ## Creative Requirements The ChatGPT ad renders as a single **chat\_card** — a title, body, image, and destination URL. | Field | Rule | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Title / headline** | 3–50 characters | | **Body** | Up to 100 characters | | **Image** | One image, supplied as a **public image URL** (PNG or JPG). Adspirer uploads from the URL — no binary file upload. **Square, at least 256×256 px** recommended | | **Destination URL** | Must be `http`/`https` | Provide a **public, reachable** image URL. Non-PNG/JPG files or unreachable URLs are **rejected up front**. Non-square or smaller-than-256px images produce a **warning** — they can still be rejected at review. ## Conversion Tracking Conversion measurement is optional but recommended. Set it up in the **Conversions step** of the Connect flow (see [Connecting ChatGPT Ads](#optional-conversions-step)), or configure and verify it from chat with `set_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 ``, configured with your **Pixel ID** * **Conversions API (server-side)** — paste a **Conversions API key** for more reliable attribution Supported events: | Event | Meaning | | ---------------------- | --------------------------------- | | `order_created` | A purchase or order was completed | | `lead_created` | A lead was captured | | `subscription_created` | A subscription started | | `trial_started` | A free trial began | Use `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_chatgpt_pixel` creates a web measurement pixel and returns the **site snippet ready to paste** into your ``, 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. `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. `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. **Pixels, Conversions API keys, and event settings are permanent.** OpenAI provides no way to delete them, so the agent asks you to confirm before creating one, and it will not replace a pixel or key you already have unless you explicitly tell it to. ## Ad Review and Policy Every ad — and the **account** itself — must pass **OpenAI's review** before it can serve. OpenAI's ad policies **disallow some categories**, notably **"third-party AI services"**, so AI-company advertisers should expect extra scrutiny. The agent reports the review status (`in_review` → `approved`/`rejected`) **honestly** — it will not tell you an ad is "live" while review is pending or rejected. ## 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`, and `archive_chatgpt_ad` require 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 **Not ideal for:** rich multi-format creative (use [Meta Ads](/docs/ad-platforms/meta-ads) for image/video/carousel), high-intent search capture (use [Google Ads](/docs/ad-platforms/google-ads)), or categories OpenAI's policies disallow (e.g. third-party AI services). ## 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](#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 with `get_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 ChatGPT Ads (OpenAI Ads) authenticates with an **Advertiser API key**, not an OAuth browser redirect like Google, Meta, TikTok, LinkedIn, and Amazon. You paste the key once in the Adspirer web app's Connections tab; it's stored encrypted and the chat agent never asks for it. One key maps to exactly one ad account. Yes. Because a ChatGPT Ads key maps to one advertiser account, several accounts means several keys — add each with **"Connect another account"** in the Connections tab, and disconnect them one at a time. How many you can keep active at once depends on your plan; see [pricing](https://www.adspirer.com/pricing). With one account connected, tools use it automatically. With two or more, name the account you mean in your request — `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. Yes. `create_chatgpt_pixel` creates the pixel and returns the site snippet ready to paste into your ``, 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. Adspirer pricing is based on tool calls, not ad spend. Free tier: 15 calls/month. Plus: $49–150/mo. Pro: $99–600/mo. Max: \$199–3,000/mo. Launching a ChatGPT ad uses a handful of tool calls. Your ad spend is billed separately by OpenAI. See [full pricing](https://www.adspirer.com/pricing). No. Everything is created **PAUSED** — nothing serves or spends until you resume it with `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. One image, supplied as a **public PNG or JPG URL** — Adspirer uploads it from the URL (no file upload). **Square, at least 256×256 px** is recommended. Non-square or smaller images produce a warning and may be rejected at review; non-PNG/JPG or unreachable URLs are rejected up front. Yes. Your Advertiser API key is stored **encrypted** in the Adspirer web app and is never exposed to the chat agent. All connections are HTTPS-encrypted. You can disconnect the account from the Connections tab at any time, and you can revoke the key from OpenAI Ads Manager. `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. ## Related Documentation * [Google Ads Integration](/docs/ad-platforms/google-ads) * [Meta Ads Integration](/docs/ad-platforms/meta-ads) * [Amazon Ads Integration](/docs/ad-platforms/amazon-ads) * [ChatGPT Setup](/docs/ai-clients/chatgpt) * [Campaign Creation Workflows](/docs/agent-skills/workflows) * [Pricing & Plans](https://www.adspirer.com/pricing) # Google Ads Integration | Adspirer Source: https://www.adspirer.com/docs/ad-platforms/google-ads Manage Google Search, Performance Max, Shopping, App, Display, YouTube, and Demand Gen campaigns with AI — 156 tools for keywords, ad copy, and optimization. # Google Ads Integration The most comprehensive ad platform integration. Create Search, Performance Max, Shopping, App, Display, YouTube, and Demand Gen campaigns, research keywords with real CPC data, generate ad copy, and optimize performance with 156 specialized tools — including Manager-parity deep management down to the ad-group, asset-group, and product-partition level. **Approved at the agency level for the Google Ads API.** Google classified Adspirer as an agency, full-service ad platform and granted Standard Access — so there's **no daily cap** on the work Adspirer can do on Google. Bulk builds, large restructures, and account-wide optimization run at full speed.