← Plugin catalog
Business & Operations

Toffu

Toffu AI v1.3.0

AI marketing agent

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

  • Campaign performance across all your connected ad platforms
  • List campaigns, ad sets and ads on Google Ads, Meta Ads and other connected platforms
  • Create, update, pause and delete campaigns, ad sets 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 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 ad accounts. Connect a platform by signing in to it; no separate Toffu account is needed. See campaign performance across all your connected ad platforms in one table: Google Ads, Meta Ads, LinkedIn, Microsoft, TikTok, Pinterest, Reddit, X Ads, Taboola, Outbrain, DV360, CM360 and more. 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. Google Ads and Meta Ads support the full set of actions. Microsoft, LinkedIn, TikTok, Pinterest, Reddit, X Ads, Taboola, Outbrain, ChatGPT Ads and DV360 support the changes their platforms allow; Toffu tells you when an action is not available on a platform. Need another platform? Ask, and Toffu gives you a link to connect it. Toffu only accesses the workspace you connect.

Language: English · Automatically detected from descriptions.

What changed

· 3 observations

Capabilities & instructions

Full description changed from “Toffu: campaign performance and campaign management for Google Ads and Meta Ads.” to “Toffu: campaign performance and campaign management across your ad platforms.”. Capabilities updated; open the comparison for details. Long description changed from “company's Google Ads and Meta Ads...

View comparison →
Technical updates · 1

Package or technical metadata updated

View technical comparison →
Earlier changes · 1 more observation days on this page

Keywords

Files & skills

File archives

Plugin package13 files · 70.8 KBBrowse files →
Skill instructions
attribution-modeling3.51 KB

View saved version →

---
name: attribution-modeling
description: Explain marketing attribution with Toffu: attribution models, windows, incrementality tests and media mix models. Use when the user asks why platforms report different conversions, which attribution model to trust, or how to measure a channel's real impact.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

# Marketing Attribution Methodology

## Attribution Model Comparison

### Rule-Based Models
- **Last-click**: all credit to the final touchpoint. Simple but biases toward bottom-funnel channels.
- **First-click**: all credit to the first touchpoint. Highlights acquisition channels but ignores nurturing.
- **Linear**: equal credit to all touchpoints. Fair but undifferentiating.
- **Time-decay**: more credit to touchpoints closer to conversion. Good for short sales cycles.
- **Position-based (U-shaped)**: 40% first, 40% last, 20% distributed across middle. Balances acquisition and closing.

### Algorithmic Models
- **Data-driven attribution** (GA4, Google Ads): uses machine learning on your data to distribute credit.
- Requires sufficient conversion volume (typically 300+ conversions/month for reliability).
- More accurate than rule-based but less transparent — treat as a black box.

## Incrementality Testing
- Attribution models measure correlation. Incrementality measures causation.
- **Geo-holdout tests**: suppress a channel in test markets. Compare conversion rates to control markets.
- **Ghost ads / PSA tests**: serve a public service ad to the control group instead of your ad.
- **Conversion lift studies**: platform-native (Meta, Google). Randomized control/exposed groups.
- Run incrementality tests quarterly on your largest spend channels.

## Media Mix Modeling (MMM)
- Regression-based approach using aggregate data (spend, impressions, external factors like seasonality).
- Doesn't require user-level tracking — works in a cookieless world.
- Best for budget allocation decisions across channels at the strategic level.
- Limitations: needs 2+ years of data, slow to reflect rapid changes, expensive to build in-house.

## Cross-Device Tracking
- Users convert across devices. Mobile discovery -> desktop purchase is common.
- Use Google Signals (GA4) for cross-device reporting — requires users to be signed into Google.
- Supplement with CRM data: email-based identity resolution across touchpoints.

## Offline Conversion Import
- Close the loop between online clicks and offline outcomes (phone calls, in-store purchases, closed deals).
- Import offline conversions to Google Ads and Meta via their respective APIs.
- Match on GCLID (Google) or FBCLID (Meta). Automate the upload pipeline.
- Offline data dramatically improves algorithmic bidding for lead-gen businesses.

## Attribution Window Selection
- Shorter windows (7-day click) are more conservative but may undercount longer journeys.
- Longer windows (28-day click) capture more conversions but include more noise.
- Match the window to your typical sales cycle. B2C impulse: 7-day. B2B consideration: 28-90 day.
budget-allocation2.91 KB

