agency operations12 min readBy Phloz team

The 30-day tracking migration when an agency takes over a new client

Inheriting a marketing client means inheriting their tracking — almost always polluted, often partly broken, sometimes secretly catastrophic. Here's the 30-day migration we run on every new client takeover, in the order that minimizes downtime, maximises trust, and surfaces the previous agency's mistakes without throwing them under a bus.

TL;DR

When you take over a new client, their tracking is almost certainly worse than they think — not because the previous agency was malicious, but because tracking entropy compounds quietly: dead tags pile up in GTM, conversion definitions point at the wrong campaign groups, the consent banner stopped firing the update callback six months ago, etc. The 30-day migration: Week 1 = inventory + access transfer (no changes yet). Week 2 = audit + reconciliation (verify what's actually firing vs what the previous agency's report claimed). Week 3 = stabilization (fix the bleeding without touching anything that's currently working). Week 4 = improvement layer (server-side CAPI, consent mode, the things the previous agency didn't ship). Below: each week's checklist, with the ugly conversations you can't avoid and the ones you can.


Taking over a client is the highest-stakes moment in agency operations. The first 30 days set the tone for the next two years of the relationship. Move too fast and you break what was working; move too slow and the client wonders why they hired you. Both failures show up in the tracking layer first because tracking is where the previous agency's invisible debt becomes the new agency's visible problem.

This is the migration playbook we run on every new client takeover. It's structured around minimizing the chance of breaking active campaigns mid-quarter, surfacing problems with evidence (not opinion), and earning the right to recommend the bigger architectural changes by Week 5.

Week 1: inventory + access transfer

The temptation in week 1 is to "fix things." Don't. The client just left another agency; they're sensitive to the new agency immediately re-doing things. Week 1 is purely understanding what exists — no changes.

Inventory checklist

  • GTM container — full export (Admin → Export Container). Document version number. Note: the export is the contract; everything you discover later compares against this baseline.
  • GA4 property — list every conversion event, custom dimension, audience, and explore. Screenshot the property settings page (timezone, currency, attribution model, retention).
  • Google Ads accounts — every active conversion action, the Source, Tag setup status, and the linked-account list. Most polluted area in our experience: Google Ads conversion actions that say "Recording" but actually haven't fired in 6+ months.
  • Meta Business Manager — Pixel ID(s), Dataset ID(s), CAPI status per dataset, every custom conversion + custom audience.
  • TikTok Ads Manager — pixel ID, Events API status, event match-quality score.
  • LinkedIn Campaign Manager — Insight Tag ID, conversion definitions, partner integration status.
  • CRM webhooks — what fires where. Salesforce process builders, HubSpot workflows, Pardot completion actions. The pre-existing webhook payloads define what data is available for server-side conversion forwarding.
  • Cookie banner / CMP — vendor (OneTrust, Cookiebot, Iubenda, custom), Consent Mode v2 status, the actual default-consent values served by region.
  • Hosting + DNS — who controls the website, the domain, the Cloudflare account. Often a different vendor than the agency, sometimes a completely lost contact.

This isn't a list to fill in; it's a list to export to a Phloz workspace as a typed graph. Every node is one item from the inventory. The graph makes the dependencies obvious — when you fix the cookie banner in week 3, you can see at a glance which conversion events depend on its consent signals.

Access transfer order

Order matters because some access requires others. The pattern that works:

  1. Domain + DNS first. If the client owns the domain and DNS, get registrar + Cloudflare access. If the previous agency owns the domain, that's a separate negotiation; flag immediately.
  2. GA4 + GTM via Google account ownership. Have the client add your work email as Admin on the GA4 property and Publish on the GTM container. Don't accept Edit-only — the upgrade-on-need conversation is harder than asking once.
  3. Ad platforms via partner / agency seat. Meta, TikTok, LinkedIn all have agency-seat access patterns. Use these, not personal ad-account membership.
  4. CRM via SSO or service account. HubSpot lets agencies have a "Partner" account; Salesforce wants a service-account user with appropriate API permissions. Don't share an existing user's password.
  5. Stripe / billing read access — if you're the conversion-tracking agency, you need to verify against actual revenue. Stripe's "View only" role is enough.
  6. Server-side stack — if the client runs server-side GTM, container access; if they run a custom CAPI implementation, the codebase. This is often the last access to come through.

