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.

Open Revenue Settings Back to all connectors

1. Prerequisites

2. Install the Admaxxer WordPress plugin

  1. In your WordPress admin, go to Plugins › Add New.
  2. Search for Admaxxer Revenue.
  3. Click Install Now, then Activate.
  4. 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>
  1. In WordPress admin, go to WooCommerce › Settings › Admaxxer (the plugin adds this tab).
  2. Website ID: paste the UUID from Admaxxer Revenue Settings.
  3. 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.
  4. Subscribed events: the plugin pre-checks both options:
    • order_status_completed
    • order_status_processing
  5. 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:

  1. The Admaxxer pixel (auto-installed by the plugin) writes a 1p cookie admx_vid on every page view.
  2. When a customer hits checkout, the plugin's WooCommerce hook reads the cookie and saves it as order meta on the new order.
  3. When the order transitions to processing or completed, the plugin fires the outbound webhook with the order JSON, the visitor ID copied to the top-level admx_visitor_id field, and the HMAC signature in X-Admaxxer-Signature.

That's it — no custom theme code, no functions.php edits.

5. Verify the connection

  1. In the WooCommerce › Settings › Admaxxer screen, click Send test webhook.
  2. The plugin posts a synthetic order to Admaxxer.
  3. In Admaxxer, open Revenue Settings. The "Last 50 webhook deliveries" panel shows the test with status ok.
  4. Run a real test order through your storefront. Inspect the order in WooCommerce admin and confirm admx_visitor_id appears in the order meta.
  5. 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_vid cookie 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 — if admx_visitor_id is 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.php every 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