Library·SOP·Analytics

Track WooCommerce purchases in Google Ads with Google Tag Manager

Send each WooCommerce order that the store counts as a purchase to Google Ads with its order value, currency, and unique transaction ID. The guide asks you to choose whether the action belongs in default bidding or measurement, leaves custom goals unchanged, defines whether the selected order statuses mean paid sales or orders awaiting payment, then checks that the browser sends one purchase tag and does not send it again when the same confirmation page is reloaded.

Last reviewed: · Editorial review

Clarity, structure and references reviewed in this version. This is not a test in a live account.

SOP 021 · 75 min
SOPFree

Track WooCommerce purchases in Google Ads with Google Tag Manager

SOP 021 · 75 min

Send each WooCommerce order that the store counts as a purchase to Google Ads with its order value, currency, and unique transaction ID. The guide asks you to choose whether the action belongs in default bidding or measurement, leaves custom goals unchanged, defines whether the selected order statuses mean paid sales or orders awaiting payment, then checks that the browser sends one purchase tag and does not send it again when the same confirmation page is reloaded.

Scope

This SOP covers:

This does not cover:

Requirements

01. Define the store purchase and order statuses

Before adding tags, decide which WooCommerce statuses count as a purchase. Processing, On hold, and Completed can mean different things: some stores count an order before payment clears, while others count only paid orders. Write that decision and the order-value basis in the tracking note.

  1. Open a blank note and name it WooCommerce purchase tracking note. Add headings Store and order statuses, Google Ads, WordPress, Google Tag Manager, Preview, Live, and Ads status. Enter the store address under Store and order statuses.

    • Warning: Processing or On hold can represent an order placed before money clears. Do not describe those statuses as paid revenue unless the store owner confirms that meaning.
    1. Under Store and order statuses, write whether the store owner wants to count all orders placed or only paid orders. For example, an order waiting for a bank transfer has been placed, but has not yet been paid. Ask the website maintainer which WooCommerce statuses match that choice and write them here too.

    2. Ask the website maintainer how to use the store’s test checkout without charging money. Record the directions and its starting checkout or product URL under Store and order statuses. Confirm that it can create orders with different totals and the statuses you will test.

  2. Configure GTM4WP to expose WooCommerce purchase events without loading a second Google Tag Manager container or customer data.

    1. Open Google Tag Assistant, enter the store homepage, and select Connect. In the results, check the Google Tag Manager containers shown. Continue only when exactly one intended container appears; record its GTM- ID under WordPress in WooCommerce purchase tracking note. If none or more than one appears, ask the website maintainer which container the site uses and resolve that before continuing.

    2. Open Settings > Google Tag Manager > WooCommerce > Purchase tracking in WordPress and turn on Track e-commerce.

      • Warning: The setting names can differ on GTM4WP 1.x. Stop and verify the version-specific behavior if the current screen does not show the 2.0+ settings.
      • Resource: GTM4WP WooCommerce settings reference (Check current WooCommerce purchase settings and status behavior.)
    3. Leave Customer data in data layer and Order data in data layer Off. This guide sends purchase value, currency, and transaction ID only; it does not send customer or extra order details.

    4. Leave Do not flag orders as being tracked unchecked. GTM4WP marks a tracked order, so reloading its confirmation page does not send that order again. Record this state under WordPress in WooCommerce purchase tracking note.

    5. Find Exclude tax from revenue and Exclude shipping from revenue. Leave both Off to send the full order total. If the owner wants tax or shipping left out, turn on the matching exclusion. Under Store and order statuses in WooCommerce purchase tracking note, write whether the value includes tax and shipping. Save the settings.

    6. In Purchase tracking, find Order statuses that trigger the purchase event. Select the statuses recorded under Store and order statuses in your note. A status such as Processing does not always mean payment has arrived: a cash-on-delivery order can use it before collection. Use the website maintainer’s confirmed list so Google Ads counts the orders you chose.

    7. If Site Kit or another existing loader already loads the container, open GTM4WP’s Google Tag Manager container settings and set Container code placement to Off. Use the data layer name dataLayer. If the site uses a different name, ask the website maintainer to match the GTM4WP plugin and GTM container setup before continuing. Save the settings.

    8. In Purchase tracking, record the current Transaction ID prefix. Leave it empty unless the business has an existing cross-store identifier convention; changing it changes the format sent in the transaction_id field for future purchases.

02. Create the Google Ads purchase conversion

