Migration · 12 min read

Triple Whale to Admaxxer: A 30-Day Migration Playbook

Migrating off Triple Whale is straightforward in theory (paste tokens, install pixel) but the 30-day window is where the value hides — that's how long it takes Admaxxer to backfill your Shopify history, parity-check pixel events, and re-baseline your reporting. This playbook is the week-by-week plan Admaxxer customers use to migrate without losing a day of insight.

30 days
Migration window
Parity overlap
All-time
Shopify backfill
Order 1 → today
Day 30
Triple Whale retire day
After parity verified

The window is the playbook

The headline mechanic of this migration - pasting tokens and installing a pixel - takes about an hour. The reason this playbook is 30 days long is that the value of the migration hides in the overlap: the time it takes for Admaxxer to backfill your Shopify order history, run a parity-check on its pixel events against Triple Whale's, and let your team cycle through their weekly reporting rhythm in both tools so the decision to retire Triple Whale is data-backed.

A same-day cutover gets you running on Admaxxer, but it gives you no leverage to investigate a discrepancy. If on day 7 your CFO points at a number and asks "why is this different from last week," you want both pixels still firing so you can pull the source data from both sides. The 30-day window buys you exactly that.

The other reason: attribution models differ. Triple Whale ships a DTC-flavoured default; Admaxxer ships six toggleable models. Without running both for at least 14 days, you cannot distinguish between a real change in attribution and the mechanical effect of a different model running on the same traffic.

From token paste to retirement, in four phases

Each phase has a clear goal and a quantitative exit criterion. You don't advance to the next phase until the exit criterion is met - that's what keeps the playbook honest against the temptation to rush the parity window.

PhaseGoal + exit criterion
Days 1-3 — Install + tokensGet the Admaxxer pixel firing alongside Triple Whale's pixel, paste every ad-platform token, and kick off the Shopify backfill. Exit: all 5 connection cards green in /integrations; Shopify backfill job started; Admaxxer pixel fires on every page view + checkout event (verified via the browser network tab).
Days 4-7 — Backfill verificationConfirm the historical order import landed every order and reconciles to Shopify's reported totals to the cent. Exit: total order count + total revenue match Shopify Admin for the trailing 12 months; any discrepancy is investigated (typically refunds + currency handling + multi-store filters).
Days 7-14 — Pixel parityRun both pixels side-by-side for at least 7 days; compare event counts, attribution model output, and CAPI match rate day-over-day. Exit: event-count delta within 2% across the 7-day window; CAPI match rate within 5 points of Triple Whale's; known systematic differences (attribution model defaults) documented.
Days 14-28 — Reporting parity + shadowRun your team's weekly KPI reports in BOTH tools. Shadow your ad ops team on Admaxxer (Maxxer chat + dashboards) for daily operations. Exit: weekly report in both tools agrees on blended MER, top-3 acquisition sources, and CAPI match rate; team is comfortable opening Maxxer chat for first-line ops questions.

The full 30-day timeline

Each row is an action and the canonical Admaxxer surface where you perform it. Copy this table into a Notion task list and tick rows as you complete them.

Day + actionSurface
Day 1 — Install Admaxxer pixel (Shopify theme code or Admaxxer Shopify app). Set up first-party CNAME if you cloak Triple Whale today./documentation/install/shopify
Day 1 — Paste Meta long-lived user token + Pixel ID + CAPI access token./integrations/meta-ads
Day 1 — Paste Google Ads developer token + OAuth refresh token + customer_id./integrations/google-ads
Day 2 — Paste TikTok Business token, Pinterest token, and Amazon Ads refresh token (if applicable)./integrations/tiktok-ads, /integrations/pinterest-ads, /integrations/amazon-ads
Day 2 — Verify all 5 connection cards show green status. Shopify historical backfill job kicks off automatically./integrations
Day 3 — Open /chat - confirm Maxxer can list_campaigns across every connected platform. This is the 'tokens are wired' smoke test./chat
Days 4-7 — Wait for Shopify backfill to finish (24-72 hours depending on order volume). Verify reconciliation against Shopify Admin -> Reports./dashboard
Days 7-14 — Pixel parity window. Both pixels run side-by-side. Run /documentation/tracking-health daily to confirm event counts converge./documentation/tracking-health
Day 14 — Toggle to Admaxxer's default attribution model (last-touch, 7-day click) - match Triple Whale's default to establish parity./documentation/attribution-models
Days 14-21 — Run your team's weekly KPI report in BOTH tools. Compare blended MER, cohort LTV, top-3 sources, CAPI match rate.Both tools
Days 21-28 — Team shadows Admaxxer for daily ad ops (Maxxer chat, /dashboard, the Meta + Google connection pages)./chat + /dashboard
Day 28 — Run an incrementality test in Admaxxer to validate Meta's incremental contribution - this is the moment you start trusting your own number instead of Triple Whale's./documentation/incrementality-testing
Day 29 — Cancel Triple Whale subscription. Don't remove the pixel yet - wait one more day in case you need to pull a report.Triple Whale -> Settings -> Billing
Day 30 — Remove Triple Whale script from Shopify theme. Commit. Verify zero pxl.so requests in a fresh incognito session. Migration done.Shopify Admin -> Online Store -> Themes -> Edit code

