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.1.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.
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. Copy it from admaxxer.com › Settings › Webhooks and paste into the Webhook HMAC Secret field. 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.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.
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
cdn.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, excludecdn.admaxxer.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 › Settings › Webhooks. Click Reveal secret next to your WooCommerce webhook entry. 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 — whitelistcdn.admaxxer.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.
- When: WooCommerce
woocommerce_thankyouandwoocommerce_payment_completehooks 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
- Install Admaxxer on Shopify (App Store) — one-click install for Shopify merchants.
- 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.