← Plugin catalog
Business & Operations

Toffu for Google Ads

Toffu AI v1.0.0

Analyze and edit Google Ads

Create a free account to save this plugin.

Competitor profile

Developer declarations; not independently tested. Listing last checked Nov 4, 2026. Package observed Nov 3, 2026.

Declared capabilities

  • Google Ads spend, conversions and ROAS for any date range
  • List campaigns, ad groups and ads
  • Create, update, pause and delete campaigns, ad groups and ads, with a preview you confirm

Cost & access

Toffu does not sell products or process payments in ChatGPT.

Declared limitations

  • Money transfer is out of scope
  • No access outside the connected workspace
  • No change without confirmation

Onboarding example

Which Google Ads campaigns spent the most in the last 7 days, and what was their ROAS?

View package source →

Description

From the marketplace listing

Toffu connects ChatGPT to your Google Ads account. Sign in with Google. Ask about spend, conversions and ROAS for any date range. List campaigns, ad groups and ads, and create, update, pause or delete them. Every change is staged first: Toffu shows you a preview, and nothing reaches your Google Ads account until you confirm. Already use Toffu? Sign in, and your connected Google Ads accounts are ready.

Language: English · Automatically detected from descriptions.

Changes

No changes recorded yet. Follow this plugin to keep track of future changes.

First seen Nov 3, 2026. Last seen Nov 4, 2026.

Keywords

Files & skills

File archives

Plugin package12 files · 64.5 KBBrowse files →
Skill instructions
account-audit2.75 KB

View saved version →

---
name: account-audit
description: Audit a Google Ads account with Toffu. Use when the user asks to audit, review or health-check their Google Ads, or asks what to fix or improve. Ranks campaigns by spend and ROAS, flags waste and budget limits, and proposes fixes the user confirms.
---

# Google Ads account audit

Use the Toffu tools only. Never apply a change the user has not confirmed.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Ask for the target CPA or ROAS, unless the user gave one. Without a target, use the account average.
3. Call `query_campaign_performance` for the last 30 full days (end date = yesterday). Then call it again for the 30 days before, for the trend.
4. Call `list_campaigns` for status, channel type, bidding strategy and daily budget (`campaignBudget.amountMicros` / 1,000,000, in the account currency).
5. For each campaign with spend in either period, compute:
   - ROAS = conversion_value / spend
   - CPA = spend / conversions
   - Share of account spend
   - Average daily spend = spend / 30
   - Change in spend and conversions against the previous 30 days
6. Flag these findings, worst first:
   - **Off target:** CPA above the target CPA, or ROAS below the target ROAS.
   - **No conversions:** 0 conversions, and spend above 2x the account CPA. If the account has no conversions, use spend above 10% of account spend.
   - **Low return:** ROAS below 60% of the account ROAS, with at least 10% of account spend.
   - **Budget-limited winner:** ROAS above the account ROAS, and its average daily spend is 90% or more of its daily budget.
   - **Room to scale:** ROAS 2x the account ROAS or more, with average daily spend below 80% of its daily budget.
   - **Sharp drop:** conversions down 30% or more, with spend flat or up.
   - **Paused winner:** a paused campaign that had ROAS above the account ROAS in the previous period.
7. Report:
   - Account totals: spend, conversions, conversion value, ROAS, CPA, against the previous period.
   - One table: campaign, status, spend, conversions, ROAS, CPA, finding.
   - At most 3 recommended actions, each with the numbers that support it.
8. Offer each action as a change. Use `propose_update_campaign` (`status`, `daily_budget` in account currency, `target_roas`, `target_cpa`). Show the preview. Call `apply_change` only after the user confirms that change.

## Rules

- Use the account currency. Never add totals in different currencies.
- Say "no data" when a metric is missing. Never estimate it.
- Do not recommend a change from fewer than 7 days of data or fewer than 10 conversions without saying that the sample is small.
ad-copy-refresh2.07 KB

View saved version →