Configure Google Ads to accept a different value for each order and count each unique transaction.

  1. Open the manual Google Ads website conversion flow for WooCommerce purchases.

    1. Open Google Ads, go to Goals > Conversions > Summary, and select + Create conversion action. Choose Conversions on a website. Under Edit data sources, enter the store domain and select Scan. Keep the website source selected, then select Done, Save and continue, or the equivalent button shown by the current flow.

    2. Choose Purchase. Select + Create conversion or Create conversion, then choose Manually using code or the equivalent manual-code option.

    3. Select Done or the button that opens the settings for the Purchase setup you just selected.

    4. Before the first Save and continue, read the current Purchase goal state. In WooCommerce purchase tracking note under Google Ads, record whether a Purchase goal exists, whether it is an account-default goal, or whether it is absent; record any message saying the new action will become account-default; and record the account owner’s choice about adding this new Purchase goal to account-default goals. Leave existing goals unchanged.

  2. Configure the Purchase action before its first save, then read back the saved action and Purchase goal.

    1. Name the action WooCommerce purchase or another clear store name. Choose Primary for the main Conversions total and default bidding. Choose Secondary to keep it out of that path while still measuring it. Custom goals can still use Secondary; this guide leaves them unchanged. Record the choice under Google Ads in WooCommerce purchase tracking note. If the screen forces Primary and disables Secondary, record Initial optimization: Primary (temporary) and correct this same action after the first save. Do not create a second action.

    2. For Value, choose Use different values for each conversion. When the flow asks for a fallback value and currency, enter 0 and select No currency set. The fallback is used only when a purchase signal has no usable dynamic value; the WooCommerce data layer should supply each order’s actual value and currency at runtime. Record Fallback value: 0 and Fallback currency: No currency set under Google Ads in WooCommerce purchase tracking note.

    3. Set Count to Every. Each distinct order has its own transaction ID, so Google Ads can count each order while deduplicating a repeated ping for the same ID.

    4. Keep the default attribution setting, select Done, and then select Save and continue once. This is the first save; continue to the same action for the post-save read-back. Do not create another action if Google temporarily forced Primary.

    5. Reopen the same saved Purchase action and open Details. Under Google Ads in WooCommerce purchase tracking note, record Action optimization, Value, Count, and Enhanced conversions. Then open Settings > Value and confirm Use different values for each conversion, fallback 0, and No currency set. Confirm Count is Every.

    6. If the creation screen forced Primary but the owner chose Secondary, change this same action to Secondary. Save and reopen it. Record Initial optimization: Primary (temporary) and the final optimization under Google Ads in WooCommerce purchase tracking note. Do not create a second action.

      • Warning: Primary can affect bidding and the main Conversions total, so the final setting must match the owner’s choice.
    7. In the saved action’s Settings > Action optimization panel, read whether Primary or Secondary is selected and the visible Purchase-goal message, such as Purchase is not an account default goal. Record Purchase goal before save, Purchase goal after save, and the displayed message under Google Ads in WooCommerce purchase tracking note. An account-default goal is used by campaigns unless a campaign chooses different goals.

    8. If the Settings message says Purchase is an account default goal but the owner chose not to include it, open Purchase goal > Edit goal > Account default or the equivalent goal screen. Read Make this an account-default goal and record the visible control under Google Ads in WooCommerce purchase tracking note. If the current screen does not expose that control, record the message and leave settings unchanged.

    9. If this is the new Purchase goal and its goal-level control differs from the owner’s recorded choice, change Make this an account-default goal to match. Select Save, then reopen the goal to confirm. This can change which campaigns use Purchase by default.

      • Warning: A goal-level account-default change can affect which campaigns use Purchase by default.
    10. If an existing Purchase goal differs from the owner’s choice, leave it unchanged. Record the conflict under Google Ads in WooCommerce purchase tracking note so the owner can decide how to handle it. Do not change an existing goal during this setup.

  3. Get the matching Google Ads identifiers and record the saved action’s Enhanced conversions state before moving to Tag Manager.

    1. On the setup summary, select Use Google Tag Manager. If Google shows Set up in Google Tag Manager, open that setup panel so you can read the identifiers, then continue with the manual Tag Manager steps in this guide.

    2. Copy the numeric Conversion ID and Conversion label into WooCommerce purchase tracking note under Google Ads. Keep the pair together. When Tag Manager asks for a Google tag ID, use AW- followed by the number. When the conversion tag asks for a Conversion ID, use the number without AW-.

      • Warning: A label from another conversion action can send conversions to the wrong action in Google Ads.
    3. If Google Ads shows Enhanced conversions or User-provided data, record the visible state in WooCommerce purchase tracking note. Continue only when it is Off, Not configured, or Not shown. If it is On or otherwise enabled, stop and hand the new action to the Ads owner or maintainer; do not disable it. This guide does not send customer details.

    4. Select Finish or the button that closes the setup summary. Keep WooCommerce purchase tracking note open for the WordPress and Tag Manager steps.

03. Configure GTM4WP data and Google Tag Manager