Why running both pixels at once is safe

The first concern every Shopify-savvy operator raises: "won't two pixels conflict?" They won't. Here are the three architectural facts that make the parallel window safe.

  • Separate JS namespaces. Triple Whale uses _tw / TripleWhale globals; Admaxxer uses _admaxxer / window.admx. The two never touch the same property on window, never write to the same cookie, never read the same localStorage key. They're effectively in parallel universes inside the same page.
  • Separate first-party endpoints. Triple Whale's first-party cloak ends at pxl.so (via your CNAME). Admaxxer's first-party endpoint ends at i.admaxxer.com (also via your CNAME). The two endpoints don't share a request budget, a rate limit, or a third-party-cookie surface.
  • Trivial bundle weight cost. Triple Whale's pixel is ~12 KB gzipped, Admaxxer's is ~9 KB. Running both adds 21 KB to your storefront - roughly the size of a single product image. Page-speed impact is undetectable in real-world Web Vitals telemetry.

How to reconcile the historical order import

When you connect Shopify, Admaxxer kicks off a one-time historical order import - every order from the beginning of time, written to the canonical orders datasource. The backfill takes anywhere from a few minutes (boutique stores) to 48 hours (high-volume stores with hundreds of thousands of orders). It runs in the background; you can use Admaxxer while it's running.

The reconciliation step is the most important part of phase 2. Open Shopify Admin -> Reports -> Sales by month, pull the trailing 12 months, and compare each month's order count + net sales against Admaxxer's dashboard for the same month. The numbers should match to the cent.

  • Order count off by <0.5%. Typically refunds - Shopify includes refunded orders in some reports, excludes them in others. Compare specifically to the 'Total orders' metric (gross), not the net-of-refunds figure.
  • Revenue off by 1-5%. Currency conversion. If your store sells in multiple currencies, Shopify reports in shop currency by default, Admaxxer in your selected reporting currency. Toggle /settings/exchange-rates and reconcile against Shopify's presentment-currency report.
  • Revenue off by >5%. Open a support ticket. The backfill job is idempotent; a re-run will not duplicate orders. Most large discrepancies trace back to a multi-store setup (a duplicate store the Shopify token had access to but you didn't intend to connect).

Days 7–14 — the parity check that protects the cutover

For at least 7 consecutive days, both pixels fire on every page view, every add-to-cart, every checkout, every purchase. Each morning, pull /documentation/tracking-health and compare:

  • Event-count delta. Admaxxer pixel total page views and total purchases for the trailing 24 hours - should be within 2% of Triple Whale's. Larger deltas usually trace back to one of: the Triple Whale pixel firing on a sub-route Admaxxer isn't (a custom thank-you page, a non-Shopify subscription portal); or a consent-management plugin blocking one but not the other.
  • CAPI match rate. Both tools surface a Meta CAPI match score (the % of purchase events Meta could match to a user). Within 5 points is healthy. Larger gaps usually mean Triple Whale's click-ID capture is more aggressive on one surface - toggle Admaxxer's extended click-ID capture in /integrations/meta-ads if the gap persists into day 10.
  • Attribution model output. The two tools' default models differ. To compare like-for-like, toggle Admaxxer to last-click 7-day (Triple Whale's default) before pulling the parity report. Once both are on the same model, attribution should agree within 5% on the top-3 acquisition sources.

Why Triple Whale and Admaxxer disagree on top-source ranking

Triple Whale's default model is a DTC-flavoured last-click with a 7-day window and a paid-social bias (the bias is the product's historical positioning - DTC operators wanted to see paid social credited generously). Admaxxer ships six toggleable attribution models and defaults to a neutral last-touch with no platform bias.

In the parity window, set Admaxxer's model to last-click 7-day to match. Once you've confirmed parity at that model, toggle through the other five:

  • First-click 7-day — over-credits awareness channels.
  • Linear — equal weight to every touch in the path.
  • Time-decay — exponential weighting favouring recent touches.
  • Position-based — 40/40/20 split (first / last / middle).
  • Data-driven (Markov) — credit assigned by removal effect on conversion probability. The most defensible model for DTC stores with multi-touch paths.