View saved version →

---
name: budget-allocation
description: Recommend how to split budget across ad platforms and campaigns with Toffu. Use when the user asks where to put more budget, what to cut, or how to rebalance spend between channels. Compares return per platform and campaign and proposes budget changes the user confirms.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

# Cross-Channel Budget Allocation

## Portfolio Budget Approach
- Treat total paid media budget as a single portfolio, not siloed channel budgets.
- Allocate based on marginal ROAS: shift dollars from channels with declining returns to channels with headroom.
- Rebalance monthly at minimum, weekly during peak periods or launches.

## Diminishing Returns Curves
- Every channel hits diminishing returns. Plot spend vs conversions to identify the inflection point.
- Below the inflection: scale aggressively. Above it: diminishing returns set in.
- Channels with steep curves (branded search) reach saturation faster than broad channels (Meta prospecting).

## Incrementality Testing
- ROAS alone is misleading — it conflates correlation with causation.
- Run **geo-holdout tests**: pause a channel in select markets, measure conversion lift in active vs holdout.
- Run **conversion lift studies** (available in Meta, Google) to measure incremental impact.
- Reallocate budget away from channels with low incrementality, regardless of last-click ROAS.

## Channel-Level ROAS Targets
- Set targets by channel AND funnel stage. Prospecting has lower ROAS than retargeting — that's expected.
- Branded search: 5-10x+ ROAS target.
- Non-branded search: 2-4x ROAS target.
- Meta prospecting: 1.5-3x ROAS target.
- Retargeting (all channels): 4-8x ROAS target.
- Adjust targets based on customer LTV, not just first-purchase value.

## Seasonal Budget Shifts
- Build a **seasonal budget calendar** based on historical conversion data.
- Increase budgets 2-4 weeks before peak periods (Q4, industry events) to warm algorithms.
- Reduce budgets gradually post-peak — sudden drops destabilize bidding algorithms.

## New vs Proven Channel Allocation (70/20/10)
- **70%**: proven, scaled channels with predictable returns.
- **20%**: growing channels with promising early data. Invest to validate scale.
- **10%**: experimental channels or tactics. Accept that some will fail — that's the point.
- Promote from 10% -> 20% -> 70% as data confirms viability. Cut what doesn't graduate.
google-ads-strategy4.11 KB

View saved version →

---
name: google-ads-strategy
description: Review a Google Ads account's structure, bidding and ad copy with Toffu. Use when the user asks how to set up or improve Google Ads campaigns, which bidding strategy to use, or for responsive search ad headlines and descriptions.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

Search terms, keywords, Quality Score and extensions are not readable here. Say so when the advice depends on them, and base the review on campaign data.

# Google Ads Strategy & Optimization

## Account Structure
- **Branded campaigns**: isolate brand terms. These have highest ROAS and lowest CPC.
- **Non-branded campaigns**: segment by product/service category or funnel stage.
- **Competitor campaigns**: bid on competitor terms selectively. Expect lower quality scores.
- Keep ad groups tightly themed — 5-15 keywords per ad group maximum.

## Keyword Match Types
- **Exact match**: highest intent, lowest volume. Use for proven converters.
- **Phrase match**: balances reach and relevance. Primary workhorse for most accounts.
- **Broad match**: only with Smart Bidding. Google's AI needs conversion data to make broad work.
- Layer match types deliberately — don't run the same keyword in all three types in the same campaign.

## Bidding Strategies
- **tCPA** (target Cost Per Acquisition): use when you have a clear CPA goal and 30+ conversions/month.
- **tROAS** (target Return On Ad Spend): use for e-commerce with variable order values.
- **Maximize conversions**: good for ramping new campaigns. Transition to tCPA once data accumulates.
- Never switch bidding strategies during high-traffic periods. Give algorithms 2-3 weeks to learn.

## Quality Score Optimization
- Three components: **expected CTR**, **ad relevance**, **landing page experience**.
- Improve CTR: test headlines aggressively, use keyword insertion where appropriate.
- Improve relevance: ensure ad copy mirrors the keyword theme.
- Improve landing page: fast load time, mobile-friendly, content matches ad promise.

