add_callout_extensions
ChatGPTAdd callout extensions to a campaign. Callouts are short, non-clickable highlights that appear below your ad. They communicate quick trust signals and differentiators. IMPORTANT RULES (from google-ads-creative-guidelines.md): - Max 25 characters each - 4-8 callouts recommended - Should NOT be CTAs (no "click", "buy", "order", "call") - Should NOT end with periods GOOD EXAMPLES: - "Free Shipping" - "24/7 Support" - "No Code Required" - "30 Second Setup" - "Award Winning" **BAD EXAMPLE ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_demandgen_ad_group
ChatGPTAdd a new ad group with targeting and ads to an EXISTING Demand Gen campaign. Use this after create_demandgen_campaign to add additional ad groups. Each ad group can have: - Different location targeting (e.g., US cities vs India cities vs UAE cities) - Different audience targeting (e.g., marketing pros vs tech founders vs agency owners) - Same or different ad creative (headlines, descriptions, images, videos) Reuse Existing Audiences: To attach an existing audience (from Google ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_keywords
ChatGPTAdd keywords to an existing ad group. ⚠️ CRITICAL: Run `research_keywords` BEFORE using this tool! ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_meta_ad
ChatGPTUser wants to add another ad/creative variation to an EXISTING ad set. DO NOT USE to create a new campaign. For new campaigns: - Video campaign - create_meta_video_campaign - Image campaign - create_meta_image_campaign - Carousel campaign - create_meta_carousel_campaign Common scenarios: - A/B test ad copy: Different headlines, primary text, or CTAs for the same audience - A/B test creatives: Different images or videos for the same audience - Format testing within one audience: Image vs ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_meta_ad_set
ChatGPTUser wants to add a new ad set to an EXISTING campaign. Common scenarios: - Audience testing: Same ad format, different targeting/interests per ad set (e.g., "4 ad sets with different interests") - Multi-format: Different ad types (image + video + carousel) under one campaign - Budget split: Same creative, different budgets per audience segment - Scaling: Adding new audiences/markets to an existing campaign - Geographic split: Same ad, different locations per ad set - Dynamic Creative (DCO): Se ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_negative_keywords
ChatGPTAdd negative keywords to a campaign. Negative keywords prevent your ads from showing for certain searches. They help save budget by avoiding irrelevant clicks. Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - keywords: List of negative keywords to add - customer_id: Optional Each keyword needs: - text: The keyword phrase (e.g., "free", "cheap", "diy") - match_type: EXACT, PHRASE, or BROAD (default: BROAD) Campaign-level vs Ad Group-level: This add ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_pmax_audience_signal
ChatGPTAdd an audience signal to an existing Performance Max campaign. Audience signals hint Google AI about who your ideal customers are. Uses in-market segments (actively researching), affinity segments (long-term interests), and custom audiences (remarketing lists, customer match). Use search_audiences tool first to discover relevant audience segment IDs. Parameters: - campaign_id: The PMax campaign ID - audience_config: Dict with segment IDs Execution time: 2-5 seconds ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_pmax_search_themes
ChatGPTAdd search themes to an existing Performance Max campaign. Search themes hint Google AI about what customers search for. Max 50 per asset group. NOT keywords — no match types, no bids, no quality scores. Best practices: - Derive from keyword research results, business profile, or user input - Keep themes specific but not too narrow (2-5 words ideal) - Avoid generic themes like "buy stuff" or overly specific ones like "buy red nike air max 97 size 12" Parameters: - campaign_id: The PMa ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_sitelinks
ChatGPTAdd sitelink extensions to a campaign. Sitelinks are clickable links to specific pages on your website. Recommended 4-6 sitelinks per campaign. CONSTRAINTS: - link_text max 25 characters - description1 max 35 characters (optional) - description2 max 35 characters (required if description1 is set) EXAMPLE SITELINKS: { "link_text": "How It Works", "final_url": "https://example.com/how-it-works", "description1": "See the platform in action", "description2": "Step-by-ste ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_structured_snippets
ChatGPTAdd structured snippet extensions to a campaign. Structured snippets highlight specific aspects of your products/services. VALID HEADERS: - AMENITIES, BRANDS, COURSES, DEGREE_PROGRAMS, DESTINATIONS - FEATURED_HOTELS, INSURANCE_COVERAGE, MODELS, NEIGHBORHOODS - SERVICE_CATALOG, SHOWS, STYLES, TYPES RULES: - Header must be from predefined list - 3-10 values required per snippet - Each value max 25 characters EXAMPLES: For SaaS/Platform: Header: "Types" Values: ["Google Ads" ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_tiktok_ad
ChatGPTAdd a new ad to an existing TikTok ad group. Use this when you need to add additional ads (creatives) to an ad group that was already created. Supports all ad formats: - SINGLE_IMAGE: Provide image_urls (public HTTPS URLs — auto-uploaded) OR image_ids (pre-uploaded TikTok IDs) - SINGLE_VIDEO: Provide video_id (TikTok video ID from creative library) - Spark Ads: Boost organic TikTok posts (requires tiktok_item_id + identity_type=TT_USER) - Carousel: Multi-card ads (first call create_tiktok_caro ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
add_tiktok_ad_group
ChatGPTAdd a new ad group to an existing TikTok campaign. Use this when you need to add additional ad groups to a campaign that was already created. Each ad group can have different targeting, budget, and placement settings. This is useful for: - A/B testing different audiences under the same campaign - Splitting budget across different targeting strategies - Adding new targeting segments to an existing campaign Required: campaign_id, adgroup_name, budget. The objective parameter determines automati ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_apply_recommendation
ChatGPTApply a previously listed recommendation by id. Mutates the underlying entity (budget/bid/keyword) accordingly and returns the before/after. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_attribution_report
ChatGPTCreate an Amazon Attribution report measuring how off-Amazon traffic (search, social, display) drove detail-page views, add-to-carts, and purchases. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_budget_rule
ChatGPTCreate a scheduled or performance-based budget rule that raises a campaign's budget during an event window or when a performance threshold (e.g. ACOS) is met. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_custom_audience
ChatGPTCreate a custom audience from a rule — remarketing on product views/purchases over a lookback window, or a combination of interest segments. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_dsp_creative
ChatGPTRegister a DSP creative (image/video) and associate it with a line item. Submitted for moderation. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_dsp_line_item
ChatGPTCreate a line item under a DSP order with a supply type, bid, and budget. Created PAUSED. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_dsp_order
ChatGPTCreate an Amazon DSP order (campaign-level container) with a flight and total budget. Created PAUSED. Line items attach to the order. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_portfolio
ChatGPTCreate a portfolio to group campaigns under a shared budget policy. Portfolios support an optional budget cap (monthly recurring or a fixed date-bounded amount). Created enabled. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_report_export
ChatGPTKick off an asynchronous v3 report export (create → poll → download). Returns a report_id and status; in the sandbox the export completes immediately with a signed download url and an inline preview of the rows. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sb_ad
ChatGPTCreate the Sponsored Brands ad creative: brand name, logo, custom headline, and the products (ASINs) featured or a landing page. Submitted for moderation. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sb_ad_group
ChatGPTCreate an ad group inside a Sponsored Brands campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sb_campaign
ChatGPTCreate a Sponsored Brands campaign (banner/video ads that feature your brand logo and a headline). Created PAUSED. Requires a brand entity id. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sb_keywords
ChatGPTAdd targeting keywords to a Sponsored Brands ad group with match types and bids. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sb_targets
ChatGPTAdd product/category targeting expressions to a Sponsored Brands ad group. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sd_ad_group
ChatGPTCreate an ad group inside a Sponsored Display campaign with a default bid. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sd_campaign
ChatGPTCreate a Sponsored Display campaign (on- and off-Amazon display ads with contextual or audience targeting). Created PAUSED. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sd_creative
ChatGPTCreate the Sponsored Display creative: headline, logo, and optional custom image. Submitted for moderation. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sd_product_ad
ChatGPTPromote products (ASINs) as Sponsored Display product ads in an ad group. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sd_targets
ChatGPTAdd Sponsored Display targeting — contextual product/category expressions or audience segments (views/purchases remarketing, in-market, lifestyle). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_ad_group
ChatGPTCreate an ad group inside a Sponsored Products campaign with a default bid. Product ads and keywords/targets attach to the ad group. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_campaign
ChatGPTCreate a Sponsored Products campaign. Created PAUSED so you can add ad groups, product ads, and keywords/targets before it serves. Targeting type is 'manual' (you supply keywords/targets) or 'auto' (Amazon matches shopper queries to your products). Default daily budget bidding. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_keywords
ChatGPTAdd targeting keywords to a Sponsored Products ad group. Each keyword has a match type (exact, phrase, broad) and an optional per-keyword bid. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_negative_keywords
ChatGPTAdd negative keywords to stop your ads from showing on unwanted queries. Scope to a campaign or an ad group. Match type: negativeExact or negativePhrase. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_negative_targets
ChatGPTAdd negative product targets to exclude specific ASINs or brands from an ad group's product targeting. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_product_ad
ChatGPTPromote one or more products (by ASIN or seller SKU) as product ads in an ad group. Each ASIN/SKU becomes one product ad. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_create_sp_targets
ChatGPTAdd product targeting expressions to an ad group — target specific ASINs, brands, or product categories (optionally refined by price/rating/prime). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_get_account_budget_usage
ChatGPTSummarize daily budget deployed vs spent across all enabled campaigns over a window, so you can spot budget-limited or under-pacing campaigns.
amazon_get_audience_recommendations
ChatGPTRecommend high-fit audience segments for the given products/campaign with an estimated reach and relevance score.
amazon_get_bid_recommendations
ChatGPTGet suggested bids (and a low/high range) for keywords or targets in an ad group, based on the estimated bid landscape.
amazon_get_brand_metrics_report
ChatGPTPull brand funnel metrics — awareness, consideration, and purchase shopper counts plus new-to-brand share — for the account over a window.
amazon_get_budget_recommendations
ChatGPTRecommend budget changes per campaign based on how often it ran out of budget and its return, with an estimated missed-impressions / missed-sales cost.
amazon_get_dsp_report
ChatGPTPull a DSP performance report by order or line item: impressions, clicks, spend, and total/new-to-brand sales over a window.
amazon_get_keyword_harvest_suggestions
ChatGPTFind converting customer search terms that are not yet keywords, so you can promote them to exact-match keywords ("harvesting").
amazon_get_keyword_recommendations
ChatGPTGet suggested keywords for products/ad group with estimated search volume, competition, and a suggested bid range. Seed with ASINs or seed terms.
amazon_get_negative_keyword_suggestions
ChatGPTFind search terms that spent without converting, so you can add them as negative keywords to cut wasted spend.
amazon_get_product_target_recommendations
ChatGPTRecommend ASINs and categories to target for the given products, with a suggested bid for each.
amazon_get_profile
ChatGPTFetch a single Amazon Advertising profile: marketplace, currency, timezone, account type, and daily budget ceiling.
amazon_get_sb_campaigns_report
ChatGPTPull a Sponsored Brands campaign performance report including brand-halo metrics (new-to-brand orders and sales) per campaign.
amazon_get_sb_landing_page_options
ChatGPTList valid Sponsored Brands landing page options for the account — your Brand Stores, Store sub-pages, and eligible product-list pages.
amazon_get_sd_campaigns_report
ChatGPTPull a Sponsored Display campaign performance report: impressions, clicks, spend, sales, and ACOS/ROAS per campaign.
amazon_get_sp_campaigns_report
ChatGPTPull a Sponsored Products campaign performance report: impressions, clicks, CTR, spend, sales, orders, ACOS, and ROAS per campaign over a window.
amazon_get_sp_search_terms_report
ChatGPTPull the customer search terms report — the actual shopper queries that triggered your Sponsored Products ads, with spend and conversions. Use it to harvest new keywords and find negatives.
amazon_get_sp_targeting_report
ChatGPTPull the keyword/target performance report for Sponsored Products, keyed by targeting expression, with ACOS and ROAS.
amazon_get_targeting_categories
ChatGPTBrowse the product category taxonomy available for product targeting, with category ids you can pass to create_sp_targets / create_sd_targets.
amazon_get_top_of_search_impression_share
ChatGPTReport each campaign's estimated share of top-of-search impressions and the headroom to grow it by raising bids or the top-of-search placement adjustment.
amazon_list_ad_accounts
ChatGPTList the advertising accounts (global account manager view) linked to your Amazon Ads identity, with marketplace coverage and status.
amazon_list_dsp_advertisers
ChatGPTList the Amazon DSP advertisers you can manage, with their entity id and default currency.
amazon_list_dsp_audiences
ChatGPTList audience segments available for Sponsored Display and DSP targeting — in-market, lifestyle, remarketing, and interest segments with reach estimates.
amazon_list_portfolios
ChatGPTList portfolios in the account. Portfolios group campaigns under a shared budget cap and date range so you can manage spend across many campaigns at once.
amazon_list_profiles
ChatGPTList the Amazon Advertising profiles (marketplace + account scopes) available to you. Each profile ties an advertiser account to a single marketplace (e.g. US, UK, DE) and account type (seller, vendor, or agency). Use the profile_id as account_id in other tools.
amazon_list_recommendations
ChatGPTList actionable optimization recommendations across the account — budget increases for budget-limited campaigns, bid changes, keyword harvests, and negative keyword candidates — each with an estimated impact and an apply-able recommendation_id.
amazon_list_sb_campaigns
ChatGPTList Sponsored Brands campaigns with 30-day performance.
amazon_list_sd_campaigns
ChatGPTList Sponsored Display campaigns with 30-day performance.
amazon_list_sp_ad_groups
ChatGPTList ad groups in a Sponsored Products campaign.
amazon_list_sp_campaigns
ChatGPTList Sponsored Products campaigns with 30-day performance (impressions, clicks, spend, sales, ACOS, ROAS).
amazon_list_sp_keywords
ChatGPTList targeting keywords in an ad group with match type and state.
amazon_list_sp_product_ads
ChatGPTList the product ads (ASIN/SKU) in an ad group.
amazon_set_bid_adjustments
ChatGPTSet percentage bid adjustments by placement (top of search, product pages, rest of search) for a Sponsored Products campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_set_bidding_strategy
ChatGPTSet a Sponsored Products campaign's dynamic bidding strategy: down only, up and down, or fixed bids. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_update_campaign_budget
ChatGPTChange a campaign's daily (or lifetime) budget. Works for SP/SB/SD campaigns. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_update_portfolio
ChatGPTRename a portfolio, change its state, or adjust its budget cap. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_update_sb_campaign
ChatGPTUpdate a Sponsored Brands campaign's name, state, or budget. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_update_sp_ad_group
ChatGPTUpdate an ad group's name, state, or default bid. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_update_sp_campaign
ChatGPTUpdate a Sponsored Products campaign's name, state, daily budget, or bidding strategy. Provide at least one field to change. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
amazon_update_sp_keywords
ChatGPTUpdate state and/or bid for one or more keywords by id. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
analyze_meta_ad_performance
ChatGPTUser wants detailed analysis of specific Meta ads, creative performance, or wants to identify winning/losing ad variations. This tool provides ad-level and creative-level insights for Meta campaigns. Returns: - Top performing ads by CTR and conversion rate - Underperforming ads that need attention - Creative fatigue indicators (high frequency, declining CTR) - Video completion metrics (25%, 50%, 75%, 100% watched) - Creative optimization recommendations When to use this tool: - "Which of my M
analyze_meta_audiences
ChatGPTUser asks about Meta/Facebook/Instagram audience performance by demographics, age group or gender targeting optimization, audience saturation, or which demographic segments to target or exclude. This tool provides deep analysis of audience segment performance and detects audience saturation to optimize demographic targeting for Meta Ads. Returns: - Age group performance breakdown (18-24, 25-34, 35-44, 45-54, 55-64, 65+) - Gender performance breakdown (male, female, unknown) - Age + Gender comb
analyze_meta_wasted_spend
ChatGPTUser asks about Meta/Facebook/Instagram ad spend efficiency, wasted money, underperforming campaigns, placement optimization, or creative fatigue. This tool identifies Meta Ads campaigns and placements that are wasting money by performing below target ROAS or below breakeven (ROAS < 1.0). It extends the base wasted spend detector with Meta-specific features: Returns: - Campaign-level wasted spend analysis (ROAS < 1.0 = actual losses) - Underperforming spend analysis (1.0 <= ROAS < targ
analyze_search_terms
ChatGPTDiscover keyword opportunities and optimize match types by analyzing actual search terms. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Google Ads only - NOT available for TikTok. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 3): - Identifies OPPORTUNITY keywords: Converting search terms NOT in your keyword list - Identifies NEGATIVE keywords: Expensive terms with zero conversions - Analyzes MATCH TYPE performance: Exact vs Phrase vs Broad effi
analyze_tiktok_geo_performance
ChatGPTAnalyze TikTok geographic/country-level performance. Returns: per-country spend, conversions, CPA, CTR, hook rate, engagement. Best/worst countries with recommendations. Note: TikTok reports this breakdown at country level. When to use: "TikTok performance by country", "Which countries perform best on TikTok?", "TikTok geo breakdown" Parameters: - lookback_days: default 30
analyze_tiktok_wasted_spend
ChatGPTAnalyze TikTok campaigns for wasted ad spend. Identifies campaigns losing money (ROAS < 1.0) and underperforming campaigns (ROAS < target). Returns: wasted spend by campaign, severity levels (CRITICAL/HIGH/MEDIUM), creative fatigue analysis, status-aware recommendations (distinguishes active vs disabled campaigns). When to use: "Where am I wasting money on TikTok?", "TikTok wasted spend", "Which TikTok campaigns are losing money?" ⚠️ NEVER say "pause" for campaigns with conversions. Say "
analyze_wasted_spend
ChatGPTAnalyze wasted ad spend and identify campaigns losing money or underperforming. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. 🎯 What This Tool Does (Performance Agent - Phase 1): - Identifies campaigns LOSING money (ROAS < 1.0x) - Identifies campaigns UNDERPERFORMING (1.0x ≤ ROAS < target) - Separates true waste from opportunity cost - Provides severity-based classification (CRITICAL/HIGH/MEDIUM) - Generates actionable recommendations with expected impa
applovin_add_assets_to_creative_sets
ChatGPTAttach existing assets to one or more creative sets (fan-out). Each target creative set gains a reference to every listed asset. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_attach_creative_set
ChatGPTAttach (activate) a creative set so it serves within its campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_clone_creative_set
ChatGPTClone a creative set (and its assets) into a new creative set, optionally into a different campaign. Useful for A/B testing creative variations. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_create_campaign
ChatGPTCreate an AppLovin (AXON) app-install/engagement campaign. AXON auto-bids toward the chosen optimization goal — there are no keywords or manual bids. The campaign is created PAUSED by default so you can attach creative sets and review targeting before it serves. Objectives: CPI (installs), CPE (in-app engagement), CPP (in-app purchases), AD_ROAS (return on ad spend). Live campaigns additionally require target_cpi, tracking_method, target_countries, and itunes_id for iOS. AppLovin ignores status on create — a new campaign cannot be born live, so launching is always a separate, explicitly approved applovin_set_campaign_status call. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_create_creative_set
ChatGPTCreate a new (empty) creative set under a campaign. Upload assets into it with applovin_upload_assets. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_create_web_campaign
ChatGPTCreate an AppLovin AXON web campaign that drives to a website rather than an app install. AXON auto-bids toward the objective (typically AD_ROAS or CPP for web conversions). Created PAUSED by default. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_detach_creative_set
ChatGPTDetach (deactivate) a creative set so it stops serving. Its assets and history are preserved. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_get_account_settings
ChatGPTGet the settings for one AppLovin advertiser account — display name, currency, reporting timezone, default optimization goal, and connection status.
applovin_get_advertiser_report
ChatGPTGet the advertiser performance report (spend, impressions, clicks, installs, revenue, CPI, ROAS) over a window of up to 45 days, per campaign. Optionally scope to one campaign or break down by day.
applovin_get_campaign
ChatGPTGet one AppLovin campaign in full — objective, platform, budget, ROAS target, targeting, and the number of creative sets attached.
applovin_get_creative_performance
ChatGPTGet per-creative-set and per-asset performance for a campaign (impressions, clicks, installs, spend, IPM, CTR) to spot creative fatigue and winners.
applovin_get_creative_set
ChatGPTGet one creative set with its assets (videos, images, playables, endcards).
applovin_get_retention_report
ChatGPTGet the install-cohort retention report — the share of installed users still active at day 1/3/7/14/30, per campaign.
applovin_get_roas_cohort_report
ChatGPTGet the install-cohort ROAS report — cumulative return on ad spend at day 1/3/7/14/30 after install for each campaign. AXON's core optimization signal for AD_ROAS campaigns.
applovin_list_accounts
ChatGPTList the AppLovin (AXON) advertiser accounts connected to your AdAgnt user. Returns each account's ID, name, currency, and status. Use the returned account_id in other AppLovin tools when you manage more than one account.
applovin_list_assets
ChatGPTList the assets in a creative set (videos, images, playables, endcards) with their type and status.
applovin_list_campaigns
ChatGPTList AppLovin campaigns for the account with 45-day performance snapshots (spend, installs, revenue, ROAS). Optionally filter by status or by app platform.
applovin_list_creative_sets
ChatGPTList the creative sets under an AppLovin campaign, each with its asset count and status.
applovin_list_tracking_integrations
ChatGPTList the mobile measurement partner (MMP) tracking integrations available on the account (AppsFlyer, Adjust, Singular, Kochava, Branch). AXON uses an MMP to attribute installs and in-app events for optimization.
applovin_remove_assets_from_creative_sets
ChatGPTDetach assets from one or more creative sets. The assets themselves are preserved; only the associations are removed. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_campaign_objective
ChatGPTChange the optimization objective AXON auto-bids toward for a campaign: CPI, CPE, CPP, or AD_ROAS. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_campaign_platform
ChatGPTSet the app platform (ios, android, or both) an AppLovin campaign promotes to. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_campaign_schedule
ChatGPTSet the start and/or end date of an AppLovin campaign. Dates are YYYY-MM-DD. Omit end_date to run indefinitely. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_campaign_status
ChatGPTActivate or pause an AppLovin campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_country_budgets
ChatGPTSet per-country daily budgets for a campaign. The global daily budget is updated to the sum of the country budgets. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_creative_localization
ChatGPTSet per-locale asset mappings for a creative set so the right creative serves in each market. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_device_targeting
ChatGPTSet device-level targeting for a campaign: device types (phone/tablet) and connection types (wifi/cellular). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_geo_targeting
ChatGPTSet country-level geo targeting for a campaign: included and/or excluded ISO country codes. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_global_budget
ChatGPTSet the global daily budget for a campaign (in account currency). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_optimization_goal
ChatGPTSet the optimization goal AXON auto-bids toward for a campaign: CPI, CPE, CPP, or AD_ROAS. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_os_targeting
ChatGPTSet the minimum and/or maximum OS version a campaign targets (e.g. iOS 15.0+, Android 10+). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_roas_target
ChatGPTSet the target ROAS multiplier for an AD_ROAS campaign (e.g. 1.5 = 150% return on ad spend). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_set_tracking_configuration
ChatGPTConfigure MMP install-attribution tracking for a campaign: the measurement partner and optional impression/click tracking URLs. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_update_campaign
ChatGPTUpdate an AppLovin campaign's name and/or daily budget. Provide at least one field to change. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_update_creative_set
ChatGPTRename a creative set and/or change its status. Provide at least one field. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
applovin_upload_assets
ChatGPTRegister one or more creative assets into a creative set. Each asset has a name, a type (video, image, playable, or endcard), and a hosted URL. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
audit_conversion_tracking
ChatGPTReview your conversion tracking setup across ad platforms. Checks Meta Pixel (event volume, CAPI status, dedup, diagnostics) and Google Ads (conversion actions, enhanced conversions, attribution). Returns a health score (0-100), grade (A-F), detailed findings, and suggestions with self-validation steps for each platform. Note: Some checks rely on API data availability and may not capture all configurations. Where findings are inconclusive, the to
browse_meta_targeting
ChatGPTUser wants to browse all targeting options in a specific category without a search query. This tool retrieves all options in a Meta targeting category for exploration and discovery. Returns: - List of all targeting options in the category - IDs, names, and audience sizes - Useful for discovering targeting options when user doesn't have a specific query When to use this tool: - "Show me all available behaviors for Meta targeting" - "What interest categories are available?" - "Browse demographi
connect_revenue_source
ChatGPTRegisters a revenue source (GA4, Shopify, Stripe, or Klaviyo) and builds a 90-day revenue baseline for attribution. IMPORTANT — say this to the user: AdAgnt does not yet pull orders from these providers. The revenue stream is MODELLED from your campaign conversions and the average order value you supply, so true ROAS is a calibrated estimate, not measured revenue. Live order ingestion is not implemented. Never describe the result as real or verified revenue. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
create_ab_test
ChatGPTCreates a controlled creative A/B test inside a campaign: variant A vs variant B (headlines/descriptions), tracked on a chosen metric until statistical significance. ⚠️ Write tool — creates real ad variants; call once. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
create_ad
ChatGPTCreate a new Responsive Search Ad (RSA) in an existing ad group. Useful for A/B testing different ad copy or adding variation to an ad group. Parameters: - ad_group_id: The ad group to add the ad to (REQUIRED) - headlines: 3-15 headlines (REQUIRED, max 30 chars each) - descriptions: 2-4 descriptions (REQUIRED, max 90 chars each) - final_urls: Landing page URLs (REQUIRED, at least one) - path1: Optional display path 1 (max 15 chars) - path2: Optional display path 2 (max 15 chars) - customer ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_demandgen_campaign
ChatGPT🔄 LONG-RUNNING TOOL: Creates a Demand Gen campaign across ALL Google channels — YouTube, Discover, Gmail, Display, and Maps. Emits MCP progress updates during creation (typically 10-20 seconds). ⚠️ CRITICAL WARNING ⚠️ - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying 🌐 Demand Gen Campaign Channels (ALL enabled by default): ✅ YouTube In-Feed (search results & related ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_meta_carousel_campaign
ChatGPTUser wants to create a Meta (Facebook/Instagram) carousel ad campaign with multiple images. REQUIRED: You MUST call select_meta_campaign_type first and complete ALL phases it describes (audience targeting research via search_meta_targeting/browse_meta_targeting, asset discovery via discover_meta_assets, and user approval) BEFORE calling this tool. IMPORTANT: This tool creates REAL campaigns that will spend money once activated. Campaign is created in PAUSED status for review. DO NOT U ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
create_meta_dco_ad
ChatGPTUser wants Meta to automatically TEST MULTIPLE IMAGES and find the best combination. This is Dynamic Creative Optimization (DCO). Meta tests all combinations of images × headlines × primary texts and optimizes delivery automatically. USE THIS TOOL when the user says ANY of these: - "test these images" / "test multiple images" - "let Meta find the winner" / "let Meta optimize" - "Dynamic Creative" / "DCO" - "which image performs best" - Provides multiple images and wants Meta to choose the best ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_meta_image_campaign
ChatGPTUser wants to create a Meta (Facebook/Instagram) single-image ad campaign. REQUIRED: You MUST call select_meta_campaign_type first and complete ALL phases it describes (audience targeting research via search_meta_targeting/browse_meta_targeting, asset discovery via discover_meta_assets, and user approval) BEFORE calling this tool. IMPORTANT: This tool creates REAL campaigns that will spend money once activated. Campaign is created in PAUSED status for review. DO NOT USE for video ads ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
create_meta_video_campaign
ChatGPTUser wants to create a Meta (Facebook/Instagram) video ad campaign. REQUIRED: You MUST call select_meta_campaign_type first and complete ALL phases it describes (audience targeting research via search_meta_targeting/browse_meta_targeting, asset discovery via discover_meta_assets, and user approval) BEFORE calling this tool. IMPORTANT: This tool creates REAL campaigns that will spend money once activated. Campaign is created in PAUSED status for review. DO NOT USE for image ads - use ` ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
create_monitor
ChatGPTCreate a monitoring alert for your campaigns. Checked daily. Supported metrics: roas, ctr, cpc, cpa, cpm, cpv, spend, conversions, impressions, clicks, cost_per_lead, conversion_rate, budget_utilization, video_views, engagement_rate Operators: less_than, greater_than, less_than_or_equal, greater_than_or_equal, changes_by Advanced features: - Multiple conditions with AND/OR: Use conditions array with conditions_logic: "AND" or "OR" - Consecutive days: Add consecutive ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent` (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_pmax_campaign
ChatGPT🔄 LONG-RUNNING TOOL: Creates a Google Performance Max campaign with validated images. Emits MCP progress updates during authentication, asset upload, and campaign creation (typically 15-30 seconds). Progress stages: validate → commit. ⚠️ CRITICAL PREREQUISITES: 1. MUST have valid asset_bundle_id from validate_and_prepare_assets tool OR existing_image_ids from discover_existing_assets 2. MUST have all campaign text details from user 3. Creates REAL campaigns that cost REAL money 4. Call ONLY ONC ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_search_campaign
ChatGPT🔄 LONG-RUNNING TOOL: Creates a Google Ads Search campaign with full structure. Emits MCP progress updates during authentication and campaign creation (typically 5-10 seconds). Progress stages: validate → commit. ⚠️ CRITICAL WARNING ⚠️ - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying ⚠️ GOOGLE ADS POLICY NOTE: Avoid keywords related to health conditions, medical treatme ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_tiktok_campaign
ChatGPTUser wants to create a TikTok ad campaign with IMAGES, Spark Ads, or Carousel ads (not video). LONG-RUNNING TOOL: Creates a TikTok In-Feed ad campaign with image creatives, Spark Ads (boost organic posts), or Carousel ads. Supported creative types: - Standard Image Ads: Provide asset_bundle_id or existing_image_ids - Spark Ads: Provide tiktok_item_id to boost an existing organic TikTok post as a paid ad - Carousel Ads: First call create_tiktok_carousel_card to get a card_id, then provide card_ ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_tiktok_carousel_card
ChatGPTCreate a carousel card from multiple images for TikTok carousel ads. IMPORTANT: Call this tool BEFORE creating a carousel campaign or carousel ad. Carousel ads show 2-10 swipeable image cards. Each card can have its own ad text and landing page. Workflow for carousel campaigns: 1. Get TikTok image IDs: - Option A: upload_tiktok_images with public image URLs (uploads to TikTok, returns image_ids) - Option B: discover_tiktok_assets to find existing images in your library 2. Call this tool ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_tiktok_video_campaign
ChatGPTUser wants to create a TikTok ad campaign with a VIDEO (not images). Also supports Spark Ads and Carousel with video. LONG-RUNNING TOOL: Creates a TikTok In-Feed video ad campaign. Also supports Spark Ads (boost organic posts) and Carousel ads. Additional creative types supported: - Spark Ads: Provide tiktok_item_id to boost an existing organic TikTok post as a paid ad - Carousel Ads: First call create_tiktok_carousel_card to get a card_id, then provide card_id + card_type here - App Promotion ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
create_youtube_campaign
ChatGPT🔄 LONG-RUNNING TOOL: Creates a YouTube Video campaign using Google Ads Demand Gen format with YouTube-only placements. Emits MCP progress updates during authentication and campaign creation (typically 10-20 seconds). Progress stages: validate → commit. ⚠️ CRITICAL WARNING ⚠️ - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying ⚠️ CRITICAL PREREQUISITE: - MUST validate the Y ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
delete_monitor
ChatGPTDelete a monitoring alert by its task ID. When to use: - "Delete my ROAS monitor" - "Remove this alert" - "Stop monitoring my campaign" Get the task_id from list_monitors first. Accepts task_id, alert_id, or monitor_id — all treated the same. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
detect_meta_creative_fatigue
ChatGPTUser asks about creative fatigue, ad refresh timing, frequency management, declining CTR, when to replace ads, or audience exhaustion on Meta/Facebook/Instagram. This tool analyzes all Meta Ads creatives for fatigue indicators using frequency-CTR correlation analysis and provides a fatigue score (0-100) for each ad. Returns: - Fatigue score (0-100) for each ad based on weighted factors - Severely fatigued ads (score ≥80) - immediate action required - At-risk ads (score 50-79) - plan refresh wi
detect_tiktok_creative_fatigue
ChatGPTDetect TikTok creative fatigue using video-specific metrics (hook rate decline, completion rate decline, engagement decline, frequency). Returns: fatigue score (0-100) per ad, severely fatigued / at-risk / healthy counts, refresh schedule, recommendations. TikTok-specific: Hook rate (first 2 seconds) is the primary fatigue signal (35% weight). When to use: "Are my TikTok ads fatigued?", "TikTok creative refresh", "Which TikTok videos need replacing?" Parameters: - lookback_days: default 30 -
discover_existing_assets
ChatGPT🔍 Discover existing assets in the Google Ads account (images, sitelinks, callouts, structured snippets). Phase 0: Asset Discovery - Read-only tool, safe to call anytime.
discover_meta_assets
ChatGPTUser wants to browse existing images in their Meta Ad Library for reuse in new campaigns. This tool retrieves existing images that have been uploaded to Meta's Ad Library, allowing users to reuse them in new campaigns without uploading again. Returns: - List of existing images with their hashes - Image dimensions and thumbnails - Created timestamps - Instructions for using images in campaigns When to use this tool: - "Show me my existing Meta ad images" - "What images do I already have in Met
discover_tiktok_assets
ChatGPTUser wants to reuse existing TikTok images instead of uploading new ones. Browse existing images in TikTok Asset Library for reuse in campaigns. IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Returns: - List of all images in your TikTok Asset Library - Image IDs, dimensions, file sizes, upload dates - Usage instructions for reusing assets Parameters: - advertiser_id: Optional (uses connected account if omitted) Execution time: 2-5 seconds (direct backend API cal
duplicate_meta_campaign
ChatGPTUser wants to duplicate/copy an existing Meta campaign with all its ad sets, ads, and settings. IMPORTANT: This creates a NEW real campaign in Meta Ads. The duplicate starts in PAUSED status by default for review. This tool copies the entire campaign structure including: - Campaign settings (objective, budget strategy) - All ad sets (targeting, budgets, schedules) - All ads (creatives, text, CTAs) Returns: - Original and new campaign IDs - New campaign status - Ads Manager URL for the new cam ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
explain_meta_anomaly
ChatGPTUser asks why Meta/Facebook/Instagram performance dropped or changed, what happened to their ROAS/CTR/CPM, or wants to understand why a metric changed during a specific period. This tool analyzes why a specific metric changed during a specified period by comparing it to historical baselines and identifying contributing factors. It detects Meta-specific causes including creative fatigue, audience saturation, placement mix shifts, and auction competition. Returns: - Current metric value vs histo
explain_performance_anomaly
ChatGPTExplain why a performance metric changed using statistical analysis and historical context. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Uses statistical analysis only (no ML models). 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 4): - Explains why metrics changed (ROAS, CTR, CPC, conversions, conversion rate) - Compares current period to historical averages (30/60/90-day) - Identifies contributing factors with severity levels - Detects campai
explain_tiktok_anomaly
ChatGPTExplain why a TikTok metric changed during a specific period. Uses statistical analysis and factor detection. Supported metrics: roas, ctr, cpc, cpm, conversions, conversion_rate, hook_rate, video_completion_rate, engagement_rate Returns: current value vs historical averages, deviation %, contributing factors (CPM change, CTR change, hook rate change, engagement change, campaign structure changes), assessment, recommendations. When to use: "Why did my TikTok CTR drop?", "Explain TikTok perfor
generate_report_now
ChatGPTGenerate an immediate performance report and deliver it now. What it does: - Generates a comprehensive PDF performance report immediately - Fetches latest campaign data from all connected platforms - Includes AI-powered recommendations and insights - Delivers via email, Slack, or webhook When to use: - "Get me my campaign performance report" - "Send me a detailed analysis of all my accounts" - "Generate a report and email it to me" - "I need my performance data now" - "Prepare a report ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
get_ab_test_results
ChatGPTReturns per-variant metrics, two-proportion z-test significance, confidence level, and a verdict: winner found, keep collecting, or no meaningful difference.
get_benchmark_context
ChatGPTGet industry benchmark context for AI-powered recommendations. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Generates contextual benchmark data for the user's business - Combines business profile with industry benchmarks - Provides recommended ROAS targets based on vertical - Returns formatted context for AI prompts Returns benchmark context: - Business vertical and size context - Indust
get_business_profile
ChatGPTGet the user's business profile for contextual recommendations. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Retrieves the user's saved business profile - Returns business vertical, size, goals, target audience - Provides context for more relevant recommendations - Shows profile source (user-set, inferred, or none) Returns business context: - Business vertical (retail, services, technolo
get_campaign_performance
ChatGPTAnalyze Google Ads campaign performance with comprehensive insights and recommendations. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Returns detailed analysis: - Campaign structure and ad group organization - Keyword performance with quality scores and match types - Ad group performance breakdown - Performance metrics (CTR, conversions, CPC, cost, ROAS) - Optimization recommendations with actionable insights - Performance trends (last 7 days) **Parameter
get_campaign_structure
ChatGPTGet campaign structure with ad groups, keywords, ads, and extensions. Supports pagination for large campaigns. This tool retrieves READ-ONLY data. Safe to call multiple times. Returns campaign hierarchy (paginated by ad groups): - Campaign details (name, status, budget, bidding strategy) - Ad groups with their settings (paginated — default 5 per page) - Keywords per ad group (including match types, bids, status) - Ads per ad group (including RSA headlines/descriptions, ad strength) - Negat
get_campaign_targeting
ChatGPTGet location/geo targeting for a Google Ads campaign. This tool retrieves READ-ONLY data. Safe to call multiple times. Returns location targeting details: - Targeted locations (cities, states, countries, metros the campaign targets) - Excluded locations (negative geo targets) - Bid modifiers per location (if set) - Location type (Country, State, City, Metro, etc.) - Summary counts (targeted, excluded, total) Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaign
get_connections_status
ChatGPTView connected ad accounts and OAuth connections. Shows all connected ad platforms (Google Ads, TikTok Ads, Meta Ads) with: - Connection status and account details - Primary account indicator - Option to switch primary account - Quick links to connect new platforms Use this tool when user asks about: - "how many accounts do I have" / "how many ad accounts" - "what accounts are connected" / "connected accounts" - "which account am I using" / "current account" - "show my connection
get_cross_platform_benchmarks
ChatGPTCompares your CPC, CTR, CVR, CPA and ROAS per platform against industry benchmark bands for your vertical, and flags metrics outside the healthy band with concrete fix suggestions.
get_meta_ad_creatives
ChatGPTUser wants to see their Meta ad creatives, ad copy, media URLs, or creative performance. Returns ad-level data including full creative content and media URLs alongside performance metrics. When to use this tool: - "Show me my Meta ad creatives" - "What ads are running and how are they performing?" - "Show me the headlines and images for my ads" - "Which ad creatives are performing best?" - "What's the creative content for campaign X?" - "Show me ad performance with creative details" - "Get me
get_meta_audience_insights
ChatGPTUser asks about audience demographics, which placements perform best, device breakdown, or targeting optimization for Meta ads. This tool provides audience and placement analysis for Meta campaigns. Returns: - Age group performance (18-24, 25-34, 35-44, 45-54, 55-64, 65+) - Gender performance breakdown - Placement breakdown (Facebook Feed, Instagram Feed, Stories, Reels, Messenger) - Device breakdown (Mobile, Desktop, Tablet) - Best performing audience segments - Targeting recommendations Whe
get_meta_campaign_details
ChatGPTUser wants to see detailed information about a specific Meta campaign, including its full structure (ad sets, ads, targeting, budgets). This tool retrieves comprehensive details about a single campaign. With include_hierarchy=true, it shows the complete campaign tree: Campaign - Ad Sets - Ads. Returns: - Campaign settings (name, status, objective, budget, bid strategy, schedule) - Performance summary (impressions, clicks, spend, reach, CTR, CPC) - Ads Manager URL - When include_hierarchy=tru
get_meta_campaign_performance
ChatGPTUser asks about Meta/Facebook/Instagram ad performance, campaign metrics, ROAS, spend analysis, or wants to understand how their Meta ads are performing. This tool retrieves comprehensive campaign performance metrics from Meta Ads. Returns: - Account summary (total spend, impressions, reach, conversions, ROAS) - Campaign breakdown with status and objectives - Top performing campaigns by ROAS - Meta-specific metrics (reach, frequency, reach/impressions ratio) - Optimization recommendations Whe
get_meta_lead_form_submissions
ChatGPTUser wants to see lead submissions, lead data, or leads collected from a Meta lead form. Retrieves individual lead submissions for a specific lead form, including contact details and associated ad/campaign information. When to use this tool: - "Show me the leads from form X" - "Get my lead form submissions" - "Download my Meta leads" - "Show lead data from my campaign" - "How many leads did I get?" Returns per lead: - Submission timestamp - Field data (name, email, phone, etc. — varies by for
get_monitor_history
ChatGPTShow trigger history for a monitoring alert. What it does: - Shows when the monitor triggered, what condition was met, and what value caused it - Shows which campaigns triggered and whether notifications were sent - Useful for understanding monitor behavior and verifying it works correctly When to use: - "Show history for my CPA monitor" - "When did this alert last trigger?" - "What campaigns triggered my ROAS alert?" Requires the monitor's alert_id (get from list_monitors).
get_pmax_audience_signals
ChatGPTGet current audience signals for a Performance Max campaign. Returns audience signal resource names and associated audience resource references. Use when: - User wants to see what audience signals are on their PMax campaign - Before adding new signals - To get resource_name for removal Parameters: - campaign_id: The PMax campaign ID Execution time: 1-2 seconds
get_pmax_search_themes
ChatGPTGet current search themes for a Performance Max campaign. Returns each search theme's text and approval_status (APPROVED, LIMITED, DISAPPROVED, UNDER_REVIEW). Use when: - User wants to see what search themes are set on their PMax campaign - Before adding new themes (to check current count — max 50) - To verify theme approval status after adding Parameters: - campaign_id: The PMax campaign ID (get from list_campaigns) Execution time: 1-2 seconds
get_research_status
ChatGPTCheck the status of a research job. What it does: - Shows current progress percentage - Indicates if job is pending, in progress, completed, or failed - Provides summary when complete When to use: - "Check on my research" - "Is my analysis done?" - "What's the status of job [ID]?"
get_revenue_attribution
ChatGPTEstimates revenue per campaign and per platform as conversions × the saved average order value, alongside spend, the resulting ROAS estimate, and the difference from platform-reported conversion value. The revenue is modelled from the ad platforms' own conversion counts, not pulled from any store or analytics provider; present it as an estimate.
get_strategy
ChatGPTReturns your server-persisted strategy document (business profile, target audience, competitive landscape, campaign strategy, brand voice, performance history). Works from any AI client — no file system needed. Read this before creating campaigns or writing ad copy.
get_tiktok_ad_performance
ChatGPTGet TikTok ad-level performance with creative details, video metrics, and engagement. Returns: per-ad metrics (spend, CTR, ROAS, hook rate, completion rate, engagement rate), creative metadata (ad name, format, video ID), and top/underperforming ads. When to use: "Show my TikTok ad performance", "Which TikTok ads are best?", "TikTok creative performance" Parameters: - lookback_days: default 30 - limit: max ads to return (1-50, default 20) - offset: pagination offset
get_tiktok_audience_insights
ChatGPTAnalyze TikTok audience segment performance by age, gender, and combined demographics. Returns: age group breakdown (AGE_18_24 to AGE_55_100), gender breakdown, best/worst segments, saturation detection, targeting recommendations. Note: TikTok audience API doesn't return conversion values per demographic — segments ranked by CPA or CTR. When to use: "TikTok audience performance", "Which age group works best on TikTok?", "TikTok demographic breakdown" Parameters: - breakdown_type: 'age', 'gen
get_tiktok_campaign_details
ChatGPTGet detailed information about a specific TikTok campaign including status, budget, objective, and timestamps.
get_tiktok_campaign_performance
ChatGPTGet TikTok campaign performance metrics including TikTok-specific video and engagement data. Returns: account summary (spend, impressions, reach, conversions, ROAS), campaign breakdown with video metrics (hook rate, completion rate), engagement metrics (likes, shares, comments), and recommendations. When to use: "How are my TikTok campaigns performing?", "Show TikTok performance", "TikTok ROAS" Parameters: - lookback_days: 7, 14, 30 (default), 60, or 90 - start_date/end_date: Optional YYYY-MM
get_true_roas
ChatGPTPer-campaign ROAS computed from the registered revenue source (revenue ÷ spend), ranked worst-to-best, with a verdict per campaign: scale, keep, fix, or kill. IMPORTANT — the revenue side is MODELLED from campaign conversions and the average order value on the source, not ingested from the provider. Present the verdicts as estimates and say what they rest on. Do not claim they are more real than platform-reported conversion value; they derive from the same conversions.
get_usage_status
ChatGPTGet your current usage status with interactive quota widget. This tool shows your tool call usage for the current billing period and provides upgrade options if needed. Returns: - Current usage (calls used / limit) - Subscription tier (Free, Plus, Pro, Enterprise) - Days until quota reset - Upgrade options with pricing Use this tool when: - User asks "how many calls do I have left?" - User asks about their subscription or quota - User wants to check their usage - User asks about upgra
help_user_upload
ChatGPTShow user instructions for uploading images to postimages.org for Performance Max campaigns. ⚠️ CALL THIS FIRST when user wants to create a PMax campaign! ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
infer_business_profile
ChatGPTAutomatically infer business profile from campaign data using AI analysis. ⚠️ IMPORTANT: This tool ANALYZES data but may SAVE a profile if confidence is high. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Analyzes campaign names, keywords, and ad copy - Uses Claude AI to classify business type - Infers business vertical, size, goals, and audience - Returns confidence level (high, medium, low) - Auto-saves if confidence is HIGH, asks confirmation for LOW **Inference Proc ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
list_campaign_extensions
ChatGPTList all extensions (sitelinks, callouts, structured snippets) for a campaign. Returns a summary of all extension types configured on the campaign. Parameters: - campaign_id: The campaign ID (REQUIRED). Get from list_campaigns. - customer_id: Optional Google Ads customer ID Returns: - Sitelinks: Clickable links with text, URL, and descriptions - Callouts: Non-clickable text highlights - Structured Snippets: Header + values combinations Execution time: 1-2 seconds (read-only) **W
list_campaigns
ChatGPTList all Google Ads campaigns for the connected account. ⚠️ CRITICAL: Call this tool BEFORE creating new campaigns to ask the user: "Would you like to create a new campaign or update an existing one?" This tool retrieves READ-ONLY data. Safe to call multiple times. Returns: - List of all campaigns with IDs, names, status, type, budget - 30-day performance metrics for each campaign (impressions, clicks, cost, conversions) - Total campaign count Parameters: - status_filter: ENABLED, PA
list_connected_accounts
ChatGPTList all connected ad accounts across platforms. Returns account IDs, names, and platforms for all active accounts. Use this at the start of every conversation to know which accounts are available. CRITICAL for multi-account users (agencies): - Always call this first to discover available accounts - Use the returned account IDs when calling any platform tool - If user mentions a business name, match it to an account from this list Returns for each account: - platform: google_ads, meta_ads, ti
list_meta_ad_sets
ChatGPTUser wants to see the ad sets within a specific Meta campaign, including their targeting, budgets, and optimization settings. This tool retrieves ad sets for a given campaign with their status, budget, optimization goal, and billing event. Returns: - Ad set list with name, ID, status, budget, optimization goal, billing event - Next step guidance for editing ad sets or viewing ads When to use this tool: - "Show me the ad sets in campaign [ID]" - "What ad sets are running in my campaign?" - "Li
list_meta_ads
ChatGPTUser wants to see the individual ads within a specific Meta ad set, including their status and creative information. This tool retrieves ads for a given ad set with their name, status, and creative ID. Returns: - Ad list with name, ID, status, creative ID - Next step guidance for editing ads When to use this tool: - "Show me the ads in ad set [ID]" - "What ads are running in this ad set?" - "List the individual ads" - "Which ads are active/paused?" - Before using update_meta_ad when user do
list_meta_campaigns
ChatGPTUser wants to see their existing Meta/Facebook/Instagram campaigns, browse campaign structure, or find a campaign ID. This tool retrieves all campaigns in the connected Meta ad account with their status, objective, budget, and creation date. Returns: - Campaign list with name, ID, status, objective, budget - Status summary (how many ACTIVE, PAUSED, etc.) - Next step guidance for drilling into campaign details When to use this tool: - "Show me my Meta campaigns" - "List my Facebook ad campaign
list_meta_custom_audiences
ChatGPTUser wants to browse, list, or select Custom Audiences for targeting — DB lists, lookalike audiences, remarketing segments, website visitors, engagement audiences. Returns all Custom Audiences for the ad account with ID, name, type (subtype), approximate size, and delivery status. Workflow: 1. Call this tool to discover available custom audiences 2. Use audience IDs with campaign creation tools via custom_audiences parameter 3. Optionally use excluded_custom_audiences to exclude specific a
list_meta_instagram_accounts
ChatGPTUser wants to run ads on Instagram, asks about Instagram accounts, or you need to find the instagram_account_id before campaign creation. Returns Instagram accounts that are: 1. Authorized for ads on the ad account (from Business Manager) 2. Linked to Facebook Pages (from Page settings) Workflow: 1. Call this tool to discover available Instagram accounts 2. Use the Instagram account ID with campaign creation tools via instagram_account_id parameter When to use: - Before any campaign creatio
list_meta_lead_forms
ChatGPTUser wants to see their Meta lead generation forms, list lead forms, or find a lead form ID. Lists all lead generation forms for a Facebook Page associated with the ad account. When to use this tool: - "Show me my Meta lead forms" - "List my Facebook lead generation forms" - "What lead forms do I have?" - "Find my lead form ID" - "Show lead forms for my page" Returns per form: - Form name, status (ACTIVE/ARCHIVED), leads count - Creation date - Form questions (field names and types) - Form ID
list_meta_pixels
ChatGPTUser wants conversion tracking, asks about Meta Pixels, or before creating OUTCOME_SALES campaigns. Returns all Meta Pixels for the ad account with their status and last fired time. Workflow: 1. Call this tool to discover available pixels 2. Use the pixel ID with campaign creation tools via pixel_id parameter 3. Optionally specify pixel_event_name (default: PURCHASE) When to use: - Before creating OUTCOME_SALES campaigns (pixel_id is required for conversion tracking) - When user asks "whi
list_monitors
ChatGPTList all your monitoring alerts. What it does: - Shows all active and paused monitors - Displays conditions, trigger counts, and status - Provides alert IDs for management When to use: - "Show my monitoring alerts" - "What am I monitoring?" - "List all my alerts"
list_pending_actions
ChatGPTList auto-actions waiting for your approval. What it does: - Shows pending campaign actions (pause, budget changes) queued by your monitors - Displays before/after state for each action - Shows expiry time (actions expire after 48 hours) When to use: - "Show my pending actions" - "What actions need approval?" - "Any pending budget changes?" After reviewing, use manage_action to approve or reject each action.
list_revenue_sources
ChatGPTLists the revenue assumptions saved for this user: provider label, average order value and when they were set. No provider is contacted.
list_scheduled_tasks
ChatGPTList all your scheduled automation tasks. What it does: - Shows all scheduled briefs, monitors, and research jobs - Displays status, schedule, and last execution - Provides task IDs for management When to use: - "Show my scheduled tasks" - "What automations do I have running?" - "List my scheduled reports"
list_tiktok_ad_groups
ChatGPTList TikTok ad groups. Optionally filter by campaign ID.
list_tiktok_ads
ChatGPTList TikTok ads. Optionally filter by ad group ID or campaign ID.
list_tiktok_campaigns
ChatGPTList all TikTok campaigns with their status, objective, and budget.
manage_action
ChatGPTApprove or reject a pending auto-action. What it does: - Approves a pending action → executes it immediately on the ad platform - Rejects a pending action → cancels it, no changes made When to use: - "Approve action [action_id]" - "Reject action [action_id]" - "Approve all pending actions" (call multiple times) IMPORTANT: - Approved actions are EXECUTED IMMEDIATELY (campaign paused, budget changed) - This is irreversible in the moment — verify before approving - Actions expire aft ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
manage_scheduled_task
ChatGPTManage a scheduled task — pause, resume, or delete. Works for briefs, monitors, and all task types. What it does: - Pause: Temporarily stop a scheduled task or monitoring alert - Resume: Restart a paused task or monitor - Delete: Permanently remove a task or monitor When to use: - "Pause my daily brief" - "Resume my performance reports" - "Delete the weekly summary task" - "Pause this monitoring alert" Required parameters: - task_id: The ID of the task (get from list_scheduled_ ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent` (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
optimize_budget_allocation
ChatGPTOptimize budget allocation across campaigns using linear programming to maximize conversions. ⚠️ IMPORTANT: This tool retrieves READ-ONLY optimization recommendations. Safe to call multiple times. Does NOT automatically change budgets. 🎯 What This Tool Does (Performance Agent - Phase 1): - Uses linear programming to optimize budget distribution - Maximizes total conversions while respecting constraints - Provides current vs optimized allocation comparison - Categorizes campaigns into actio
optimize_cross_platform_budget
ChatGPTBuilds a budget reallocation plan across ALL connected ad platforms (not just within one), moving spend toward the highest marginal ROAS. With apply=false (default) returns the plan and files it to the approval queue; apply=true executes immediately. ⚠️ apply=true changes real budgets. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
optimize_meta_budget
ChatGPTUser asks about Meta/Facebook/Instagram budget optimization, reallocating ad spend, maximizing conversions with their budget, or wants data-driven budget recommendations. This tool uses linear programming (scipy.optimize) to find the optimal budget allocation across Meta Ads campaigns or ad sets to maximize conversions while respecting constraints. Returns: - Optimal budget allocation for each campaign/ad set - Expected conversion lift from reallocation - Campaigns to scale up (high ROAS perfo ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
optimize_meta_placements
ChatGPTUser asks about Meta/Facebook/Instagram placement performance, which placements work best, Feed vs Stories vs Reels, should they use Audience Network, or wants placement optimization recommendations. This tool analyzes placement-level performance (Feed, Stories, Reels, Audience Network, Messenger, etc.) and provides optimization recommendations including budget reallocation suggestions. Returns: - Placement ROAS ranking (sorted by performance) - Placements categorized as SCALE/MAINTAIN/REDUCE/ ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
optimize_tiktok_budget
ChatGPTOptimize TikTok budget allocation using linear programming to maximize conversions. Returns: current vs optimized allocation, expected conversion lift, campaigns to scale/reduce/pause/maintain. When to use: "Optimize my TikTok budget", "How should I allocate TikTok spend?", "TikTok budget recommendations" Parameters: - total_budget: REQUIRED — total monthly budget to allocate - target_roas: optional override (default uses historical avg or 2.0x) - max_change_percentage: 0.3 (conservative) to ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
pause_ad
ChatGPTPause an ad to stop it from showing. This is REVERSIBLE using resume_ad. Parameters: - ad_id: The ad ID to pause (REQUIRED) - ad_group_id: The ad group ID (REQUIRED) - customer_id: Optional Execution time: 1-2 seconds When to use: - User says "pause this ad", "stop this ad" - User wants to A/B test by pausing one ad - Ad is underperforming and needs a break - Making changes before re-enabling Example: User: "Pause my underperforming ad" Agent: 1. Uses get_campaign_structure ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
pause_campaign
ChatGPTQuickly pause a running campaign. Pausing a campaign stops all ads from showing immediately. This is REVERSIBLE using resume_campaign. Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - customer_id: Optional (uses connected account if omitted) Execution time: 1-2 seconds Returns: - Campaign name - Before status (e.g., ENABLED) - After status (PAUSED) - Confirmation message When to use: - User says "pause the campaign", "stop the ads", "turn it ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
pause_meta_campaign
ChatGPTUser wants to pause a running Meta campaign. IMPORTANT: Pausing a campaign stops all ad delivery immediately. No more budget will be spent until resumed. Returns: - Confirmation that campaign is paused - Campaign details - Ads Manager URL When to use this tool: - "Pause my Meta campaign" - "Stop my Facebook ads" - "Pause campaign 123456" - "Turn off my Instagram campaign" Parameters: - campaign_id: The Meta Campaign ID to pause (required) Execution time: 2-5 seconds Effect: Campaign status ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
pause_tiktok_ad
ChatGPTSet one TikTok ad's status to DISABLE (paused). Requires the ad_id and status "DISABLE". Returns the ad id, its name and the status that was set. Confirm the exact ad with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
pause_tiktok_ad_group
ChatGPTSet one TikTok ad group's status to DISABLE (paused). Requires the adgroup_id and status "DISABLE". Returns the ad group id, its name and the status that was set. Confirm the exact ad group with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
pause_tiktok_campaign
ChatGPTSet one TikTok campaign's status to DISABLE (paused). Requires the campaign_id and status "DISABLE". Returns the campaign id, its name and the status that was set. Confirm the exact campaign with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
promote_ab_test_winner
ChatGPTConcludes an A/B test: pauses the losing variant, keeps the winner live, and records the learning to strategy memory. Refuses if significance hasn't been reached (override with force). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
reddit_analyze_wasted_spend
ChatGPTFind where a Reddit account is leaking money: ad groups and communities with spend but no conversions, ads with clicks that never convert, and budgets pinned to underperforming targeting. Read-only — it recommends changes and never makes them.
reddit_create_ad
ChatGPTCreate a Reddit ad (promoted post) inside an ad group. Reddit ads read as posts, so the headline should sound like a person, not a banner. The ad is created PAUSED for review. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_create_ad_group
ChatGPTCreate an ad group inside a Reddit campaign. The ad group holds the bid, the budget, and all targeting. It is created PAUSED — add targeting and at least one ad, then resume it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_create_campaign
ChatGPTCreate a Reddit campaign. The campaign is created PAUSED so you can add ad groups, targeting, and creative before it serves — resume it with reddit_resume_campaign when the structure is reviewed. Reddit objectives: CLICKS (traffic), IMPRESSIONS (reach/awareness), CONVERSIONS, APP_INSTALLS, VIDEO_VIEWABLE_IMPRESSIONS, CATALOG_SALES, LEAD_GENERATION. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_get_account
ChatGPTGet details and settings for one Reddit ad account: name, currency, time zone, status, and whether it is your primary account.
reddit_get_ad
ChatGPTGet one Reddit ad in full: headline, body, destination URL, call to action, format, thumbnail, and the post it promotes.
reddit_get_ad_group
ChatGPTGet one Reddit ad group in full: bid strategy, budget, schedule, targeting (communities, interests, geo, devices), and its ads.
reddit_get_ad_performance
ChatGPTGet per-ad Reddit performance for a date range, so you can see which creative is actually earning the clicks rather than which campaign is spending.
reddit_get_campaign
ChatGPTGet one Reddit campaign in full: objective, status, budgets, schedule, funding instrument, and its ad groups.
reddit_get_campaign_performance
ChatGPTGet Reddit campaign performance for a date range: impressions, clicks, spend, CTR, CPC, conversions, and CPA. Use this to answer 'how are my Reddit campaigns doing'.
reddit_list_accounts
ChatGPTList the Reddit ad accounts connected to your AdAgnt user. Returns each account's ID, name, currency, and status. Use the returned account_id in other Reddit tools when you manage more than one account.
reddit_list_ad_groups
ChatGPTList ad groups in a Reddit campaign (or across the account) with bid, budget, schedule, and status.
reddit_list_ads
ChatGPTList Reddit ads (promoted posts) in an ad group or across the account, with headline, destination URL, format, and status.
reddit_list_audiences
ChatGPTList the custom audiences available in a Reddit ad account (customer lists, pixel-based retargeting, and lookalikes) with their size and readiness.
reddit_list_campaigns
ChatGPTList campaigns in a Reddit ad account with their objective, status, budget, and schedule. Filter by status to see only what is live.
reddit_list_funding_instruments
ChatGPTList the payment methods (funding instruments) attached to a Reddit ad account. A campaign must reference a funding instrument before it can spend, so check this before creating one.
reddit_optimize_budget
ChatGPTRebalance daily budgets across a Reddit account's campaigns toward the best cost per result, keeping total daily spend unchanged unless you say otherwise. Show the user the full before/after table and get approval before calling — this moves real money between campaigns. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_pause_ad
ChatGPTPause one Reddit ad. It stops delivering immediately; its ad group and sibling ads keep running. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_pause_ad_group
ChatGPTPause one Reddit ad group. Its ads stop delivering immediately; the rest of the campaign is unaffected. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_pause_campaign
ChatGPTPause a Reddit campaign. Delivery and spend stop immediately across all of its ad groups; nothing is deleted and the campaign can be resumed later. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_resume_ad
ChatGPTResume a paused Reddit ad so it delivers again inside its ad group. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_resume_ad_group
ChatGPTResume a paused Reddit ad group so its ads deliver again against the current bid and budget. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_resume_campaign
ChatGPTResume a paused Reddit campaign. Delivery and spend restart against its current budget, so confirm the budget is what the user expects before resuming. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_search_communities
ChatGPTSearch Reddit communities (subreddits) available for targeting, with subscriber counts and whether each accepts ads. Community targeting is what makes Reddit different from other platforms — target the subreddits where the user's customers already talk about the problem.
reddit_set_ad_group_bid
ChatGPTChange the bid on a Reddit ad group. Raising a bid increases cost per result immediately, so state the current and proposed bid to the user and get explicit approval before calling. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_set_ad_group_schedule
ChatGPTSet the flight dates for a Reddit ad group. Ending a flight stops delivery at the end date; starting one in the past starts delivery immediately. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_set_device_targeting
ChatGPTSet which devices and operating systems a Reddit ad group delivers on. This REPLACES the existing device list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_set_geo_targeting
ChatGPTSet the countries, regions, or metro areas a Reddit ad group targets. This REPLACES the existing geo list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_set_interest_targeting
ChatGPTSet the interest categories a Reddit ad group targets. This REPLACES the existing interest list. Interests reach beyond specific communities, so expect wider reach and lower precision than community targeting. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_update_ad
ChatGPTChange a Reddit ad's headline, body, destination URL, or call to action. Only the fields you pass are changed. Editing a live ad resets its learning, so prefer creating a new ad for a genuinely different message. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_update_ad_group
ChatGPTChange a Reddit ad group's name, budget, or schedule. Only the fields you pass are changed. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
reddit_update_campaign
ChatGPTChange a Reddit campaign's name, budgets, or schedule. Only the fields you pass are changed; everything else is left alone. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
remove_keywords
ChatGPTRemove keywords from an ad group. Parameters: - ad_group_id: The ad group containing the keywords (REQUIRED) - keyword_ids: List of keyword IDs to remove (REQUIRED) - customer_id: Optional Get keyword_ids from: Use get_campaign_structure to see all keywords with their IDs. WARNING: This is PERMANENT and IRREVERSIBLE. Keywords removed cannot be recovered. Always confirm with the user first. Execution time: 2-4 seconds Example: User: "Remove the underperforming keywords" A ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
remove_negative_keywords
ChatGPTRemove negative keywords from a campaign. ⚠️ WARNING: This is PERMANENT and IRREVERSIBLE. Once removed, the negative keywords cannot be recovered. Parameters: - campaign_id: The campaign ID (REQUIRED) - keyword_ids: List of negative keyword IDs to remove (REQUIRED) - customer_id: Optional Get keyword IDs from: Use get_campaign_structure to see all campaign negative keywords with their IDs. Look for the "Campaign Negative Keywords" section. When to use: - Remove accidentally ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
remove_pmax_audience_signal
ChatGPTRemove a specific audience signal from a Performance Max campaign. Use get_pmax_audience_signals first to get the signal_resource_name. Parameters: - campaign_id: The PMax campaign ID - signal_resource_name: Resource name from get_pmax_audience_signals Execution time: 2-5 seconds ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
remove_pmax_search_themes
ChatGPTRemove specific search themes from a Performance Max campaign. Matches themes by text (case-insensitive). Use get_pmax_search_themes first to see current themes. Parameters: - campaign_id: The PMax campaign ID - themes_to_remove: List of theme text strings to remove Execution time: 2-5 seconds ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
research_keywords
ChatGPTResearch high-intent keywords using Google Keyword Planner API. ⚠️ IMPORTANT: This is a READ-ONLY tool. Safe to call multiple times. 🎯 What This Tool Does: - Researches keywords via Google Keyword Planner API - Returns keywords with real CPC data, search volume, and competition metrics - Groups keywords by commercial intent (HIGH/MEDIUM/LOW based on dynamic CPC thresholds) - Selects top 15-20 keywords optimized for conversions - Provides budget recommendations based on actual keyword costs
resume_ad
ChatGPTResume a paused ad to start showing it again. Only works on PAUSED ads (not REMOVED). Parameters: - ad_id: The ad ID to resume (REQUIRED) - ad_group_id: The ad group ID (REQUIRED) - customer_id: Optional Execution time: 1-2 seconds When to use: - User says "resume", "turn it back on", "enable" - User finished making changes - User wants to reactivate a paused A/B test variant Example: User: "Turn my paused ad back on" Agent: 1. Uses get_campaign_structure to find the paused ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
resume_campaign
ChatGPTResume a paused campaign. Resuming a campaign makes ads start showing again. Only works on PAUSED campaigns (not REMOVED). Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - customer_id: Optional (uses connected account if omitted) Execution time: 1-2 seconds Returns: - Campaign name - Before status (e.g., PAUSED) - After status (ENABLED) - Confirmation message When to use: - User says "resume", "turn it back on", "start it again" - User wants ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
resume_meta_campaign
ChatGPTUser wants to resume a paused Meta campaign. IMPORTANT: Resuming a campaign restarts ad delivery. Budget will start being spent again. Returns: - Confirmation that campaign is active - Campaign details - Ads Manager URL When to use this tool: - "Resume my Meta campaign" - "Turn on my Facebook ads" - "Reactivate campaign 123456" - "Start my paused Instagram campaign" Parameters: - campaign_id: The Meta Campaign ID to resume (required) Execution time: 2-5 seconds Effect: Campaign status chang ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
resume_tiktok_ad
ChatGPTSet one TikTok ad's status to ENABLE (active). Requires the ad_id and status "ENABLE". Returns the ad id, its name and the status that was set. Confirm the exact ad with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
resume_tiktok_ad_group
ChatGPTSet one TikTok ad group's status to ENABLE (active). Requires the adgroup_id and status "ENABLE". Returns the ad group id, its name and the status that was set. Confirm the exact ad group with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
resume_tiktok_campaign
ChatGPTSet one TikTok campaign's status to ENABLE (active). Requires the campaign_id and status "ENABLE". Returns the campaign id, its name and the status that was set. Confirm the exact campaign with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
run_autopilot_cycle
ChatGPTRuns one full optimization sweep across every connected platform: evaluates all monitors, hunts wasted spend, checks budget efficiency and creative fatigue, then files prioritized proposed actions to the approval queue (list_pending_actions / manage_action) and returns an executive brief. Never changes anything without approval. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
save_business_profile
ChatGPTSave or update the user's business profile with provided details. ⚠️ IMPORTANT: This tool WRITES data. Use when user confirms their business profile. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Saves user's business profile to database - Updates existing profile if one exists - Sets profile source as 'user_confirmed' or 'user_mcp' - Enables personalized recommendations going forward Required Parameters: - business_vertical: retail, services, technology, health ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
schedule_brief
ChatGPTSchedule recurring performance briefs delivered to your inbox. What it does: - Creates automated daily or weekly performance reports - Summarizes key metrics across all your ad platforms - Highlights top performers and underperformers - Provides AI-generated recommendations When to use: - "Set up a daily performance report" - "Send me weekly campaign summaries" - "I want automated performance updates" - "Create a scheduled brief for my campaigns" Execution time: 2-3 seconds to sch ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
search_audiences
ChatGPTSearch for available audience segments (in-market, affinity, custom). Use this tool to discover audience segment IDs for: - PMax campaigns: Use IDs with add_pmax_audience_signal (audience signals/hints) - Demand Gen / YouTube campaigns: Pass IDs via audience_segments parameter in create_demandgen_campaign or create_youtube_campaign (direct targeting) Audience types: - In-market: Users actively researching products/services (e.g., "Business Software") - Affinity: Use
search_meta_targeting
ChatGPTUser wants to find targeting options for their Meta (Facebook/Instagram) ad campaigns. This tool searches the Meta Marketing API to find targeting options including interests, behaviors, demographics, locations, and more. Returns: - List of targeting options with IDs, names, and audience sizes - Category/path information for interests and behaviors - Location details including country, region for geo-targeting When to use this tool: - "Find interests related to fitness" - "What targeting opti
search_tiktok_targeting
ChatGPTSearch TikTok targeting options for campaign creation and ad group management. IMPORTANT: Call this tool to find valid targeting IDs BEFORE creating campaigns or ad groups. Covers ALL targeting types: - interest_categories: Browse all interest categories (fashion, gaming, food, etc.) — returns IDs for interest_category_ids - interest_keywords: Search interest keywords by a seed keyword (e.g., "fitness") — returns keyword IDs for interest_keyword_ids - regions: Get available locations (countrie
select_google_campaign_type
ChatGPTDecide which Google Ads campaign type fits before anything is built: Search, Performance Max, Demand Gen or YouTube. Call it first when the user asks for a Google Ads campaign without naming a type ("create a Google Ads campaign", "run ads on Google"). Returns the recommended type with the reasoning, the questions still to settle with the user (goal, budget, destination, assets), and the exact tools to call next (research_keywords, discover_existing_assets, then the create_* tool for that type). Read-only: it changes nothing in the account.
select_meta_campaign_type
ChatGPTUser wants to create a Meta (Facebook/Instagram) ad campaign but hasn't specified the campaign type (image, video, or carousel). IMPORTANT: This tool should be called BEFORE any asset discovery or campaign creation when the user says things like: - "Create a Meta campaign" - "Create a Facebook ad" - "I want to run Instagram ads" - "Set up a Meta advertising campaign" - "Help me create ads on Facebook" This tool asks the user what TYPE of campaign they want to create, then provides guidance on ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_analyze_wasted_spend
ChatGPTRead-only review of a Snapchat account: campaigns and ad squads that spent above min_spend with zero conversions, squads with a swipe rate below 0.2%, and ads stuck in review or rejected. Nothing is changed — apply fixes with the matching write tool after confirming with the user.
snapchat_create_ad
ChatGPTCreate an ad in a Snapchat ad squad from an existing creative (snapchat_list_creatives / snapchat_create_creative). Created PAUSED; Snapchat reviews every new ad before it can serve. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_create_ad_squad
ChatGPTCreate an ad squad in a Snapchat campaign: type, optimization goal, bid strategy, budget, placement and targeting. Created PAUSED. Snapchat requires at least one country in targeting and either a daily or a lifetime budget. Bids and budgets are in account currency (AdAgnt converts to Snapchat's micros). Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_create_audience
ChatGPTCreate an audience segment: a FIRST_PARTY customer-list segment (empty until users are added in Ads Manager) or a LOOKALIKE of an existing segment in one country. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_create_campaign
ChatGPTCreate a Snapchat campaign. The campaign is created PAUSED so you can add ad squads, creatives and ads before it serves — resume it with snapchat_resume_campaign once the structure is reviewed. Objectives: AWARENESS_AND_ENGAGEMENT, SALES, TRAFFIC, APP_PROMOTION, LEADS. Budgets live on the ad squads by default; a campaign daily_budget is an optional cap across them. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_create_creative
ChatGPTCreate a Snapchat creative from uploaded media (snapchat_upload_media / snapchat_list_media). Headline max 34 characters, brand name max 25. A WEB_VIEW creative needs an https web_view_url; APP_INSTALL and DEEP_LINK need app details set up in Ads Manager. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_get_ad
ChatGPTGet one Snapchat ad with its creative, ad squad and campaign.
snapchat_get_ad_account
ChatGPTGet one Snapchat ad account: name, currency, timezone, type, status, organization and funding sources.
snapchat_get_ad_squad
ChatGPTGet one Snapchat ad squad with its full targeting and its ads.
snapchat_get_campaign
ChatGPTGet one Snapchat campaign with its ad squads.
snapchat_get_creative
ChatGPTGet one Snapchat creative with the ads that use it.
snapchat_get_stats
ChatGPTPerformance stats for a Snapchat ad account, campaign, ad squad or ad: impressions, swipes, spend, video views, conversions and the derived swipe rate, eCPM, CPS and CPA. granularity TOTAL gives one row, DAY one per day, HOUR one per hour (HOUR windows are capped at 7 days). breakdown splits an account by campaign, or a campaign by ad_squad or ad. Spend is in account currency.
snapchat_list_ad_accounts
ChatGPTList the Snapchat ad accounts connected to your AdAgnt user, with currency, timezone, status and whether each is the primary. Use the returned account_id in other Snapchat tools when you manage more than one account.
snapchat_list_ad_squads
ChatGPTList ad squads (Snapchat's ad groups) in an ad account or one campaign, with type, optimization goal, bid, budgets, placement, schedule and targeting. The ad squad owns the bid, the budget and ALL targeting.
snapchat_list_ads
ChatGPTList ads in a Snapchat ad account or one ad squad, with type, status, review status and the creative each one uses.
snapchat_list_audiences
ChatGPTList the audience segments in a Snapchat ad account (customer lists, pixel/engagement audiences, lookalikes) with type, approximate size, retention and status.
snapchat_list_campaigns
ChatGPTList the campaigns in a Snapchat ad account with objective, status, budget, schedule and spend cap. Money is returned in the account currency (Snapchat stores micros; AdAgnt converts).
snapchat_list_creatives
ChatGPTList the creatives in a Snapchat ad account: type, headline, brand name, call to action, top snap media and review status. Ads reference creatives by creative_id.
snapchat_list_funding_sources
ChatGPTList the funding sources (payment methods) attached to a Snapchat ad account, with type, status and currency. A campaign cannot deliver on an account without an active funding source.
snapchat_list_media
ChatGPTList the media (uploaded videos and images) in a Snapchat ad account with type, status and download link. Creatives reference media by top_snap_media_id.
snapchat_list_organizations
ChatGPTList the Snap Business Manager organizations the connected Snapchat login belongs to. Ad accounts hang off an organization; use the organization_id with snapchat_list_ad_accounts.
snapchat_list_pixels
ChatGPTList the Snap Pixels in a Snapchat ad account, with status. A pixel is needed for PIXEL_* optimization goals and conversion reporting.
snapchat_pause_ad
ChatGPTPause one Snapchat ad. Reports the previous and new status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_pause_ad_squad
ChatGPTPause a Snapchat ad squad — its ads stop delivering. Reports the previous and new status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_pause_campaign
ChatGPTPause a Snapchat campaign — every ad squad under it stops delivering. Reports the previous and new status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_resume_ad
ChatGPTSet one Snapchat ad ACTIVE. It serves once its ad squad and campaign are ACTIVE and Snapchat has approved it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_resume_ad_squad
ChatGPTSet a Snapchat ad squad ACTIVE. It starts spending as soon as its campaign is ACTIVE and it has an approved ad. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_resume_campaign
ChatGPTSet a Snapchat campaign ACTIVE. Ad squads that are themselves ACTIVE start spending immediately. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_search_targeting
ChatGPTLook up Snapchat targeting options to use in snapchat_create_ad_squad / snapchat_update_ad_squad: interests (Snap Lifestyle Categories), countries, regions and metros within a country, operating systems, device makes, age groups, languages, or the account's audiences.
snapchat_set_budget
ChatGPTSet the daily or lifetime budget of one Snapchat campaign (its spend cap) or one ad squad (its delivery budget), in account currency. Returns the previous and new values. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_update_ad
ChatGPTRename a Snapchat ad or swap its creative. Swapping the creative sends the ad back through Snapchat review. Returns before and after. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_update_ad_squad
ChatGPTUpdate a Snapchat ad squad's name, bid, budget, schedule or targeting. Any targeting field you pass REPLACES that part of the targeting (countries, interests, ages …); fields you omit are left as they are. Returns the ad squad before and after. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_update_campaign
ChatGPTUpdate a Snapchat campaign's name, budget cap, spend cap or schedule. Returns the campaign before and after the change. Use snapchat_pause_campaign / snapchat_resume_campaign for status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
snapchat_upload_media
ChatGPTUpload a video or image to a Snapchat ad account from an https URL, for use as a creative's top snap. Snapchat specs: video 9:16, 1080×1920, MP4/MOV, 3–180 s, ≤1 GB; image 9:16 PNG/JPEG ≤5 MB. The media is READY once Snapchat has processed it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
start_research
ChatGPTStart an AI-powered research job (runs in background). What it does: - Performs deep analysis that takes 5 minutes to 2 hours - Runs asynchronously - you'll be notified when complete - Provides comprehensive insights and recommendations Research Types: 1. competitor_analysis - Analyze competitor ad strategies Required context: competitors (list of competitor domains/names) 2. keyword_research - Discover high-value keywords Required context: seed_keywords (list of starti ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
suggest_ad_content
ChatGPTGenerate AI-suggested headlines and descriptions based on campaign keywords. Analyzes campaign keywords and generates optimized ad content following creative guidelines: - 15 headlines across 3 categories (What It Is, Benefits, Pain/Proof/CTA) - 4 descriptions with value props and CTAs - All validated for character limits Parameters: - campaign_id: The campaign to analyze (REQUIRED) - business_description: Optional context about the business - key_benefits: Optional list of benefits (e.g.,
switch_primary_account
ChatGPTActivate one or more ad accounts for a platform. Activated accounts are available for all ad operations. Pass a single account_id to activate one account, or pass account_ids (list) to activate multiple accounts for multi-account management. Use this tool when: - User wants to switch to a different ad account - User says "use my other account" or "activate these accounts" - User wants to manage multiple accounts simultaneously - User specifies which accounts to work with Accepts either accoun ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
test_monitor
ChatGPTDry-run a monitor against current data WITHOUT triggering alerts or sending notifications. What it does: - Evaluates the monitor's conditions against current campaign data - Shows which campaigns would match and which would be skipped - Does NOT create triggers, send emails, or queue auto-actions - Useful for verifying a monitor is configured correctly before enabling When to use: - "Test my CPA monitor" - "Would this alert trigger right now?" - "Check if my monitor is set up correctly
update_ad_content
ChatGPTCombined update for ad content (headlines, descriptions, and/or final URLs). Use this for efficiency when updating multiple ad elements at once. Single API call with combined field mask. Parameters: - ad_id: The ad ID to update (REQUIRED) - ad_group_id: The ad group ID (REQUIRED) - headlines: Optional list of 3-15 headlines (max 30 chars each) - descriptions: Optional list of 2-4 descriptions (max 90 chars each) - final_urls: Optional list of landing page URLs - customer_id: Optional At l ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_ad_descriptions
ChatGPTUpdate descriptions for a Responsive Search Ad (RSA). Parameters: - ad_id: The ad ID to update (REQUIRED - get from get_campaign_structure) - ad_group_id: The ad group ID (REQUIRED) - descriptions: List of 2-4 descriptions (REQUIRED) - customer_id: Optional Description Rules: - Max 90 characters per description - 2-4 descriptions required - Descriptions should expand on headlines - Include specific details and CTAs - Formula: [Value Prop]. [Specific Detail]. [CTA]. Execution time: ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_ad_headlines
ChatGPTUpdate headlines for a Responsive Search Ad (RSA). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_bid_strategy
ChatGPTChange campaign bidding strategy. Available Strategies: - MAXIMIZE_CLICKS: Get as many clicks as possible within budget - MAXIMIZE_CONVERSIONS: Get as many conversions as possible - TARGET_CPA: Set a target cost per acquisition (requires target_cpa) - TARGET_ROAS: Set a target return on ad spend (requires target_roas) Parameters: - campaign_id: The campaign ID (REQUIRED) - strategy: MAXIMIZE_CLICKS, MAXIMIZE_CONVERSIONS, TARGET_CPA, or TARGET_ROAS (REQUIRED) - target_cpa: Required if s ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_campaign
ChatGPTUpdate an existing campaign's settings. Can update: - name: Campaign name - status: ENABLED or PAUSED - budget_amount: Daily budget in dollars IMPORTANT: - Confirm with user BEFORE making changes - Use list_campaigns first to get campaign_id - At least one field (name, status, or budget_amount) is required Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - name: New campaign name (optional) - status: ENABLED or PAUSED (optional) - budget_amount: Dail ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_keyword
ChatGPTUpdate keyword bid or status. Parameters: - keyword_id: The keyword to update (REQUIRED - get from get_campaign_structure) - ad_group_id: The ad group containing the keyword (REQUIRED) - cpc_bid_micros: New bid in micros (1 USD = 1,000,000). Example: 2500000 = $2.50 - status: ENABLED or PAUSED - customer_id: Optional Can update: - Bid amount (cpc_bid_micros) - Status (ENABLED/PAUSED) CANNOT update (immutable): - Keyword text - Match type Execution time: 2-3 seconds **Example ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_meta_ad
ChatGPTUser wants to update an individual Meta ad — pause/resume it, rename it, or swap its creative. IMPORTANT: This tool modifies REAL ads in Meta Ads Manager. Changes take effect immediately. Returns: - Confirmation of updates applied - Summary of changes - Ads Manager URL for the ad When to use this tool: - "Pause this ad" - "Resume ad [ID]" - "Rename this ad" - "Swap the creative on this ad" - "Change the image on this ad" (via creative swap) - "Turn off the underperforming ad" Parameters: - a ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_meta_ad_set
ChatGPTUser wants to edit an existing Meta ad set's targeting, budget, bid, placements, schedule, or optimization settings. IMPORTANT: This tool modifies REAL ad sets in Meta Ads Manager. Changes take effect immediately. This is the primary tool for: - Changing audience targeting (age, gender, interests, locations) - Excluding placements (e.g., remove Audience Network) - Adjusting budgets at the ad set level - Changing bid amounts - Pausing/resuming specific ad sets - Modifying optimization goals Re ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_meta_campaign
ChatGPTUser wants to update an existing Meta campaign's status, budget, name, or schedule. IMPORTANT: This tool modifies REAL campaigns in Meta Ads Manager. Changes take effect immediately. Returns: - Confirmation of updates applied - Updated campaign details - Ads Manager URL When to use this tool: - "Update my Meta campaign budget" - "Change my Facebook campaign name" - "Pause my Instagram campaign" - "Resume my paused campaign" - "Set a new budget for campaign X" - "Change the end date for my cam ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_strategy
ChatGPTCreates or updates sections of your server-persisted strategy document. Use after onboarding conversations and after campaign learnings (append to performance_history rather than overwriting). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.
update_tiktok_ad_group
ChatGPTUpdate TikTok ad group settings: name, budget, targeting (age, gender, locations), schedule. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
update_tiktok_campaign
ChatGPTUpdate TikTok campaign settings like name, budget, or budget mode. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
upload_tiktok_images
ChatGPTUpload images to TikTok Asset Library from public URLs. Returns TikTok image_ids that can be used for: - create_tiktok_carousel_card — build carousel cards from uploaded images - create_tiktok_campaign with existing_image_ids — standard image campaigns - add_tiktok_ad with image_ids — add image ads to existing ad groups TikTok downloads images directly from the provided URLs (no intermediate storage needed). Supported formats: JPG, PNG, WEBP. Max 10MB per image. Max 20 images per call. Use t ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
validate_and_prepare_assets
ChatGPT🔄 LONG-RUNNING TOOL: Validates multiple images from URLs for Performance Max campaigns. Emits MCP progress updates while downloading and validating 5-10 images (typically 5-15 seconds). Progress stages: download → validate → commit. ⚠️ CRITICAL: This tool accepts IMAGE URLS (from postimages.org), NOT base64 or file paths! ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
validate_and_prepare_meta_assets
ChatGPTUser wants to upload NEW images for Meta campaigns. This tool validates images and uploads them to Meta to get image hashes. This tool validates image URLs against Meta's specifications and uploads them to get image hashes needed for campaign creation. It stores validated assets in a temporary bundle (60-minute TTL). Returns: - Validation results (pass/fail per image) - Image hashes for successfully uploaded images - Asset bundle ID for use in campaign creation - Placement compatibility inform ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
validate_and_prepare_tiktok_assets
ChatGPTUser provides image URLs to validate BEFORE creating TikTok image campaign. Validate and prepare new image assets for TikTok ad campaigns. IMPORTANT: Call this tool BEFORE create_tiktok_campaign if uploading NEW images. TikTok Image Requirements: - Aspect ratio: 9:16 (vertical, e.g., 1080x1920 or 540x960) - Maximum file size: 10MB - Formats: JPEG, PNG, WEBP - Minimum size: 540x960px - Recommended: 1080x1920px Parameters: - image_urls: List of public image URLs (e.g., from postimages.org, img
validate_video
ChatGPTValidate video for ad campaigns (unified tool for all platforms). ⚠️ IMPORTANT: This is a READ-ONLY validation tool. Safe to call multiple times. 🎯 What This Tool Does: - Validates videos for Google Ads PMAX or TikTok campaigns - For PMAX: Validates YouTube video (privacy, duration, embeddable) - For TikTok: Validates public video URL is accessible - Returns metadata (title, duration, privacy, thumbnail) DOES NOT upload videos - user must already have video uploaded: - PMAX: Video mus
x_ads_analyze_wasted_spend
ChatGPTFind where an X account is leaking money: line items and keywords with spend but no conversions, promoted posts with clicks that never convert, and budgets pinned to underperforming targeting. Read-only — it recommends changes and never makes them.
x_ads_create_campaign
ChatGPTCreate an X (Twitter) campaign. It is created PAUSED so you can add line items, targeting, and promoted posts before it serves — resume it once the structure is reviewed. X objectives: REACH, VIDEO_VIEWS, PRE_ROLL_VIEWS, APP_INSTALLS, WEBSITE_CLICKS, ENGAGEMENTS, FOLLOWERS, WEBSITE_CONVERSIONS. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_create_line_item
ChatGPTCreate a line item inside an X campaign. On X, the line item is the ad group: it holds the bid, the budget, the placements, and all targeting criteria. It is created PAUSED — attach targeting and at least one promoted post, then resume it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_get_account
ChatGPTGet details for one X ads account: name, currency, time zone, approval status, and whether it is your primary account.
x_ads_get_audience_insights
ChatGPTSummarize who an X campaign actually reached: the mix of locations, devices, and interests behind the impressions, with the share of spend each slice took.
x_ads_get_campaign
ChatGPTGet one X campaign in full: objective, budgets, schedule, funding instrument, and its line items.
x_ads_get_campaign_performance
ChatGPTGet X campaign performance for a date range: impressions, engagements, clicks, spend, CTR, CPC, conversions, and CPA. Use this to answer 'how are my X campaigns doing'.
x_ads_get_line_item
ChatGPTGet one X line item in full: bid, budget, placements, product type, and every targeting criterion attached to it. On X, the line item is the ad group: it holds the bid, the budget, the placements, and all targeting criteria.
x_ads_get_line_item_performance
ChatGPTGet per-line-item X performance for a date range, so you can see which targeting and bid combination is actually working inside a campaign.
x_ads_list_accounts
ChatGPTList the X (Twitter) ads accounts connected to your AdAgnt user. Returns each account's ID, name, currency, time zone, and status. Use the returned account_id in other X tools when you manage more than one account.
x_ads_list_campaigns
ChatGPTList campaigns in an X ads account with their objective, funding instrument, daily budget, schedule, and serving status.
x_ads_list_funding_instruments
ChatGPTList the funding instruments (payment methods) on an X ads account, with type, currency, credit remaining, and whether each is able to fund new campaigns. Every X campaign must name a funding instrument, so check this before creating one.
x_ads_list_line_items
ChatGPTList line items in an X campaign (or across the account) with bid, budget, placements, and status. On X, the line item is the ad group: it holds the bid, the budget, the placements, and all targeting criteria.
x_ads_list_tailored_audiences
ChatGPTList the tailored (custom) audiences on an X ads account — uploaded customer lists, website visitors, and look-alikes — with size and targetability.
x_ads_list_targeting_criteria
ChatGPTList every targeting criterion currently attached to an X line item — keywords, followed accounts, interests, locations, devices, and audiences — so you can see exactly who it is reaching before changing anything.
x_ads_optimize_budget
ChatGPTRebalance daily budgets across an X account's campaigns toward the best cost per result, keeping total daily spend unchanged unless you say otherwise. Show the user the full before/after table and get approval first — this moves real money between campaigns. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_pause_campaign
ChatGPTPause an X campaign. Delivery and spend stop immediately across all of its line items; nothing is deleted. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_pause_line_item
ChatGPTPause one X line item. Its promoted posts stop delivering immediately; the rest of the campaign is unaffected. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_resume_campaign
ChatGPTResume a paused X campaign. Delivery and spend restart against its current budget, so confirm the budget before resuming. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_resume_line_item
ChatGPTResume a paused X line item so its promoted posts deliver again against the current bid and budget. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_search_targeting
ChatGPTSearch X's targeting catalog for valid values before you apply them: locations, interests, events, conversation topics, or handles to target the followers of.
x_ads_set_device_targeting
ChatGPTSet which devices and platforms an X line item delivers on. This REPLACES the existing device list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_set_follower_targeting
ChatGPTTarget people who behave like the followers of specific X accounts. This REPLACES the line item's handle list. Competitor and adjacent-brand handles are usually the highest-signal choice on X. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_set_interest_targeting
ChatGPTSet the interest categories an X line item targets. This REPLACES the existing interest list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_set_keyword_targeting
ChatGPTSet the keywords an X line item targets — the words and phrases people post or search for. This REPLACES the line item's keyword list, so pass the full set you want. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_set_line_item_bid
ChatGPTChange the bid or bidding strategy on an X line item. Raising a bid raises cost per result immediately — state the current and proposed bid to the user and get explicit approval first. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_set_location_targeting
ChatGPTSet the countries, regions, or cities an X line item targets. This REPLACES the existing location list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_update_campaign
ChatGPTChange an X campaign's name, budgets, or end date. Only the fields you pass are changed. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.
x_ads_update_line_item
ChatGPTChange an X line item's name, budget, or placements. Only the fields you pass are changed. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.