---
name: the-account-takeover-audit
description: "When taking over an existing account — including a TikTok ads account for sale you've just acquired, a new client handoff, or an internal transfer — produce a full evidence-backed audit: structure, tracking health, wasted spend, quick wins, and risk, across Google Ads, Meta, and TikTok, before you spend another dollar."
license: MIT
compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer."
metadata:
  author: "Adspirer"
  version: "1.0.0"
  adspirer_category: "ad-ops-optimization"
  adspirer_source: "https://www.adspirer.com/skills/the-account-takeover-audit"
  adspirer_connection_url: "https://adspirer.ai/sign-up"
  adspirer_primary_keyword: "ppc audit"
  adspirer_secondary_keywords: "paid media audit, ad account audit"
  adspirer_launch_wave: "1"
  adspirer_kind: "skill"
  adspirer_level: "operator"
  adspirer_platforms: "google,meta"
  adspirer_supported_clients: "claude,claude-code,chatgpt,codex,cursor,gemini,windsurf"
  adspirer_summary: "When taking over an existing account — including a TikTok ads account for sale you've just acquired, a new client handoff, or an internal transfer — produce a full evidence-backed audit: structure, tracking health, wasted spend, quick wins, and risk, across Google Ads, Meta, and TikTok, before you spend another dollar."
  adspirer_connections_required: "ga4,adspirer"
  adspirer_connections_optional: ""
---

# The Account Takeover Audit: Vetting a TikTok Ads Account for Sale, Handoff, or Internal Transfer

## Use this when

Use when you're inheriting an account you (or your agency) didn't build — new client onboarding, an internal handoff, a "why does this account look like this" gut-check, or a TikTok ads account for sale that you or a client just purchased from a marketplace or previous operator and need to vet before spending on it — and you need a single evidence-backed state-of-the-account before you touch anything. Best run within the first 1-2 weeks of takeover, before any optimization or restructuring, so you have a documented baseline of what you found vs. what you changed. Covers Google Ads, Meta, and TikTok Ads; run it once per platform if the account spans more than one. A purchased or resold TikTok ads account carries its own flavor of risk beyond the usual takeover — undisclosed policy history, incomplete ownership/billing transfer, or seller-retained access — so treat provenance as part of the audit, not an afterthought. Not a fit for a quick pacing check on an account you already manage day-to-day — use a monitoring skill for that instead.

## What you need

