> ## Documentation Index
> Fetch the complete documentation index at: https://partner-help.letsdothis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Advertising & analytics tracking

> Connect your advertising and analytics accounts to your Let's Do This event to measure conversions and optimize campaigns based on participant activity.

Tracking lets you connect advertising and analytics platforms — Meta, Google,
TikTok, and others — to your Let's Do This event. Once set up, tracking events
fire automatically as participants move through your event page and checkout,
giving your ad platforms the data they need to measure registrations, build
audiences, and optimize campaigns.

Most platforms track through a **pixel** — a small piece of tracking code that
runs in the participant's browser. For Meta you can also turn on the
**Conversions API**, which sends completed purchases to Meta directly from Let's
Do This rather than from the browser. See
[Meta Conversions API](#meta-conversions-api) below.

Tracking runs at two levels:

* **Organizer-wide** — fires across all your events. Useful for pixels tied to
  your brand rather than a specific campaign.
* **Event-specific** — fires only for a single event. Useful when each event has
  its own ad campaign or budget.

The **Tracking** tab in an event adds and edits **event-specific** pixels. Any
organizer-wide pixel you already have also appears on that tab, marked
**Global** — you can see it there, but you can't edit or delete it from inside an
event. To change an organizer-wide pixel, including adding a Conversions API
access token to it, get in touch with your Let's Do This contact.

Tracking only fires for participants who have given the appropriate consent. If a
participant declines tracking, it is suppressed for that session.

## Supported platforms

| Platform            | ID format                                |
| ------------------- | ---------------------------------------- |
| Meta Pixel          | Numeric (e.g. `123456789012345`)         |
| Google Analytics 4  | `G-XXXXXXXXXX`                           |
| Google Ads          | `AW-…`                                   |
| TikTok Pixel        | Alphanumeric (e.g. `CXXXXXXXXXXXXXXXXX`) |
| AdRoll              | Pixel ID + Advertisable ID               |
| SiteScout           | Pixel ID                                 |
| Programmatic Trader | Separate IDs per conversion type         |

<Warning>
  **Google Tag Manager is not supported** due to security considerations. Google
  Universal Analytics (UA-…) is also not supported as it has been discontinued
  by Google.
</Warning>

## Setting up a pixel

<Steps>
  <Step title="Open Event Setup">
    In your dashboard, open the event and go to **Event Setup** > **Tracking**.

    You need to save your event details at least once before the Tracking tab
    becomes available.
  </Step>

  <Step title="Add a pixel">
    Click **Add pixel** and select the platform you want to connect.
  </Step>

  <Step title="Enter your pixel details">
    Fill in the required IDs for the platform you selected. See the platform
    notes below for where to find each ID.
  </Step>

  <Step title="Save">
    Click **Save**. The pixel applies to this event only, and is now active for
    future participant sessions on this event.
  </Step>
</Steps>

## Platform setup notes

### Meta Pixel

Enter your **Pixel ID** from Meta Events Manager. Two optional fields sit
underneath it — **CAPI access token** and **Test event code**. Both are covered
in [Meta Conversions API](#meta-conversions-api) below.

### Google Tag

You can enter a **GA4 Measurement ID** (`G-XXXXXXXXXX`), a **Google Ads
Conversion ID** (`AW-…`), or both — whichever you use for your campaigns. If
you run a server-side Google Tag Manager container, you can also provide a
**server-side proxy URL** to route events through your own domain.

For cross-domain tracking, make sure to include `www.` when configuring your
domain in GA4 (use `www.letsdothis.com`, not just `letsdothis.com`).

### AdRoll

Enter your **Pixel ID** and your **Advertisable ID**. Both are required.

## Meta Conversions API

The Meta Pixel reports from the participant's browser, so ad blockers, browser
privacy settings, and cookie restrictions can stop purchases reaching Meta. Every
purchase they block is a registration missing from your reporting and from the
data Meta uses to optimize your campaigns.

The **Conversions API** (often shortened to CAPI) closes that gap. When a
participant completes a purchase, Let's Do This sends it to Meta directly from
our servers, alongside the browser pixel. Because that send never touches the
participant's browser, it isn't affected by ad blockers or browser privacy
settings — so your conversion counts and match rates get closer to the real
number of registrations.

Turn it on if you run paid campaigns on Facebook or Instagram and want the most
complete conversion data you can get. There's no downside to enabling it on a
live event, and it doesn't replace your Meta Pixel — the two work together, and
you need the pixel in place for the Conversions API to add anything.

<Note>
  The Conversions API sends **completed purchases only**. Page views, race
  selection, and checkout steps continue to come from the browser pixel alone.
</Note>

### Setting up the Conversions API

<Steps>
  <Step title="Generate an access token in Meta">
    In Meta Events Manager, open your pixel and go to **Settings**. Generate a
    Conversions API access token and copy it.
  </Step>

  <Step title="Open your Meta Pixel in Let's Do This">
    Go to **Event Setup** > **Tracking**, find the **Meta Pixel** card, and click
    **Edit**. If you haven't added your Meta Pixel yet, add it first — the
    Conversions API fields appear on the same form.
  </Step>

  <Step title="Paste the access token">
    Paste your token into **CAPI access token**. The field is masked, so you
    won't be able to read the token back after saving.
  </Step>

  <Step title="Save">
    Click **Save**. The Conversions API is now active for purchases on this
    event.
  </Step>
</Steps>

Once a token is saved, the field shows `Leave blank to keep existing token`.
Leave it empty to keep the token you already have, or paste a new one to replace
it. Clearing the field does not remove the token.

<Note>
  **Running the same pixel on several events?** You can paste the same access
  token into each of them. Tokens belong to the pixel in Meta, not to the event,
  so generate one token per pixel and reuse it across every event that uses that
  pixel. An event using a different pixel needs a token generated for that
  pixel.
</Note>

### Avoiding double-counted purchases

Every purchase is reported twice — once by the browser pixel and once by the
Conversions API. This is expected, and Meta is told which two reports belong
together so it counts the purchase only once. You don't need to change anything
in Meta Events Manager to make this work.

You may still see both a browser event and a server event listed in Meta Events
Manager. That's the two sources arriving, not two registrations.

### What is sent to Meta

For each completed purchase, Meta receives:

* The order total, currency, and your Let's Do This booking reference.
* The tickets, add-ons, and donations bought, with their individual prices and
  quantities.
* Matching information about the purchaser: first name, last name, email
  address, phone number, and date of birth. These personal details are converted
  into a scrambled, one-way form before they leave Let's Do This — Meta uses them
  to match the purchase to an account, and cannot read the original values.
* The browser and device signals Meta uses for matching, including its own
  advertising cookies.

Nothing is sent for a participant who declined marketing consent — see
[Consent](#consent-and-the-conversions-api) below.

### Consent and the Conversions API

The Conversions API follows the same consent decision as the browser pixel. If a
participant declines marketing cookies in the cookie banner, their purchase is
not sent to Meta from the browser **or** from our servers. One decision covers
both, so a participant who opts out stays out.

This means enabling the Conversions API doesn't change what you can tell a
participant who asks about their data: if they declined, Meta never receives
their purchase.

### Test event code

The **Test event code** field routes this event's conversions into Meta's **Test
Events** tab so you can confirm your setup is working before you launch.

<Warning>
  **Don't set a test event code on a live event.** While a code is set,
  conversions for the event go to Meta's Test Events tab and are **excluded from
  your production attribution** — your campaigns will look like they're
  converting nothing. Only use it on a staging event or before you go on sale,
  and clear it before your event opens for registration.
</Warning>

Find your code in Meta Events Manager under **Test events**. It looks like
`TEST12345`. Clear the field and save to go back to normal reporting.

### How purchases are counted across your pixels

If you have both an organizer-wide Meta pixel and event-specific Meta pixels, a
single checkout is split so no purchase is counted twice:

* Each event-specific pixel receives only the part of the order for its own
  event.
* Your organizer-wide pixel receives whatever is left — the events in that order
  that don't have a pixel of their own. If every event in the order has its own
  pixel, the organizer-wide pixel doesn't receive that purchase at all.

Most checkouts cover a single event, so this only comes into play when a
participant registers for several of your events in one go.

There's one other reporting change to expect. Before you add an access token,
a checkout containing several ticket types is reported to Meta as one purchase
per ticket type. Once the Conversions API is on, the same checkout is reported as
a **single purchase** with the tickets and add-ons itemized inside it. Your total
revenue is unchanged, but your purchase count will step down at the point you
switch it on — so compare like with like when looking at trends across that date.

### If a send fails

Server-side sends can occasionally fail — an expired or revoked access token is
the most common cause. When that happens the purchase still completes normally
and the browser pixel still reports it, so you fall back to browser-only
tracking rather than losing the conversion entirely. Checkout is never affected,
and your participant sees nothing different.

If your Meta reporting suddenly drops back to browser-only match rates, generate
a fresh access token in Meta Events Manager and paste it in again.

## Tracking events

LDT fires tracking events at key moments in the participant journey. The table
below shows each event, when it fires, and the corresponding event name on each
platform.

| LDT event               | When it fires                             | GA4 event          | Meta Pixel event                  | TikTok event       | AdRoll event |
| ----------------------- | ----------------------------------------- | ------------------ | --------------------------------- | ------------------ | ------------ |
| eventView               | Participant views your event page         | `page_view`        | `ViewContent`                     | `ViewContent`      | `pageView`   |
| raceSelectionView       | Participant views the race selection page | `page_view`        | `ViewContent`, `AddToCart`        | `AddToCart`        | `pageView`   |
| bookingFormView         | Participant opens the booking form        | `page_view`        | `ViewContent`, `InitiateCheckout` | `InitiateCheckout` | `pageView`   |
| checkoutView            | Participant reaches the payment step      | `page_view`        | `ViewContent`, `AddPaymentInfo`   | `AddPaymentInfo`   | `pageView`   |
| bookingConfirmationView | Participant completes their registration  | `page_view`        | `ViewContent`                     | —                  | `pageView`   |
| ticketsPurchased        | Ticket purchase is confirmed              | `purchase`         | `Purchase`                        | `CompletePayment`  | `purchase`   |
| basketItemAdded         | Item added to basket                      | `add_to_cart`      | —                                 | —                  | —            |
| basketItemRemoved       | Item removed from basket                  | `remove_from_cart` | —                                 | —                  | —            |
| basketUpdated           | Basket contents change                    | `cart_updated`     | —                                 | —                  | —            |
| membershipsPurchased    | Membership purchase is confirmed          | —                  | —                                 | —                  | —            |

<Note>
  The `ticketsPurchased` event is not emitted for ballot ticket registrations
  (where the outcome is not immediate). For Meta Pixel, ballot ticket purchases
  include an additional `content_category="ballot_ticket"` parameter. This
  parameter is not included once the Conversions API is enabled, because
  purchases are then reported at checkout level rather than per ticket type.
</Note>

### Purchase event details

When a ticket purchase fires, GA4 and Google Ads receive transaction-level data
including the transaction ID, total value, currency, and an items list. Each
item in the list follows this naming pattern:

> **Event Name — Race Name — Ticket Name — TICKET**

For add-on items (clothing, parking, coaching subscriptions, etc.) the pattern is:

> **Event Name — Race Name — Ticket Name — Item Name — ITEM TYPE**

This lets you see exactly which ticket and add-on combinations are converting in
your GA4 reports.

## Editing or removing a pixel

To update a pixel, find it on the **Tracking** tab and click **Edit**. To remove
it, click **Delete**. Deleted pixels stop firing immediately.

Pixels marked **Global** are organizer-wide and can't be edited or deleted from
inside an event — contact your Let's Do This contact to change one.
