Install Admaxxer on WordPress / WooCommerce
First-party pixel tracking + server-side WooCommerce conversion attribution. The plugin is open-source under GPL v2+, listed on the official WordPress Plugin Directory, and works with every major caching plugin.
Overview
The Admaxxer Analytics WordPress plugin (v1.3.0) installs a first-party analytics pixel on every front-end page of your site and adds server-side WooCommerce purchase tracking. Pixel events flow to your Admaxxer dashboard for attribution, MER, cohort LTV, and CAPI match-rate analysis. WooCommerce orders are forwarded over HMAC-signed webhooks so revenue is attributed even when ad blockers or iOS privacy controls block the client-side checkout pixel. v1.2.0 extracts the full economic shape of each order — subtotal, tax, discount, shipping, refund, units sold, customer-lifetime order count, and customer-lifetime spend — so the Returns, Taxes, Discounts, Shipping, Units Sold, True AOV, Total Sales, and Net Revenue dashboard tiles render real numbers (instead of zeros, which is what WP-only merchants saw before this release).
The plugin is free and open-source under GPL v2+, mirroring the WordPress core licence. To use it you need an active Admaxxer subscription (plans start at $29/month). Source code lives at wordpress.org/plugins/admaxxer-analytics/ for review — no obfuscation, no telemetry, no activation phone-home.
Before you start
- WordPress 5.8 or newer (the plugin's minimum — tested up to 6.7).
- PHP 7.4 or newer (PHP 8.x fully supported).
- WooCommerce 3.0 or newer — optional but recommended. Without WC, the pixel still tracks pageviews; with WC, you get server-side order attribution.
- An Admaxxer account — sign up free at admaxxer.com (7-day trial, no credit card required).
- About 60 seconds.
Install in 60 seconds
- Open the plugin installer. In your WordPress admin go to Plugins › Add New.
- Search for the plugin. Type Admaxxer Analytics in the search box. The official plugin shows up authored by admaxxer with the Admaxxer logo.
- Install + Activate. Click Install Now, then Activate. The plugin registers a settings page under
Settings › Admaxxer. - Paste your Website ID. In WordPress admin go to Settings › Admaxxer. Copy your Website ID from admaxxer.com › Settings › Install (it starts with
admx_) and paste it into the Website ID field. - (Optional, recommended for WooCommerce) Paste the Webhook HMAC Secret. In your Admaxxer dashboard, open Integrations, click WooCommerce › Connect, and copy the Signing secret from the “Final step: webhook setup” card. Paste it into the Webhook HMAC Secret field in WordPress. Without this, server-side order attribution is disabled (pixel still tracks browser-side checkout events).
- Click Save Settings. The pixel is now active site-wide. WooCommerce hooks register if WC is detected.
What's new in v1.2.0
v1.2.0 (April 2026) closes the cross-source data-parity gap that left WP / WooCommerce-only merchants seeing $0 on the Returns, Taxes, Discounts, Shipping, Units Sold, True AOV, Total Sales, and Net Revenue dashboard tiles — tiles that worked for Shopify-app merchants because the Shopify payload carried richer order data, but were silently empty for WooCommerce because the v1.1.0 plugin only sent amount + currency.
- Extended order payload. Every
woocommerce_payment_completeandwoocommerce_thankyoudispatch now extracts:subtotal,tax(sum of order tax + shipping tax),discount,shipping,refund(from refund hooks),units_sold(sum of line-item quantities),line_item_count(distinct variants),gateway(WC payment gateway slug),landing_site+referring_site(from order meta),is_new_customer(lifetime order count == 1),customer_order_count,customer_total_spent,financial_status(paid / partially_refunded / refunded), andfulfillment_status(fulfilled / partial / unfulfilled). All money values flow as decimal major units; the Admaxxer ingest converts to cents (Int64) before storage. None of these fields are PII; raw email and phone are SHA-256 hashed before transmission as before. - Dashboard tile coverage. Once your store is on v1.2.0, every Marketing Acquisition tile that was previously gated on Shopify-shape data (Returns, Taxes, Discounts, Shipping, Units Sold, True AOV, Total Sales, Net Revenue, New Customer % / Returning Customer %, NC Revenue / Returning Revenue) populates automatically from your existing WC orders. No re-installation, no re-OAuth, no migration. Backfill of historical orders is NOT performed — only new orders from the upgrade onward carry the extended payload.
- Refund hook subscribed. v1.2.0 also subscribes to
woocommerce_order_refundedso refund events flow to Admaxxer withrefundpopulated andamountset to0(refund-only event). The Returns tile + Net Revenue computation now reflect refund activity for WC-only merchants the same way they have for Shopify merchants. - Tested up to WordPress 6.7 (unchanged from v1.1.0).
Generic compatibility note: receivers that pre-date v1.2.0 keep working — the new fields are all optional. The dashboard renders $0 only for tiles whose underlying field is unset; once you upgrade, the zeros are replaced with real numbers on the next paid order.
What's new in v1.1.0
v1.1.0 (April 2026) addresses the most common revenue-loss bug we saw in v1.0 deployments — orders that paid via PayPal or Stripe redirect but where the customer never reached the thank-you page (browser closed, network drop, redirect blocked).
woocommerce_payment_completehook subscribed. v1.0 only listened forwoocommerce_thankyou, which fires browser-side. If the gateway redirect dropped, the order was paid but the event never sent — silent revenue loss. v1.1.0 also subscribes towoocommerce_payment_complete, which fires server-side on gateway confirmation regardless of whether the customer's browser ever loaded the thank-you page. PayPal Standard and Stripe Checkout redirect-abandonment orders are now caught reliably.- Atomic local idempotency guard via order meta. Multiple WC hooks can fire for the same order (thankyou + payment_complete + order_status_completed). v1.1.0 records
_admx_capi_sent_{event_type}viaadd_post_meta(..., $unique = true)— the unique flag returns false if the record already exists, so duplicate dispatches are skipped before any HTTP call. Belt-and-suspenders against the server-side dedup which already runs atserver/routes/pixelWebhooks/woocommerce.ts. - Explicit External Services disclosure section. The
== External Services ==section inreadme.txtdocuments every third-party endpoint the plugin contacts, what data is sent, and when. WordPress.org reviewers required this disclosure for SaaS plugins as of mid-2025; the plugin now ships the section out of the box. - Tested up to WordPress 6.7 bumped from 6.6.
Cookieless mode
Toggling Cookieless mode in Settings › Admaxxer › Enable Cookieless Tracking swaps the loaded pixel bundle to /js/script.cookieless.js — the exact same runtime the dashboard injects when you flip cookieless mode under Connections › Pixel install. There is no behavioural difference between the WordPress plugin and the standalone snippet when the toggle is on; both load the cookieless build, neither sets a first-party cookie, and visitor IDs are derived from a salted fingerprint that rotates daily. With the toggle off (the default) the plugin loads /js/script.js and a single first-party cookie _admx_visitor is written with a 1-year expiry. Cookieless mode is generally recognized as exempt from EU/UK consent banner requirements for the pixel itself, though final compliance depends on your jurisdiction — review with your DPO.
Where to find your Website ID
Your Website ID is shown at the top of the in-app pixel install card. The full path:
- Open the Admaxxer dashboard.
- Click Connections in the sidebar.
- Open Pixel install. The Website ID is at the top of the snippet card — the line that starts
data-website-id="admx_...". Copy that value (it always begins with theadmx_prefix; example:admx_a1b2c3d4e5f6). - Paste the value into the Website ID field in the WordPress plugin settings (Settings › Admaxxer).
Verify it's working
- Pixel: Visit your homepage in a fresh incognito browser tab. Within ~60 seconds (usually under 5) the pageview lands in your Admaxxer dashboard › Pixel › Realtime. If nothing shows after 2 minutes, view the page source (Ctrl/Cmd-U) and confirm
admaxxer.com/js/script.jsis present in the rendered<head>. - WooCommerce orders: Place a test order through your WooCommerce checkout (any gateway). Within 30 seconds of the order paying, revenue lands in Attribution › Revenue with the correct source/medium for the visitor's session.
- WC order notes: Open the test order in WooCommerce admin › Orders. The Order Notes pane shows entries like Admaxxer: purchase event sent and Admaxxer: completed event sent — one per event type, never duplicated.
Troubleshooting
- I have a caching plugin (W3 Total Cache, WP Rocket, LiteSpeed) and the pixel doesn't fire.
- The Admaxxer plugin enqueues the pixel via
wp_enqueue_scripts, which is the standard WP API every caching plugin respects. Pixel still fires because the plugin hooks bothwp_head(primary) and awp_footersafety fallback. If your caching plugin minifies or defers third-party scripts, excludeadmaxxer.comfrom minification and deferred-JS rules. WP Rocket: Settings › File Optimization › Excluded JavaScript Files. W3 Total Cache: Performance › Minify › JS › Never minify the following JS files. LiteSpeed Cache: Page Optimization › JS Settings › JS Excludes. - My PayPal redirect failed and the order never tracked — is v1.1.0 going to fix this?
- Yes. v1.1.0 subscribes to
woocommerce_payment_complete, which fires server-side as soon as PayPal/Stripe confirms the payment, regardless of whether the customer's browser ever returned to your thank-you page. v1.0 only listened towoocommerce_thankyou(browser-side), which is why redirect-abandonment orders went untracked. Upgrade to v1.1.0 and historical missed orders will start being captured for any order the gateway confirms going forward (we don't backfill historical PayPal/Stripe orders — only new ones from the upgrade onward). - I'm seeing duplicate purchase events for the same order.
- v1.1.0 prevents this with an atomic local guard: each (order_id, event_type) pair is recorded via
add_post_meta($order_id, '_admx_capi_sent_purchase', '1', true)with$unique = true. The unique flag is enforced atomically by WordPress at the database level — concurrent hooks racing on the same order can't both succeed. The server-side ingest atserver/routes/pixelWebhooks/woocommerce.tsalso runs an idempotency guard keyed on(provider, external_id). If you're still seeing duplicates after upgrading to v1.1.0, you may have v1.0 running on a multisite subsite alongside v1.1.0 elsewhere — upgrade all sites to v1.1.0. - Where do I find the Webhook HMAC Secret?
- In your Admaxxer dashboard, open Integrations, click WooCommerce › Connect, and copy the Signing secret from the “Final step: webhook setup” card. The secret is per-website — if you run multiple stores under one Admaxxer account, each website has its own secret. Paste it into the WordPress plugin's Webhook HMAC Secret field. Without this, server-side order attribution is disabled (the plugin doesn't dispatch order events without a configured secret) but the pixel still tracks browser-side pageviews and checkout events.
- I want cookieless mode for GDPR — do I need a consent banner?
- The plugin supports a cookieless mode toggle in Settings › Admaxxer › Enable Cookieless Tracking. When enabled, no persistent identifiers are stored in the browser — visitor IDs are derived from a salted fingerprint of headers (Accept-Language, User-Agent, IP-prefix) and rotate daily. This setup is generally recognized as cookie-less and exempt from EU/UK consent banner requirements, though final compliance depends on your jurisdiction and use case — review with your DPO. With cookieless mode off (the default), a single first-party cookie (
_admx_visitor) is set with a 1-year expiry and you should disclose it in your cookie banner. - Plugin says "Activated" but no pixel events arrive.
- Three common causes. (1) Website ID is empty or wrong — double-check that you pasted the value starting with
admx_. (2) Caching plugin stripped the script — see the W3TC/WP Rocket/LiteSpeed answer above. (3) A security plugin (Wordfence, Sucuri) is blocking the outbound POST — whitelistadmaxxer.comin your firewall's allowed-domains list. - Does this work with WooCommerce HPOS (High Performance Order Storage)?
- Yes. The plugin declares HPOS compatibility via
before_woocommerce_initand uses the WooCommerce Order API (wc_get_order()) rather than direct SQL queries. Tested against WC 9.0 with HPOS enabled. - Multisite — do all sites share one configuration?
- No. Each site in a multisite network has its own settings (Website ID, HMAC Secret, cookieless toggle, etc.). On plugin uninstall, options are cleaned per-site so you can safely uninstall from one subsite without affecting others.
What's collected
Verbatim from the plugin's == External Services == disclosure in readme.txt:
Pixel script (loaded in the browser, on every front-end page)
- Service: Admaxxer pixel CDN.
- URL:
https://admaxxer.com/js/script.js?id={your_website_id}(or your configured Proxy Origin). - Data sent: page URL, referrer, user agent, anonymous visitor ID (cookie or fingerprint depending on cookieless mode), timestamp.
- When: every front-end pageview, after you save your Website ID in Settings.
- No data is sent until you enter your Website ID.
Server-side WooCommerce events (sent from your server, only if Webhook HMAC Secret is configured)
- Service: Admaxxer ingest webhook.
- URL:
https://admaxxer.com/api/pixel/webhooks/woocommerce/{your_website_id}. - Data sent: order ID, total, currency, customer email (for visitor stitching), Admaxxer visitor ID cookie value, order line items, plus — new in v1.2.0 — subtotal, tax, discount, shipping, refund (when applicable), units sold, line-item count, payment gateway slug, landing site URL, referring site URL, lifetime customer order count, lifetime customer spend, financial status, and fulfillment status. All money values are in major units (the Admaxxer ingest converts to cents Int64); customer email is SHA-256 hashed before transmission. None of the new fields contain raw PII.
- When: WooCommerce
woocommerce_thankyou,woocommerce_payment_complete, and (new in v1.2.0)woocommerce_order_refundedhooks fire. - Authentication: HMAC-SHA256 signature using your Webhook HMAC Secret.
Documentation, terms, and privacy:
- Admaxxer service: admaxxer.com
- Terms of Service: admaxxer.com/terms
- Privacy Policy: admaxxer.com/privacy
By entering your Website ID and (optionally) your Webhook HMAC Secret in Settings › Admaxxer, you authorize this plugin to transmit the data above to Admaxxer. To stop all data transmission, clear the Website ID field or deactivate the plugin.
Privacy / GDPR
Admaxxer is a first-party analytics tool. All data is stored under your workspace at admaxxer.com. The plugin does not share any data with third parties — no Google Analytics shadow-pixel, no Meta Pixel injection, no Hotjar, no telemetry. If you toggle cookieless mode (Settings › Admaxxer › Enable Cookieless Tracking), no persistent cookies are set; visitor IDs are derived from a salted fingerprint that rotates daily. With cookieless mode off, a single first-party cookie _admx_visitor with a 1-year expiry stores the visitor ID.
For per-customer deletion, email hello@admaxxer.com from the email on your Admaxxer account or use the self-serve /data-deletion form. We action requests within 7 days.
For the full Admaxxer privacy policy see admaxxer.com/privacy and your own legal requirements.
Pricing
The Admaxxer Analytics WordPress plugin is free and open-source under the GPL v2+ licence — the same licence WordPress core ships under. Source is at wordpress.org/plugins/admaxxer-analytics/ for review.
To use it you need an active Admaxxer service subscription. Plans start at $29/month; see admaxxer.com/pricing for the full plan matrix. Billing is via Stripe at admaxxer.com. The plugin never charges anything — no in-plugin upsells, no activation fee, no premium-feature unlocks.
Related
- Open your Admaxxer dashboard — see WordPress under Connected sources after install.
- Self-host the pixel via a WordPress proxy — bypass ad blockers entirely by routing pixel traffic through your own domain.
- WooCommerce revenue connector docs — deeper detail on the HMAC verification, visitor stitching, and refund handling.
- Connect Meta Ads — pair WooCommerce revenue with Meta spend for blended ROAS.
- Connect Google Ads — same for Google.
- All install guides — copy-paste snippets for 20+ platforms.
- Analytics overview — pixel, attribution, MER, LTV, MMM, forecast, incrementality.
- Privacy policy — what we collect, how long we keep it, your rights.