Integration details
Description
Connect Groas to explore your Google Ads accounts in ChatGPT. Review campaigns, keywords, search terms, daily performance, account audits, and the changes Groas has made. Ask questions about results and investigate opportunities to improve your campaigns. Account access follows your Groas login. Read access is the default; eligible subscribers can opt into permission to make changes. Authorized changes affect your connected Google Ads account and are recorded in Groas’s action history. A Groas account and connected Google Ads account are required for account analysis.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- groas
- Access
- Account required
- First tracked
- 2026-09-25
- Tool count
- 76
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Groas
Get updates when Groas’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competitive lineup
76 tools agents can invoke
Read the AI account audit for this Google Ads account: overall health score, estimated ROAS uplift, the full findings report in Markdown, and the fixes it proposed with their execution status. Returns the most recent audit unless `auditId` names another, plus `recentAudits` so you can look up an earlier one. An audit is a snapshot of the account as it was when it ran — always say when it ran, and read current budgets, bids and statuses with queryGoogleAds instead of off the report. You cannot start or re-run an audit; the user does that from the Audit page in the dashboard.
getAccountAudit
Get daily performance metrics for ad groups. Useful for drilling into which ad groups drive performance within a campaign. Cost values are in micro-units (divide by 1,000,000).
adGroupDailyPerformance
Add a positive keyword to an existing ad group. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
add_keyword_to_ad_group
Attach a catalogued audience (from listAudiences) to an ad group, as observation, targeting (per the ad group mode) or exclusion. Undoable. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
attach_audience_to_ad_group
Attach an existing shared negative keyword list to a campaign so its keywords block searches there. Records a groas Action; Undo detaches it.
attach_negative_keyword_list
Get daily performance metrics for campaigns in this account, from groas's own synced store. Returns time-series data for trend analysis, newest first and paged: when `truncated` is true, call again with `cursor` set to `nextCursor` before totalling anything. Cost values are in micro-units (divide by 1,000,000). The store only holds the dates groas has asked Google for, per campaign: `coverage` lists each campaign's proven range (`syncedFrom` to `syncedThrough`, the last day that had fully ended in the account's time zone when the sync ran; about three weeks before groas first saw the campaign, topped up daily). A day inside a campaign's coverage with no row means zero delivery; a day outside it (today included) was never proven — read those from queryGoogleAds with `segments.date BETWEEN`, which Google keeps for years. Both `coverage` and `results` carry the Google Ads campaign id.
campaignDailyPerformance
Change an existing keyword match type. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
change_keyword_match_type
Pause or enable an existing keyword. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
mutate_keyword_status
Read the conversion tracking audit for this Google Ads account: a rule-based check of whether conversions are measured correctly (Google Ads setup in phase 1, Tag Manager and GA4 in phase 2). Returns the health score and band, the per-check results with severity, what each one found and what to do about it, plus `recentAudits` for earlier runs. `unavailableCount` counts checks that could not run because a source failed; `notCoveredCount` counts checks skipped because the user has not connected that source — neither means the account failed them. Results are from when the audit ran, so cite the date and verify current state with queryGoogleAds. You cannot start or re-run this audit; the user does that from the dashboard.
getConversionTrackingAudit
Create Google Ads assets (sitelinks, callouts, structured snippets, call assets, promotions) and link them at account, campaign, or ad group level. This writes to the live Google Ads account through the API — use it instead of telling the user to paste anything into Google Ads. Every asset in one call must share the same assetType; make one call per type. Google's character limits are enforced by the schema, so a rejected input is a copy problem to fix, not a reason to hand the work back to the user. Records a reversible groas Action.
create_ad_assets
Build new ad groups inside an EXISTING Search campaign, without creating a campaign: each new ad group gets its keywords and one responsive search ad, all created enabled in one atomic Google Ads request. Use it when the user wants more ad groups in a campaign they already have; use create_campaign_from_scratch only for a whole new campaign, and create_ads for extra ads in an ad group that already exists. The ad groups are created enabled and funded by the campaign's existing budget — serving immediately in an enabled campaign, or once a paused campaign is re-enabled (the result says which) — so call it only after the user confirms the exact plan. Each ad group is recorded as its own groas Action that Undo can remove.
create_ad_groups
Create new responsive search ads inside an EXISTING ad group of a Search campaign, from the copy you provide. Confirm the ad group with listAdGroups first. Google Ads allows at most 3 enabled responsive search ads per ad group, counting the ones already there, and the tool refuses a plan that would exceed it. The ads are created enabled — serving immediately when the campaign and ad group are enabled, otherwise once they are re-enabled (the result says which) — so call it only after the user confirms the exact copy. Each ad is recorded as its own groas Action that Undo can remove.
create_ads
Create a shared negative keyword list and attach it to campaigns, in one atomic request. Use it when the same exclusions should apply across campaigns; use negate_search_term for a single campaign or ad group. Records a groas Action on every attached campaign; Undo removes the list.
create_negative_keyword_list
Create and launch a complete Search campaign from scratch. It builds the campaign PAUSED, creates every ad group, keyword, and responsive search ad, then enables it only after the full setup succeeds. This starts spending the specified daily budget, so use it only for an explicit launch request.
create_campaign_from_scratch
Detach a shared negative keyword list from a campaign; the list itself and its other attachments stay. Records a groas Action; Undo re-attaches it.
detach_negative_keyword_list
Re-enable a PAUSED ad. Refuses when the ad group already has 3 enabled responsive search ads (Google's limit). Records a groas Action whose Undo pauses it again.
enable_ad
Re-enable a PAUSED ad group so its ads and keywords serve again (if the campaign itself is enabled). Records a groas Action whose Undo pauses it again.
enable_ad_group
Re-enable a PAUSED campaign so it starts serving and spending its daily budget again. Records a groas Action whose Undo pauses it again. For a campaign groas paused itself, Undo of that pause is equivalent.
enable_campaign
Read a campaign's Settings-page state from Google Ads: locations (targeted and excluded, with geo target constants), geo target type, languages, ad schedule, start and end dates, and networks. Call it before any set_campaign_* tool, since those take the COMPLETE new list rather than a diff.
get_campaign_settings
Get daily performance metrics for keywords. Useful for tracking individual keyword trends over time. Cost values are in micro-units (divide by 1,000,000).
keywordDailyPerformance
Fetch ~12 trailing months of per-month Google search volume for specific keywords, from Google Keyword Planner. Use it to see seasonality — when demand for a keyword peaks and troughs across the year — before proposing seasonal budget or bidding changes, and to tell "the campaign broke" apart from "market demand moved". Volumes are location-specific: pass campaignId to inherit an existing campaign’s locations and language, or set locations explicitly. This only reads Google Ads; it changes nothing. Use it before proposing a seasonal budget or bidding change, and take campaignId from a listCampaigns result in this conversation.
getKeywordSeasonality
List the Google Ads accounts connected to this Groas account. Call this first: every other tool needs one of the returned account ids as its accountId.
groas_list_accounts
List groas tool calls that FAILED on this account. Use this when the user asks why an expected change is missing, or whether groas hit errors on a campaign. The outcome of a failed call is NOT known: usually the change never reached Google Ads, but the mutation can also have succeeded and the error been raised while recording it, and a multi-step action can fail part-applied. Report these as failed attempts, and confirm the live state with queryGoogleAds before telling the user whether anything actually changed. Separate from listGroasActions, which returns calls that completed.
listGroasActionFailures
List AI actions taken by groas on this account (pausing ads, promoting search terms, budget changes, etc). Each row carries a `state` recording where it sits in the revert lifecycle: `applied`, `reverted`, `restored` (reverted then re-applied) or `revert_failed` (an undo was attempted and errored). No state establishes what is live in Google Ads. `applied` and `restored` mean "not currently undone", which is not the same as being the value in force, since a later action on the same lever supersedes an earlier one. `reverted` means an undo succeeded, but a later restore attempt can have failed part way and re-applied some of it. `revert_failed` may also have applied part way. Never read a current budget, bid or status off this history — get it from queryGoogleAds.
listGroasActions
The sitelinks, callouts, structured snippets, call and promotion assets linked at one level (account, campaign or ad group), with their asset IDs and content. Read it before unlinking or editing assets.
list_ad_assets
List ad groups for a specific campaign. Returns ad group names, statuses, and bidding config.
listAdGroups
The account's audience catalog (remarketing lists, in-market, affinity, custom and combined audiences groas has synced) with the catalog ids attach_audience_to_ad_group takes, and, when a campaign is given, what each of its ad groups has attached with the criterion row ids remove_audience_from_ad_group takes and the ad group's targeting mode.
listAudiences
List the current user’s brands and their existing offers. Use these exact brand and offer IDs before supercharging a campaign; never invent either ID.
listBrandsAndOffers
List campaigns for this Google Ads account with their configuration, supercharge status, and aggregate metrics. `sharedBudget: true` means the campaign sits on a shared Google Ads budget and its daily budget cannot be changed per campaign — never pick one to fund or receive a budget move. `isSupercharged` is the campaign-level offer link, which is what gates Search, Performance Max, Demand Gen and Video. Shopping is gated differently: `shoppingGroup` is set when the campaign is a tier of a groas Shopping campaign group, and its `isGroupManaged` (true only while the group is ACTIVE) is what says groas is still running automation on it — a campaign in a PAUSED or torn-down group keeps its membership row but gets nothing. The legacy Shopping flow is gated per ad group: `hasOfferLinkedAdGroup` answers that over every ad group in the campaign (listAdGroups is capped, so never conclude "none are linked" by scanning its rows), and `isOfferLinked` on a listAdGroups row tells you which ones. For a Performance Max campaign, `pmaxAutomation` reports whether each per-campaign automation switch is on. Final URL hygiene has two parts: `finalUrlHygiene` is the per-campaign switch, and `finalUrlHygieneAppliesExclusions` says whether the job actually excludes URLs — when it is false the job only records what it would exclude, so never tell a user exclusions are being applied unless it is true.
listCampaigns
List keywords for this account, optionally filtered by campaign or ad group.
listKeywords
The account's shared negative keyword lists (Google Ads exclusion lists) with their keywords and the campaigns each is attached to. Read it before creating, changing, attaching or detaching a list.
list_negative_keyword_lists
List search terms stored in the groas database for this account, with performance metrics and classification data.
listSearchTerms
Look up authoritative GAQL resource and field metadata for the Google Ads API version in use. Use this before writing a query with unfamiliar fields, after any GAQL schema/query error, or to check whether metrics, segments, and attributed-resource fields are compatible with a FROM resource. Never guess a field path when this tool can verify it.
lookupGaqlFields
Move a positive keyword between existing ad groups by pausing the source and creating or enabling the destination criterion. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
move_keyword_to_ad_group
Pause a positive keyword and add it as a campaign negative. This is unavailable for SKAG campaigns. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
move_keyword_to_negative
Add a poor-fit search term as an ad-group or campaign negative. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
negate_search_term
Pause one ad so it stops serving while the rest of its ad group keeps running. Refuses to pause the last enabled ad of an ad group, which would silently stop the ad group. Records a groas Action whose Undo re-enables it.
pause_ad
Pause one live ad group inside a campaign. Its ads and keywords stop serving immediately while the rest of the campaign keeps running. The action is recorded and can be undone from groas Actions.
pause_ad_group
Pause an entire live Google Ads campaign. This immediately stops its ads from serving. The action is recorded and can be undone from groas Actions.
pause_campaign
Get daily performance metrics for shopping products. Only relevant for Shopping campaigns. Cost values are in micro-units (divide by 1,000,000). Each row is one product within one ad group on one date, and results are capped by limit, so returned rows are not a reliable total count of unique products.
productDailyPerformance
Run a GAQL query against the user's Google Ads account. Use lookupGaqlFields first for unfamiliar fields instead of guessing paths. This tool preflights field existence and basic FROM-clause compatibility against the same Google Ads API schema used to run the query. Use this to fetch campaign performance, ad group details, keyword metrics, search terms, and any other data available via Google Ads Query Language. Results may be paginated; rowCount is only for the current page, so do not infer totals from one page alone. pageSize only caps the rows returned to you — use LIMIT in your GAQL query to bound the query itself, and pass nextPageToken to continue where a response was truncated.
queryGoogleAds
Regenerate one ad. Dynamic Search Ads regenerate descriptions only. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
AdCopyRegen
Regenerate all enabled ads in an ad group. Dynamic Search Ads regenerate descriptions only. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
regenerateAllAdsInAdGroup
Remove one ad from its ad group. Refuses to remove the last enabled ad. Records a groas Action; Undo re-creates a responsive search ad with the same copy (under a new ad ID, without its history).
remove_ad
PERMANENTLY remove an ad group with its keywords and ads. It can never be re-enabled and its name stays taken. Prefer pause_ad_group unless the user explicitly wants removal. Logged for the record with no Undo.
remove_ad_group
Remove an attached audience from an ad group by its criterion row id (from listAudiences). Undoable. This changes the live Google Ads account and records a reversible groas Action when supported. Use campaignId from listCampaigns.
remove_audience_from_ad_group
PERMANENTLY remove a campaign from Google Ads. It stops serving, keeps its history for reporting, and can never be re-enabled; the name stays taken. Prefer pause_campaign unless the user explicitly wants removal. Logged for the record with no Undo.
remove_campaign
Remove one positive keyword from its ad group. Use mutate_keyword_status to pause instead when the user may want it back with its history. Records a groas Action whose Undo re-adds the keyword.
remove_keyword
Rename an ad group in Google Ads. Names must be unique within the campaign. Records a groas Action whose Undo restores the previous name.
rename_ad_group
Rename a campaign in Google Ads. Names must be unique in the account. Records a groas Action whose Undo restores the previous name.
rename_campaign
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.