Sending Conversions to Ad Platforms: Conversions API, Events API and Google Ads Offline Conversions

Sending conversions back to an ad platform is how you tell Facebook, TikTok or Google which clicks turned into leads and sales. Without it the algorithm optimizes for clicks and cheap actions instead of buyers.

Tracking and Analytics10 min read
Sending Conversions to Ad Platforms: Conversions API, Events API and Google Ads Offline Conversions
Contents
  1. Why send conversions back to the ad platform
  2. Ways to send conversions
  3. What to send: leads, hold or approval
  4. How to prepare the ad account to receive conversions
  5. Common mistakes when sending conversions
  6. Sending conversions in ArtisanClo
  7. Summary

The Facebook or TikTok algorithm is a very diligent student, but it only learns from the examples you show it. If the platform sees only clicks, it will bring people who like to click. If it sees leads, it brings people who submit forms. If it sees approved sales, it brings people who buy. Sending conversions back to the ad platform — via Conversions API, Events API or offline conversions — is how you show it those examples.

Why send conversions back to the ad platform

In affiliate marketing the conversion does not happen on your site but in the affiliate network: you learn about it from a postback, sometimes days after the click, once the lead is approved. The ad account knows nothing about it. That leads to three problems:

  1. Optimizing for the wrong goal. The campaign runs "for clicks" or "for landing page views", and the algorithm brings cheap but useless traffic.
  2. Wrong stats in the ad account. You do not see cost per lead right in the ads and cannot turn off weak creatives based on platform data.
  3. No signal for scaling. Lookalike audiences and automated bidding strategies need conversion events.

Server-side conversion sending fixes all of that: the tracker gets a postback from the network and sends an event to the ad account with the platform's click ID.

click (fbclid / ttclid / gclid)
  → tracker stores the click and the platform ID
  → network sends a postback: lead or sale
  → tracker sends the event to the ad platform

How the tracker receives the network postback is covered in postback URL in affiliate marketing.

Ways to send conversions

Method Platforms How it works
Postback to the source Push, pop, native, many ad networks The network gives you a URL; the tracker calls it with the network's click ID
Conversions API (CAPI) Meta: Facebook, Instagram The server sends an event with a pixel ID and access token
Events API TikTok The CAPI equivalent: pixel ID, token, event
Offline conversions via API Google Ads Upload via the API with the gclid
Offline conversions by file Google Ads A file with gclid, conversion name and time — manually or on a schedule

Postback to the traffic source

The simplest option. A push or pop traffic network gives you a URL like:

https://tracker.example/conversion?click_id={clickid}&payout={payout}

…where {clickid} is the ad network's own click ID. You pass it into the ad link with the network's macro, store it in the tracker and insert it when sending. More on this kind of traffic in push and pop traffic.

Conversions API (Meta)

Conversions API is Meta's server-side channel for events. To send events you need a pixel (dataset) ID and an access token generated in Events Manager (how it ties in with macros and fbclid is covered in Facebook ads tracking). Each event contains:

  • the event name: Lead, Purchase or a custom one;
  • the event time;
  • fbc — a value built from the click's fbclid;
  • matching data: IP, user agent and, where available, hashed contact details;
  • for a purchase, the value and currency;
  • an event ID to deduplicate against the pixel.

A sample request body (simplified):

{
  "data": [{
    "event_name": "Lead",
    "event_time": 1759312800,
    "action_source": "website",
    "user_data": {
      "fbc": "fb.1.1759310000000.IwAR2Xk9vQ7mP3",
      "client_ip_address": "203.0.113.10",
      "client_user_agent": "Mozilla/5.0 ..."
    }
  }]
}

The more accurate the user data, the higher the Event Match Quality in Events Manager.

Events API (TikTok)

Same logic: pixel ID, access token, event and matching data. The key field is the ttclid from the ad link. Without it TikTok matches the event worse. How not to lose it along the way is covered in ttclid and Events API in TikTok.

Google works with the gclid (and on part of iOS traffic with wbraid and gbraid; more in gclid, ValueTrack and offline conversions). In Google Ads you create a conversion action with "Import" as the source, and then upload conversions via the API or by file. The minimum set of file columns:

Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency
Cj0KCQjw8eTFBhCX,Lead,2026-09-08 14:32:00+03:00,0,USD
Cj0KCQjw1aBcDeFg,Sale,2026-09-08 18:05:00+03:00,24,USD

Uploads can be scheduled: Google fetches the file from a URL by itself. That is a good option if you do not want to deal with API keys. What gclid is and where it comes from is described in detail in fbclid, gclid, ttclid, yclid.

What to send: leads, hold or approval

The affiliate network reports a conversion several times: a lead, then an approval or a rejection. Which event to give the platform is a strategic decision.

What you send Pros Cons
All leads Lots of events, the algorithm learns fast It also learns from junk and rejected leads
Approvals only The platform looks for real buyers Few events, and they arrive with a delay
Both, as different events Flexibility: you pick the campaign goal in the ad account You have to keep goal settings in order

A separate issue is rejected leads. Most platforms cannot "take back" an event once sent, so if you sent a lead and the network later rejected it, the algorithm keeps counting it as a success. That is one more argument for sending approved sales as soon as their volume is enough to learn from.

Tip. If approvals in your vertical take several days and volume is small, start by optimizing for leads and send sales in parallel as a separate event. Once enough sales have accumulated, switch the campaign goal.

