Every sale,
back to the platform
that bought the click.
Smart bidding is only as good as the conversions it sees. Destinations send each new conversion from your own server to ChatGPT Ads, Google Ads and Google Analytics 4, so each platform optimises for the sales your tracker records, not the ones its tag happened to catch.
Server to server, from your install. Nothing passes through Tracking202, and raw personal data never leaves your server.
Add it once. Every new conversion follows.
The same steps for each platform, on Setup › Destinations, the API or the command line.
Add a destination
Choose the platform, the campaigns it sends, and its credentials. Secrets are stored encrypted and never shown again.
Setup › DestinationsSend a test
Each platform checks a test without recording it: GA4’s validation endpoint, a Google Ads validate-only upload, an OpenAI test fire.
Test · p202 destination testConversions are queued
Each new conversion is queued for every enabled destination and sent by the cron job every minute, retried with backoff for up to 8 tries.
Cron job · every minuteRead the delivery log
Every send is logged with its status and the platform’s answer, and each conversion links to its click in Conversion Logs.
Delivery log
What each one sends, and how far back.
Pick one, two or all three. Each is set per account.
| ChatGPT Ads | Google Ads | Google Analytics 4 | |
|---|---|---|---|
| Sent to | OpenAI’s Conversions API | Google Ads, as click conversions | GA4 Measurement Protocol |
| Credited by | ChatGPT’s click id, oppref | The click’s gclid, wbraid or gbraid | An event for each conversion, with its value |
| Connect with | One Advertiser API key; setup makes the pixel, key and event settings | Your own developer token and OAuth client, then Connect Google Ads | Your measurement id and API secret |
| Hashed email and phone | Optional, hashed as OpenAI hashes them | Optional, SHA-256 (enhanced conversions for leads) | Optional, SHA-256 of the normalised values |
| Send earlier conversions | Up to 7 days | Up to 90 days | Up to 3 days |
| Which conversions | Those from ChatGPT ad clicks, or widen it to one traffic source or all | The campaigns you choose, each with its own conversion action if you like | The campaigns you choose |
Your own token, your own account, no copy-and-paste ids.
Google Ads uploads use your own developer token and OAuth client, so nothing goes through anyone else’s app. Connect Google Ads opens Google’s consent screen, and then you pick the account and conversion action from your Google Ads account instead of pasting ids.
- A conversion whose click is under 6 hours old waits until Google will take it.
- Google’s quota errors, timeouts and server errors are retried.
- Something only you can fix, such as a developer token not yet approved or a wrong conversion action, waits without using its tries. Fix it, save, and nothing queued meanwhile is lost.
- Still feeding Google Ads from paid 1.9.56’s conversion feed? Setup › Offline Conversions shows it and moves it over with one button.
Fix the cause, then send it again.
A conversion that ran out of tries used to stay failed. Now nothing is stuck.
What failed, and why
Each destination counts its last 7 days by status, with the commonest reasons failed and withheld conversions weren’t sent.
Send again
Resend one row from the log, or every failed and withheld conversion of the last 90 days. A withheld one is checked again, and one already sent is never sent twice.
Edit in place
Change a destination’s settings, campaigns, parameters, conversion actions and credentials. A secret left blank keeps the stored one, and saving sends what was waiting.
The full log
Paged and filtered by status, with each conversion linked to its click, so a quiet destination is never crowded out by a busy one.
Start with history
A new destination can be sent the conversions recorded before it existed, as far back as its platform accepts.
Know it’s running
If the cron job isn’t running, Home and the Overview say your conversions aren’t reaching your traffic sources, and how to fix it.
Only what the platform needs, and only who may be sent.
- Raw personal data stays on your server. With hashed data on, only hashes of the customer’s normalised email and phone go out.
- A conversion matched to its click only by a guess, such as the same IP address, isn’t sent to GA4.
- A visitor your privacy setting holds back is never sent.
- EEA and UK visitors are withheld unless you state consent, and the page names the privacy setting in force and warns when it still holds them back.
- Credentials are removed from every stored or shown error.
Offline conversion files still work.
Setup › Offline Conversions, from 1.9.79, writes your conversions as Google Ads’ and Microsoft Advertising’s own import files, to download or for the platform to fetch on a schedule.
The same destinations, from the API and command line.
The command line comes with Pro. The REST API stays open on every install.
p202 destination create --type openai_ads --name "ChatGPT Ads" --pixel-id px_4821 --conversions-api-key-file key.txt p202 destination create --type google_ads --name Search --credentials-file google-ads.json p202 destination test 3 # checked by the platform, not recorded p202 destination backfill 3 --days 7 # send earlier conversions p202 destination resend 3 --status failed # send failed ones again POST /api/v3/destinations POST /api/v3/destinations/{id}/test POST /api/v3/destinations/{id}/backfill POST /api/v3/destinations/{id}/deliveries/resend
Teach every platform what a sale looks like.
When 1.9.80 ships, upgrade, add a destination, and send a test. The next conversion goes out on its own.