See /documentation/attribution-models for the full breakdown and the cases each model is built for.

Triple Whale doesn't export tokens — and that's correct

One question every migration faces: "can I just copy the tokens Triple Whale already has?" The answer is no, and it's the right answer. Triple Whale stores the underlying long-lived tokens encrypted on their side and intentionally doesn't expose them - exposing them would be a security hole (a leaked Triple Whale account becomes a leaked Meta account becomes a leaked ad spend).

What you do instead: regenerate fresh tokens from each ad platform's developer console and paste them into Admaxxer. The process is about 10-15 minutes per platform; the full sequence is documented in /documentation/playbooks/server-side-conversion-api-setup. Your existing campaigns are untouched - the tokens are read-only on Admaxxer's side until you explicitly approve a write via Maxxer.

Meta:        https://developers.facebook.com -> My Apps -> [your app]
                -> System User -> Generate Token (long-lived user token,
                ads_read + ads_management scopes).

Google Ads:  Cloud Console -> APIs & Services -> Credentials -> OAuth 2.0
                client -> Authorized redirect URIs -> add Admaxxer callback.
                Then visit https://admaxxer.com/integrations/google-ads
                -> "Start OAuth" to land a refresh token.
                Developer token: https://ads.google.com/aw/apicenter

TikTok:      https://business-api.tiktok.com -> Apps -> [your app]
                -> Generate App Access Token.

Pinterest:   https://developers.pinterest.com -> Apps -> [your app]
                -> Access Token -> Generate (ads:read + ads:write).

Amazon Ads:  https://advertising.amazon.com/API/docs -> Authorization
                -> LWA -> exchange auth code for refresh token.

What to do with the data you've already paid for

Triple Whale's Pro tier supports CSV exports of historical reports - orders, attribution, creative breakdown, customer journey. Don't throw it away; bring it with you. Admaxxer ingests historical CSV imports as a one-time data sync, writing the events into the corresponding source datasources so you can see your full attribution history in the dashboards from day 1.

The imported data is read-only and kept for retrospective comparison only. Going forward, Admaxxer's own pixel + Shopify backfill becomes the source of truth - but the imported Triple Whale history is what makes year-over-year comparisons possible during the first 12 months of running on Admaxxer.

What to export from Triple Whale before you cancel:

  • Orders + attribution CSV for the full available history (typically 24 months).
  • Creative-level breakdown CSV (last 12 months) - useful for comparing creative performance year-over-year.
  • Post-purchase survey responses if you ran any - Triple Whale's survey product has its own export surface.

What goes wrong when teams rush this

Every mistake on this list has been made by a real customer. Reading them before you start is the highest-leverage 90 seconds of your migration.

  1. Skipping the pixel parity window. You retire Triple Whale on day 1, then realize on day 7 that Admaxxer's pixel is missing a checkout event (an old theme override, a non-default thank-you page, a non-Shopify subscription product) and you have 6 days of broken attribution data with no fallback.
  2. Assuming the same attribution model. Triple Whale defaults to a DTC-flavoured last-click model that over-credits paid social by ~10-15% in most stores. Admaxxer offers 6 toggleable models - if you don't match defaults in the parity window, you'll see a 'gap' that's really a model difference, not a tracking gap.
  3. Not running an incrementality test before reallocating budget. Triple Whale's incrementality module is a paid add-on, so most stores have never seen a clean lift number for their Meta spend. Admaxxer runs incrementality as a first-class surface - running one BEFORE you reallocate prevents the common 'switched tools and revenue dropped' attribution-shock false alarm.
  4. Forgetting to regenerate ad-platform tokens. Triple Whale stores the underlying tokens encrypted; you can't export them. If you try to skip token regeneration and copy the Pixel ID alone, you'll see zero data in Admaxxer's dashboards. The fix is mechanical - regenerate per /documentation/playbooks/server-side-conversion-api-setup - but it's a half-day delay if it surprises you on day 1.
  5. Cancelling Triple Whale on day 7 instead of day 30. You lose the parallel-tools comparison window. If a finance report in week 2 disagrees with Triple Whale, you can't go re-pull the source numbers. Pay the extra 23 days of Triple Whale subscription - it's cheaper than the cost of one wrong attribution decision.

The five items that close out the migration

