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:
Go to Google Tag Manager
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
Open your LiveLink by going to your Business Manager and clicking on the “+” sign on the orders page
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",
email: "[email protected]",
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.
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.
📘 Reference: Set up GA4 in GTM, GA4 recommended events
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.
Go to Meta Events Manager
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.
📘 Reference: Set up Meta Pixel with GTM
Example 3: Setting Up a Google Ads Conversion Pixel
**Make sure you have a Google Ads account created
Create a conversion action for the events you’re interested in ie. Purchase. Set up with “Use Google Tag Manager”.
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.
📘 Reference: Use Google Ads tags in GTM
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 |