Set up postback tracking

Get your Wevion postback URL, configure it in your tracker with macros, test, verify events arriving. Step-by-step setup.

Written By Salvatore Sinigaglia

Last updated About 1 hour ago

Get your Wevion postback URL, configure it in your tracker with macros, test, verify events arriving. Step-by-step setup.

Set up postback tracking

Step-by-step setup for postback tracking. Get your Wevion postback URL, configure it in your tracker with the right macros, test, verify events arriving. Total time: 10-20 minutes per tracker.

Who is this for

Mediabuyers ready to enable server-side conversion tracking. Read com-109 postback overview first for context.

Before you start

  • A tracker connected (Keitaro / Voluum / RedTrack / BeMob / TG Tracker β€” see com-107) OR your own server capable of HTTP POST
  • Your ad campaigns running on Meta / Google / TikTok with click_id passed in UTM (Wevion auto-generates these)
  • Your tracker logging conversions with click_id

Step 1: Get your Wevion postback URL

In Wevion:

  • Sidebar β†’ Connect β†’ Postback or visit /connect/postback
  • Click Get URL or directly: GET /api/v1/postback/config returns your postback URL template and total conversion stats. The receiver template looks like:
https://api.wevion.ai/meta/postback/conversion?sheet_id={your_sheet_id}&transaction_id={transaction_id}&payout={payout}&currency={currency}&campaign_id={campaign_id}&adset_id={adset_id}&ad_id={ad_id}

Copy the postback URL (it already contains your sheet_id).

Step 2: Translate macros to your tracker's syntax

Fill the receiver parameters with your tracker's macros:

Wevion parameterKeitaroVoluumRedTrackBeMob
transaction_id{conversion_id} / {subid}${transaction_id}{clickid}{txid}
payout{revenue}${payout}{sum}{payout}
currency{currency}${currency}{currency}{currency}
campaign_id / adset_id / ad_idpass through from your ad URL sub-IDssamesamesame

Keep sheet_id as the fixed value from your Wevion postback URL. Example for Keitaro:

https://api.wevion.ai/meta/postback/conversion?  sheet_id=YOUR_SHEET_ID  &transaction_id={conversion_id}  &payout={revenue}  &currency={currency}

Step 3: Configure in your tracker

For Keitaro

  1. Keitaro Admin β†’ Campaigns β†’ pick the campaign
  2. Postback URL field β†’ paste the URL with Keitaro macros
  3. Save
  4. Repeat per campaign OR set as default postback at Settings β†’ Postback URLs

For Voluum

  1. Voluum β†’ Settings β†’ Postback Templates β†’ New
  2. Postback URL with ${...} Voluum macros
  3. Apply to campaigns via campaign settings

For RedTrack

  1. RedTrack β†’ Conversions β†’ Postback URLs β†’ Add
  2. URL with RedTrack macros
  3. Trigger conditions: on Conversion event

For BeMob

  1. BeMob β†’ Tools β†’ Postback URLs β†’ New
  2. Trackmaster-style macros
  3. Save

For TG Tracker

  1. TG Tracker Admin β†’ Settings β†’ Webhooks / Postback
  2. URL with TG-style macros
  3. Save

For custom server-side fire

If you're firing from your own server (no tracker):

curl "https://api.wevion.ai/meta/postback/conversion?sheet_id=YOUR_SHEET_ID&transaction_id=conv-12345&payout=99.99&currency=USD"

The receiver is a GET endpoint. Fire it from your conversion code (Node, Python, PHP, whatever).

Step 4: Generate test traffic

Manually trigger a conversion to test:

  1. Click on one of your live ads (or use a test ad)
  2. Complete the funnel β€” go through to your offer + convert
  3. Your tracker/network should log the conversion + fire the postback to Wevion's receiver URL
  4. Check your stored conversions via GET /api/v1/postback/conversions, or switch the Ads Manager conversion source to postback

If the conversion appears: setup correct. If not: see Common issues below.

Step 5: Verify and monitor

Verify your conversions are landing:

  • List stored conversions via GET /api/v1/postback/conversions (server-side paginated + filterable)
  • In Ads Manager, switch the conversion source to postback to see the stored conversion counts + revenue
  • GET /api/v1/postback/config returns the total conversion count

Healthy setup: conversions from your network appear in the list shortly after they fire.

How storage + idempotency works

When Wevion receives a postback at GET /meta/postback/conversion:

  1. Read sheet_id from the query (identifies your account)
  2. Store the conversion row (transaction_id, payout, currency, campaign_id / adset_id / ad_id, received_at) in meta_postback_conversion
  3. If a row with the same (sheet_id, transaction_id) already exists, the delivery is treated as a duplicate and not double-counted

If sheet_id doesn't match a real account, the receiver rejects the request.

No forwarding to ad platforms

The postback store is Meta-only and used for Wevion reporting. Wevion does not re-send the stored conversion to Meta CAPI, Google Conversions API, or TikTok Events API. If you need server-side CAPI sends, configure them through the pixel/CAPI flow (meta-105).

Best practices

  • Test before going live: always do a manual test conversion first
  • Use a stable transaction_id: pass your tracker's conversion ID so Wevion can dedup reliably
  • Keep the sheet_id fixed: it identifies your account in the receiver URL β€” don't alter it
  • Set up postback per campaign: even if your tracker supports a default URL, per-campaign customization helps pass attribution keys
  • Keep tracker logs: useful for debugging if conversions disappear

Common issues

  • "Network sends but Wevion doesn't show conversions": wrong URL, wrong sheet_id, or the network can't reach Wevion (firewall, DNS). Test with curl.
  • "Conversions with wrong currency / value": tracker macros not replacing correctly. Test by hardcoding values to isolate.
  • "Conversion rejected": the sheet_id doesn't match a real account. Copy the URL from /connect/postback cleanly.
  • "Duplicate conversions": pass a stable transaction_id; Wevion dedups on (sheet_id, transaction_id) automatically.

Deduplication (transaction_id)

Deduplication is automatic. Wevion enforces a unique constraint on (sheet_id, transaction_id), so a redelivered postback with the same transaction_id for your account is collapsed and not double-counted. Best practice: pass a stable transaction_id from your tracker (e.g. the Keitaro conversion ID).

FAQ

How do I get my Wevion postback URL?

In Wevion, go to Connect β†’ Postback or visit /connect/postback and click Get URL. You can also call GET /api/v1/postback/config, which returns your postback URL template and total conversion stats. Copy the receiver URL (it already contains your sheet_id), then fill in your tracker's macros for transaction_id, payout, and currency.

Where do my postback conversions show up in Wevion?

Stored conversions are listed via GET /api/v1/postback/conversions (server-side paginated and filterable), and they appear as the switchable postback conversion source in Ads Manager reporting. The postback store is Meta-only and used for Wevion reporting β€” Wevion does not re-send the conversion to Meta CAPI, Google, or TikTok.

How do I test my postback setup in Wevion?

Trigger a manual conversion: click one of your live ads, complete the funnel through to your offer, and convert. Your tracker/network should log the conversion and fire the postback to Wevion's receiver URL. Then check your stored conversions via GET /api/v1/postback/conversions, or switch the Ads Manager conversion source to postback. If the conversion appears, your setup is correct.

How do I prevent duplicate conversions in Wevion?

Deduplication is automatic. Wevion enforces a unique constraint on (sheet_id, transaction_id), so a redelivered postback with the same transaction_id for your account is collapsed and not double-counted. Best practice is to pass a stable ID from your tracker, such as a Keitaro conversion ID, as the transaction_id.