Toffu for Meta Ads
Toffu AI v1.0.0
Analyze and edit Meta Ads
From the developer
Declared capabilities
- Meta Ads spend, purchases and ROAS, with age, gender and placement breakdowns
- Creative report: every ad's title, text and thumbnail next to its frequency, CTR and ROAS
- List campaigns, ad sets and ads
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 Meta campaigns spent the most in the last 7 days, and what was their ROAS?
Sources & dates
Developer declarations; not independently tested. Listing last checked Nov 9, 2026. Package observed Nov 9, 2026.
Description
From the marketplace listing
Toffu connects ChatGPT to your Meta ad account. Sign in with Facebook. Ask about spend, purchases and ROAS for any date range, split by age, gender or placement. See which creatives work and which are fatigued. List campaigns, ad sets and ads, and create, update, pause or delete them. Every change is staged first: Toffu shows you a preview, and nothing reaches your ad account until you confirm. Already use Toffu? Sign in, and your connected Meta ad 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 7, 2026. Last seen Nov 9, 2026.
Similar plugins
Find competitors to follow as you develop your plugin.
-
Toffu for Google Ads: performance, campaign changes and audits for Google Ads in ChatGPT. Nothing goes live until you confirm.
Shared terms: ads, analyze, edit, campaign
-
Toffu for TikTok Ads: performance, campaign changes and audits for TikTok Ads in ChatGPT. Nothing goes live until you confirm.
Shared terms: ads, analyze, edit, campaign
-
Motion connects OpenAI to your creative analytics workspace. Analyze ad creative performance across Meta campaigns — surface top performe...
Shared terms: ads, meta, analyze, campaign
-
Windsor.ai Facebook Ads connects your Meta Ads (Facebook and Instagram Ads) data to your AI assistant, so you can analyze performance and...
Shared terms: ads, analyze, campaign, confirm
-
Adplane connects your Google Ads and Meta Ads accounts to ChatGPT so you can analyze performance and make changes in the same conversatio...
Shared terms: ads, meta, campaign, creative
Keywords
Files & skills
File archives
Skill instructions
account-audit3.15 KB
---
name: account-audit
description: Audit a Meta Ads account with Toffu. Use when the user asks to audit, review or health-check their Facebook or Instagram ads, or asks what to fix or improve. Ranks campaigns, ad sets and creatives by spend and ROAS, flags waste, fatigue and budget limits, and proposes fixes the user confirms.
---
# Meta 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 Meta ad accounts are connected, ask which one. Pass its id as `account_ids` `{"meta_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools. Follow any conversion events or targets in `custom_instructions`.
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). Read `conversions_by_action` in the rows. If the account has no purchases but has leads or another event, call it again with that event in `conversion_events` (for example `["lead"]`) and say which event you used.
4. Call `query_campaign_performance` for the 30 days before, for the trend.
5. Call `list_campaigns` and `list_ad_sets` for status, objective and daily budget. Meta budgets in these lists are in minor units: divide `daily_budget` by 100. A campaign without a daily budget has its budget on its ad sets.
6. Call `creative_report` for the last 30 full days, for the creatives and their frequency.
7. 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, and the change against the previous 30 days.
8. 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.
- **Budget-limited winner:** ROAS above the account ROAS, and average daily spend is 90% or more of the daily budget.
- **Sharp drop:** conversions down 30% or more, with spend flat or up.
- **Tired creative:** an active ad with frequency 3 or more and ROAS below the account ROAS.
- **Paused winner:** a paused campaign that had ROAS above the account ROAS in the previous period.
9. Report:
- Account totals: spend, purchases (or the event used), conversion value, ROAS, CPA, against the previous period.
- One table: campaign, status, spend, conversions, ROAS, CPA, finding.
- The 3 best and 3 worst creatives by ROAS, with title and thumbnail link.
- At most 3 recommended actions, each with the numbers that support it.
10. Offer each action as a change: `propose_update_campaign` or `propose_update_ad_set` (`status`, `daily_budget_amount` in the account currency) or `propose_update_ad` (`status`). 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.
audience-breakdown2.75 KB
---
name: audience-breakdown
description: Break down Meta Ads results by age, gender and placement with Toffu. Use when the user asks who converts, which age group or gender to target, which placements (Facebook, Instagram, Reels, Stories) work, or how to structure ad sets. Finds the segments that waste or win and proposes targeting or budget changes the user confirms.
---
# Meta Ads audience and placement breakdown
Use the Toffu tools only. Never apply a change the user has not confirmed.
## Steps
1. Call `get_account_context`. If several Meta ad accounts are connected, ask which one. Pass its id as `account_ids` `{"meta_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) three times, with `breakdowns` `["age"]`, then `["gender"]`, then `["publisher_platform", "platform_position"]`.
3. For each segment, compute spend share, conversions, CPA = spend / conversions and ROAS = conversion_value / spend. Compare with the account average.
4. Flag:
- **Waste segment:** at least 10% of spend, and CPA above 1.5x the account CPA (or 0 conversions).
- **Winning segment:** ROAS above 1.3x the account ROAS, with at least 10 conversions.
- **Placement gap:** a placement with spend and CTR below half of the account CTR.
5. Call `list_ad_sets` with `filters` `{"fields": "id,name,status,campaign_id,daily_budget,optimization_goal,targeting,promoted_object"}` for the current targeting of the ad sets that carry the waste or winning segments.
6. Report one table per breakdown (segment, spend, share, conversions, CPA, ROAS, flag) and at most 3 recommendations.
7. Offer each recommendation as a change:
- Narrow an age range or placements with `propose_update_ad_set` `{"targeting": {...}}`. Meta replaces the whole targeting, so send the ad set's current targeting from step 5 with only the changed keys edited. Check that the preview's `current` and `data` differ only in those keys.
- Test a winning segment in a new paused ad set with `propose_create_ad_set` (`name`, `optimization_goal`, `targeting`, `promoted_object` copied from the current ad set).
- Move budget to the ad set with the winning segment with `propose_update_ad_set` or `propose_update_campaign` `{"daily_budget_amount": <amount>}`.
Show the preview. Call `apply_change` only after the user confirms that change.
## Rules
- Breakdowns are Meta's estimates and do not add up exactly to the campaign total. Say so when the gap is above 5%.
- Advantage+ audiences and placements often do better than manual exclusions. Recommend a test before an exclusion when the segment has fewer than 30 conversions.
- Do not narrow targeting under a special ad category (housing, employment, credit, politics).
budget-pacing2.75 KB
---
name: budget-pacing
description: Check Meta 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 on Facebook and Instagram this month. Projects month-end spend per campaign against the daily budgets or a monthly target, and proposes budget changes the user confirms.
---
# Meta 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 Meta ad accounts are connected, ask which one. Pass its id as `account_ids` `{"meta_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 status and daily budget. For campaigns without a daily budget, call `list_ad_sets`: their budget is on the ad sets. Budgets in these lists are in minor units: divide `daily_budget` by 100.
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 active campaign: 7-day average daily spend / daily budget. Flag 95% or more (limited by budget) and below 70% (budget not used: often a narrow audience or a low bid cap).
7. If the projection is below 95% or above 105% of the target, propose new daily budgets with `propose_update_campaign` (or `propose_update_ad_set` where the budget is on the ad set) `{"daily_budget_amount": <amount in the account currency>}`. 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. `daily_budget_amount` is in whole currency units, not minor units.
- Change a budget by 20% or less at a time. A larger change can restart Meta's learning phase.
- Meta can spend up to 75% more than 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.
creative-fatigue2.33 KB
---
name: creative-fatigue
description: Find tired Meta ad creatives with Toffu. Use when the user asks which ads are fatigued, what to refresh, why results drop, or for a creative audit. Compares each creative's frequency, CTR and CPA in the last 7 days against the 3 weeks before, and gives a keep, watch, refresh or pause call per ad.
---
# Meta Ads creative fatigue
Use the Toffu tools only. Never apply a change the user has not confirmed.
## Steps
1. Call `get_account_context`. If several Meta ad accounts are connected, ask which one, and pass its id as `account_id`.
2. Call `creative_report` for the last 7 full days (end date = yesterday). Then call it for the 21 days before. Each row is one ad, with its creative title, text, thumbnail and metrics.
3. Match the rows by `ad_id`. For each ad with spend in both windows, compute:
- CTR change = (CTR last 7 days - CTR before) / CTR before
- CPA change = (CPA last 7 days - CPA before) / CPA before, only when both windows have conversions
- Frequency in the last 7 days
4. Count the fatigue signals:
- **Frequency:** 3.0 or more for prospecting, 5.0 or more for retargeting (campaign or ad set name with "retargeting", "remarketing" or "DPA").
- **CTR decay:** CTR down 25% or more.
- **CPA drift:** CPA up 30% or more.
5. Give each ad one call:
- **Keep:** 0 signals.
- **Watch:** 1 signal. Check again in 7 days.
- **Refresh:** 2 signals. Keep the offer and audience, change the hook or visual.
- **Pause:** 3 signals, or spend in the last 7 days above 2x the account CPA with 0 conversions.
6. Report one table, sorted by signal count and then spend: ad, campaign, thumbnail link, spend, frequency, CTR and CPA in both windows, signals, call. Under it, say what the best creatives have in common (format, hook, offer), from their title and text.
7. For each ad marked Pause, offer `propose_update_ad` `{"status": "PAUSED"}`. Show the preview. Call `apply_change` only after the user confirms. Before pausing the last active ad of an ad set, tell the user that the ad set stops delivering.
## Rules
- High frequency with steady CTR and CPA is saturation, not fatigue. Recommend a broader audience, not a pause.
- A change on fewer than 10 conversions is noise. Say so.
- Toffu cannot upload new images or videos here. For a refresh, describe the new creative so the user can make it.
scale-winners2.29 KB
---
name: scale-winners
description: Scale the best Meta Ads campaigns and ad sets with Toffu. Use when the user asks where to put more budget, what to scale, or how to grow results on Facebook and Instagram without losing efficiency. Finds the campaigns and ad sets with the best ROAS and room to spend, and proposes step-by-step budget increases the user confirms.
---
# Meta Ads scale winners
Use the Toffu tools only. Never apply a change the user has not confirmed.
## Steps
1. Call `get_account_context`. If several Meta ad accounts are connected, ask which one. Pass its id as `account_ids` `{"meta_ads": "<id>"}` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Ask for the target CPA or ROAS and how much more the user wants to spend, unless the user said it.
3. Call `query_campaign_performance` for the last 14 full days with `level` "adset", and once with `time_increment` "7" for the last 28 full days, for the trend.
4. Call `list_campaigns` and `list_ad_sets` for status and daily budget (minor units: divide `daily_budget` by 100).
5. Call `creative_report` for the last 14 full days, for the frequency of each winner's ads.
6. Mark a campaign or ad set as a winner when all of these are true:
- ROAS above the target ROAS (or CPA below the target CPA), or above the account ROAS without a target.
- At least 10 conversions in the 14 days.
- ROAS in the last 7 days not more than 20% below the 7 days before.
- Its ads have frequency below 3.
7. Report the winners with spend, conversions, ROAS, CPA, budget use (average daily spend / daily budget) and frequency, and the ones you left out with the reason.
8. For each winner, propose a budget increase of 20% with `propose_update_campaign` (budget on the campaign) or `propose_update_ad_set` (budget on the ad set) `{"daily_budget_amount": <new amount>}`. If the user wants more, propose another step after 3 to 4 days, not now. Show each preview. Call `apply_change` only after the user confirms that change.
## Rules
- Use the account currency. `daily_budget_amount` is in whole currency units.
- Never raise a budget by more than 20% in one step. A larger change can restart Meta's learning phase.
- A winner with frequency 3 or more needs new creatives or a broader audience before more budget. Say so instead of raising its budget.
wasted-spend2.6 KB
---
name: wasted-spend
description: Find Meta Ads spend that brings no return. Use when the user asks where they waste money on Facebook or Instagram, what to pause or cut, or which campaigns, ad sets or ads do not convert. Finds spend with no or weak conversions at every level and proposes pauses or budget cuts the user confirms.
---
# Meta 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 Meta ad accounts are connected, ask which one. Pass its id as `account_ids` `{"meta_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). If purchases are 0 but `conversions_by_action` shows leads or another event, use that event in `conversion_events` and say so.
3. Call `query_campaign_performance` again with `level` "adset", then with `level` "ad", for the same dates.
4. Mark a row as waste when it is active 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: its CPA is more than 1.7x the account CPA.
5. Work from the top down: if a whole campaign is waste, report the campaign, not each of its ads.
6. Call `list_campaigns` and `list_ad_sets` for the status and daily budget of each waste item. Budgets there are in minor units: divide `daily_budget` by 100.
7. Report:
- Total wasted spend and its share of account spend.
- One table: level, name, spend, conversions, ROAS, the reason.
- The amount the user saves per month for each one (average daily spend x 30).
8. For each waste item, propose one action:
- **Pause** with `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad` `{"status": "PAUSED"}` when it has 0 conversions.
- **Cut the budget** with `propose_update_campaign` or `propose_update_ad_set` `{"daily_budget_amount": <new amount>}` when it converts at a low ROAS. Cut by 20% to 50%.
Show each preview. Call `apply_change` only after the user confirms that change.
## Rules
- Never pause the account's only converting campaign.
- Retargeting ad sets often have a high CPA on few conversions. Tell the user before you propose to pause one.
- An ad set or ad in Meta's learning phase (launched in the last 7 days) is not waste yet. Say so instead of pausing it.
weekly-report2.07 KB
---
name: weekly-report
description: Weekly Meta Ads performance report with Toffu. Use when the user asks for a weekly report, a week-over-week comparison, or how last week went on Facebook and Instagram. Compares the last 7 days with the 7 days before, highlights the best and worst campaigns and creatives, and changes over 20%.
---
# Meta Ads weekly report
Use the Toffu tools only. This skill changes nothing unless the user asks for a change.
## Steps
1. Call `get_account_context`. If several Meta ad accounts are connected, ask which one. Pass its id as `account_ids` `{"meta_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. Call `creative_report` for the last 7 full days.
4. For the account and for each campaign, compute for both weeks: spend, impressions, reach, clicks, CTR = clicks / impressions, conversions, CPA = spend / conversions, ROAS = conversion_value / spend. When the denominator is 0, show "n/a", never 0 or infinity.
5. 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".
- The top 3 creatives of the week by ROAS, with title, thumbnail link, spend and frequency, and any active creative with frequency 3 or more.
6. End with at most 3 recommended next steps. If the user wants a change, use the matching `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad` 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.
- Meta reports conversions by attribution date, so the last 1 to 3 days can still rise. Say so when last week looks worse only at its end.
Release notes
First release: Meta Ads performance, a creative report, and campaign changes in ChatGPT, with a preview you confirm before anything changes. Skills: account audit, creative fatigue, wasted spend, budget pacing, audience breakdown, scale winners, weekly report.
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
- Meta Ads spend, purchases and ROAS, with age, gender and placement breakdowns
- Creative report: every ad's title, text and thumbnail next to its frequency, CTR and ROAS
- List campaigns, ad sets and ads
- Create, update, pause and delete campaigns, ad sets and ads, with a preview you confirm
Package observed Nov 9, 2026.
Technical details
- First seen
- Nov 7, 2026 · 00:00 UTC
- Last seen
- Nov 9, 2026 · 00:00 UTC
- Collection status
- Collected
plugin_asdk_app_6aec3e187b888191b53ec5b539c5f590
Download plugin data (JSON)Plugin details: freshly prepared. Prepared . Refreshed when plugin data changes or after 6 hours. Your account and Follow status are live.