What each status means and why hold cannot be counted as revenue is covered in conversion statuses: lead, hold, approved, rejected, trash.

How to prepare the ad account to receive conversions

Before you turn on sending in the tracker, do the setup on the platform side. Without it events will go "into the void".

Meta

  1. In Events Manager create or choose a dataset (pixel) linked to the ad account.
  2. Generate a Conversions API access token in the dataset settings.
  3. Decide which standard events you will use: usually Lead for a form submission and Purchase for a sale.
  4. After the first events, check them in the test events tab and the dataset overview: did they arrive, did they match clicks.

TikTok

  1. In TikTok Events Manager create a pixel connected via Events API.
  2. Generate an access token.
  3. Choose events for optimization and check that they show as active after the first sends.
  1. Create a conversion action with "Import" as the source (offline conversions from clicks).
  2. Set the conversion window and attribution model.
  3. For API uploads, prepare access to the account; for file uploads, a schedule with the file URL.
  4. After a day or two, check the upload history: Google shows how many rows were accepted and why the rest were rejected.

Tip. Conversion action names in Google Ads must match exactly what arrives in the file or via the API, including letter case. A mismatch is the most common cause of the "conversion not found" error.

Common mistakes when sending conversions

No platform click ID. If the fbclid, ttclid or gclid was not stored in the tracker, the event either will not match or will match poorly. Make sure parameters are not lost in redirects.

Duplicates with the pixel. A pixel on the thank-you page plus a server event without a shared ID means double counting. Either use deduplication or pick one of the two.

Resending on a status change. The network sent "hold", then "approved", and both went to the platform as separate purchases. Sending should happen once per conversion and status.

Wrong time zone. Google Ads is sensitive to conversion time: if it is earlier than the click or has no time zone, the row is rejected.

Not checking after launch. You set it up, saw the first event, and forgot. A week later the token expired or someone recreated the pixel, and the campaign keeps "optimizing" without a signal. Every few days compare the number of conversions in the tracker and in the ad platform.

Value in the wrong currency. The payout is in euros but the event says USD — the platform miscalculates return and bids on distorted value.

A token pasted in plain text into the team chat. Access keys are access to the ad account. Keep them in a system where they are encrypted and not shown again.

Sending conversions in ArtisanClo

In ArtisanClo conversion sending is configured in the traffic source card and works for flows with the tracker on ("Tracker" and "Cloaking + Tracker" modes). Options:

  • Postback to the source — the network gets its own click ID and the conversion status. You can choose which statuses to report. Sending happens once per conversion and status, so a hold turning into a sale will not create a duplicate.
  • Meta, TikTok, Google Ads directly (from the Professional plan) — conversions go to your ad account using your keys: pixel ID and token for Meta and TikTok; account ID and a service account key from your own Google Cloud for Google Ads.
  • Google Ads by scheduled file (from Professional) — no keys needed: paste the file URL into Google Ads ("Goals → Conversions → Uploads → Schedules"). The file includes leads and sales for 90 days on clicks with a gclid.

Keys and tokens are stored encrypted and are not shown again after saving.

Where conversions come from: the affiliate network, an external tracker or your own site sends them to the "Conversions setup" section. Network statuses are mapped automatically (approved — sale, pending — hold, refund — rejected, fraud — trash). In the "Conversions" section each record has a click history: click data, what the network sent, status changes and sending to the ad platform — this shows whether the event went out.

On the Business plan there is the reverse direction too — spend import: every morning spend for the last 3 days is pulled from Meta, TikTok and Google Ads, and the campaign is matched to the flow by the campaign ID in the clicks. That way ROI is calculated from the actual amounts in the ad account. You can compare plans on the pricing page.

Setups for specific platforms are in the traffic source catalog, for example for Facebook Ads.

Summary

Sending conversions to ad platforms closes the loop: click → network postback → event to the platform → the algorithm learns from your buyers. Store the platform click ID, decide which statuses to send, and make sure one event never goes out twice. And to know whether the campaign became more profitable afterwards, calculate results correctly — see how to calculate profit and ROI and affiliate marketing metrics.

Frequently asked questions

01

Why send conversions to Facebook if the pixel is already installed?

A pixel on the thank-you page only sees what happens in the browser and loses events to ad blockers and iOS restrictions. It also does not know whether the affiliate network approved the lead. Server-side sending via Conversions API fires the event after the network postback, including for approved sales.

02

Which events should I send: leads or only approvals?

It depends on volume. The algorithm needs enough events to learn, so at the start many buyers send leads. Once there are plenty of approved sales, optimizing for approvals brings better traffic. Many send both events under different names and pick the goal in the campaign.

03

Can I send conversions to Google Ads without API access?

Yes. Google Ads supports offline conversion uploads by file, manually or on a schedule from a URL where the file is hosted. The file contains the gclid, conversion name, time and value. It is simpler than the API, but conversions show up with a delay.

04

How long do I have to upload an offline conversion to Google Ads?

You can upload a conversion as long as the conversion window set in the conversion action has not expired, typically up to 90 days from the click. That is why the gclid has to be stored together with the click, not just in cookies.

05

What happens if I send the same conversion twice?

The platform may count it twice and inflate the campaign results, and the algorithm will start optimizing on distorted data. To prevent duplicates, use an event or transaction ID and send each conversion and status only once.

Read next

See your traffic for real

Connect ArtisanClo to your site, see who actually arrives from your ads, and why every click got its decision.