Skip to main content

Custom Event Tracking via Webhooks

Automatically send events from your systems to adtribute in real-time.

Daniel Busch avatar
Written by Daniel Busch
Updated this week

Webhooks allow you to connect any tool or platform to adtribute—even if we don't have a native integration for it yet. When something important happens in your system (like a lead is created, a payment is processed, or a booking is confirmed), that event data is automatically sent to adtribute instantly.

This is the technical alternative to our Custom Event Tracking with Sheets integration. Instead of manually updating a spreadsheet, your developer sets up an automated connection that sends data directly from your tool to adtribute.

When to Use Webhooks

Use webhooks when you want to track events from:

  • Custom-built systems (your own internal tools, custom CRM, or proprietary software)

  • Platforms without a native adtribute integration (e.g., niche CRMs, specialized booking systems, or regional payment providers)

  • Real-time scenarios where you need data to flow immediately (not in batches or manual uploads)

Perfect for:

  • Sending payment events from a payment provider we don't directly integrate with

  • Connecting your internal sales or support system

  • Any platform that can send data automatically when events happen

Note: If you prefer a simpler setup without developer involvement, use Custom Event Tracking with Sheets instead. With Sheets, you can upload data manually or via automation tools like Zapier.

Setting Up Your Webhook Connection

Follow these steps to create the Webhook connection:

Step 1: Create the Connection

  1. Open the adtribute App

  2. Go to "Connections" and click "Create Connection"

  3. Search for "Webhook Event" and select it

  4. Name your connection (e.g., "CRM Leads", "Payment Events")

  5. Define the "Event Source" and "Event Object" (e.g., Pipedrive & Lead, or Stripe & Payment)

  6. Click "Next"

Step 2: Copy Your Webhook URL

After creating the connection, you'll see a unique Webhook Event URL. This is the endpoint where you'll send your event data.

Example:

<https://collector.api.adtribute.io/collector/webhook_event/…>

Copy this URL—you'll need it in the next step.

Step 3: Configure Your System to Send Events

In your application or service, configure it to send HTTP POST requests to the Webhook URL whenever your tracked events occur. Refer to the implementation guide below for details.

Webhook Implementation Guide

Authentication

No authentication is required. The generated webhook URL is unique to your account.

Rate Limits

There are no rate limits for this endpoint, so you can send any volume of data.

Payload Format

Send your webhook as an HTTP POST request with a JSON body. The content type must be ⁠application/json.

The request body is an array of events you want to track. If you're sending one event, wrap it in an array. If you're sending multiple events, the schema remains the same.

The maximum payload size is 300kb, so consider this when sending batches of events.

Each event should follow this schema:

Required information in each event:

  • Event ID (⁠event_id): A unique identifier for this event in your system. Used for deduplication. If you send the same ID twice, it will only appear once in adtribute.

  • Event Timestamp (⁠event_timestamp): An ISO 8601 timestamp of when the event occurred

  • Event Email (⁠event_email): The email address associated with this event

Optional information:

  • Event ADB CDT (event_adb_cdt): A parameter for identifying users within adtribute. Only necessary if explicitly stated by your adtribute account manager, who will explain its purpose.

  • Event Payload (event_payload): An object for including additional data points as custom fields (e.g., ⁠revenue, ⁠product_id, ⁠subscription_type). These will be available in your definitions and reports. You can use unstructured data—no schema required.

Example request:

curl -X POST https://collector.api.adtribute.io/collector/webhook_event/... \

-H "Content-Type: application/json" \

-d '[
{
"event_id": "order_12345",
"event_timestamp": "2025-12-08T15:21:11.804Z",
"event_email": "[email protected]",
"event_adb_cdt": "adb_cscid:dcc50bcc-2bbc-44b1-8e29-e0b42a306d0a",
"event_payload": {
"revenue": 99.99,
"currency": "EUR",
"product_name": "Premium Plan"
}
},
{
"event_id": "order_123456",
"event_timestamp": "2025-12-09T15:21:11.804Z",
"event_email": "[email protected]",
"event_adb_cdt": "adb_cscid:dcc40bcc-2bbc-44b1-8e29-e0b42a306d0a",
"event_payload": {
"revenue": 123.99,
"currency": "EUR",
"product_name": "Other Product"
}
}
]'

Response Codes

  • 201: Event received successfully

  • Any other status: Double-check your implementation against the documentation above. If you believe you've implemented everything correctly and still receive an error, reach out to your adtribute account manager.

Testing Your Webhook

To verify we're receiving your data, check the connection status in adtribute under "Connections". A newly created connection will say "Awaiting data". Once we successfully receive the first events, it will say "Connected". Data collection happens in real time—if you send an event and reload the app, the connection status will update automatically.

Using Custom Data Fields

To access custom fields from your webhook payload, reach out to your account manager to understand how this works based on your setup.

Best Practices

  • Track raw data: Track custom interactions as raw as possible. Any interpretation or deduplication can be added later.

  • Batch events: If your application logic allows, send multiple events in one request to reduce the number of requests.

  • Handle errors gracefully: Our servers have 99.99% uptime, but errors can still occur. Implement retry logic for failed webhook deliveries (with exponential backoff) to ensure 100% of your data reaches adtribute.

Troubleshooting - What if I'm tracking an anonymous event?

The email parameter is required. However, if you're tracking an interaction for a user whose email you don't yet know, you can still use our webhook integration. Since the setup varies case by case, reach out to your adtribute account manager to discuss the best implementation approach.

Did this answer your question?