GTM4WP supplies the WooCommerce purchase event. Google Tag Manager reads the dynamic ecommerce fields and sends them to the purchase conversion action.

  1. Check for existing Google tag coverage before adding anything, then reuse one matching site-wide tag or create one.

    • Warning: Duplicate site-wide Google tags with the same ID can cause measurement problems.
    1. Open Google Tag Manager, select the installed Web container, and open Tags. Find Google tags whose Tag ID is AW- followed by the Conversion ID in WooCommerce purchase tracking note. Write the matching tag's name and trigger under Google Tag Manager in the note.

    2. If one matching enabled Google tag uses Initialization - All Pages, use it. If it uses a different trigger, or more than one matching tag is enabled, ask the container maintainer to leave one matching tag using Initialization - All Pages before continuing. This avoids adding a second tag for the same Google Ads account.

    3. If no matching Google tag is enabled, select New, choose Google tag, enter AW- plus the numeric Conversion ID, set Triggering to Initialization - All Pages, and save it with a clear name such as Google tag — Google Ads. Initialization - All Pages means the base Google tag loads as each page starts, so it can cover the whole website.

    4. Open the chosen Google tag and write its name, ID, and trigger in WooCommerce purchase tracking note under Google Tag Manager.

  2. Check the container's click-data coverage and keep one valid path for connecting an ad click to a later conversion.

    1. In Tags, find any enabled Conversion Linker tags. A Google tag loads the Ads measurement base; a Conversion Linker stores ad-click information from the landing-page URL so Google Ads can connect that click to a later purchase. Google's current guidance says a separate linker is unnecessary when a Google tag loads on every page, so check the existing coverage first.

    2. If an enabled Conversion Linker already fires on All Pages, use it and write Existing linker reused in WooCommerce purchase tracking note.

    3. If no all-page linker exists, open Workspace > Overview in GTM and find the Container quality card. If the card lists issues, select View [number] issues. If it says Good, select View recommendations. If the list says a Conversion Linker is missing, create one in the next substep. If it does not, and the Google tag uses Initialization - All Pages, write Google tag covers all pages; no separate linker needed in WooCommerce purchase tracking note.

    4. If the GTM diagnostic says a linker is missing, select New, choose Conversion Linker, use All Pages, and save one clear name such as Conversion Linker — All Pages. Write Linker added in WooCommerce purchase tracking note.

  3. Open Variables and check for existing Data Layer Variables before creating anything. Reuse a variable only when its data-layer path and Data Layer Version Version 2 match exactly; otherwise create one. Record each chosen variable name and path under Google Tag Manager in WooCommerce purchase tracking note.

    1. Choose or create the value variable. For an existing variable, inspect Data Layer Variable Name; if creating one, select New > Data Layer Variable, set Data Layer Variable Name to ecommerce.value and Data Layer Version to Version 2, name it Ecommerce Value, and save it.

    2. Choose or create the currency variable. For an existing variable, inspect Data Layer Variable Name; if creating one, select New > Data Layer Variable, set Data Layer Variable Name to ecommerce.currency and Data Layer Version to Version 2, name it Ecommerce Currency, and save it.

    3. Choose or create the transaction-ID variable. For an existing variable, inspect Data Layer Variable Name; if creating one, select New > Data Layer Variable, set Data Layer Variable Name to ecommerce.transaction_id and Data Layer Version to Version 2, name it Ecommerce Transaction ID, and save it.

  4. Create a Custom Event trigger for the GTM4WP purchase event.

    1. In Triggers, select New, choose Custom Event, set Event name to purchase, choose All Custom Events, and save the trigger with a clear name such as WooCommerce — Purchase.

      • Warning: Do not use a Page View trigger for this setup: the purchase event carries the order’s dynamic fields and duplicate guard.
      • Resource: GTM4WP Google Ads conversion tracking for WooCommerce (Confirm the purchase event and ecommerce fields used by the tag.)
  5. Create or reuse one Google Ads Conversion Tracking tag that sends the order’s dynamic value, currency, and transaction ID on the purchase event.

    1. Search Tags for enabled Google Ads Conversion Tracking tags that use the same Conversion ID and label. Reuse an exact tag only if it already uses the purchase trigger and the three dynamic fields. If more than one enabled tag could fire on purchase, record the names and triggers in WooCommerce purchase tracking note and stop until the container maintainer chooses one route.

    2. If no exact active tag exists, select New > Google Ads Conversion Tracking. Enter the numeric Conversion ID and matching Conversion label from WooCommerce purchase tracking note. Use the variable picker to select the chosen value, currency, and transaction-ID variable names recorded in that note for Conversion Value, Currency Code, and Transaction ID. Set Triggering to WooCommerce — Purchase. Do not type variable display names or add customer-data variables.

      • Warning: A static value or static transaction ID defeats this purchase method.
    3. Save the tag with a clear name such as Google Ads conversion — WooCommerce purchase. Reopen it and record its name, IDs, three variables, and trigger under Google Tag Manager in WooCommerce purchase tracking note.