- Adspirer connected to the Google Ads, Meta, and/or TikTok Ads account(s) under audit, with at least 90 days of account history (30 days minimum will run but flagged as a thin sample — learning-phase and day-of-week effects won't be reliable below that; a freshly purchased TikTok ads account for sale may show a suspicious history gap right at the resale date, which is itself worth flagging)
- Admin or standard access to the ad account, not just read-only reporting access — the audit needs to see conversion action setup, audience/pixel configuration, and change history, not just spend/click rows
- Confirmation that ownership transfer is actually complete if this account was acquired via purchase or resale: business info, payment method, and admin/user list should reflect the current owner, not the seller — an incomplete transfer is a real and common risk with any account for sale
- GA4 property linked to the site (optional, but the tracking-health section is materially weaker without it — no independent cross-check of platform-reported conversions against GA4 sessions/events)
- Knowledge of what "good" looks like for this account: target CPA/ROAS, monthly budget, and the client's actual product margin if you want the wasted-spend section to say something about profitability rather than just efficiency
- 30-60 minutes of your own time to read the output and sanity-check anything the audit flags as uncertain — this produces a draft audit, not a final report you forward untouched

## Procedure

1. **Connect Adspirer (the ads connection):** when you reach a step that touches a live ad account, connect Adspirer first. In Claude Code, run `/plugin marketplace add anthropics/claude-plugins-community` then `/plugin install adspirer-ads-agent@claude-community`. In claude.ai or ChatGPT, add the Adspirer connector from https://www.adspirer.com/docs/ai-clients. Any other agent: follow https://www.adspirer.com/docs/ai-clients for your client. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed.
   Pull full account inventory for the audited platform(s): campaign list with status/type/budget/bid strategy, ad group/ad set/TikTok ad group counts, and account-level change history for the last 90 days (bid strategy changes, budget changes, structural changes, and — critically for a resold or purchased account — the timestamp of any admin/access changes, since that tells you when the account actually changed hands versus when the listing said it did).

2. Map account structure and flag anti-patterns before looking at performance numbers, so structural judgment isn't biased by which campaigns happen to be winning right now. On Google: count campaigns per bid strategy type, check for keyword-level Target CPA/ROAS orphaned under a Max Conversions campaign, check Search + PMax overlap, and check ad group keyword counts (>20-30 per ad group is a relevance-dilution smell). On Meta: check audience overlap across ad sets in the same campaign, CBO vs. ad-set budget adoption, and creative count per ad set (fewer than 3-4 active creatives risks fatigue). On TikTok: check Smart Performance Campaign vs. manual bidding mix, audience overlap across ad groups in the same campaign, Spark Ads vs. non-boosted post usage, and creative count per ad group (TikTok's algorithm is even more creative-hungry than Meta's — fewer than 3-5 active creatives per ad group is an under-exploration flag).

3. Audit conversion tracking end to end — this is usually where the real story is, because a wasted-spend or "underperforming" verdict built on broken tracking is worthless. Check: is the primary conversion action still firing (last-fired timestamp, not just "enabled" status)? Is it counting the intended event, not duplicating it? For Meta, check pixel + CAPI deduplication and event match quality. For TikTok, check TikTok Pixel + Events API deduplication status and event match rate — a low match rate silently degrades optimization the same way a low Meta match quality score does, and it's a very common finding on a TikTok ads account for sale where the pixel was set up by a prior owner who's no longer reachable to fix it. Where GA4 is available, cross-check platform-reported conversion volume against GA4 session/event volume for the same date range; a wide, unexplained gap (rule of thumb: >20-30% divergence beyond normal attribution-window differences) is a flag to investigate, not a proven bug.
   **Connect Google Analytics 4:** this step uses Google Analytics 4. Add the Google Analytics 4 MCP/connector to your agent — setup: https://developers.google.com/analytics/devguides/MCP, then continue. Skip only if a step says it's optional.

3a. Use `audit_conversion_tracking` (Adspirer's dedicated diagnostic) if available for the connected platform(s) rather than re-deriving tracking health from raw campaign data by hand — it already checks firing recency, duplication, and match quality against the live account, and you want your audit to visibly agree with (or explain any disagreement with) that tool's read.

4. Pull 90-day (or longest-available) performance by campaign, ad group/ad set, and where relevant search-term/placement level, and identify wasted spend with evidence, not intuition: search terms or placements with spend above a threshold you set (default: 2x the account's average cost-per-conversion) and zero conversions in the window; campaigns/ad groups with no spend at all in 30+ days; and audience or placement exclusions that were never applied despite obviously irrelevant traffic showing up in reports. State the dollar amount each finding represents over the lookback window, and do not extrapolate a monthly or annual projection beyond the actual observed window.

5. Check learning-phase and delivery health on any Meta ad sets, TikTok ad groups, and Google Smart Bidding campaigns changed or created in the last 7-14 days: are they stuck in a learning-limited state because of an over-narrow audience or a budget too small for the target CPA? Are recently-changed Google Smart Bidding campaigns still inside the ~1-2 week relearning window? Flag these as "in-flux, re-check after learning-phase exits" rather than judging their current performance at face value.

6. Check policy and compliance risk: any ads currently in "Limited," disapproved, or under-review status and why, any account-level policy warnings or restricted-status flags, payment/billing health, and — for TikTok specifically — business account verification status and any pending or historical ad account restrictions, since a purchased TikTok ads account for sale can carry unresolved policy strikes from before you owned it that only surface once you try to launch new creative. A billing, ownership, or policy issue found here is often more urgent than any optimization finding, so surface it first in the final writeup.

7. Synthesize findings into the four required buckets — structure, tracking health, wasted spend, quick wins — each claim tagged with its evidence (campaign name, date range, dollar figure, or "confirmed via audit_conversion_tracking") so nothing in the final report reads as an assertion the client has to take on faith. Quick wins should be high-confidence, low-risk, and NOT yet an executed change — this section is a proposal list for the client to approve, not a changelog.

## Fixed checks

- Re-pull the flagged conversion action(s) directly from the live account and confirm the "last fired" timestamp and event-count-in-window used in the report match what the account shows right now, not a cached or earlier pull
- For every wasted-spend line item, re-query that exact search term/placement/campaign's spend and conversion count over the stated window directly from the platform before finalizing the number — never carry forward a number computed earlier in the session without a fresh check
- For any ad set, ad group, or campaign flagged as "in learning phase," confirm against the live account's current delivery/learning status field rather than inferring it from the change-history timestamp alone
- If GA4 was used for tracking cross-check, confirm the GA4 date range and conversion event definitions actually match what was compared against platform data
- If the account was reported as purchased or resold, confirm the current admin/user access list and billing details directly against the live account rather than trusting the takeover paperwork — an incomplete transfer is only visible in the live account settings
- Confirm every dollar figure quoted in the report is a real sum from a live query result — flag and remove any number that can't be traced to a specific query in this session

## Stop conditions

- Success: full audit produced covering all four required sections (structure, tracking health, wasted spend, quick wins) with evidence citations, delivered as a draft for the client/account owner to review — no changes made to the live account
- No-op / thin data: fewer than 30 days of account history available — audit still runs but every section is labeled "low-confidence, thin sample" and the report recommends re-running after more data accumulates
- Blocked: Adspirer connection to the ad account fails, account access is read-only/insufficient to see conversion action configuration or change history, the account has zero campaigns/no spend history to audit, or — for an acquired TikTok ads account for sale — ownership/access transfer is confirmed incomplete (prior owner still holds admin access), in which case the audit stops and flags the ownership issue as the priority to resolve before anything else
- Needs-approval: any quick win identified during the audit is a proposal only — this skill never executes a fix, pause, budget change, or exclusion; those require a separate, explicitly approved action after the client reviews the audit

## Approval boundaries

This skill is read-only and takes no spend or configuration actions on the live account — no pauses, budget changes, bid changes, exclusions, or conversion-action edits are made. It pulls data and change history and produces a written audit only. Every "quick win" it surfaces is a proposal for the account owner to review and separately approve; if the user wants any of them executed, that is a distinct, explicitly-approved action outside this skill's scope, and each such action still requires the user's explicit approval at the time it's proposed for execution.

## What you get

A structured account-takeover audit document with four core sections — Account Structure (campaign/ad group/ad set/TikTok ad group architecture, bid strategy mix, anti-patterns like audience overlap or CBO/Smart Performance adoption gaps), Tracking Health (conversion action firing status, duplication check, Meta pixel/CAPI or TikTok Pixel/Events API match quality, GA4 cross-check where connected), Wasted Spend (itemized search terms/placements/dead campaigns with dollar amounts over the actual lookback window, no extrapolated projections), and Quick Wins (a prioritized, unexecuted proposal list ranked by confidence and execution risk) — plus a Risks section flagging any policy, billing, ownership-transfer, or compliance issues found along the way, which matters most when the account was acquired as a TikTok ads account for sale rather than built in-house. Every claim in the document is tagged with the specific data pull or tool call that backs it, so the client can trust it as evidence, not opinion.
