Revenue Connectors · WooCommerce
Connect WooCommerce to Admaxxer
Install the official Admaxxer WordPress plugin to forward WooCommerce's order_status_completed and order_status_processing webhooks to Admaxxer. Five-minute setup, signed via the X-Admaxxer-Signature header (HMAC-SHA256), visitors stitched via the top-level admx_visitor_id field that the plugin writes onto every order at checkout.
1. Prerequisites
- WordPress 6.0+ with WooCommerce 7.0+ installed.
- The Admaxxer pixel installed on your storefront. The Admaxxer WP plugin installs it automatically during setup, or use the install index for manual install.
- An Admaxxer workspace with the website registered. Your Website ID is at Revenue Settings.
- Permission to install plugins on your WordPress site (Administrator role).
2. Install the Admaxxer WordPress plugin
- In your WordPress admin, go to Plugins › Add New.
- Search for Admaxxer Revenue.
- Click Install Now, then Activate.
- Alternative: download the .zip from your Admaxxer dashboard (Revenue Settings › WooCommerce › Download plugin) and upload via Plugins › Add New › Upload Plugin.
3. Configure the plugin
The plugin needs three settings: your Admaxxer Website ID, a shared signing secret, and the Admaxxer webhook URL (already pre-filled). The webhook URL is:
https://admaxxer.com/api/pixel/webhooks/woocommerce/<YOUR_WEBSITE_ID>
- In WordPress admin, go to WooCommerce › Settings › Admaxxer (the plugin adds this tab).
- Website ID: paste the UUID from Admaxxer Revenue Settings.
- Signing secret: click Generate to mint a 64-char random secret, then copy it into Admaxxer Revenue Settings › WooCommerce › Signing secret on the Admaxxer side. Both sides must store the same value.
- Subscribed events: the plugin pre-checks both options:
order_status_completedorder_status_processing
- Save changes.
The plugin handles every wire-level detail: HMAC signing, retry-on-failure (3 attempts with exponential backoff), and idempotency on the WooCommerce order ID.
4. How visitor stamping works
You don't need to add any code. The plugin does this automatically:
- The Admaxxer pixel (auto-installed by the plugin) writes a 1p cookie
admx_vidon every page view. - When a customer hits checkout, the plugin's WooCommerce hook reads the cookie and saves it as order meta on the new order.
- When the order transitions to
processingorcompleted, the plugin fires the outbound webhook with the order JSON, the visitor ID copied to the top-leveladmx_visitor_idfield, and the HMAC signature inX-Admaxxer-Signature.
That's it — no custom theme code, no functions.php edits.
5. Verify the connection
- In the WooCommerce › Settings › Admaxxer screen, click Send test webhook.
- The plugin posts a synthetic order to Admaxxer.
- In Admaxxer, open Revenue Settings. The "Last 50 webhook deliveries" panel shows the test with status
ok. - Run a real test order through your storefront. Inspect the order in WooCommerce admin and confirm
admx_visitor_idappears in the order meta. - Within 3 seconds of the order moving to
processing, it appears in the Admaxxer attribution dashboard.
6. Troubleshooting
- Webhook returns
401 invalid_signature - The signing secret on the WP plugin doesn't match Admaxxer's. Re-copy the secret from one side to the other. Make sure no trailing whitespace was copied.
- Order appears as unattributed
- The
admx_vidcookie was empty at checkout. Common causes: aggressive consent banner blocked the pixel, your theme uses heavy server-side rendering and the pixel hadn't fired yet, or a CDN/cache layer stripped the cookie. Inspect the order in WooCommerce — ifadmx_visitor_idis empty in order meta, the cookie was empty at checkout time. - Plugin not firing webhooks at all
- Check WordPress › Tools › Site Health. WP-Cron must be running for plugin webhooks; if your host disables WP-Cron, configure a system cron to hit
wp-cron.phpevery 5 minutes. Alternatively, the plugin supports synchronous mode (Settings › Admaxxer › Sync mode). - Refunds not subtracting from MER
- The plugin auto-subscribes to
order_status_refunded. If you don't see refunds reflected, confirm the Refunded events option is checked in the plugin admin.
Frequently asked
- Why use the Admaxxer plugin instead of WooCommerce native webhooks?
- WooCommerce's native webhooks don't include the visitor ID by default — they ship the order JSON as-is. Our plugin (a) reads the admx_vid cookie set by the Admaxxer pixel at checkout, (b) writes it onto the order as both a meta_data entry and a top-level admx_visitor_id field, and (c) signs the outbound payload with HMAC-SHA256 so Admaxxer can verify authenticity. You'd otherwise have to write all of that as a custom WordPress action hook yourself.
- What's the difference between order_status_completed and order_status_processing?
- order_status_processing fires when the order is paid but not yet shipped (the typical 'success' moment for digital goods). order_status_completed fires when the merchant marks the order shipped/fulfilled. For most stores, processing is the right revenue moment — you've been paid. We forward both so refunds-before-fulfillment correctly subtract from MER without you having to wire anything additional.
- Does this work with WooCommerce Subscriptions?
- Yes. Each renewal creates a new Order in WooCommerce, which fires order_status_processing/completed. Renewals carry the same admx_visitor_id forward via the parent-subscription's saved metadata, so cohort LTV correctly accumulates.
- What WordPress versions does the plugin support?
- The Admaxxer WP plugin supports WordPress 6.0+, WooCommerce 7.0+, and PHP 7.4+. It is tested on shared hosting (SiteGround, Bluehost, Kinsta), VPS (DigitalOcean, Linode), and Pantheon-style managed WP environments. Plugin source and changelog: see the WordPress plugin directory.
- How does X-Admaxxer-Signature verification work?
- The plugin computes HMAC-SHA256 over the raw POST body using the shared secret you paste into both Admaxxer Revenue Settings and the plugin admin screen. The hex-encoded HMAC is sent in the X-Admaxxer-Signature header. Admaxxer recomputes the HMAC, compares constant-time, and rejects mismatches with 401. The plugin also includes a timestamp in the body to defeat replay attacks (5-minute window enforced server-side).
Next steps
- All revenue connectors — back to the hub.
- Stripe, Paddle, Lemon Squeezy, Polar, Dodo, Shopify.
- Install the Admaxxer pixel — the plugin installs it automatically, but the manual install index covers other platforms too.
- Analytics docs — how Tinybird pipes consume revenue events.