## Negative Keyword Management
- Build negative keyword lists at account and campaign level.
- Review search terms report weekly. Add irrelevant queries as negatives immediately.
- Use shared negative lists across campaigns to prevent wasted spend consistently.

## Ad Extensions
- **Sitelinks**: 4-6 per campaign, link to high-value pages.
- **Callouts**: highlight USPs (free shipping, 24/7 support).
- **Structured snippets**: list product categories or service types.
- Extensions improve ad rank and CTR at no extra cost — always populate them.

## Audience Layering
- Layer in-market and custom intent audiences as **observation** mode first.
- Increase bids on high-performing audience segments.
- Use RLSA (remarketing lists for search ads) to bid more aggressively on past visitors.

## Responsive Search Ad Copy Constraints
- **Headlines: hard cap 30 characters each (including spaces and punctuation).** Count before output. Never propose, suggest, or display a headline over 30 chars, even in chat. Regenerate until every headline fits.
- **Descriptions: hard cap 90 characters each (including spaces and punctuation).** Count before output. Same rule: regenerate, do not truncate or "round up to fit later".
- Provide 3-15 headlines and 2-4 descriptions per RSA.
- Avoid em-dashes; use periods or commas. They consume characters and inflate counts.
- When presenting copy in tables/markdown, include a Chars column so the limit is auditable at a glance.
- If the user adds extra constraints (banned words, no price/budget mentions, theme focus), apply them on top of the length caps; never let added constraints push you over the caps.
meta-ads-creative-fatigue3.27 KB

View saved version →

---
name: meta-ads-creative-fatigue
description: Find tired Meta ads with Toffu, from frequency, CTR decline and CPA drift. Use when the user asks which ads to refresh, kill or keep, why Meta performance is dropping, or wants a creative fatigue audit.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

Pull ad rows with `query_campaign_performance` `level` "ad" and `platforms` ["meta_ads"], once for the last 7 days and once for the last 30. CTR = clicks / impressions; CPA = spend / conversions. Read each ad's status from `list_ads`.

# Meta Ads Creative Fatigue Detection

Use when the user asks "which ads are tired", "what should we refresh", "why is performance dropping", "creative fatigue audit", or wants a kill/keep/refresh recommendation per ad.

## Signal stack (all three must be checked, not just frequency)

1. **Frequency**: lifetime impressions per unique reached user. Pull `frequency` from the ad-level insights. Flag at >= 3.0 for prospecting, >= 5.0 for retargeting.
2. **CTR decay**: compare last-7-day CTR to trailing-30-day CTR. Decay >= 25% is a fatigue signal even when frequency is fine.
3. **CPA drift**: last-7-day CPA vs trailing-30-day CPA. Drift >= 30% upward, with conversions > 0 in both windows, confirms fatigue. Drift on a base of 0 conversions is noise.

A single signal is suggestive. Two signals = confirmed fatigue. Three = act today.

## Procedure

1. Pull ad-level insights for the date range with fields: `ad_id`, `ad_name`, `impressions`, `reach`, `frequency`, `clicks`, `ctr`, `spend`, `actions`, `cost_per_action_type`. Group by ad.
2. Compute the three signals per ad. Use date_preset=last_7d and last_30d in two calls.
3. Cross-reference with `effective_status` — exclude PAUSED/ARCHIVED ads from the "act today" list.
4. Output one row per ad with: name, lifetime spend, last-7d CTR, 30d CTR, % CTR change, last-7d CPA, 30d CPA, % CPA change, frequency, signal count (0-3), recommendation.

## Recommendations vocabulary

- **Keep**: 0 signals, performance flat or improving.
- **Watch**: 1 signal, frequency under threshold. Re-audit in 7 days.
- **Refresh creative**: 2 signals. Same offer/audience, new hook/visual. Don't pause yet — duplicate first.
- **Kill**: 3 signals OR spend > 2x target CPA in last 7 days with no conversions. Pause and reallocate budget.

## Pitfalls

- Don't act on frequency alone for retargeting. High frequency on a tight retargeting pool is expected.
- Don't compare CTR across placements. Reels CTR is structurally lower than Feed; use placement-stratified breakdowns when the ad is mixed-placement.
- Don't kill an ad with high frequency and stable CTR/CPA. Saturation, not fatigue, is the diagnosis. Expand audience instead.
- Always present the data as a sortable table, sorted by signal count descending then spend descending.
meta-ads-optimization3.05 KB

