Skip to main content

How to Set Up Google Tag Manager

Jessie Guerra avatar
Written by Jessie Guerra
Updated today

Google Tag Manager Set-up Guide

This guide will help you set up tracking using Google Tag Manager (GTM), Google Analytics 4 (GA4), Meta (Facebook) Pixel, and other common tracking tools — even if this is your first time.

Overview: Google Tag Manager (GTM) <> Cents Integration

Our platform supports event-based analytics via Google Tag Manager (GTM). Whenever a customer performs an action (e.g., signing in, estimating a delivery address, submitting preferences), an event is automatically pushed to the GTM dataLayer.

You can then forward these events to GA4, Facebook Pixel, Google Ads Pixel, or any other tracking tool connected through GTM.

The following guide is in two parts:

  • Part one: Getting Started

  • Part two: Troubleshooting


Part One: Linking GTM to Your LiveLink

Getting Started: Google Tag Manager Setup

Step 1: Create a GTM Container

If you don’t already have one:

  • Click Create Account

  • Add your company name, choose a container name, and choose Web as the target platform.

Step 2: Share your GTM Code Snippet with Your CSM

Copy your container snippet (ie. GTM-XXXXXXXX) found on the top bar of your Tag Manager and share it with your CSM to add to your account.

  • You can ignore this pop-up because the Cents integration with Google Tag Manager (GTM) takes care of embedding this snippet automatically!

📘 Reference: Google’s official GTM setup guide

Step 3: Install Tag Assistant for Chrome

Use Tag Assistant to confirm the GTM container is firing correctly on your pages. This will only work with Google Chrome. If you’re using another browser please use the developer tools offered for your browser which can be found in their respective help centers.

  • Once the Tag Assistant extension is downloaded, pin it to your browser.


2. Troubleshooting: Open LiveLink & Verify Integration is Working

  1. Open your LiveLink by going to your Business Manager and clicking on the “+” sign on the orders page

  2. Once you’re on the LiveLink open Tag Assistant. You should see all of the GTM containers that you shared with your CSM show up.

Click troubleshoot tag to link tag assistant to your LiveLink. You should see this success screen

If you have multiple tags added, make sure to select the correct one associated with the store that you are currently viewing. In my case, it’s GTM-NLKJG2T

Now, go back to the previous page where you have your LiveLink and Tag Assistant open. When successfully connected, you’ll see the Tag Assistant pop-up.

Go back to Google Tag Manager and click “Preview”. Enter your LiveLink URL in the input field

After clicking “Connect”, your LiveLink should appear. Try placing an order — the following events should appear:

Each event name will appear with the PREFIX LiveLink. You can use them as triggers in GTM. There may be other clicks tracked too.

Event Name (GTM dataLayer)

Description

Regex Trigger (for GTM)

LiveLink: Sign up

A user completes registration

^LiveLink:\s*Sign up$

LiveLink: Sign in

A user logs in

^LiveLink:\s*Sign in$

LiveLink: OTP requested

One-time password requested

^LiveLink:\s*OTP requested$

LiveLink: OTP re-requested

One-time password resent

^LiveLink:\s*OTP re-requested$

LiveLink: An unattended address estimated

Unattended address delivery estimate calculated

^LiveLink:\s*An unattended address estimated$

LiveLink: An attended address estimated

Attended address delivery estimate calculated

^LiveLink:\s*An attended address estimated$

LiveLink: Saved address estimation started

User starts estimation from saved address

^LiveLink:\s*Saved address estimation started$

LiveLink: New address estimation started

User starts estimation for new address

^LiveLink:\s*New address estimation started$

LiveLink: Address saving

User saves a new address

^LiveLink:\s*Address saving$

LiveLink: Updating of existing address

User updates an existing address

^LiveLink:\s*Updating of existing address$

LiveLink: Sending an e-mail about the unavailability of delivery

Email about unavailable delivery sent

^LiveLink:\s*Sending an e-mail about the unavailability of delivery$

LiveLink: Delivery windows are submitted

Delivery options confirmed

^LiveLink:\s*Delivery windows are submitted$

LiveLink: Order successfully created with RWG

Order created successfully (RWG)

^LiveLink:\s*Order successfully created with RWG$

LiveLink: Error occurred during order creation with RWG

RWG order creation failed

^LiveLink:\s*Error occurred during order creation with RWG$

LiveLink: Order successfully created with Tune Up

Order created successfully (Tune Up)

^LiveLink:\s*Order successfully created with Tune Up$

LiveLink: Error occurred during order creation with Tune Up

Tune Up order creation failed

^LiveLink:\s*Error occurred during order creation with Tune Up$

LiveLink: Recurring order label clicked

Recurring/subscription label clicked

^LiveLink:\s*Recurring order label clicked$

LiveLink: Preferences are submitted

User submits laundry preferences

^LiveLink:\s*Preferences are submitted$