---
name: ad-copy-refresh
description: Write new Google Ads responsive search ads with Toffu. Use when the user asks for new ad copy, an ad refresh, a test of new headlines, or to replace a tired ad. Reads the current ads, writes a new ad for the ad group, and proposes to pause the old one after the user confirms.
---

# Google Ads ad copy refresh

Use the Toffu tools only. Never apply a change the user has not confirmed.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Ask which campaign or ad group, unless the user said it. Call `list_ad_sets` (it lists the whole account; keep the rows of that campaign) for the ad group's `adGroup.resourceName` and `adGroup.name`.
3. Call `list_ads` and keep the ads of that ad group. Read their headlines, descriptions and final URL.
4. Call `query_campaign_performance` for the last 30 full days for the campaign's results, so the copy fits what works.
5. Write one new responsive search ad:
   - 8 to 15 headlines, each 30 characters or fewer. Include the brand, the main product words, a benefit, an offer or proof, and a call to action.
   - 2 to 4 descriptions, each 90 characters or fewer.
   - The same final URL as the current ad, unless the user gives a new one.
   - No claim the user has not given (prices, discounts, awards).
6. Show the copy with the character count of each line. Change it until the user approves it.
7. Call `propose_create_ad` with fields `ad_group_resource_name`, `ad_group_name`, `headlines`, `descriptions`, `final_urls`. Show the preview. Call `apply_change` only after the user confirms.
8. Offer to pause the old ad with `propose_update_ad` `{"status": "PAUSED"}` (entity id `<ad_group_id>~<ad_id>`). Recommend to keep both running for 2 to 4 weeks first, to compare them.

## Rules

- Ad text cannot be edited in Google Ads. A change is always a new ad.
- Count characters exactly. Google refuses a headline over 30 or a description over 90 characters.
budget-pacing2.31 KB

View saved version →

---
name: budget-pacing
description: Check Google Ads budget pacing for the month with Toffu. Use when the user asks if they are on track, over or under budget, or how much they will spend this month. Projects month-end spend per campaign against the daily budgets or a monthly target, and proposes budget changes the user confirms.
---

# Google Ads budget pacing

Use the Toffu tools only. Never apply a change the user has not confirmed.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Ask for the monthly budget target, unless the user gave one. If there is no target, use the sum of the daily budgets x the days in the month.
3. Call `query_campaign_performance` with `time_increment` "1" (daily rows), from the earlier of the first day of this month and 7 days ago, to yesterday.
4. Call `list_campaigns` for each campaign's daily budget (`campaignBudget.amountMicros` / 1,000,000) and status.
5. For each campaign, compute:
   - Spend so far this month, from the rows dated in this month. Include paused campaigns: their spend counts.
   - Average daily spend over the last 7 days. Use 0 for a campaign that is paused now.
   - Projected month-end spend = spend so far + (average daily spend x days left, today included).
6. Report:
   - Account spend so far, projected month-end spend and the target, with the difference in amount and percent.
   - One table: campaign, daily budget, average daily spend, spend so far, projected spend.
   - The status: on track (projection 95% to 105% of the target), over or under.
   - Daily budget use for each ENABLED campaign: yesterday's spend / daily budget. Flag 90% or more (limited by budget) and below 70% (budget not used).
7. If the projection is below 95% or above 105% of the target, propose new daily budgets with `propose_update_campaign` `{"daily_budget": <amount>}`. Move budget to the campaigns with the highest ROAS first. Show each preview. Call `apply_change` only after the user confirms that change.

## Rules

- Use the account currency.
- Google Ads can spend up to 2x the daily budget on one day. Use the 7-day average, not one day.
- In the first days of a month, say that the projection rests on the last 7 days.
campaign-health2.22 KB

View saved version →

---
name: campaign-health
description: Daily Google Ads health check with Toffu. Use when the user asks if anything is broken, why a campaign stopped, or for a status check. Finds campaigns that are enabled but do not serve, campaigns with no impressions yesterday, budget-limited campaigns and sudden conversion drops.
---

# Google Ads campaign health

