Capture the click ID
Preserve tn_cid or cid as the user moves from landing page to checkout.
Install one organization-level TrackNova tag, keep the click ID through the funnel, and let TrackNova handle pixels, postbacks, and event-name translation centrally.
Keep the browser SDK where possible. Use S2S or pixel only when the conversion lives outside the page.
Preserve tn_cid or cid as the user moves from landing page to checkout.
Place the base SDK on the advertiser page, tag manager, or thank-you page where the event is confirmed.
Send conversion by default, or the exact custom event key configured in TrackNova.
Add lead_id, order_id, txid, revenue, or currency only when required.
Check the network request, confirm the event key is active, and verify the conversion appears in reporting.
The TrackNova click ID is generated before the visitor reaches the advertiser website. It is not the publisher click ID.
https://advertiser-site.com/landing-page?tn_cid=TRACKNOVA_CLICK_ID
https://advertiser-site.com/landing-page?cid=TRACKNOVA_CLICK_ID
tn_cid or cid through landing-page redirects.cid with a publisher click ID.Install this script on the landing page and every page where a conversion may be fired. For most websites, install it globally in the site header or tag manager.
CLIENT_ID is the tenant public_key. Find it in the app at https://app.tracknova.in/settings/general.
<script
src="{{TRACKING_DOMAIN}}/js/tracknova.js"
data-client="{{CLIENT_ID}}"
data-url="{{TRACKING_DOMAIN}}">
</script>
URL of the TrackNova browser SDK. This should come from the configured tracking domain, not a hardcoded host.
TrackNova organization key for your organization. This is not an advertiser ID, offer ID, or event key.
TrackNova tracking domain that receives browser events.
<script
src="{{TRACKING_DOMAIN}}/js/tracknova.js"
data-client="{{CLIENT_ID}}"
data-url="{{TRACKING_DOMAIN}}">
</script>
The base tag is organization-level. It identifies your organization, not an advertiser, publisher, or offer.
For normal conversions, TrackNova uses the click ID to find the exact offer. The event key tells TrackNova which action happened on that offer.
data-client |
TrackNova organization key for your organization. |
cid / tn_cid |
TrackNova click ID. This resolves the offer, publisher, and attribution context. |
conversion or custom event key |
The action being reported. It must exist as an active event for the offer being converted. |
Use conversion as the default event when the advertiser only needs to report that a successful action happened.
<script>
TN.track('conversion');
</script>
Suitable for simple leads, signups, registrations, thank-you pages, or fixed-payout events where TrackNova already knows the commercial values from the offer setup.
For lead or registration events, the advertiser may include their own reference values.
<script>
TN.track('conversion', {
lead_id: 'LEAD-12345',
order_id: 'THANKYOU-12345'
});
</script>
These values help with reconciliation, support, and reporting. They are optional unless agreed in the advertiser setup.
Only send revenue fields when the event is a sale, purchase, order, cart value, dynamic payout, or revshare event.
<script>
TN.track('conversion', {
revenue: 150.00,
sale_amount: 150.00,
currency: 'USD',
order_id: 'ORDER-10045'
});
</script>
The value TrackNova should use for reporting or revenue calculation.
The original sale/order amount when different from revenue.
Optional if the offer has a fixed/default currency.
Can be used for advertiser-side reconciliation.
| Advertiser sends | TrackNova normalizes to |
|---|---|
amount, value, total, order_total |
revenue and sale_amount when missing |
order_id, orderId, transaction_id, transactionId |
txid when missing |
TrackNova decides required payload fields from the offer-event configuration.
| TrackNova offer-event setup | Advertiser payload |
|---|---|
| Non-billable lead/signup/registration | TN.track('conversion') is enough. |
| Fixed payout or fixed revenue | Event only, optionally with lead_id, order_id, or txid. |
| Dynamic sale or revshare | Send revenue or sale_amount. Send currency when needed. |
| Custom funnel event | Use the configured event key, for example TN.track('kyc_approved'). |
If TrackNova gives the advertiser a custom event key, use it as the first argument.
<script>
TN.track('kyc_approved', {
lead_id: 'LEAD-12345'
});
</script>
Default successful action.
Lead submitted.
Account created.
Purchase completed.
Custom advertiser funnel stage.
The event key must exist as an active event in TrackNova for that offer.
Use server-to-server tracking when the confirmed conversion lives in the advertiser backend, CRM, billing system, or an offline workflow.
{{TRACKING_DOMAIN}}/postback?cid={cid}&event=conversion&txid={order_id}&sale_amount={amount}¤cy=USD
| Parameter | Meaning |
|---|---|
cid |
Required TrackNova click ID. |
event |
Offer event key. Defaults to conversion when omitted. |
txid |
Advertiser order, lead, or transaction ID. |
sale_amount |
Original sale/order amount for sale or revshare events. |
revenue |
Optional dynamic revenue override. |
currency |
Optional three-letter currency code when advertiser financial values differ from the offer default. |
{{TRACKING_DOMAIN}}/postback?cid={cid}&event=purchase&txid={order_id}&sale_amount={amount}¤cy=USD
Use the pixel endpoint when the advertiser can place an image pixel or iframe on a confirmation page but cannot run the full JavaScript SDK.
{{TRACKING_DOMAIN}}/pixel?cid={cid}&event=conversion&txid={order_id}&sale_amount={amount}¤cy=USD
<img src="{{TRACKING_DOMAIN}}/pixel?cid={cid}&event=conversion&txid={order_id}&sale_amount={amount}" width="1" height="1" border="0" style="display:none" alt="" />
<iframe src="{{TRACKING_DOMAIN}}/pixel?cid={cid}&event=conversion&txid={order_id}&sale_amount={amount}" width="1" height="1" frameborder="0" scrolling="no" style="display:none"></iframe>
| Parameter | Meaning |
|---|---|
cid |
Required. Replace {cid} with the TrackNova click ID. |
event |
Optional. Defaults to conversion when omitted. |
txid |
Advertiser order, lead, or transaction ID. |
sale_amount |
Order value for sale, revenue, or revshare events. |
Use this when the conversion happens after a form submit, registration, checkout, or payment confirmation.
<script
src="https://trk.tech-nova.tech/js/tracknova.js"
data-client="CLIENT_ID"
data-url="https://trk.tech-nova.tech">
</script>
<script>
TN.track('conversion');
</script>
<script
src="https://trk.tech-nova.tech/js/tracknova.js"
data-client="CLIENT_ID"
data-url="https://trk.tech-nova.tech">
</script>
<script>
TN.track('conversion', {
revenue: window.order.total,
sale_amount: window.order.total,
currency: window.order.currency || 'USD',
order_id: window.order.id
});
</script>
const payload = {};
if (order?.id) payload.order_id = order.id;
if (order?.total) {
payload.revenue = order.total;
payload.sale_amount = order.total;
payload.currency = order.currency || 'USD';
}
window.TN.track('conversion', payload);
fetch('/api/create-order', { method: 'POST', body: formData })
.then((response) => response.json())
.then((order) => {
window.TN.track('conversion', {
revenue: order.total,
currency: order.currency,
order_id: order.id
});
});
When the advertiser website and TrackNova tracking domain are different domains, the browser may send an OPTIONS request before the real POST.
This is normal CORS preflight behavior.
| Request | Meaning |
|---|---|
OPTIONS /api/tracknova/track with 204 |
Browser asks whether the cross-domain POST is allowed. |
POST /api/tracknova/track with 200 |
Real TrackNova event was accepted. |
204 preflight request is not a conversion.tn_cid or cid.POST /api/tracknova/track returns 200.GET /pixel returns 200.TN.track() before the lead, registration, or order is confirmed.cid.Use TrackNova S2S postback when:
tn_cid from the landing URL, store it in your system, and send it to TrackNova when the backend confirms the event.