About 30 minutes of work on day 30. Each item has a verifiable exit state - don't mark complete until you've checked the artefact.

  1. Confirm pixel parity. Open /documentation/tracking-health and verify Admaxxer's pixel event count is within 2% of Triple Whale's for the trailing 14 days. Larger deltas usually mean Triple Whale's first-party cloak is firing on a different subdomain - not a bug, but a known-different baseline.
  2. Confirm Shopify backfill completeness. Reconcile total order count + total revenue against Shopify Admin -> Reports for the trailing 12 months. Variance > $5 in either direction triggers a re-run of the backfill job.
  3. Cancel Triple Whale subscription. Log into Triple Whale -> Settings -> Billing. Cancel before the next renewal date. Triple Whale does NOT pro-rate, so the cancellation takes effect at the end of the current billing period.
  4. Remove Triple Whale tag from Shopify theme. Shopify Admin -> Online Store -> Themes -> Actions -> Edit code. Search for tw. or pxl.so or _tw or TripleWhale. Delete the script block and the snippet include. Commit the theme change.
  5. Confirm Triple Whale pixel stops firing. Reload your storefront in a fresh incognito window. Open DevTools -> Network -> filter by pxl.so. There should be zero requests. If anything remains, you missed a tag somewhere - re-search for any of the Triple Whale identifiers and commit a follow-up.

The first 60 days on Admaxxer

Once Triple Whale is retired, three surfaces are worth prioritising in your team's rotation. The first is Maxxer - the AI agent embedded in /chat. Most teams that come from Triple Whale spend the first two weeks learning Maxxer's pattern for the recurring questions they used to answer in Triple Whale's Sonar; the playbook in /documentation/playbooks/ai-ad-operations-maxxer is the canonical onboarding.

The second is incrementality. Admaxxer ships incrementality testing as a first-class surface. Run one within the first 30 days post-migration to establish a baseline lift number for each major paid channel - this is the single most valuable number for budget allocation decisions, and most stores have never had a clean measurement of it.

The third is the forecast surface. Admaxxer's 90-day revenue forecast combines pixel-attributed revenue + ad-platform spend trajectories with weekly seasonality. It's the easiest way to spot a budget shortfall 30 days before it hits - earlier than ad-platform pacing alerts would ever tell you.

Frequently asked questions

Why a 30-day migration instead of a same-day switch?
Two reasons. (1) Pixel parity — the new Admaxxer first-party pixel needs to fire alongside the Triple Whale pixel for at least 14 days so you can confirm event counts, attribution model output, and CAPI match rate are aligned (or known-different in expected ways). (2) Shopify backfill — Admaxxer imports your entire order history (year 1 → today) and recomputes attribution + cohorts from the first-touch pixel data we have, which can take 24-72 hours depending on volume. By day 30, both pixels have run, the backfill is finalized, your team has run their weekly reports in both tools, and the decision to retire Triple Whale is data-backed.
Does my Triple Whale pixel conflict with the Admaxxer pixel?
No. Both pixels run on completely separate JS namespaces (_tw, _admaxxer) and never write to the same cookie or localStorage key. They also use different first-party endpoints (Triple Whale's pxl.so + Admaxxer's i.admaxxer.com — both first-party-cloaked via your CNAME). You can run both indefinitely; the only cost is a few extra kB of bundle weight.
What about my historical attribution data in Triple Whale?
Triple Whale supports CSV exports of historical reports (orders + attribution + creative-level breakdown) on the Pro tier. Admaxxer can import these as a one-time data sync — drop the CSV in /admin/import-historical and we'll write the events to the corresponding source datasource. Going forward, Admaxxer's pixel + Shopify backfill is the source of truth; the imported Triple Whale data is read-only and kept for retrospective comparison only.
Can I migrate ad-platform tokens from Triple Whale or do I need to regenerate them?
You need to regenerate them — Triple Whale doesn't expose your underlying tokens (and shouldn't for security reasons). Admaxxer's connection setup at /settings/connections walks you through generating a fresh long-lived Meta user token + Pixel ID + CAPI access token + Google Ads developer token + refresh token. The process takes 10-15 minutes per platform. None of your existing campaigns are affected — the tokens are read-only on Admaxxer's side until you explicitly approve a campaign change via Maxxer.
What does the day-30 retirement look like in practice?
(1) Confirm pixel parity in /attribution/health — Admaxxer's pixel event count should be within 2% of Triple Whale's for the prior 14 days. (2) Confirm Shopify backfill completeness in /admin/data-health — total order count + total revenue should match Shopify Admin to the cent. (3) Cancel your Triple Whale subscription via their /billing page. (4) Remove the Triple Whale tag from your Shopify theme (themes/edit-code, search for `tw.` or `pxl.so`, delete the script block; commit). (5) Triple Whale's pixel stops firing the next time a customer hits your store; your data is fully on Admaxxer. Total time on day 30: ~30 minutes.

Run this playbook in your own dashboard

Admaxxer ships the pixel + Meta CAPI + Google Enhanced Conversions + Maxxer AI agent + cohort analytics out of the box. The playbook above becomes a live surface in your account after a 5-minute setup.

Start a 7-day trial See pricing