Use the Toffu tools only. Never apply a change the user has not confirmed.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Call `list_campaigns` for status, serving status, channel type and daily budget (`campaignBudget.amountMicros` / 1,000,000).
3. Call `query_campaign_performance` with `time_increment` "1" for the last 8 full days (end date = yesterday).
4. Flag these problems, worst first:
   - **Not serving:** status ENABLED, but the serving status is not SERVING (for example ENDED, SUSPENDED, PENDING).
   - **No impressions:** status ENABLED and SERVING, with 0 impressions yesterday but impressions in the 7 days before.
   - **Budget-limited:** status ENABLED, and yesterday's spend is 90% or more of the daily budget.
   - **Underused budget:** status ENABLED, and the 7-day average daily spend is below 70% of the daily budget.
   - **Conversion drop:** yesterday's conversions are more than 30% below the daily average of the 7 days before, while spend is flat or up. Tell the user to check conversion tracking, because a drop with steady clicks often means a tracking problem.
5. Call `list_ads` and list ads with status PAUSED in the campaigns that have a problem, so the user sees what is stopped.
6. Report each problem with its campaign, the numbers and one fix. If there is no problem, say that all enabled campaigns serve.
7. For a fix the user wants (enable, pause, new daily budget), use `propose_update_campaign`. Show the preview, and call `apply_change` only after the user confirms.

## Rules

- This check uses daily data up to yesterday. It cannot see hourly spend or today.
- It cannot see ad disapprovals or policy reasons. Tell the user to check them in Google Ads when a campaign does not serve.
launch-search-campaign2.4 KB

View saved version →

---
name: launch-search-campaign
description: Build a new Google Ads search campaign with Toffu. Use when the user asks to launch, create or set up a search campaign. Plans the campaign, ad group, keywords and ad with the user, then stages each part as a paused proposal the user confirms.
---

# Google Ads search campaign launch

Use the Toffu tools only. Never apply a change the user has not confirmed. Everything is created PAUSED.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Ask for what you do not have: the product or service, the landing page URL, the daily budget, the goal (sales or leads) and the target CPA or ROAS, if any.
3. Write a plan and get the user's approval before you stage anything:
   - Campaign: name, daily budget, bidding (MAXIMIZE_CONVERSIONS for leads, MAXIMIZE_CONVERSION_VALUE for sales).
   - One ad group per theme, at most 3.
   - 5 to 20 keywords per ad group, in PHRASE or EXACT match. Use BROAD only if the user asks.
   - One responsive search ad per ad group: 8 to 15 headlines of 30 characters or fewer, 2 to 4 descriptions of 90 characters or fewer.
4. Call `propose_create_campaign` with fields `name`, `daily_budget_micros` (budget x 1,000,000), `campaign_type` "SEARCH", `bidding_strategy`, `status` "PAUSED". Show the preview, and call `apply_change` after the user confirms. Keep the campaign id from the result.
5. For each ad group, call `propose_create_ad_set` with `campaign_id` and fields `name`, `status` "ENABLED". Apply after the user confirms. Call `list_ad_sets` to get its `adGroup.resourceName`.
6. For each ad group, call `propose_create_keyword` with fields `ad_group_resource_name`, `ad_group_name` and `keywords` `[{"text": "...", "match_type": "PHRASE"}]`. Apply after the user confirms.
7. For each ad group, call `propose_create_ad` with fields `ad_group_resource_name`, `ad_group_name`, `headlines`, `descriptions`, `final_urls`. Apply after the user confirms.
8. Summarize what exists now. The campaign stays PAUSED. To start it, the user confirms `propose_update_campaign` `{"status": "ENABLED"}`.

## Rules

- The ad groups, keywords and ads only serve when the campaign is enabled. Say so.
- Never enable the campaign in the same step as you create it.
- Use the account currency for the budget.
wasted-spend2.29 KB

View saved version →

---
name: wasted-spend
description: Find Google Ads spend that brings no return. Use when the user asks where they waste money, what to pause or cut, or which campaigns do not convert. Finds campaigns and ad groups with spend and no or weak conversions, and proposes pauses or budget cuts the user confirms.
---

# Google Ads wasted spend

