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_knowledgePull 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.
Paid
- 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_accountscarries 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_postsshows 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
draftis inert — it does nothing for anybody until it is published.
Search, local and AI search
- 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
googlehas no AI-search data at all —chatgpt,gemini,gaio,aimodeandgrokare separate scans. That is one of the most valuable findings an audit can produce; seeai-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.
## 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.