View saved version →

---
name: meta-ads-optimization
description: Improve Meta Ads with Toffu: creative testing, audiences, budget optimization and placements. Use when the user asks how to test creatives, structure Meta campaigns or ad sets, or why Meta results changed.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

# Meta Ads Optimization Framework

## Creative Testing Methodology
- **Dynamic Creative Testing (DCT)**: provide 5 headlines, 5 images/videos, 5 primary text variants. Meta tests combinations.
- **Manual A/B testing**: isolate one variable (image, headline, CTA). Run with equal budget splits.
- Test creative concepts (humor vs authority vs UGC) before optimizing copy within a concept.
- Kill underperformers at 2x CPA or after 1,000 impressions with no conversions. Don't let losers drain budget.

## Audience Segmentation
- **Broad targeting**: let Meta's algorithm find converters. Works best with 50+ conversions/week.
- **Lookalike audiences**: 1% for precision, 3-5% for scale. Source from purchasers, not just site visitors.
- **Retargeting**: segment by recency (1-3 days, 4-14 days, 15-30 days). Increase urgency as recency fades.
- Avoid audience overlap between ad sets — use the Audience Overlap tool to check.

## Campaign Budget Optimization (CBO)
- CBO distributes budget to top-performing ad sets automatically.
- Set minimum spend limits on ad sets you want to protect from getting zero spend.
- CBO works best with 3-5 ad sets of similar audience size.

## Ad Fatigue Detection
- Monitor **frequency** and **CTR trend**. CTR dropping while frequency rises = fatigue.
- Refresh creative every 2-4 weeks for retargeting, every 4-8 weeks for prospecting.
- Rotate creative formats: static -> carousel -> video -> UGC. Don't just swap colors.

## Placement Optimization
- Start with **Advantage+ placements** (all placements). Let Meta optimize.
- Review placement breakdown after 500+ impressions per placement.
- Create placement-specific assets: 9:16 for Stories/Reels, 1:1 for Feed, 16:9 for in-stream.

## Conversion API (CAPI)
- Server-side tracking is mandatory for accurate attribution post-iOS 14.5.
- Implement via partner integration (Shopify, GTM server-side) or direct API.
- Deduplicate events between pixel and CAPI using event_id parameter.
- Monitor Event Match Quality score — aim for "Good" or above.

## Attribution Windows
- Default: 7-day click, 1-day view. Suitable for most e-commerce.
- Longer consideration cycles (B2B, high-ticket): test 28-day click attribution.
- Compare attribution windows to understand the true conversion lag of your funnel.
pacing-report3.61 KB

View saved version →

---
name: pacing-report
description: Report month-to-date budget pacing across all connected ad platforms with Toffu. Use when the user asks how they are pacing, whether they are on budget, or what they will spend by month end. Projects month-end spend per account against the monthly budgets and lists the moves to make this week.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

There is no budgets sheet here: ask the user for the monthly budget per account or platform, once.

# Mid-Month Pacing Report

Use when the user asks "how are we pacing", "are we on budget", "month-to-date pacing", "will we hit budget", or wants a report to send a client mid-month. Agency clients ask this every two weeks. Automating it is a recurring time saver.

## Inputs

- The monthly budget per account or per channel (the user supplies; if missing, ask once or pull from a stored budgets sheet).
- Today's date and the month-to-date (MTD) actual spend per account or channel.
- The number of days elapsed and the number of days remaining in the month.

## The math (no surprises)

- `expected_pace = (days_elapsed / days_in_month) * monthly_budget`
- `pacing_delta_pct = (mtd_spend - expected_pace) / expected_pace`
- `projected_eom = mtd_spend * (days_in_month / days_elapsed)`
- `projected_vs_budget_pct = (projected_eom - monthly_budget) / monthly_budget`

## Classification

- **On track**: |pacing_delta_pct| <= 5%. No action.
- **Underpacing**: pacing_delta_pct < -10%. Budget will be left on the table. Recommend: raise budgets, expand audiences, or unpause held inventory.
- **Overpacing**: pacing_delta_pct > 10%. Will overspend without intervention. Recommend: reduce daily caps, pause lowest-ROAS campaigns, or move budget to under-pacing accounts.
- **Severe**: |pacing_delta_pct| > 25%. Lead with this.