The inventory + access work alone fills week 1 for most takeovers. Do not skip it. The audit-without-access problem is what gets agencies into "we're fixing something we don't fully understand" trouble in week 2.

Week 2: audit + reconciliation

Now you have access. Time to find what's actually true.

The single most important week-2 finding: does the previous agency's reported conversion volume match the source-of-truth in the CRM and Stripe? It almost never does perfectly. Sometimes it's wildly off. The reconciliation report is the artifact you produce at the end of week 2.

Reconciliation matrix

Build a table for the trailing 90 days. Rows: month. Columns: GA4 conversions, Google Ads conversions, Meta CAPI conversions, TikTok conversions, LinkedIn conversions, CRM leads (CRM = source of truth for B2B, Stripe = source of truth for B2C / ecom).

For each cell, the platform count + the difference vs CRM. Healthy stacks show platform numbers within ±15-20% of CRM (some cookie-blocked, some attribution-window-trimmed, some legitimate platform-only signal). Numbers more than 30% off in either direction are red flags.

Common findings:

  • Platform counts much higher than CRM — usually duplicate firings (pixel + CAPI without dedup, or two GTM containers both pushing to the same dataset).
  • Platform counts much lower than CRM — usually a missing event source (Insight Tag installed but not firing in production, CAPI configured but the access token expired months ago).
  • GA4 doesn't match Google Ads — typically the Google Ads conversion is built on a different event than GA4's "key event", so the two diverge naturally. Document and explain to the client; this is normal.

This matrix is the diff that lets you have the next conversation without it being "you/your previous agency screwed up." The matrix shows what's true; the conversation is "here's what we found, here's what we recommend."

The four common surprises

Tracking entropy compounds in predictable ways. These are the four findings we see in roughly half of takeover audits:

  1. A conversion event is firing on a thank-you page that doesn't exist anymore. Site got redesigned 8 months ago, dev forgot to update GTM, the trigger silently never fires. Spend has been optimising on stale signal.
  2. Consent Mode v2 default-consent never updated. Cookie banner sets default consent = denied for ad/analytics in EU, but the banner's accept callback isn't wired to GTM's update consent. Every EU user is denied permanently. ~60% of EU conversion signal lost.
  3. Server-side GTM container running but no events flowing through it. Prior agency set it up, never finished migrating tags. Client paying for a Cloud Run instance for nothing.
  4. Two GTM containers on the same site. Inherited from a partial site migration. Both fire pixels; everything double-counts.

These are surfaced by the reconciliation matrix. Document each in the Phloz workspace as a typed Finding linked to the relevant tracking node. The audit log becomes the contract for the week 3 stabilization work.

What NOT to share with the client yet

The reconciliation matrix is yours, week 2. Do not present a "the previous agency failed" report. Do present a "here's the technical state we found, here's our 30-day plan" summary that focuses on what you'll do, not on what went wrong.

The client already knows the previous agency wasn't perfect — that's why they're switching. They don't need you to spike the football. They need confidence that you'll fix it. The football-spike comes naturally in week 12 when results are visibly different.

Week 3: stabilization

Stabilization = fix the bleeding without touching anything that's currently working. The mantra is don't make it worse on the way to making it better.

Priority order for stabilization fixes

For each finding from week 2, classify:

  • Bleeding now — causing daily harm to optimization or attribution. Fix this week.
  • Latent — wrong but not actively losing signal. Fix in week 4.
  • Cosmetic — annoying but not load-bearing. Fix in month 2.

