Conversion tracking
Postback URLs: how server-to-server conversion tracking works
Pass a Tracked click ID to the system that records the sale, return it in a postback, and verify the resulting event against the original click.
A postback is a server-to-server request from the system that confirms a lead or sale to the tracker. It reports the conversion without relying on the visitor's browser to load a thank-you page.
For Tracked to attribute that event, the callback must return the click ID created by the original Tracked click. The advertiser or checkout system must receive and store that value before the conversion happens.
Free postback URL builder
Build a callback template without sending a request. Enter your HTTPS endpoint and the advertiser’s documented macros. No account is needed for this utility.
Use raw, unencoded values. Complete placeholders such as {clickid}, {{clickid}}, and ##S2S## stay readable; other values are URL-encoded once. This is syntax support, not a network compatibility claim. Do not enter credentials or customer data.
A constructed URL is not a confirmed conversion. This tool does not check delivery, expand advertiser macros, or verify attribution. Entered URLs stay in this page: no network requests or browser storage are used by the builder.
Want to follow the callback into a campaign report? Start free — Tracked early access. Account signup is separate from this free URL utility.
For a Tracked primary-sale template, use your campaign domain followed by /postback. Keep the default click_id, conversion_id, and payout parameter names. The macro values come from the advertiser that sends the callback, not from Tracked.
For example, entering {saved_subid}, {conversion_id}, and {payout} produces this illustrative template:
https://your-domain.example/postback?click_id={saved_subid}&conversion_id={conversion_id}&payout={payout}
Those macro names are examples, not confirmed tokens for your network. A raw value such as order A&B becomes order%20A%26B. Do not pre-encode it: entering order%20A encodes the percent sign and produces order%2520A.
The builder only assembles a URL. It cannot tell whether a macro expands, a click exists, or a conversion reaches the report. Keep existing event-type fields out of a primary-sale endpoint; conversion_type or type makes the callback secondary and its recorded payout zero.
The postback path
Follow the offer-click ID through four handoffs:
- A visitor clicks an offer link tracked by Tracked. That click-out creates the click event ID.
- Your offer URL passes that ID to the advertiser or affiliate network.
- The advertiser stores the ID with its lead, order, or other conversion record.
- After confirming the event, the advertiser calls Tracked's
/postbackendpoint with that ID asclick_id.
Do not assume the campaign arrival ID is the ID to return. A landing-page visit can have its own impression ID; use the ID generated for the tracked offer click. In a redirect-only campaign, the impression and click can share one event ID.
For example, a redirect URL can pass the Tracked macro into a field the advertiser supports:
https://advertiser.example/offer?sub1={{click.id}}
Here sub1 is an illustrative network field, not a universal parameter. The tracked click-out replaces {{click.id}} with that offer click's ID before it sends the visitor to the offer. Check the advertiser's documentation for the field it stores and the macro it expects in its callback.
If the advertiser never stores the Tracked click ID, a later callback template cannot recover it. Check each redirect and form handoff to confirm the final request carries the real value, not the literal text {{click.id}}.
Send a callback to Tracked
Tracked's inbound endpoint is a GET request to /postback. For a primary sale, leave out both event-type fields and include payout if the advertiser supplies it:
curl --get 'https://YOUR_TRACKED_DOMAIN/postback' \
--data-urlencode 'click_id=TRACKED_CLICK_ID' \
--data-urlencode 'conversion_id=ADVERTISER_EVENT_ID' \
--data-urlencode 'payout=ADVERTISER_PAYOUT'
Replace the host with the Tracked domain serving your campaign. Replace TRACKED_CLICK_ID with the offer-click ID saved by the advertiser. Use the source's documented macros in its live callback. Replace ADVERTISER_PAYOUT with the numeric value supplied by the advertiser, or rely on the campaign's configured default when no value is sent. This is an instructional request, not a live test result.
For a separate, explicitly typed funnel event, send its configured event name without payout:
curl --get 'https://YOUR_TRACKED_DOMAIN/postback' \
--data-urlencode 'click_id=TRACKED_CLICK_ID' \
--data-urlencode 'conversion_id=ADVERTISER_EVENT_ID' \
--data-urlencode 'conversion_type=YOUR_CONFIGURED_EVENT'
Tracked currently treats explicitly typed callbacks as secondary funnel events and records their payout as zero, even if the request includes payout. Use the untyped callback for the primary sale path and configure the Offer's implicit default event.
| Field | Use |
|---|---|
click_id | Required. The value must identify a recorded Tracked click. |
conversion_type or type | Optional event name. If both are present, conversion_type takes precedence. Use the value expected by your Offer event mapping. |
conversion_id, event_id, or idempotency_key | Optional stable identity for one conversion event, when the advertiser provides one. |
transaction_id | Optional source identifier. Some systems use it for a click or order shared by several events, so confirm its meaning before using it as a conversion identity. |
payout | Optional sale value for an untyped primary callback. Explicitly typed callbacks are secondary funnel events and currently record payout as zero. |
currency, timestamp | Optional callback details used by Tracked's outbound integration context. |
If the advertiser calls its click field sub1, external_id, or something else, map that source field into Tracked's click_id parameter. The labels can differ; the value must remain the same.
Postback URL example: trace both sides
The outbound offer URL and inbound callback use different parameter names but must carry the same Tracked offer-click value:
| Step | Example | Check |
|---|---|---|
| Offer URL configured in Tracked | https://advertiser.example/offer?sub1={{click.id}} | The /click/N redirect replaces {{click.id}} with a real offer-click ID. |
| Advertiser's saved value | sub1=TRACKED_CLICK_ID | The advertiser keeps that value with the lead or sale. |
| Primary-sale callback | https://YOUR_TRACKED_DOMAIN/postback?click_id=TRACKED_CLICK_ID&payout=25 | Tracked can resolve the click and record the primary payout. |
These are explanatory placeholders. The advertiser's real offer field and callback macro come from its own documentation. A callback with a made-up ID returns 404; a 200 still needs a report check.
Verify one test conversion
Use the advertiser's test mode when available, and follow a new test click that you can identify in Tracked.
- Open the campaign landing page, click its tracked offer link, and note the offer-click ID. Compare it with the click event in Tracked; do not substitute the page impression or session ID.
- Confirm the advertiser receives that exact value in its supported field.
- Trigger its test conversion and inspect the callback URL or delivery log, with sensitive values redacted.
- Confirm the request includes the expected
click_idand event fields. - Find the conversion attached to that click in Tracked reports or the event journey.
- If you retry the callback, compare the resulting event before sending it again. A response code alone does not tell you whether another report row was created.
The endpoint returns 400 when click_id is missing. It returns 404 when its lookup finds no matching click. A normal callback can return 200 OK before event storage finishes; storage runs asynchronously. Collection policy can also return 200 OK without storing an event. A recognized retry can return 200 with status: "idempotent". Check the report row and event journey to verify attribution.
For symptom-by-symptom checks—including these response cases, missing IDs, event mapping, duplicate callbacks, and outbound delivery—see Postback not recording conversions? Trace the failing step.
Where Tracked is today
Tracked's inbound /postback handler looks up the supplied ID against a recorded click, then attaches the conversion event to that click. Reports and event journeys give you a place to check the resulting record.
That inbound callback is separate from conversion feedback sent from Tracked to an ad network or another provider. A callback arriving at Tracked does not by itself prove an outbound API delivery succeeded. For the differences between those paths, see native integrations vs. postbacks vs. conversion APIs.
Tracked brings the ad click, landing page, offer, and conversion report into one campaign workflow. Start free and build a tracked campaign.
Frequently asked questions
Does a postback replace a browser pixel?
A postback reports an event from the system that confirmed it, such as an advertiser or checkout. A browser pixel reports from a page in the visitor's browser. They are different event paths; if both report the same conversion, define how the systems identify and handle duplicate deliveries.
Can I use type instead of conversion_type?
Yes. Tracked accepts either field. If a callback includes both, conversion_type wins. Match the value to the event configured for the Offer.
Does an HTTP 200 prove that the conversion was stored?
No. The handler can acknowledge before its asynchronous storage task completes, and collection policy can suppress storage while returning 200 OK. Confirm the conversion record in the expected report or event journey.
Is a Google Analytics postback URL the same thing?
No. This /postback URL receives conversions into Tracked. GA4 receives server events through its authenticated Measurement Protocol, which uses a different request contract. See the GA4 postback URL guide for the practical distinction.
Can this URL send an affiliate conversion to Facebook?
It records the advertiser's callback in Tracked. Sending a separate event to Meta requires its Conversions API workflow. The Meta affiliate tracking guide explains that handoff and Tracked's current status.