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 4 hours 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.