Server-side events · Platform reference
Outbrain server-to-server (S2S) postback checker
Outbrain's S2S tracking is a GET postback to tr.outbrain.com/unifiedPixel. It carries the Outbrain click ID you stored from the landing URL and the name of an event-based conversion created in the Outbrain dashboard. Outbrain fills the click ID through the {{ob_click_id}} macro in the campaign's Track box. Postbacks most often fail to count because the macro was never added (so there is no click ID), the name doesn't match the case-sensitive event name, or a space in the name wasn't encoded.
Read from the official documentation on 9 November 2026. Sources are listed at the end.
Check your own setup
Our postback URL tester checks the Outbrain postback you paste: that ob_click_id and name are present, that your tracker's click ID macro is filled in rather than left literal (double-brace vs single-brace mismatches), and that values like a spaced event name are URL-encoded (%20). It can't confirm the name matches the event-based conversion in your Outbrain account, and it doesn't fire postbacks or read Outbrain reporting.
Open the Postback URL TesterEndpoint and authentication
GET https://tr.outbrain.com/unifiedPixel?ob_click_id={stored click id}&name={event-based conversion name}
None. The postback URL carries no credentials. Attribution relies on the ob_click_id value
Event names
Outbrain has no fixed list: you name each conversion yourself, and what you send must match that name exactly.
| Event | Use it for |
|---|---|
| Name of an Event-Based Conversion you created | There is no fixed standard list. Create it under Pixels > Conversions > Add Conversion and choose Event-Based Conversion, not URL-Based. Event names are case-sensitive, and the dashboard doesn't accept the _ symbol |
Required and recommended fields
| Field | What it needs |
|---|---|
| ob_click_id | Required, reserved key. The click ID you stored for the converting user |
| name | Required, reserved key. The event-based conversion name, case-sensitive. Encode spaces as %20 (e.g. Lead%20Generation) |
| orderValue | Optional conversion value. Use a period as the decimal separator (4.99, not 4,99). Overrides the default value set on the conversion |
| currency | Optional currency code. Listed codes: USD, CAD, EUR, GBP, ILS, AUD, MXN, BRL, SEK, SGD, RUB, NZD, INR, JPY, PHP, CHF, MYR |
| orderId | Optional order identifier. Pass it so that two separate conversions from the same user within a short time are both counted |
| timestamp | Optional. Accepted formats include MM/dd/yyyy HH:mm:ss, yyyy-MM-dd HH:mm:ss, yyyy-MM-ddTHH:mm:ss, yyyy-MM-ddTHH:mm:ssZ and yyyy-MM-ddTHH:mm:ss zzzz |
Click ids
| Click id | Where it comes from |
|---|---|
| {{ob_click_id}} | Outbrain's dynamic macro, with double curly braces. Add OutbrainClickId={{ob_click_id}} to the campaign's Track box. Outbrain then appends the user's click ID to your landing URL as that query parameter. Leave {{ob_click_id}} exactly as written |
| ob_click_id | The reserved parameter name for sending the stored click ID back in the postback |
Deduplication
- Outbrain's dynamic-values help says to pass orderId when you want two different conversions from the same user that happen close together to both count. In other words, without orderId, close repeat conversions from the same user may be merged. Outbrain doesn't publish the merge window.
- Use a unique orderId per real order, and fire the postback only once per order from your server.
Time limits and batch sizes
- The conversion window (time from click to conversion) is set on each event-based conversion when you create it. Conversions outside it aren't attributed.
- timestamp is optional. Without it, Outbrain's docs don't say what time is recorded.
How to test before you trust it
- Outbrain dashboard conversion columns: Outbrain documents no dedicated S2S test tool. Click a live ad so the landing URL carries the click ID, complete the conversion, fire the postback from your server, then check that the event-based conversion shows in the dashboard. Outbrain says it can't troubleshoot your implementation or investigate discrepancies
Why events arrive but don't attribute
- If OutbrainClickId={{ob_click_id}} isn't in the campaign's Track box, there's no click ID on the landing URL and nothing to post back.
- Outbrain's macro uses double braces {{ob_click_id}}. Trackers often use single braces ({clickid}). Mixing them up leaves a literal macro string instead of a real click ID.
- name is case-sensitive: Purchase and purchase are different events. A postback with the wrong case doesn't count against your conversion.
- A conversion name with a space must be sent with %20. Underscores aren't allowed in names created in the dashboard.
- The conversion must be Event-Based. A URL-Based conversion won't receive S2S postbacks.
- orderValue with a comma decimal (4,99) is the wrong format. A sent orderValue also overrides the default value on the conversion.
- Only conversions that came from an Outbrain click are counted, and Outbrain support won't debug your server integration.
Sources
- Outbrain Help: Server to Server Integration
- Outbrain Help: How do I set up server-to-server integrations?
- Outbrain Help: How To Add Dynamic Values
- Outbrain Help: Best practices for naming conversion events
Platforms change these rules without notice. If a source says something different from this page, the source wins.