LiveLink: Dry Cleaning category selected

User selects dry cleaning

^LiveLink:\s*Dry Cleaning category selected$

LiveLink: Dry Cleaning category unselected

User unselects dry cleaning

^LiveLink:\s*Dry Cleaning category unselected$

LiveLink: Forcing the modifier screen to be displayed

Modifier screen forced to display

^LiveLink:\s*Forcing the modifier screen to be displayed$

LiveLink: Services are submitted

Services/options confirmed

^LiveLink:\s*Services are submitted$

LiveLink: Subscription is submitted

Subscription workflow completed

^LiveLink:\s*Subscription is submitted$

To preview additional meta data on each click and event, head to the Data Layer tab

Sample data layer payload for LiveLink: Order successfully created with RWG event:

event: "LiveLink: Order successfully created with RWG",

gtm: {

uniqueEventId: 453,

start: 1761009806266,

allowlist: undefined,

blocklist: undefined,

whitelist: undefined,

blacklist: undefined,

scrollThreshold: 90,

scrollUnits: "percent",

scrollDirection: "vertical",

triggers: "20,21,22,23,24,25,26,27,28,29",

priorityId: 17,

element: "HTMLButtonElement: html > body > div#root > div._wrappe" +

"r_40jdv_1 > div.ptr > div.ptr__children > div._containe" +

"r_mddes_1537.undefined > div._container_lqw19_1537 > di" +

"v.sc-blHHSb.sc-gtLWhw.iLDgup.jTrzQY > div.sc-blHHSb.sc-" +

"gtLWhw.cgpTud.jTrzQY > div._content_70500_599 > section" +

"._contentBody_70500_1563 > div._submitButtonWrapper_lqw" +

"19_1577._mobile_lqw19_1523 > button.MuiButtonBase-root." +

"MuiButton-root.MuiButton-contained.MuiButton-containedP" +

"rimary.MuiButton-sizeMedium.MuiButton-containedSizeMedi" +

"um.MuiButton-colorPrimary.MuiButton-fullWidth.Mui-disab" +

"led._button_1lba7_13._contained_1lba7_2.css-vk6cgn",

elementClasses: "MuiButtonBase-root MuiButton-root MuiButton-cont" +

"ained MuiButton-containedPrimary MuiButton-sizeM" +

"edium MuiButton-containedSizeMedium MuiButton-co" +

"lorPrimary MuiButton-fullWidth MuiButton-root Mu" +

"iButton-contained MuiButton-containedPrimary Mui" +

"Button-sizeMedium MuiButton-containedSizeMedium " +

"MuiButton-colorPrimary MuiButton-fullWidth _butt" +

"on_1lba7_13 _contained_1lba7_2 css-vk6cgn",

elementId: "",

elementTarget: "",

elementUrl: "",

historyChangeSource: "popstate",

oldUrlFragment: "",

newUrlFragment: "",

oldHistoryState: {key: "spzxd7", state: {prevRoute: "basket"}},

newHistoryState: {key: "myyhh7", state: {prevRoute: "basket"}},

"elivery",

},

tagTypeBlacklist: undefined,

attributes: {

distance: "100%",

label: "/new-order/laundrynyc/home",

counter: 60

},

developer_id: {dZTQ1Zm: true},

businessId: 1947,

businessName: "Cents Suds",

storeId: 2725,

storeName: "Cents Laundry ",

centsCustomer: {

id: 1225386,

firstName: "Francine",

lastName: "Dong",

phoneNumber: "7016109146",

languageId: 1,

isDeleted: false,

deletedAt: null,

createdAt: "2025-03-18T15:07:37.223Z",

updatedAt: "2025-07-28T21:26:30.936Z",

stripeCustomerId: "cus_SAk39gusuDSTaF",

customerShortcode: "bba91b3e",

deletionInitiatedAt: null,

optOutOtpSms: false,

isPhoneNumberValid: false,

phoneCountryCode: null,

phoneNumberInternational: "+17016109146",

optOutMarketingSms: false,

optOutTransactionalSms: false,

optOutMarketingSmsViaSms: false,

optOutMarketingSmsLLPopupCount: 0,

supportInbound: true,

supportOutbound: true,

success: true

},

isOperatorSession: false,

isRWGFlow: true,

ownDeliveryIsAvailable: true,

ownDeliveryFee: 100,

onDemandIsAvailable: false,

onDemandDeliveryFee: null,

onDemandProviderName: null,

estimationTime: 1216,

pickup: {fee: 100, type: "OWN_DRIVER", onDemandProviderName: null},

delivery: {fee: 100, type: "OWN_DRIVER", onDemandProviderName: null},

timeToSubmit: 12,

subscriptionDetails: {

interval: 1,

deliveryTimingsId: 85535,

pickupTimingsId: 85533,

pickupWindow: [1761073200000, 1761076800000],

returnWindow: [1761246000000, 1761249600000],

modifierIds: []

},

