Verify revenue attribution after install
How to Verify Revenue Attribution After Install
Admaxxer is a DTC analytics platform with built-in Meta + Google ad ops. After any install — fresh pixel, GTM, Shopify webhook, Meta connection, or Google Ads connection — you should run a short end-to-end smoke test rather than trust dashboards the next morning. TL;DR: fire a real purchase through a tagged UTM link, confirm the event lands in Admaxxer within 60 seconds, confirm the UTM is attached, and confirm blended MER recalculates with your ad spend.
## Symptoms
Run this guide when:
- You just completed a fresh Admaxxer install.
- You changed the pixel, GTM, webhook, or ad-platform connection.
- You redeployed the site and want to confirm nothing regressed.
- A stakeholder asks "is attribution actually working?" and you need evidence.
## Root cause
Attribution has five moving parts: pixel load, pageview capture, UTM ingestion, purchase event, and ad-spend join. Breaking any one of them breaks attribution in a different way. This is the shortest check that exercises all five.
## Fix
### Step 1: Build a tagged smoke-test URL
Append `?utm_source=smoketest&utm_medium=verify&utm_campaign=install_$(date)` to your landing page. Use a unique `utm_campaign` so you can filter this smoke event out of real data later.
### Step 2: Open the URL in a guest window
Fresh incognito session, no extensions blocking scripts. Open DevTools -> Console and confirm `window.admaxxer` is defined. Open Network and filter for the Admaxxer ingest domain — you should see a pageview beacon.
### Step 3: Place a real-money or sandbox test order
Complete checkout end to end. For Shopify, use a real card or Shopify Bogus Gateway; for custom checkouts, fire the `purchase` event with a known `order_id`, `value`, and `currency`. The key is that `admaxxer.track('purchase', { order_id, value, currency })` runs with non-null values.
### Step 4: Confirm the event in Admaxxer realtime
Admaxxer -> Analytics -> Realtime. The purchase should appear within about 60 seconds. Click it — the side panel should show the `utm_source = smoketest` you set in Step 1.
### Step 5: Confirm server-side revenue
If Shopify is connected, the `orders/paid` webhook fires a second confirmation. Admaxxer deduplicates based on `order_id`, so you should see one purchase — not two. If you see two, see the duplicate-events guide.
### Step 6: Confirm blended MER
Admaxxer -> Dashboard. After a minute or two, the MER tile should update to reflect the new revenue divided by the current ad spend. If MER stays flat, ad-spend ingestion is likely the culprit, not revenue — check Meta and Google connection cards for sync errors.
### Step 7: Confirm cohort LTV and attribution windows
Open the attribution view and filter to `utm_campaign = install_`. You should see a single session with a purchase. Cohort LTV at 7/30/90 day windows will back-fill over time, but the session presence is the load-bearing check today. If the session is missing, the pixel did not identify the visitor before the purchase fired.
## Verify the fix
- Realtime shows the purchase event with source = smoketest.
- The purchase has a non-null `value` and a matching `order_id`.
- Blended MER nudges up (or down if ad spend increased more than revenue).
- Meta and Google Ads connections both show green with recent sync timestamps.
- No CSP violations in the browser console.
- The attribution breakdown resolves to the `utm_source` you set, not "direct / none".
## Prevent it next time
- **Script the smoke test** so any teammate can re-run it in one click.
- **Run it on every deploy** that touches pixel code or Shopify webhooks.
- **Alert on stale data.** Admaxxer can notify when zero purchases land in a normally-busy hour.
- **Keep the smoke-test UTM known.** Add `utm_campaign LIKE 'install_%'` as an exclusion filter on dashboards so test traffic does not pollute analysis.
## Related guides
- [Shopify orders webhook not firing](/guides/shopify-orders-webhook-not-firing)
- [Duplicate payment events](/guides/duplicate-payment-events)
- [Post-install checklist](/documentation/install/checklist)
## FAQs
**Q: Do I need to use a real credit card for the test?**
A: No. Shopify Bogus Gateway or a dev checkout is fine as long as the order transitions to "paid" status, because that is what fires the `orders/paid` webhook.
**Q: How long should I wait for the event to show up?**
A: Under a minute end-to-end in healthy conditions. If nothing shows up in 2 minutes, start debugging — usually the pixel never loaded or the webhook never fired.
**Q: Will the smoke-test order skew my historical data?**
A: A few dollars of test revenue barely moves the needle, but filter it out with an exclusion rule to keep dashboards honest.
Frequently Asked Questions
Do I need to use a real credit card for the test?
No. Shopify Bogus Gateway or a dev checkout is fine as long as the order transitions to paid, because that is what fires the orders/paid webhook.
How long should I wait for the event to show up?
Under a minute end-to-end in healthy conditions. If nothing shows up in 2 minutes, start debugging — usually the pixel never loaded or the webhook never fired.
Will the smoke-test order skew my historical data?
A few dollars of test revenue barely moves the needle, but filter it out with an exclusion rule to keep dashboards honest.
Put This Knowledge Into Action
Bring Meta and Google ads into one self-hosted workspace.
Get Started Free