Engineering

WooCommerce conversion tracking: the 6 events that actually count

WooCommerce fires more than thirty action hooks during a typical purchase flow. Most of them are noise for ad-platform optimisation. Six are the real funnel signals every channel cares about. Here's what each one represents and where Beaconry hooks them.

Reading time: ~6 minPublished: 2026-05-02

Why six

Each ad platform has its own list of canonical conversion events. Meta has 17, Google Ads has 11, TikTok has 14. The intersection of "every platform cares about this" plus "every WooCommerce store actually generates this" is six. Tracking more than these six adds noise without optimisation lift; tracking fewer leaves attribution gaps.

1 / View Product

Fires on every single-product page-view. The visitor is browsing, not yet committed.

  • WP hook: woocommerce_before_single_product
  • Beaconry sends: view_item with product ID, name, price, currency.
  • Platforms care: Meta (ViewContent), TikTok (ViewContent), GA4. Google Ads doesn't have a direct equivalent and ignores it.

This event drives Meta and TikTok dynamic-product-ad retargeting. Without it, the Catalogue can't show "products you viewed".

2 / Add to Cart

Fires on every cart addition, including AJAX adds without a page reload. Mid-funnel signal that the visitor is considering buying.

  • WP hook: woocommerce_add_to_cart (handles both regular and AJAX)
  • Beaconry sends: add_to_cart with product ID, quantity, value, currency.
  • Platforms care: All five. Meta, TikTok, Google Ads use it for retargeting; GA4 for funnel analysis; LinkedIn for B2B-funnel scoring.

3 / Initiate Checkout

Fires when the visitor enters /checkout/ for the first time on this session. High-intent, used heavily by Smart-Bidding.

  • WP hook: woocommerce_before_checkout_form
  • Beaconry sends: begin_checkout with cart total, currency, item count.
  • Platforms care: All five. Especially valuable for Google Ads Smart-Bidding optimisation.

Common implementation mistake: firing begin_checkout on every checkout-page-view, including refreshes. Beaconry session-scopes it; it fires once per session even if the visitor reloads the page.

4 / Add Payment Info

Fires when the visitor selects a payment method. The deepest pre-purchase signal.

  • WP hook: woocommerce_payment_complete_order_status (early in the payment flow)
  • Beaconry sends: add_payment_info with payment-method label, total, currency.
  • Platforms care: Meta, TikTok. Google Ads has it as an enhanced-conversion event that improves bidding.

Often missed in DIY tracking because it's a non-obvious hook. Tracking it materially improves Meta's Smart-Bidding signal density.

5 / Purchase

The conversion. Fires on the thank-you page after the order is placed.

  • WP hook: woocommerce_thankyou
  • Beaconry sends: purchase with order ID, line items, currency, value, tax, shipping. Stable event_id = SHA-256 hash of the order ID, identical on every retry, identical between browser and server in hybrid mode.
  • Platforms care: All five. The single most important event in the funnel.

The stable event_id is what makes hybrid-mode dedup work. If the visitor reloads the thank-you page, the event_id is the same and platforms dedupe automatically. If a network glitch causes a retry, same.

6 / Refund

Fires when an order's status flips to refunded. Sends a negative-value purchase event with the same event_id.

  • WP hook: woocommerce_order_status_refunded
  • Beaconry sends: refund with the original order ID and event_id, value as negative number.
  • Platforms care: Meta (refund event-type), Google Ads (negative conversion). TikTok and LinkedIn don't have a refund category, so Beaconry skips them.

Most plugins skip refunds entirely, which means platforms keep crediting the campaign for a sale that didn't actually happen. Beaconry's automatic refund event keeps reported ROAS honest.

Events Beaconry deliberately does NOT send

The non-six are tempting to track but rarely useful. Beaconry skips them to avoid noise:

  • view_cart: low-intent, fires on every cart-icon hover. Already covered by add_to_cart for funnel reporting.
  • shipping_method_selected, billing_address_set: implementation details of the checkout. No platform has a category for them.
  • order_status_processing, order_status_completed: backend status changes. purchase already fired on thankyou.
  • account_created: not WooCommerce-specific, handled by Beaconry's separate sign_up event from the WP user-register hook.

What hybrid mode adds for WooCommerce

If you enable hybrid mode for any channel, the browser pixel for that channel additionally fires the same six events with the same event_ids. This gets you platform-side first-party cookies (fbp for Meta, _ttp for TikTok, li_fat_id for LinkedIn) on top of the server-side hashed PII. Match-rate boost without double-counting.

Recommended hybrid setting for WooCommerce: on for Meta (biggest match-rate gain), off for the rest unless you see specific match-rate problems on those platforms.

Custom-thank-you-page edge case

Some shops redirect to a custom page after the WooCommerce thank-you, for branding reasons. Beaconry's hook fires on the standard woocommerce_thankyou, which still runs, so the purchase event is captured. But if your custom page is on a different domain (multi-store setups), you'll need to double-check that the redirect happens after Beaconry's hook fires, not before.

Subscription products

For WooCommerce Subscriptions, Beaconry fires purchase on the initial sign-up only, not on each renewal billing. Renewals are a different conversion category from the customer's perspective; tracking them as new purchases would inflate ROAS. The next major Beaconry release will add a separate subscription_renewal event for platforms that support it.

Take-away

Six events out of WooCommerce's 30+ hooks. Beaconry maps them automatically with no theme code, attaches stable event_ids for dedup, and ships hashed PII from the order's billing address. Match-quality on Meta and Google Ads stabilises in days, not weeks. The only WooCommerce-side configuration is "have WooCommerce installed".