Audit

Audit a whole marketing account and report what state it is in.

A standing report on the whole account, in one pass. An audit reads only — it proposes nothing and changes nothing. Finish with findings; let the user decide what to act on, then hand to marketing-diagnose or marketing-scale.

Prerequisite: the marketing-os foundation skill. You need businessId, the economics and the guardrails before any verdict below means anything.

Sequence

Run every step. A step whose channel is not connected is reported as not connected — that is a finding, not a gap to paper over.

1  Context     list_businesses → get_business_context → get_guardrails
2  Paid        meta_list_campaigns (30d) → meta_list_ad_sets → meta_list_ads
3  Engine      meta_get_recommendations
4  Social      social_list_accounts → social_list_posts
5  Content     list_marketing_assets
6  Search      google_connection_status → google_search_performance (30d)
7  Local / AI  localfalcon_list_locations → localfalcon_list_reports
8  Brand       get_brand_profile → list_knowledge

Pull the 7-day window as well as the 30-day one for paid (from/to, YYYY-MM-DD). Every verdict in this pack wants both.

What to look for, and the line for each

All thresholds from marketing-os/references/thresholds.md. Do not add any.

  • Bleeding. ROAS below 0.8 × break-even in both the 7d and 30d windows, with real spend behind it. One window alone is not a finding.
  • Burning with nothing back. 7-day spend above 3 × target CPA/CPL with zero conversions and zero leads — the rule that still works when the business has no break-even ROAS.
  • Fatigued. 3-day CTR under 70% of the 30-day CTR, with more than 1,000 impressions in those 3 days.
  • Frequency saturated. Above 3.5 prospecting, above 6 retargeting.
  • Stuck in learning. An ad set under 50 conversions in 7 days. Flag it as do not touch, not as a problem to fix.
  • Under-budgeted winners. ROAS at or above 1.3 × break-even, out of learning, on a budget well under the daily cap.
  • Zombies. Active entities with meaningful spend and no conversions across 30 days.

Never call something good or bad without the break-even ROAS. If it is null, report the raw numbers and say the verdict is unavailable until it is set.

Organic social

  • Which platforms are connected, and which are connected but expired — social_list_accounts carries a status, and an expired token means posts are silently not going out.
  • Cadence: posts in the last 30 days per platform, and the gap since the last one.
  • Failed publishes: social_list_posts shows per-destination status. A failed target is a finding.
  • Scheduled posts still queued, so the user knows what is about to go out.

Content

  • Assets by type (blog_post, email, ad_copy, landing_page, social_post) and by status.
  • Drafts that have sat unreviewed. A draft is inert — it does nothing for anybody until it is published.
  • Is Search Console connected at all? If not, say so — it is usually the cheapest fix on the list.
  • Clicks, impressions and average position over 30 days, and the direction of travel.
  • Which locations have been scanned, on which platforms, and how recently. A location that has only ever been scanned on google has no AI-search data at all — chatgpt, gemini, gaio, aimode and grok are separate scans. That is one of the most valuable findings an audit can produce; see ai-search-visibility.

Brand and knowledge

  • Is the brand profile filled in? Voice, audience, banned words and required mentions drive every piece of copy this pack writes; empty sections mean generic output.
  • Is the knowledge base empty? Then nothing can cite the business's own facts.

Report shape

Lead with what costs money. Then what is being missed. Then hygiene.

markdown
## Account audit — <business> · <window>

**Economics**: break-even ROAS <x>, AOV <$>, target CPA <$>, daily cap <$>
<or: "No break-even ROAS is set, so profitability verdicts are unavailable.">

### Costing money now

- <entity> — <metric vs. the business's own line> → <what to do next>

### Being left on the table

- <the under-budgeted winner, the unconnected channel, the unscanned platform>

### Working

- <what to leave alone, especially anything in learning>

### Not connected

- <channel> — <what it would add>

Every bullet carries the number and the line it is measured against. "CTR is low" is not a finding; "3d CTR 1.2% against a 3.0% 30d baseline, 42k impressions — past the 30% fatigue line" is.

Keep it to what a person will actually read. Fifteen findings ranked beats fifty listed.

Do not

  • Propose or make changes. An audit reads. Hand off instead.
  • Quote an industry benchmark for anything.
  • Score the account out of 10. There is no sourced scoring rubric, so inventing one is inventing a number.
  • Skip a channel silently because it is not connected.

Something wrong or missing on this page? Tell us and we will fix it.