04. Preview the order data and duplicate protection

Repeat the relevant success check with consent accepted and refused, and compare tag/request behavior with the approved consent implementation. Record both results. Do not force consent to Granted or bypass the banner to obtain a passing test.

Use the store-provided no-charge route to place two orders with different totals. Check that the browser sends the right value, currency, and order ID, that a status outside the purchase list sends no purchase event, and that reloading the same confirmation page does not send the browser tag again.

  1. Open Google Tag Manager and select Preview. Enter the starting URL for the no-charge test route recorded under Store and order statuses, then select Connect. Record the connected starting URL under Preview in WooCommerce purchase tracking note. Before placing an order, inspect page events and confirm the WooCommerce conversion tag did not fire and no purchase event is present.

  2. Use the no-charge test checkout recorded under Store and order statuses to place one order with test-only customer details. Do not enter a real card or a real customer’s information. Continue to the WooCommerce order-received page.

    1. In Tag Assistant, open the purchase event. Confirm the conversion tag fired once, ecommerce.value is a number matching the order’s recorded total, ecommerce.currency matches the store currency, and ecommerce.transaction_id contains a non-empty order ID. Record the values under Preview.

      • Warning: A tag fire proves the browser sent the configured values; it does not prove Google Ads attribution or that a pending/on-hold order has been paid.
    2. Reload the same order-received page once in the connected session. In Tag Assistant, confirm that no second purchase event and no second Google Ads conversion tag fire appear for the same transaction ID. Record the result under Preview.

      • Warning: This browser check does not prove Ads attribution or reporting; transaction-ID deduplication is a separate Ads behavior.
  3. Place a second test order through the same store-provided route with a different quantity, product, or total. Confirm the purchase event carries a different non-empty transaction ID and the corresponding dynamic value. Record both orders and their value basis under Preview.

  4. If the store uses a status you excluded from tracking, ask the website maintainer for a new test order in that status. Open its customer-facing order-received page in the connected test session and confirm that no purchase event appears. Use an order that has never been tracked; reloading an already-counted order cannot prove this rule works. Record the result under Preview. If the store does not use any excluded status, record No excluded status used and continue.

05. Publish and confirm the setup

Publish the tested container and repeat one dynamic purchase check in Live. Read Google Ads status separately from Tag Assistant tag fires.

  1. Publish the tested Google Tag Manager container version and record which version went live.

    1. Return to Google Tag Manager, review the workspace changes, and select Submit. Choose Publish and Create Version, enter a clear version name and description, and select Publish.

    2. Open the publish confirmation or version history. In WooCommerce purchase tracking note, record the published version name or number and the container ID. Confirm there are no pending workspace changes before the Live check.

  2. Repeat the purchase checks in the published Live container.

    1. If an old Tag Assistant session is active, select Stop debugging and close stale Preview or connected tabs. Open Tag Assistant > Add domain, enter the exact product or checkout URL recorded under Store and order statuses, leave Include debug signal in the URL unchecked, and connect. Record the URL under Live in WooCommerce purchase tracking note.

    2. In GTM Version history, verify that the intended version row says Live and there are no workspace changes. Record the published version under Live.

    3. If the connected panel shows Container Version Preview, open Change container environment or version, choose the environment labeled Live, select its visible Debug link, and select Reload page when prompted. If the panel already says Container Version Live, continue.

    4. Continue only when the panel says Container Version Live, shows Connected, and shows the intended container and tags. Record the container ID and visible version under Live. If the published container or version cannot be identified, stop and ask the website maintainer; do not treat Preview as Live.

    5. Before placing an order, confirm the Google Ads purchase conversion tag did not fire and no purchase event is present.

    6. Place a new test order through the route recorded in your note and inspect the purchase event. Confirm one conversion tag fire with a non-empty transaction ID, dynamic value, and currency. Reload that order-received page once and confirm no second purchase event or conversion tag fire appears for that ID. Record the results under Live.

      • Warning: This browser check does not prove Ads attribution or reporting; transaction-ID deduplication is a separate Ads behavior.
  3. Read the Google Ads status and message for the purchase action, then record what the result means.

    1. Return to Google Ads > Goals > Conversions > Summary, find the purchase action, and open its status details. In WooCommerce purchase tracking note, record the visible status and any message Google shows.

    2. If the status says No recent conversions or Awaiting conversions, record it and Google’s message under Ads status in your note. If Google gives a waiting time, add a date to check the report again—for example, two days from today for a 48-hour message. This is a later reporting check. Your Tag Assistant test confirms that the website sends the tracking signal; it does not show that a real ad generated an order.

    3. If the status says Needs attention or Misconfigured, open the details and read the named issue. Follow Google's suggested fix when it is clear; otherwise give the message to the person who maintains the Ads setup before relying on the action.