Use the Toffu tools only. Never apply a change the user has not confirmed.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Call `query_campaign_performance` for the last 30 full days (end date = yesterday). Compute the account CPA (spend / conversions) and ROAS (conversion_value / spend).
3. Call `list_campaigns` for each campaign's status and daily budget (`campaignBudget.amountMicros` / 1,000,000).
4. Mark a campaign as waste when it is ENABLED and one of these is true:
   - It has 0 conversions, and spent more than 2x the account CPA. If the account has no conversions, use more than 10% of account spend.
   - Its ROAS is below 60% of the account ROAS, and it has at least 10% of account spend. If conversion value is missing, use CPA instead: its CPA is more than 1.7x the account CPA.
5. Call `list_ad_sets` once. It lists the ad groups of the whole account; keep the rows whose `campaign.id` is a waste campaign, so the user sees what a pause stops.
6. Report:
   - Total wasted spend and its share of account spend.
   - One table: campaign, spend, conversions, ROAS, the reason.
   - The amount the user saves per month if they pause each one (average daily spend x 30).
7. For each waste campaign, propose one action:
   - **Pause** with `propose_update_campaign` `{"status": "PAUSED"}` when it has 0 conversions.
   - **Cut the budget by half** with `propose_update_campaign` `{"daily_budget": <new amount>}` when it converts but at a low ROAS.
   Show each preview. Call `apply_change` only after the user confirms that change.

## Rules

- Never pause the account's only converting campaign.
- Brand search campaigns often have low volume but protect the brand name. Tell the user before you propose to pause one.
- Say "no data" when conversion value is missing, and use the CPA rule in step 4.
weekly-report1.76 KB

View saved version →

---
name: weekly-report
description: Weekly Google Ads performance report with Toffu. Use when the user asks for a weekly report, a week-over-week comparison, or how last week went. Compares the last 7 days with the 7 days before and highlights the best and worst campaigns and changes over 20%.
---

# Google Ads weekly report

Use the Toffu tools only. This skill changes nothing.

## Steps

1. Call `get_account_context`. If several Google Ads accounts are connected, ask which one. Pass its id as `account_ids` `{"google_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Call `query_campaign_performance` for the last 7 full days (end date = yesterday), then for the 7 days before.
3. For the account and for each campaign, compute for both weeks: spend, impressions, clicks, CTR = clicks / impressions, conversions, CPA = spend / conversions, ROAS = conversion_value / spend. When the denominator is 0, show "n/a" (no impressions, no conversions or no spend), never 0 or infinity.
4. Report:
   - Account totals for both weeks, with the change in percent.
   - The 3 best campaigns by ROAS and the 3 worst by CPA (campaigns with spend only).
   - Every campaign whose CPA, ROAS, conversions or spend changed by more than 20%, marked as better or worse. Percent change = (this week - last week) / last week. When last week is 0 or n/a, show "new" instead of a percent.
5. End with at most 3 recommended next steps. If the user wants a change, use the matching `propose_update_campaign` call, show the preview, and call `apply_change` only after the user confirms.

## Rules

- Use the account currency.
- A change on fewer than 10 conversions is noise. Say so instead of calling it a trend.
- Say "no data" when conversion value is missing, and leave ROAS out.

Release notes

First release: Google Ads performance and campaign changes in ChatGPT, with a preview you confirm before anything changes.

Declared in the saved package. Remote tools may change independently.

Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package author
Toffu AI
Keywords
See keywords
Commerce declaration
Does not support commerceThis does not establish whether access is free or paid.
Review scenarios
5 positive · 3 negativeScenario counts, not test results.

Declared capabilities

  • Google Ads spend, conversions and ROAS for any date range
  • List campaigns, ad groups and ads
  • Create, update, pause and delete campaigns, ad groups and ads, with a preview you confirm

Package observed Nov 3, 2026.

Technical details
First seen
Nov 3, 2026 · 06:00 UTC
Last seen
Nov 4, 2026 · 00:00 UTC
Collection status
Collected

plugin_asdk_app_6ae1bfac9b888191ad689db2758d3836

Download plugin data (JSON)