Bleeding-now examples:

  • Conversion event not firing because of a missing dataLayer.push (week 2 finding #1) — restore the push in GTM, deploy a new container version with version-name tagged takeover-w3-fix-1. Do not refactor the trigger condition — just restore the missing push exactly as it was when it worked.
  • Consent Mode update consent callback missing (week 2 finding #2) — wire up the cookie banner's accept callback to GTM's gtag('consent', 'update', ...). Verify with Tag Assistant that ad_storage = granted after accept.
  • API access token expired (LinkedIn / Meta CAPI) — rotate. Verify events flowing for 24h before declaring fixed.

Latent (week 4):

  • Duplicate GTM container (week 2 finding #4) — needs a careful migration, not a rip-and-replace, because some tags are only in one container. Map every tag in container B to a target in container A, deprecate B, ship.
  • Server-side GTM unused but running (week 2 finding #3) — pause the Cloud Run instance to stop the bleed; keep the configuration so we can decide whether to actually use it or remove it in month 2.

Cosmetic (month 2):

  • Dead tags in GTM container (e.g. tags marked Paused from 2024 still cluttering the workspace) — clean up once stabilization is done and you have time.

The version-tagging discipline

Every change you ship in week 3 is tagged in GTM with a version name like takeover-w3-<short-description>. The version-name discipline pays off the first time you have to roll back: GTM's "Versions" tab shows your changes clearly separated from the previous agency's. We've had clients ask 6 months later "what changed in week 3 of the takeover?" and the answer is the GTM version history filtered on takeover-w3-*.

Same for code-side changes (CRM webhook updates, server-side handler changes): commit messages start with [takeover] ... so the audit trail survives.

The mid-week 3 client check-in

End of week 3 — not week 2 — is when you give the client the first formal status update. The shape:

  • "Here are 4 things we found that were causing immediate signal loss. We've fixed 3 this week (with version-tagged changes you can review). The fourth needs more careful migration; we'll handle it in week 4."
  • "Here's the reconciliation matrix from week 2, updated with this week's fixes. Next week's matrix will show the lift."
  • "Here's what we'll ship in week 4: the improvement layer that goes beyond fixing what was broken."

The reconciliation matrix is the artifact. It's much harder for the client to question when they can see real numbers stabilising day-by-day in a Phloz tracking-map view rather than reading prose about it.

Week 4: improvement layer

Now we're past the inherited debt. Week 4 is when you start to ship the things the previous agency didn't.

The list depends on the client's stack, but the common improvements:

  • Pixel + CAPI dual-stack on every ad platform — Meta, TikTok, LinkedIn (per-platform setup posts cover the specifics). Most takeovers find at least one platform running pixel-only.
  • Consent Mode v2 advanced mode — most consent banners are stuck on basic mode (which loses 60-80% of EU signal). Upgrading recovers most of it via Google's modeled conversions.
  • First-party data warehouse hygiene — the BigQuery export of GA4, Stripe webhook → backend → CRM, the things that make the conversion signal independent of any one ad platform.
  • Server-side GTM — only if the client is over the threshold where it pays back (when to bother and when to skip).
  • Tracking-map documentation — the typed graph in Phloz becomes the artifact the agency-client relationship runs on. Every tracking change goes through the graph; every audit happens against the graph; the next agency-takeover (if it ever happens) inherits a documented system instead of a guessing game.

The week 5+ commitment

By end of week 4, you've stabilised the inherited mess and shipped the next layer. Week 5 onward is steady-state agency work — but the takeover process produced two artifacts that compound for the next 12+ months:

  1. The reconciliation matrix as a recurring report. Run it monthly. The first 90 days show the lift from your stabilisation; everything beyond is your steady-state quality.
  2. The tracking-map as the agency-client interface. Every conversation about conversion signal references a node in the graph. New tracking sources, sunset events, audit findings — all tied to typed nodes that the client can see and the agency engineer can update.

The agencies that win client retention aren't the ones with the best tools — they're the ones with the most legible operational artifacts. A reconciliation matrix the CFO can read and a tracking graph the marketing director can navigate are worth more than any individual tactical improvement, because they're what turn an agency-client relationship from "the agency that handles our ads" into "the agency that operates our marketing infrastructure."

That distinction is the difference between client-acquisition cost being a quarterly anxiety and being a fixed line item.

What this means if you're picking up a client tomorrow

If you're in the messy middle of a takeover right now and this post landed at the wrong time — the order is preservable. Stop wherever you are, run the inventory + access checklist (week 1), then resume from week 2 with whatever you've already done. The discipline is in the artifact production: the reconciliation matrix, the version-tagged changes, the typed tracking graph. Build those first; the rest follows.

If you're picking up a client in two weeks: book the kickoff call, set the expectation in the SOW that week 1 is "no changes, just access + audit." That sentence in the SOW is the single most useful piece of contract language we've added — it pre-empts the "why aren't you fixing things yet" pressure that makes takeovers go badly.

And if you're the client side reading this and wondering whether your current agency runs anything like this discipline: ask them for their version of the reconciliation matrix. The answer tells you everything.