---
title: "Send Events From Any Platform With a Webhook"
description: "Sending data to Tracklution with webhooks A webhook is a tool that allows different systems to communicate with each other in real time. In essence, it’s a way for one application to send automatic data updates to another as soon as a certain event occurs. This eliminates the need for constant polling and ensures that information flows seamlessly between platforms. You can utilise the webhook to send in events that happen outside of your website (“offline conversions”). These…"
slug: "send-events-from-any-platform-with-a-webhook"
category_slug: "data-sources"
category_name: "Data Sources"
order: 4000000015
published_at: "2025-08-12T07:06:15+00:00"
updated_at: "2026-03-19T05:23:30+00:00"
language_code: "en-US"
tags: []
---

## Sending data to Tracklution with webhooks

A webhook is a tool that allows different systems to communicate with each other in real time. In essence, it’s a way for one application to send automatic data updates to another as soon as a certain event occurs. This eliminates the need for constant polling and ensures that information flows seamlessly between platforms.

You can utilise the webhook to send in events that happen outside of your website (“offline conversions”). These conversion events could be for example phone calls, purchases made in brick-and-mortar shops, bookings made in a booking system, validated leads in a CRM system, and so forth.

Events registered via webhook can be matched to web sessions if matching data is available (read more below "Matching webhook data with other session data"). In case matching data is not available, webhook events will be handled as an individual session and can be delivered via Connectors with Click ID or without original click ID data as enhanced conversions (if in use).

You can either send new events with the webhook ("Track" -type webhooks), or enrich already existing sessions with new data coming from the webhook ("Set"-type webhooks). You don’t need to explicitly define the event type in the webhook parameters - Tracklution automatically determines whether the webhook is a `set` or `track` event based on whether the `track` parameter is present. Examples of each can be found below, in "Request examples".

## 
## Video walk-through

In the video below, we show how to send offline conversions with a webhook in two ways:

1. Using the platform’s own automation tool (example from Zoho CRM)
2. Using Zapier as a middleware (starting from 15:30)

