Analytics and Tracking
Your webstore can send visitor activity to Google Analytics, Google Tag Manager and Apollo. This page explains how to connect each one, which events your webstore sends, and how visitor consent controls all of it.
You'll find all three in the Analytics and Tracking section of your Webstore Settings page.
Choosing Google Analytics or Google Tag Manager
Use one or the other, not both:
| Use | When |
|---|---|
| Google Analytics | You only want page views in GA4. Nothing to set up beyond the ID. |
| Google Tag Manager | You want the events below, Google Ads conversions, or other tags such as a Meta Pixel. |
The Dashboard won't save both. If you use Tag Manager, add your GA4 tag inside your container instead.
Google Analytics
- In GA4, go to Admin → Data streams, open your web stream and copy the
Measurement ID. It starts with
G-. - Paste it into Google Analytics Measurement ID on your Webstore Settings page.
- Publish your webstore.
Your webstore is a single-page app: moving between pages doesn't reload the browser, so your webstore sends GA4 a page view itself each time a visitor moves to a new page. Turn off Page changes based on browser history events under Enhanced measurement → Page views → Show advanced settings on your web stream. If it's on, GA4 counts each of those page changes twice.
The Dashboard only accepts GA4 Measurement IDs. If your settings still have an
old Universal Analytics ID (UA-...), replace it with your GA4 Measurement ID.
The Webstore Settings page won't save until you do.
Google Tag Manager
- In Tag Manager, copy your Container ID from the top of your workspace. It
starts with
GTM-. - Paste it into Google Tag Manager Container ID on your Webstore Settings page.
- Publish your webstore.
Don't paste a GA4 Measurement ID (G-...) into the Tag Manager field. Google
loads an empty container for it, so your webstore looks connected but measures
nothing. The Dashboard rejects a G- ID in that field for this reason.
With Tag Manager, your webstore doesn't send page views itself, so make sure your GA4 tag counts page changes within your webstore. Either turn on Page changes based on browser history events under Enhanced measurement → Page views → Show advanced settings on your web stream, or fire your page view tag on a History Change trigger. Otherwise GA4 only counts the first page of each visit.
Events your webstore sends
These events go to your Tag Manager container's data layer. They're only sent when you've connected Google Tag Manager, not with a Google Analytics ID alone.
| Event | Sent when |
|---|---|
add_to_cart | A visitor adds items to a set list, including when they create a new set list with an item |
quote_request_submit | A visitor's quote request has been successfully submitted |
contact_form_submit | A visitor's contact form has been successfully sent |
What's in each event
add_to_cart and quote_request_submit carry the items in GA4's standard
ecommerce format:
{
event: 'quote_request_submit', // or 'add_to_cart'
ecommerce: {
currency: 'USD',
value: 150, // total of price × quantity
items: [
{
item_id: 'CHAIR-1', // the item's SKU, or its ID if it has no SKU
item_name: 'Eames Lounge Chair',
item_category: 'Furniture', // the item's 1st tag
item_category2: 'Seating', // 2nd tag
item_category3: 'Lounge Chairs', // 3rd tag
item_variant: 'Walnut', // only for items with variants
price: 50,
quantity: 3,
},
],
},
}
A few things to know about these values:
- Price and value are list prices. They're the rates shown on your webstore, multiplied by quantity, so they're an estimate. They don't account for rental length, discounts or anything you change when you prepare the quote.
- Hidden prices stay hidden. Anyone can read the data layer in their browser, so items with hidden prices are sent without a price and left out of the value.
- Categories come from your first three item tags. They're meant to be department, category and subcategory, in that order. If your tags are in a different order, your category reports will be too.
add_to_cartonly counts new items. When a visitor adds several items to an existing set list at once, items already on that list are left out.quote_request_submitonly counts real submissions. It isn't sent if the request is turned away, for example because every item is self-pick, and reloading the thank-you message doesn't send it again.
contact_form_submit has one parameter, form_source, naming the form the
visitor used, such as Contact Us.
Sending events to GA4
For each event you want in GA4:
- In Tag Manager, create a Custom Event trigger with the event name, such
as
add_to_cart. - Create a Google Analytics: GA4 Event tag with the same event name, fired by that trigger.
- For
add_to_cartandquote_request_submit, open More settings → Ecommerce, tick Send Ecommerce data and choose Data Layer as the source. - Submit and publish your container.
GA4 only shows item details in its ecommerce reports for its own ecommerce
event names, such as add_to_cart. quote_request_submit is a Propcart event
name, so GA4 records it and its value but not its items. To see the requested
items in GA4's ecommerce reports, give the GA4 tag an ecommerce event name of
your choice instead.
Google Ads conversions
To count quote requests as a Google Ads conversion, add a Google Ads
Conversion Tracking tag fired by a quote_request_submit Custom Event
trigger. To pass the estimated value, create a Data Layer Variable for
ecommerce.value and use it as the tag's Conversion Value, with
ecommerce.currency as the Currency Code.
Apollo
Apollo identifies the companies visiting your webstore, so your sales team can follow up.
- In Apollo, copy the website tracking script it gives you. Find the
24-character
appIdinside it. - Paste just that ID into Apollo App ID on your Webstore Settings page.
- Publish your webstore.
Apollo follows the same consent choice as Google Analytics. It stores its data in the visitor's browser storage rather than in cookies, and it loads LiveIntent, a third-party identity service. Mention both in your own privacy policy.
Visitor consent
Every tag on this page waits for the visitor's consent, and your webstore decides what that means based on where the visitor is:
| Visitor is in | Before they choose | Banner buttons |
|---|---|---|
| The EEA, the UK or Switzerland | Nothing loads until they click Accept | Decline / Accept |
| Anywhere else | Tags load as normal | Opt Out / Got it |
Your webstore works out the visitor's region from their browser's time zone, so no location lookup is needed and pages load as fast as possible.
- Declining stops tracking straight away. Google Analytics cookies are deleted and Apollo's stored data is cleared. With Tag Manager or Apollo, the page reloads once so their scripts stop running.
- Global Privacy Control is always honoured. A visitor whose browser sends it never sees the banner, and no tags load for them, even if they clicked Accept before. Some browsers, such as Brave and DuckDuckGo, send it by default.
- Visitors can change their mind from the Cookie Policy page on your
webstore (
/legal/cookie-policy).
If you add advertising tags to your Tag Manager container, such as Google Ads or a Meta Pixel, they load under the same choice. Make sure your own privacy policy covers them.
Your webstore uses its own consent banner. It doesn't send Google Consent Mode signals or connect to third-party consent tools such as Cookiebot or OneTrust. Visitors who haven't consented don't load Google's tags at all.
What isn't tracked
- Creating an empty set list, or sharing or emailing a set list.
- A quote request becoming an order. That happens later, in your Dashboard, after the visitor has left your webstore. You can see which quote requests became orders on each quote request in the Dashboard.
- The Add to Cart button for items customers buy outright.
Testing your setup
Use Preview in Tag Manager to watch your events arrive as you click around your live webstore. For a direct GA4 connection, use Realtime in GA4.
If nothing shows up:
- Publish first. Your IDs are built into your webstore, so changes only take effect the next time you publish.
- Accept the banner, or turn analytics back on from the Cookie Policy page if you declined earlier.
- Turn off Global Privacy Control and ad blockers in the browser you're testing with. Either one stops every tag.