Round all percentages to whole numbers in the output. The CMO does not need 3 decimal places.

## Output format

One executive line: "X of N accounts pacing on target. $A overspend / $B underspend projected at month-end."

Then a table — Account/Channel | Monthly budget | MTD spend | Days elapsed/total | Expected pace | Pacing delta | Projected EOM | Action. Sort by absolute pacing delta descending.

End with a 3-line "what to do this week" section listing concrete moves (raise X budget by $Y, pause campaign Z).

## Pitfalls

- Calendar months have different lengths. Always use the actual `days_in_month` for the month being reported, not 30.
- A campaign launched on the 10th has different "expected pace" than one running since the 1st. If launch dates differ from month-start, use `days_since_campaign_start` instead of `days_elapsed`. Note this on the row.
- Weekend tapering: most accounts spend less on Sat-Sun. A simple linear pace will read "underpacing" Friday morning and "overpacing" Monday morning. State the projection as "linear" so the reader knows it's not seasonality-aware.
- If the budget is "as much as profitable" rather than a fixed cap, pacing is the wrong report — use ROAS-vs-target instead.
- Currency: convert MTD spend to the budget's currency, not the other way around. Otherwise the budget moves between reports.
reporting-best-practices3.55 KB

View saved version →

---
name: reporting-best-practices
description: Build a marketing performance report with Toffu: KPI hierarchy, cadence and an executive summary. Use when the user asks for a weekly, monthly or client report, or how to structure one.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

Give the report in the chat, with tables. There is no dashboard or file output here.

# Marketing Reporting & Dashboard Design

## KPI Hierarchy
Structure metrics in three tiers:
- **North Star Metric**: the single metric most correlated with business success (e.g., MRR, revenue, activated users).
- **Primary KPIs** (3-5): directly influence the north star. Examples: CAC, ROAS, conversion rate, LTV.
- **Secondary KPIs** (5-10): operational metrics that influence primaries. Examples: CTR, CPC, email open rate, bounce rate.

Report top-down: north star first, then drill into primaries and secondaries only to explain changes.

## Reporting Cadence
- **Daily**: automated alerts on anomalies (spend spikes, conversion drops, site errors). No manual reports.
- **Weekly**: channel performance summary. Focus on trends vs prior week and targets.
- **Monthly**: full performance review. Include MoM and YoY comparisons, campaign-level analysis, budget reconciliation.
- **Quarterly**: strategic review. Attribution analysis, incrementality results, budget reallocation recommendations, competitive landscape shifts.

## Dashboard Layout Principles
- **Top row**: north star metric + primary KPIs with trend indicators (up/down arrows, % change).
- **Middle section**: channel breakdown table or chart. Sortable by key metrics.
- **Bottom section**: detailed views — campaign performance, audience segments, content performance.
- Use consistent date ranges. Default to last 30 days with comparison to prior period.
- Limit to 1 page (or 1 scroll) for executive dashboards. Detail dashboards can go deeper.

## Data Storytelling
- Don't just present numbers. Answer: **what happened, why, and what we're doing about it**.
- Lead with the insight, not the data. "Conversion rate dropped 15% because landing page load time doubled after the deploy on March 3rd" — not "here's a chart of conversion rate."
- Use annotations on charts to mark events (launches, outages, seasonal peaks).

## Anomaly Detection
- Set thresholds for automated alerts: any metric moving > 20% from trailing 7-day average.
- Investigate anomalies within 24 hours. Most are data issues or external factors — catch real problems fast.
- Track false positive rate. Tune thresholds to minimize alert fatigue.

## Benchmark Setting
- Set benchmarks from: historical performance (trailing 90-day average), industry data, or competitor analysis.
- Update benchmarks quarterly. Stale benchmarks lose relevance.
- Report performance vs benchmark, not just raw numbers. Context makes data actionable.

## Executive Summary Format
Every report starts with a 3-5 sentence executive summary:
1. Overall performance vs target (on track / ahead / behind).
2. Biggest win this period.
3. Biggest risk or underperformance.
4. Key action items for next period.
spend-anomaly-detection3.47 KB

