Google Ads Integration
The most comprehensive ad platform integration. Create Search, Performance Max, Shopping, App, Display, YouTube, and Demand Gen campaigns, research keywords with real CPC data, generate ad copy, and optimize performance with 156 specialized tools — including Manager-parity deep management down to the ad-group, asset-group, and product-partition level.Google Ads + Claude: Instant Clarity with Adspirer
Prerequisites
- Google Ads account (create one here)
- An active ad account with billing information
- Admin or Standard access to the account you want to manage
- Adspirer account connected via Claude Code, Cursor, or any supported AI client
Connecting Google Ads
For a full walkthrough with screenshots and example prompts, see How to Connect ChatGPT to Google Ads or How to Connect Claude to Google Ads. Once you’ve set up Adspirer with your AI client, connect Google Ads:- Open your AI assistant (ChatGPT, Claude, Claude Code, etc.)
- Say: “Connect my Google Ads account”
- Adspirer opens your browser for OAuth authorization
- Sign in to your Google account and select the ad account you want to manage
- Approve permissions (read campaign data, create ads, manage budgets)
If an account is greyed out
An account you have access to but that Google hasn’t activated — billing never set up, or the account deactivated — appears in the picker as a greyed-out row you can’t select, with the reason shown alongside it. This is not a connection problem and reconnecting won’t clear it: activate the account in Google Ads, then reopen the picker and it becomes selectable. A greyed row shows the account number and the reason only. Currency and time zone are omitted, because the lookup that would have supplied them is the one that failed. Accounts that are active are never greyed out. If a check against Google fails temporarily, the account stays selectable rather than being locked.What You Can Do (156 Tools)
Performance Analysis
get_campaign_performance— Pull metrics for campaigns (spend, conversions, CPA, ROAS)get_ad_performance— Per-ad performance breakdown (one row per ad): impressions, clicks, CTR, cost, conversions, conversion value, CPC, CPA, ROAS, video views, ad strength, and an is-live flag — with a head-to-head comparison when an ad group has multiple ads. Covers Search, Display, Demand Gen, and YouTube.analyze_wasted_spend— Find keywords with spend but zero conversionsanalyze_search_terms— Review actual search queries triggering your ads. Supportsraw_reportmode to see the exact search terms users type into Google. Covers Search and Shopping — for a Performance Max campaign useanalyze_pmax_search_termsinstead.analyze_pmax_search_terms— Per-term search queries a Performance Max campaign matched, with cost, clicks, impressions, conversions, conversion value, CTR, and CPCanalyze_pmax_search_categories— The same demand grouped into Google’s search categories, so you can read the themes rather than ten thousand individual queriesexplain_performance_anomaly— Diagnose sudden CPA spikes or CTR dropsoptimize_budget_allocation— Recommend budget shifts based on ROAS/CPA
Keyword Research
research_keywords— Find keywords with real CPC data from Google Keyword Planner (search volume, competition, estimated bids)
Ad Copy & Content
suggest_ad_content— Generate headlines and descriptions optimized for Google’s character limitsget_ad_creative— Export the creative composition of existing ads: YouTube video IDs and watch/thumbnail URLs, downloadable image URLs (with role + dimensions), every headline/description/business name/CTA, and carousel cards. Covers Demand Gen, Responsive Search, and Responsive Display ads.help_user_upload— Guide users through the asset upload process
Campaign Creation
discover_existing_assets— Browse the account’s complete asset inventory (images, headlines, descriptions, sitelinks, videos), now paginated across all asset types so nothing is silently capped, with downloadable image URLs and a clear forward path when a square logo is missingvalidate_and_prepare_assets— Verify assets meet Google’s requirements before campaign creationcreate_search_campaign— Launch Google Search campaigns (text ads on search results, created PAUSED)create_pmax_campaign— Launch Performance Max campaigns (ads across all Google channels, created PAUSED)
PMax Search Themes & Audience Signals
add_pmax_search_themes— Add search themes to guide PMax targeting (max 50 per asset group)get_pmax_search_themes— View current search themes on a PMax campaignremove_pmax_search_themes— Remove specific search themesadd_pmax_audience_signal— Add audience signal combining in-market, affinity, custom audiences, and user listsget_pmax_audience_signals— View current audience signalsremove_pmax_audience_signal— Remove an audience signalsearch_audiences— Search for audiences by keyword across all types
PMax search terms
Ask for the search terms on a Performance Max campaign and you used to get “No search term data” — Google keeps PMax queries in a different place than Search and Shopping queries, andanalyze_search_terms only reads the latter. Two tools read the PMax side.
analyze_pmax_search_terms— Every query the campaign matched, one row each: cost, clicks, impressions, conversions, conversion value, CTR, CPC. Sorted by cost by default, so the highest-spending queries are the ones you see firstanalyze_pmax_search_categories— Google’s own grouping of those queries into search categories, with clicks, impressions, conversions, and conversion value per category. Google returns an (Other search terms) bucket for the long tail it doesn’t categorize
campaign_id and a lookback_days window of 7, 30, 60, 90, or 120 (default 30). Money comes back in your ad account’s own currency.
A PMax campaign can match thousands of queries, so neither tool expects you to read them all. analyze_pmax_search_terms opens with a summary across the whole window — how many terms, total cost, total conversions, and how many terms recorded no conversions along with what they cost. Those are the facts, not a verdict: a query with no conversions may be upper-funnel or tracked somewhere else, and you decide which.
To narrow it, filter or re-rank rather than paging. query is a case-insensitive substring match on the term, sort_by takes cost, clicks, impressions, conversions, conversion_value, ctr, or cpc (categories sort on impressions, clicks, conversions, or conversion value), and sort_order flips the direction. Paging is deliberately capped near the top of the ranking — you can’t walk deep into a ten-thousand-term result.
Find the queries a PMax campaign is paying for.
PMax Brand Guidelines
Brand Guidelines is Google’s brand-controlled PMax layout. With it on, Google requires the square logo and business name on the campaign rather than on the asset group, and the campaign cannot serve without them:create_pmax_campaignwithbrand_guidelines_enabled— Turn Brand Guidelines on and link the logo and business name at the campaign level in the same call. Create-time only; Google does not allow the setting to change afterwardsadd_pmax_campaign_logo— Link a square logo to an existing campaign, byasset_idfrom your account’s library or by image URL, with an optionalbusiness_name(max 25 characters) attached in the same call. Skips a logo that is already linkedget_pmax_conversion_goals— Read a campaign’s conversion goals: each goal’s category, origin, and whether it is biddable
Campaign Management
update_campaign— Change the daily budget, or update campaign settings: language targeting, locations, Search Partners, Display Expansion, audience targeting mode (OBSERVATION / TARGETING), AI Maxpause_campaign— Stop a campaignresume_campaign— Restart a paused campaignpause_ad_group— Pause an individual ad group within a campaignresume_ad_group— Resume a paused ad groupadd_negative_keywords— Block irrelevant search terms from triggering your adslist_negative_keyword_lists— List the account’s shared negative keyword lists, each with its keyword count and how many campaigns it’s attached toget_negative_keyword_list— Read the keywords inside one list, with their match typescreate_negative_keyword_list— Create a new, empty shared listadd_negative_keywords_to_list— Add negative keywords to a shared list, each with a match typeattach_negative_keyword_list_to_campaign— Attach a shared list to a campaignbulk_update_keyword_status— Pause or re-enable up to 300 keywords in one ad group in a single call. Takes explicit keyword IDs (there is no pause-everything mode), works in both directions, and is safe to re-run — a keyword already in the target status is left alone. Use this instead ofremove_keywordswhen you want keywords stopped rather than deleted.bulk_update_ad_status— Pause or enable any number of ads in one ad group in a single call. Takesad_group_id, explicitad_ids, andPAUSEDorENABLED; get the IDs fromget_campaign_structureorget_ad_performance. One call per ad group — to sweep several, make one call eachbulk_update_ad_group_status— Pause or enable any number of ad groups in a single call, on any campaign type (Search, Performance Max, Display, Demand Gen). Passcampaign_idas well and each ad group is checked to belong to that campaign, so an ID from a different campaign is reported as not found rather than changedbulk_update_campaign_status— Pause or enable any number of campaigns in a single call, from a list of campaign IDs
update_bid_strategy— Change a campaign’s bidding strategy (Maximize Conversions, Target CPA, Target ROAS, Maximize Clicks, Target Impression Share). Detects shared portfolio bid strategies and explains how to change them; surfaces Smart Bidding prerequisites when conversion data is missing. On App campaigns it checks the strategy against the campaign’s App bidding goal before calling Google, and names the strategy that goal requires instead of returning Google’s “incompatible with the goal type” error.- Max CPC ceiling.
cpc_bid_ceilingcaps what a strategy will pay for a click, on Maximize Clicks and Target Impression Share — the only two strategies Google gives a max-CPC field. Pass it in the account’s own currency as a decimal (8for a CA$8.00 cap, not cents, not USD). Omit it and any existing ceiling is left untouched; pass it on a strategy that has no such field and the call is refused up front rather than silently dropping the cap. The response shows the ceiling read back from Google after the write, so “not set” means the cap is genuinely absent rather than an echo of what you sent.list_campaignsandget_campaign_structurereport the ceiling and the strategy it sits on.
- Max CPC ceiling.
add_business_name_asset— Attach a business name asset to a Search campaign (max 25 characters). Skips the write if the same name is already on the campaignadd_call_asset— Attach a phone number call asset with optional call conversion tracking. Skips the write if the same number is already on the campaignadd_search_campaign_image— Attach image assets to Search campaigns (logos, marketing images). Skips the write if the same image is already linked under that field typeget_campaign_targeting— View targeting for existing campaigns: locations, languages, audiences, devices, ad schedules, topics, and content labels (all criterion types). Locations come back as place names rather than Google’s raw criterion IDs —Australia | Country | 2036, notgeoTargetConstants/2036— for excluded locations as well as targeted ones
update_campaign works exactly as it does today. After it, Adspirer tells you plainly that Google no longer accepts the change rather than returning a bare failure — and it never records languages as applied when they weren’t. If you asked for a language change and nothing else in the same call, you get that explanation instead of a success message.4.
Every bid strategy change is read back from Google after it’s written. If the campaign isn’t on the strategy you asked for, you get an error saying so rather than a success message. Strategy changes take one to two weeks to settle, so a false success used to cost a lot of time before anyone noticed.
Shared negative keyword lists
add_negative_keywords blocks a search term on one campaign. A shared negative keyword list is the reusable version: build the list once, attach it to as many campaigns as you like, and every campaign it’s attached to blocks the whole set. Add a term to the list later and it takes effect everywhere at once — which is how most accounts handle a standing brand-safety or job-seeker block list.
The five tools cover the full life of a list: list_negative_keyword_lists and get_negative_keyword_list to see what you have, create_negative_keyword_list to start an empty one, add_negative_keywords_to_list to fill it, and attach_negative_keyword_list_to_campaign to put it to work.
Each keyword carries a match type — EXACT, PHRASE, or BROAD, defaulting to BROAD. Attaching a list doesn’t move the keywords into the campaign, so detaching later leaves the list intact for everything else using it.
Build a block list once and reuse it.
Ad Extensions (Assets)
Sitelinks, callouts, structured snippets, and call assets each have full add / remove / list coverage. Ask for “extensions” or “ways to make my ads better” and Adspirer suggests sitelinks first (the highest-impact extension) — you don’t have to know the term.add_sitelinks— Add sitelink extensions. Accepts natural field names —textorheadlinefor the label,urlorlinkfor the destination.remove_sitelinks— Remove sitelink extensions from a campaignadd_callout_extensions— Add callout extensions (short promotional blurbs, max 25 characters each)remove_callouts— Remove callout extensions from a campaignadd_structured_snippets— Add structured snippet extensions (a header like “Brands” or “Styles” plus values)remove_structured_snippets— Remove structured snippet extensions from a campaign (clear out stale values before adding fresh ones)list_call_assets— List every phone number on a campaign with its country code, status, and the asset ID you need to pause or remove itset_call_asset_status— Pause a phone number so it stops showing, or re-enable it, without unlinking anything. Name specific asset IDs, or omit them to change every call asset on the campaignremove_call_assets— Unlink phone numbers from a campaign. The asset stays in your Asset Library and can be re-linked elsewhere. Omit the asset IDs to unlink all of themlist_campaign_extensions— List every extension serving on a campaign — sitelinks, callouts, structured snippets, call assets, business names, and images — each with its status and the level it is attached at
list_campaign_extensions and the Extensions block of get_campaign_structure read all three and label each asset with where it lives, so a campaign whose sitelinks are attached to its ad groups reads “16 at ad-group level — these serve” rather than Sitelinks (0). “None configured at any level” means all three are genuinely empty — the one case where adding a sitelink is the right move.
Adding the same asset twice no longer creates a duplicate. Google stores a call asset’s phone number verbatim and never deduplicates it, so re-running add_call_asset with a number already on the campaign used to stack a second identical phone extension. add_call_asset, add_business_name_asset, and add_search_campaign_image now check the campaign first and skip the write when the asset is already there, saying so instead of reporting a second success. Pass force=true when a genuine duplicate is what you want.
Placements, Reach & Policy
get_placement_performance— Where your Display, Demand Gen, Video and Smart ads actually ran — websites, YouTube channels and videos, apps — with cost and conversions per placement, including automatic placements Google chose. Filter by placement type, minimum cost, or zero-conversion placements onlyadd_placement_exclusions— Stop serving on specific websites, YouTube channels, videos or apps by adding negative placements to a whole campaign or a single ad group. Nothing is paused or deletedget_reach_frequency— Unique users reached and average impressions per user for each campaign, the signal for creative fatigue on YouTube, Demand Gen and Videoget_ad_policy_violations— The approval and review status of your ads, with the exact policy topics behind a disapproval or limit
Ad Group Controls & Targeting
add_search_ad_group— Add a new ad group to an existing Search campaign, optionally seeded with keywords, a Responsive Search Ad, and a manual CPC bidcreate_ad— Add a new Responsive Search Ad to an existing ad group to test different messagingget_ad_group_settings/update_ad_group_settings— Read and change an ad group’s name, status, bids, ad rotation, tracking suffix and audience targeting mode on any campaign typeget_ad_group_demographics/update_ad_group_demographics— Read and set age, gender and household-income targeting on an ad group. You list the segments to target; every segment you leave out is excludedget_ad_group_audiences/add_ad_group_audiences— Read and add in-market, affinity, custom and customer-list audiences on an ad group. Find real audience IDs withsearch_audiencesfirstadd_campaign_proximity— Target a radius around an address, in miles or kilometers, with an optional bid modifierupdate_location_targeting— Switch a campaign between Presence and Presence-or-Interest location targeting without recreating itset_campaign_ad_schedule— Run ads only on the days and hours you choose, with optional bid modifiers. Any schedule you add limits ads to those windowsset_campaign_device_bid_modifiers/set_ad_group_device_bid_modifiers— Bid up or down by device (mobile, tablet, desktop, connected TV) at campaign or ad group level.get_ad_group_device_bid_modifiersreads the current valuesupdate_pmax_audience_signal— Change the audiences in an existing Performance Max signal in place, instead of removing and re-adding it
Dates, Frequency, Tracking & Labels
get_campaign_dates/update_campaign_dates— Read or set a campaign’s start and end dates on any campaign typeget_campaign_frequency_caps/update_campaign_frequency_caps— Read or set how often a person sees your ads. An update replaces the full set of caps; pass an empty list to remove them allget_campaign_tracking— Read a campaign’s tracking URL template, final URL suffix and custom parameterslist_labels,create_label,get_campaign_labels,add_campaign_label,remove_campaign_label— Organize campaigns with account labels. Removing a label from a campaign does not delete the labelcreate_conversion_action— Create a webpage conversion action so Target CPA, Maximize Conversions and Target ROAS bidding have something to optimize toward. You still install the Google site tag and conversion snippet on your site
Removing Things
remove_negative_keywords— Remove negative keywords from a campaign by ID. Permanentremove_ad/remove_ad_group— Remove an ad or an ad group (status becomes Removed)remove_campaign— Permanently delete a campaign and everything in it. It cannot be re-enabled; usepause_campaignto stop one temporarilyadd_app_ad_asset/remove_app_ad_asset— Add or remove an image or video asset on an existing App campaign ad
Conversion Tracking Analysis
list_conversion_actions— List all conversion actions in your account (purchases, form fills, phone calls, app installs) with tracking method and statusget_conversion_action_performance— Pull conversion volume, value, and CPA broken down by conversion action — see which actions actually drive resultsupdate_conversion_action— Edit an existing conversion action by ID: name, category, status, value and currency, counting type, click-through and view-through lookback windows, whether it counts in the Conversions column, whether it’s primary for its goal, and attribution model
update_conversion_action change — everything else stays as it is, and it never removes a conversion action. To stop one counting, set its status to PAUSED, which is reversible.
“Counts in the Conversions column” is the one field Google won’t let the API change. It’s derived from the action’s category and goal setup — and for conversions imported from Google Analytics, it’s controlled in GA4. Ask for it and the rest of your update still applies; you get told to make that one change in the Google Ads UI (Goals → Conversions → the action → Edit settings) or in GA4. If the action is already set the way you asked, nothing is reported at all. The confirmation you get back lists only the fields that actually landed.
Value, currency, and always-use-default-value move together as a set. If Adspirer can’t read the action’s current value settings before writing, the update fails instead of guessing at them: Smart Bidding reads those numbers, and a value quietly rewritten to zero does more damage than an update that didn’t land.
Shopping & Merchant Center
Run Standard Shopping campaigns straight from your Google Merchant Center product feed — no per-product ad building.link_merchant_center— Link a Google Merchant Center account to your Google Ads account so its products are eligible to advertiseget_merchant_center_links— List the Merchant Center accounts linked to your Google Ads accountunlink_merchant_center— Remove a Merchant Center linkget_shopping_settings— View a Shopping campaign’s Merchant Center ID, country, and inventory filtercreate_shopping_campaign— Launch a Standard Shopping campaign from a linked Merchant Center feed (created PAUSED)add_shopping_ad_group— Add an ad group to a Shopping campaignadd_shopping_product_ad— Add the product ad that surfaces your feed itemsadd_product_group/get_product_groups/update_product_group/remove_product_group— Build and manage the product partition tree — subdivide your feed by brand, category, product type, or item ID and bid on each partition independently
App (Universal App / UAC) Campaigns
create_app_campaign— Launch an App campaign to drive installs, in-app engagement, or pre-registration across Search, Play, YouTube, Display, and Discover (created PAUSED)- App-ad creative management — Add and edit the text, image, and video assets Google mixes into your app ads
MULTI_CHANNEL, so reading one back used to tell you nothing about the app itself. list_campaigns and get_campaign_structure now identify an App campaign as one, and name the promoted app (Play package name or App Store ID) with its store, plus the App bidding goal Google optimizes toward — install volume, installs at a target cost, in-app conversions, return on ad spend, or pre-registration volume.
That goal is paired with the bidding strategy: a target-cost goal requires Target CPA, a no-target goal requires Maximize Conversions, and the ROAS goal requires Target ROAS. update_bid_strategy enforces the pairing before the call reaches Google, so a mismatch comes back naming the required strategy rather than as Google’s “bidding strategy is incompatible with the goal type.”
App campaigns also report installs, cost per install, and post-install conversions in performance data. Cost per install is only reported when there are installs, and periods collected before August 2026 stay at zero until they’re re-collected.
Demand Gen Campaigns
create_demandgen_campaign— Launch a Demand Gen campaign (visual, social-style ads across YouTube, Shorts, Discover, and Gmail)add_demandgen_ad_group/add_demandgen_ad— Build ad groups and image/video ads inside a Demand Gen campaignget_demandgen_audiences/replace_demandgen_audiences— View and set audience targetingget_demandgen_channel_controls/update_demandgen_channel_controls— Choose which surfaces (YouTube, Shorts, Discover, Gmail) the campaign runs on
PMax Asset-Group Deep Management
Beyond search themes and audience signals, manage the full asset-group structure of a Performance Max campaign:add_pmax_asset_group/get_pmax_asset_groups/update_pmax_asset_group/remove_pmax_asset_group— Full asset-group lifecycleadd_pmax_asset_group_asset/list_pmax_asset_group_assets/remove_pmax_asset_group_asset— Manage individual headlines, descriptions, images, and videos within an asset groupadd_pmax_asset_group_image/list_pmax_asset_group_images/remove_pmax_asset_group_image— Manage asset-group images specificallyget_pmax_asset_performance— See which assets Google rates Best / Good / Low so you know what to swapadd_asset_group_listing_filter/get_asset_group_listing_filters/remove_asset_group_listing_filter— Scope a PMax asset group to a subset of your Merchant Center feed (retail PMax)
Campaign Types
Google Search Campaigns
Text ads that appear when people search specific keywords on Google. Best for capturing high-intent traffic — people actively looking for your product or service. When to use: Lead generation, e-commerce, local services, SaaS signups.Performance Max (PMax) Campaigns
AI-powered campaigns that show ads across all Google channels: Search, Display, YouTube, Gmail, Maps, and Discover. Google’s algorithm automatically optimizes placement and creative combinations. When to use: E-commerce (especially with product feeds), broad awareness + conversions, when you have strong creative assets (images + video). Brand Guidelines is supported at creation viabrand_guidelines_enabled, which hands Google your square logo and business name at the campaign level and holds the brand-controlled layout across placements. Decide before you create — the setting cannot be turned on later.
Display Campaigns New
Responsive Display Ads across 2M+ websites, apps, and YouTube display slots. Supports standard Display (full manual control over 5 targeting surfaces: audiences, topics, placements, keywords, demographics) and Smart Display (Google-managed with AI-driven targeting + bidding). 27 dedicated tools covering full CRUD — creation, ad groups, ads, targeting, creative edits, frequency caps, and schedules. When to use: Retargeting website visitors, brand awareness, local businesses beyond Search, visual storytelling with image + video creative. → Full Display Ads guideYouTube Campaigns
Video ads on YouTube (In-Feed, In-Stream, Shorts). Uses Demand Gen format with YouTube-only channel controls. When to use: Video-first creative, product demos, brand storytelling. → Full YouTube Ads guideShopping Campaigns New
Standard Shopping campaigns that advertise products directly from your Google Merchant Center feed — Google shows the product image, title, and price. Adspirer links Merchant Center, creates the campaign and product ad, and lets you build a product partition tree to bid differently by brand, category, or item. When to use: E-commerce and retail with a Merchant Center product feed. Pair with retail PMax (via asset-group listing filters) for full-funnel shopping coverage.App Campaigns New
Universal App campaigns that drive app installs, engagement, or pre-registration across Search, Google Play, YouTube, Display, and Discover from a single set of assets. When to use: Mobile app growth — acquiring new installs or re-engaging existing users.Search Campaign Creation Workflow
Google Search campaigns follow a 5-step workflow. Skip steps and the campaign will fail validation.PMax Campaign Creation Workflow
Performance Max requires creative assets plus optional search themes and audience signals for targeting:PMax Asset Requirements
- Images: Minimum 5 (1200x628px landscape + 1200x1200px square)
- Video: Minimum 1 (under 30 seconds recommended)
- Headlines: 5 (max 30 characters each)
- Descriptions: 5 (max 90 characters each)
- Logo: 1 (1200x1200px). On a Brand Guidelines campaign the square logo and business name go on the campaign instead of the asset group — use
add_pmax_campaign_logo
Example Prompts
Analyze Performance
Pull Google Ads metrics and highlight underperforming campaigns.
Research Keywords
Research keywords with real CPC data from Google Keyword Planner.
Find Wasted Spend
Identify keywords spending without converting.
Create a Search Campaign
End-to-end Google Search campaign with keyword research and ad copy.
Create a Performance Max Campaign
PMax campaign across all Google channels with asset validation.
Add Search Themes to PMax
Add search themes to an existing PMax campaign to guide targeting.
Add Audience Signals to PMax
Find and add audience signals to a PMax campaign for better targeting.
Optimize Budget
ROAS-based budget reallocation across campaigns.
Launch a Shopping Campaign
Link Merchant Center and launch a Standard Shopping campaign with a product partition tree.
Keyword Research: What You Need to Know
Theresearch_keywords tool connects directly to Google Keyword Planner data. You get:
- Search volume: Monthly search estimates for each keyword
- CPC data: Average cost-per-click and estimated bid range
- Competition level: Low, Medium, or High
- Keyword suggestions: Related keywords you may not have considered
Ad Copy Guidelines
Thesuggest_ad_content tool generates headlines and descriptions within Google’s strict character limits:
- Headlines: Up to 15 headlines, max 30 characters each
- Descriptions: Up to 4 descriptions, max 90 characters each
- Display URL paths: 2 paths, max 15 characters each
Budget Guidelines
- Minimum: $10/day per campaign (Google’s practical minimum for Search)
- Recommended: $30+/day for meaningful data collection
- Testing: Start with $40/day split across 3-5 ad groups to test different keyword themes
- Scaling: Once you find keywords with CPA below target, increase budget 20-30% every 5-7 days
- PMax minimum: $20+/day recommended (PMax needs budget to test across multiple channels)
Best Use Cases for Google Ads
- Demand capture: Reach people actively searching for your product or service (highest intent of any platform)
- Local services: Plumbers, dentists, lawyers, restaurants — people searching “near me”
- E-commerce: Product searches, comparison shopping, brand searches
- SaaS & B2B: High-intent keywords like “CRM software” or “marketing automation tool”
- Lead generation: Contact forms, phone calls, demo requests from search traffic
Troubleshooting
”Ad account not connected” error
Re-authenticate your Google Ads account:”Asset validation failed” error
Common causes:- Headlines exceed 30 characters or descriptions exceed 90 characters
- Fewer than 5 images for PMax campaigns
- Image dimensions do not meet minimum requirements
- Missing required asset types (PMax needs images, headlines, descriptions, and at least one logo)
“Campaign creation failed” error
Most common reason: skipping workflow steps. Google campaigns require keyword research and asset validation before creation. If you jump straight tocreate_search_campaign without running research_keywords and validate_and_prepare_assets first, it will fail.
Retail PMax asset groups used to fail on assets you had actually supplied. Google validates an asset group at the end of each batch of asset links, so creating and linking assets in an interleaved order could start validation before the required assets existed. Every asset is now created before anything is linked.
Exact or phrase keywords rejected on a Search campaign
If a Search campaign is configured for broad match only (AI Max), Google rejects exact and phrase keywords — with an error code newer than the client library can name, so the only thing that used to surface was the placeholder “The error code is not in this version.” Adspirer now checks the campaign’s real match-type setting before reporting anything, then tells you plainly that this campaign accepts broad match only. Either add the keywords as broad match, or add them to a campaign that isn’t broad-match-only. Exact and phrase keywords on normal Search campaigns are unaffected. If you’re using agent skills, the AI enforces the correct workflow automatically.”Operation not allowed for the given context” (bid strategy)
This almost always means the campaign is attached to a shared (portfolio) bid strategy, so its bidding can’t be changed at the campaign level.update_bid_strategy now detects this and tells you the two ways forward: detach the portfolio strategy from the campaign, or edit the shared strategy itself (which applies to every campaign using it). If you’re switching to Smart Bidding (Target CPA / Target ROAS), Adspirer also reminds you of the prerequisites — active conversion tracking with recent conversion data — and suggests MAXIMIZE_CONVERSIONS as a no-target fallback that works with less data.
”Assets are duplicated across operations”
Google rejects a Responsive Search or Display ad edit if any two headlines (or two descriptions) are identical after ignoring case and whitespace. Adspirer now de-duplicates headlines and descriptions automatically before submitting, so this rarely surfaces. If de-duping leaves you below Google’s minimum count, the error tells you exactly how many more unique headlines or descriptions to provide.”No search term data” on a Performance Max campaign
Not a data problem. Google stores Performance Max queries separately from Search and Shopping queries, andanalyze_search_terms reads only the latter. Ask again with analyze_pmax_search_terms, or analyze_pmax_search_categories for the grouped view. See PMax search terms.
”Keyword research returned no results”
This usually means your seed keywords or business description is too narrow. Try:- Broader seed keywords (e.g., “plumber” instead of “emergency residential copper pipe repair”)
- Different location targeting (e.g., expand from city to state)
- More descriptive business description so the tool can suggest related terms
High CPA with no conversions
Common issue with new campaigns. Troubleshoot:- Review search terms with
analyze_search_terms— are irrelevant queries consuming budget? - Add negative keywords with
add_negative_keywordsto block wasteful clicks - Check landing page quality — Google Ads can drive clicks but conversions depend on your website
- Use
analyze_wasted_spendto identify keywords spending without converting
FAQ
What's the difference between Search and Performance Max campaigns?
What's the difference between Search and Performance Max campaigns?
When should I use Display instead of Performance Max?
When should I use Display instead of Performance Max?
Does Adspirer generate images or videos for Google Ads?
Does Adspirer generate images or videos for Google Ads?
suggest_ad_content tool, but it does not create images or videos. For PMax campaigns, you provide image/video URLs from Google Drive, Dropbox, S3, or any public URL. The validate_and_prepare_assets tool ensures your assets meet Google’s specifications.Can I manage Google Ads and Meta Ads from the same conversation?
Can I manage Google Ads and Meta Ads from the same conversation?
get_connections_status to see all connected platforms.What's the difference between Google Ads and Meta Ads?
What's the difference between Google Ads and Meta Ads?
What are PMax search themes and audience signals?
What are PMax search themes and audience signals?
Can Adspirer run Shopping and App campaigns, not just Search?
Can Adspirer run Shopping and App campaigns, not just Search?
How much does Adspirer cost for Google Ads?
How much does Adspirer cost for Google Ads?
Is my Google Ads data secure?
Is my Google Ads data secure?
Related Documentation
- Google Display Ads Integration — Display Network, retargeting, Smart Display
- YouTube Ads Integration — Video campaigns on YouTube
- Meta Ads Integration
- LinkedIn Ads Integration
- TikTok Ads Integration
- Campaign Creation Workflows
- How to Connect ChatGPT to Google Ads — Step-by-step guide for managing Google Ads from ChatGPT
- How to Connect Claude to Google Ads — Step-by-step guide for managing Google Ads from Claude
- Google Ads + AI Integration
- Pricing & Plans
- Prompt Engineering Playbook — A custom skill, dossier, and prompt book generated from your Google Ads account ($39 one-time)