payload: {

orderDelivery: {

pickup: {

timingsId: 85533,

type: "PICKUP",

deliveryWindow: [1761073200000, 1761076800000],

deliveryProvider: "OWN_DRIVER",

courierTip: 0,

subsidyInCents: 0,

thirdPartyDeliveryCostInCents: 200,

thirdPartyDeliveryId: null,

totalDeliveryCost: 1

},

delivery: {

timingsId: 85535,

type: "RETURN",

deliveryWindow: [1761246000000, 1761249600000],

deliveryProvider: "OWN_DRIVER",

courierTip: 0,

subsidyInCents: 0,

thirdPartyDeliveryCostInCents: 200,

thirdPartyDeliveryId: null,

totalDeliveryCost: 1

}

},

zipCode: "10013",

turnAroundInHours: 24,

orderServices: [

{

servicePriceId: 350563,

serviceModifierIds: [],

serviceNotes: ""

}

],

customerNotes: "",

isHangDrySelected: false,

hangDryInstructions: "",

orderNotes: null,

customerAddressId: 273507,

paymentToken: "pm_1Rr8vZGuj5YLpJjFlhw08YL5",

promoCode: null,

bagCount: 1,

returnMethod: "DELIVERY",

hasDryCleaning: false,

subscription: {

interval: 1,

deliveryTimingsId: 85535,

pickupTimingsId: 85533,

pickupWindow: [1761073200000, 1761076800000],

returnWindow: [1761246000000, 1761249600000],

modifierIds: []

},

teamMemberId: null

},

hasMultipleServices: false

}


Part Two: Setting Up Tags in GTM & Connecting to External Sources

Setting Up Tags in GTM & connecting to external sources

You’ll use GTM to connect your platform’s events to analytics and ad tools. Choose the events for which you would like create tags and triggers for.

  • Example: Sending events to GA4

  • Example: Sending events to Facebook Pixel

  • Example: Setting Up a Google Ads Conversion Pixel

Example 1: Sending an Event to GA4

** If you do not already have a Google Analytics account, please reference this article to set one up first.

  1. In GTM, click Tags → New

2. Name your folder something recognizable ie. Google Analytics

3. Choose Tag Type → Google Analytics: GA4 Event

4. Select your existing GA4 Configuration Tag (or create one)

5. Copy your measurement ID from Google Analytics

6. Paste it in the Measurement ID field. If no Google tag is found, click “Create tag” and follow the flow.

7. Under Event Name, input a recognizable event name. In our case, we’ll go with “purchase”.

8. Now under Triggering, click the “Plus” in the top right, click into trigger configuration, and select Custom Event. You can name it something recognizable like “purchase”.

Enter the event name exactly as shown from part 1. It’s important that it matches EXACTLY. In our case we’ll go with LiveLink: Order successfully created with RWG event. Use Regex matching for less fussy matching. Click save.

Repeat the troubleshooting steps in Part 1 to verify that your new tag is firing on the correct event

Verify that you are now receiving analytics events in your Google Analytics account

Repeat this process for each event you’d like to track.

Example 2: Setting Up a Facebook (Meta) Pixel

**Make sure you already have a Business Portfolio on Facebook and an Ad account within it. Assign yourself to the Ad account as a full admin.

  1. Create a new Pixel and copy the Meta Pixel base code

In GTM, click Tags → New → Tag Type → Custom HTML. Paste your Pixel base code

Add triggers for any events you’d like. Repeat the troubleshooting steps from Part 1 to ensure the setup is working.

Example 3: Setting Up a Google Ads Conversion Pixel

**Make sure you have a Google Ads account created

  1. Create a conversion action for the events you’re interested in ie. Purchase. Set up with “Use Google Tag Manager”.

  2. In GTM, add a Google Ads Conversion Tracking tag. Add your Conversion ID and Label

Add triggers for any events you’d like. Repeat the troubleshooting steps from Part 1 to ensure the setup is working.


Now you are ready to start measuring sending events to your ads tracking platforms! Below are some other FAQ:

Common Best Practices:

  • Always test first: Use GTM’s Preview mode and Tag Assistant to validate firing.

  • Name consistently: Keep your event naming consistent between GTM, GA4, and other platforms.

  • Use Data Layer Variables for dynamic values (e.g., order total, subscription plan).

  • Document your setup internally — list every event → tag → destination mapping.

  • Avoid duplication: Don’t fire the same event multiple times in different layers.

Common issues

Problem

Likely Cause

Fix

Events not firing

GTM not linked

Verify GTM is connected using Tag Assistant

Tag not triggering

Event name mismatch

Match the event name exactly or use Regex matching provided above

Conversions missing in GA4

GA4 property mislinked

Reconnect GA4 Measurement ID

Pixel duplicates

Multiple GTM containers

Consolidate into one container

Did this answer your question?