View saved version →

---
name: spend-anomaly-detection
description: Find spend anomalies across all connected ad platforms with Toffu: sudden spikes, drops to zero and slow drift. Use when the user asks if anything is wrong or unusual in spend, whether something spiked, or wants a morning check before standup.
---

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

1. Call `get_account_context`. If a platform has several accounts, ask which one. Pass the ids as `account_ids` to `query_campaign_performance`, and as `account_id` to the other tools.
2. Read data with `query_campaign_performance` (daily rows: `time_increment` "1"), `list_campaigns`, `list_ad_sets` and `list_ads`.
3. To change something, call `propose_update_campaign`, `propose_update_ad_set` or `propose_update_ad`, and show the preview. Call `apply_change` only after the user confirms that change.

`list_campaigns` gives the current status only, with no change history: say "paused now", without a time or a person.

# Cross-Channel Spend Anomaly Detection

Use when the user asks "anything weird in spend yesterday", "did anything spike", "is everything pacing", "anomalies", or wants a daily morning sanity check across Google Ads, Meta Ads, LinkedIn Ads, TikTok Ads. This is the first thing an agency lead checks before standup.

## What counts as an anomaly

Compare yesterday's spend per (account, campaign) to the trailing-14-day median for the same weekday slot:

1. **Spike**: yesterday > 1.5x median AND absolute delta > $100. Could be a budget bug, a runaway bid, a Smart Bidding excursion, or an unexpected promo.
2. **Drop-to-zero**: median > $20 AND yesterday == 0. Account suspended, payment failed, campaign accidentally paused, daily budget exhausted before midnight.
3. **Slow drift**: 7-day moving average up > 25% vs prior 7-day moving average. Less urgent but a brief should mention it.

Weekday-aware comparison matters. Saturday spend is structurally different from Tuesday. Don't use a single trailing-N-day mean.

## Procedure

1. Pull yesterday's per-campaign spend for every active account in scope. Same for the prior 14 days.
2. For each (account, campaign), compute the weekday-matched median (e.g., last 2 Tuesdays if yesterday was Tuesday).
3. Apply the three rules above.
4. Cross-reference against status changes: if `effective_status` flipped to PAUSED in the last 24h, the drop is operator-induced — note it as "paused yesterday at HH:MM by <user>" rather than as an anomaly.

## Output format

Three sections, in this order:

**Critical (act today)**: drops to zero on accounts spending > $200/day. Bullet per anomaly with the diagnostic ("budget exhausted at 14:32 — raise budget" / "ad account disapproved — check Business Manager").

**High (review today)**: spikes above 1.5x median, absolute delta > $500.

**Watch (mention in weekly)**: drift, smaller spikes.

Lead with the headline: "X critical, Y high, Z watch. Total unexpected spend yesterday: $N." If empty: "Nothing unusual."

## Pitfalls

- New campaigns don't have 14 days of history. Skip them or flag as "new — no baseline" — don't false-positive every launch.
- Account-level vs campaign-level: detect at campaign level so a budget shift between two campaigns in the same account isn't reported as both a spike AND a drop.
- Currency mixing kills the dollar-threshold logic. Convert everything to the agency's reporting currency before applying $100/$500 cutoffs.
- Don't alert on weekend spend dropping. Most accounts intentionally taper. Use weekday-matched medians.

Release notes

Connect without a Toffu account: picking an ad platform and signing in to it is the whole setup. Ask to connect another platform from the chat and Toffu gives you a link. Campaign performance now covers 16 ad platforms, including X Ads, Pinterest, Taboola, Outbrain, DV360 and CM360.

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

  • Campaign performance across all your connected ad platforms
  • List campaigns, ad sets and ads on Google Ads, Meta Ads and other connected platforms
  • Create, update, pause and delete campaigns, ad sets and ads, with a preview you confirm
  • Connect another ad platform from the chat

Package observed Nov 3, 2026.

Technical details
First seen
Oct 24, 2026 · 12:40 UTC
Last seen
Nov 4, 2026 · 00:00 UTC
Latest observed change
Oct 29, 2026 · 19:06 UTC
Collection status
Collected

plugin_asdk_app_6ad952447f7481918caf0285fb042792

Download plugin data (JSON)