![alt text](video:https://www.youtube.com/watch?v=GSZdyTAQfYk?si=DtezGcdSC4w8Wqme){height=315 width=560}

## How to send events to Tracklution with webhooks (where to get the webhook URL)

A webhook endpoint URL is needed to send webhooks to Tracklution. The webhook endpoint URL is a web address where one system automatically sends data or notifications to another system when something happens (for example, when a purchase is completed or a booking is made). The Tracklution Webhook Endpoint URL is available on your Tracklution dashboard, under "Webhook":

![webhookurl](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE1NyIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.FujPpKY3fuoiyOFo-uCV-igzf0SIggmwxAXFUh2EcBE)

##### For platform-specific instructions on sending offline-events, refer to these articles:

- [CRM integrations](https://support.tracklution.com/kb/article/2/crm-integrations)
- [Stripe Integration](https://support.tracklution.com/kb/article/18/stripe-integration)
- [Calendly Integration](https://support.tracklution.com/kb/article/17/calendly-integration)

### Webhook query parameters

Query parameters are additional key–value pairs added to the URL that tell the receiving system what the request contains and how it should be processed. When making a GET request to the endpoint, following query parameters can / need to be set:

| Parameter | Description | Required |
| --- | --- | --- |
| k | Your Tracking Container Key | yes |
| track | If you want to record an event, e.g. “Purchase” or “BookingComplete”, send the event name in this field. Without ‘track’ parameter the incoming data is handled as additional information and Tracklution tries to match it into an existing session data without adding a new event to the session. | no |
| value | If you are bringing in a Purchase event with the ‘track’ parameter, and you want a value being recorded to this event, insert the value in this field | no |
| currency | If you are bringing in a Purchase event with the ‘track’ parameter including ‘value’ parameter, insert currency in this field | If ‘value’ parameter is used, then required |
| url | The URL of the page where event happened or additional data was obtained | no |
| email | Email | no |
| phoneNumber | Phone number | no |
| firstName | First name | no |
| lastName | Last name | no |
| birthday | Birthday, example input: 1985-06-17 | no |
| gender | Example input: ‘male’ or ‘female’ | no |
| address | Street address | no |
| postCode | Postal code | no |
| city | City | no |
| country | Country | no |
| externalId | External ID that could be any unique identifier | no |
| gclid | Google Click ID | no |
| fbclid | Meta Click ID | no |
| gbraid | Google aggregated click identifier (used when gclid is unavailable) | no |
| wbraid | Google web-to-app click identifier | no |
| ttclid | TikTok click identifier | no |
| msclkid | Microsoft Ads click identifier | no |
| epik | Pinterest click identifier | no |
| dclid | DoubleClick / CM360 click identifier | no |
| rdtCid | Reddit click identifier | no |
| trls | Tracklution source identifier | no |
| trlc | Tracklution click identifier | no |
| utmSource | UTM source parameter (e.g. google, facebook) | no |
| utmMedium | UTM medium parameter (e.g. cpc, organic) | no |
| utmCampaign | UTM campaign name | no |
| utmContent | UTM content parameter | no |
| utmTerm | UTM term / keyword parameter | no |
| eventId | Unique event identifier used for deduplication across sources (browser, server, webhook). Use with caution: event\_id is event-specific and overrides all other identifiers (email, external ID, etc.), incorrectly implemented or reused event\_id can either unintentionally suppress valid events or cause overcounting by preventing deduplication altogether. | no |
| priorityExternalId | High-priority external identifier used when multiple external IDs are present | no |
| phoneNumberVariants | Variants of the phone number used for improved matching | no |
| emailVariants | Variants of the email used for improved matching | no |
| userAgent | Browser or device user agent string | no |
| ip | Client IP address | no |
| actionSource | Source of the action (e.g. website, app, server) | no |
| eventAttributes | Custom object containing additional event-specific attributes | no |
| eventSourceDomain | Domain where the event originated | no |
| isPartial | Indicates whether the event data is partial or incomplete | no |
| forceNewSessionCreatedAt | Forces Tracklution to start a new session at a given timestamp | no |

When sending webhooks from Stripe, you should also include "source=stripe" parameter as we've developed Stripe-specific logic for our webhooks. Read more about Stripe webhooks from here: [Stripe Integration](https://support.tracklution.com/kb/article/18/stripe-integration)

#### Sending custom parameters with Webhooks

In addition to standard webhook parameters (such as value, currency, externalId, and contact fields), you can send custom event-level data with your webhook events. Custom parameters must be included inside a dedicated object called event\_attributes in the webhook payload.

**Example 1:** Basic webhook event (no custom parameters) This example sends a simple conversion event with a value and identifiers only:

    {
      "track": "Purchase",
      "value": 99.00,
      "currency": "EUR",
      "externalId": "order-12345",
      "email": "customer@example.com"
    }

**Example 2:** Webhook event with custom parameters. If you want to send additional event-specific data (for example plan type, category, or internal metadata), include it inside the event\_attributes object.

    {
      "track": "Purchase",
      "value": 99.00,
      "currency": "EUR",
      "externalId": "order-12345",
      "email": "customer@example.com",
      "event_attributes": {
        "plan": "Premium",
        "billingPeriod": "Annual",
        "sourceSystem": "CRM"
      }
    }

## Request examples
<section class="warning-box">Remember to set up Webhooks according to our onboarding guide inside your Tracking Container. The examples below include test data only for demonstration purposes.&nbsp;</section>
You don’t need to explicitly define the event type in the webhook parameters - Tracklution automatically determines whether the webhook is a set or track event based on whether the track parameter is present.

### "Track" -type webhook: 

Use "Track"-type webhooks if you want to register new events. You can add as many parameters as you like (see the list "Webhook query parameters" above). Example of a **FromSubmission** event sent with a webhook from Zapier together with email and phone number:

1. Webhook setup in Zapier:  
![webhookexample](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE1OCIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.539Vvgj2zbOOZgo9yKRvj1a_EOa9kcV1B9ZSqnlDyI4)
2. The same webhook event in Tracklution container's Webhook-tab:  
![parsed webhook event](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE1OSIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.G-SrDHya2ID4fuGZdlJ9ijG6XI59wJP8IotXTEbbh-g)
3. The same webhook event on the container dashboard:  
![webhook on dashboard](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE2MSIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.lLX9MLSA84BAiP7JSU0mEPl7F5rFI65Q6eaQ5hhhXYQ)

### "Set" -type webhook:

Use "Set"-type webhooks if you want to enrich already existing session data. You can add as many parameters as you like (see the list "Webhook query parameters" above). Example of data sent with a webhook from Zapier that will enrich already existing data on a session with email and phone number, but not create a new event:

1. Webhook setup in Zapier:  
![webhookexampleenrich](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE2MiIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.843jpelC5xPLGzRIMQnZdAmypsgjgXQKfQ1PuBwYG-Y)
2. The same webhook event in Tracklution container's Webhook-tab:  
![parsed SET webhook event](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE2MyIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.vsURhghXTZTB4Vn1t5UMpUmWZMaMeijYy979LA6jvfg)
3. The session on the dashboard, that the webhook enriches before and after the data (email & phone number) is received from the webhook (Tracklution is using the externalId to match the webhook to the correct session):  
![beforeafter webhook SET](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE2NSIsIm9yZ2lkIjoiMTQ3NzgiLCJpc3MiOiJzdXBwb3J0LnRyYWNrbHV0aW9uLmNvbSJ9.QkXfJ4lF8imSSEoMEhHAcisy6z3uW0XAhsMM-67Dh70)

Matching webhook data with other session data

**When you send webhook data to Tracklution, it is important to ensure the data can be matched to an existing website session.** Tracklution’s webhook automatically matches webhook data to a correct session/set of web events if matching data is available. If matching data is not available Tracklution will still be able to register and store the data and match it later if matching sessions appear. If you are sending in an event via webhook, it can be processed as an individual event and passed on to Ad Platforms with the Click ID or as an enhanced conversion in case click ID is not available from the original session.

### Using Data from ContactInfo pixel (preferred) for matching

Set a ContactInfo tag to fire on during the website session so Tracklution will use that data to match the webhook data with the session. You can use unique external ID, email or phone number.

**Unique external ID (‘externalId’):** External ID is a unique value generated and passed from web to Tracklution. External ID should be a value that you have available in both, web and in the backend system you’re sending webhook data from. With External ID Tracklution is able to accurately match webhook data with the session data from web. External ID is passed from the web with the ContactInfo pixel. It can be grouped to another event (as in the example) or sent as an individual ContactInfo event.  
  
**Email address (‘email’)**: Email address can be collected via web and passed on to Tracklution with the ContactInfo pixel at any given point of the user journey. By passing the same email address via webhook’s ‘email’ field, Tracklution will be able to match webhook data with data collected via pixels.  
**Phone number (‘phoneNumber’)**: Phone number can be collected via web and passed on to Tracklution with the ContactInfo pixel at any given point of the user journey. By passing the same phone number via webhook’s ‘phone’ field, Tracklution will be able to match webhook data with data collected via pixels.

#### Example

You have installed a ContactInfo tag to be firing during a website session, the **ContactInfo tag** that is fired looks like this;

![Screenshot 2025-08-12 at 9.31.13](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjI2Iiwib3JnaWQiOiIxNDc3OCIsImlzcyI6InN1cHBvcnQudHJhY2tsdXRpb24uY29tIn0.--6rvxpAqYfB2sXreVNazQHkTnvWRZkzbwY2VxM4VlI)

You are also sending a Purchase-event with a webhook from an external platform. You collect the same externalId to the external platform, which you also collect from the website session with the ContactInfo tag. The **webhook** POST request looks like this;

![Screenshot 2025-08-12 at 9.43.14](https://support.tracklution.com/kb/agent/attachment/article/15/inline?token=eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjI3Iiwib3JnaWQiOiIxNDc3OCIsImlzcyI6InN1cHBvcnQudHJhY2tsdXRpb24uY29tIn0.hCa5vi03v5QTx9NqGCuTeGUcEOSnuh1HMu59qOSD-9U)

Tracklution uses the external id to match the Purchase-event from the webhook to the website session. If external id would not be available, other contact data (email, phone number) would be used for matching.

### Using other data for matching

Timestamp: While the above mentioned identifiers are the most accurate and preferred ways to match webhook data, if no other data is available, Tracklution will try to match data based on timestamps. However, this requires that the webhook is arriving at the same time as the session is recorded via pixels. For example, if only relying on timestamp, webhook has to arrive at the same time with the purchase event, and especially with plenty of volume there is a possibility for mismatch. Matching with timestamp only might cause low match confidence levels and is thus not recommended.
