Coming in 1.9.80 · Destinations

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.

  1. Add a destination

    Choose the platform, the campaigns it sends, and its credentials. Secrets are stored encrypted and never shown again.

    Setup › Destinations
  2. Send 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 test
  3. Conversions 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 minute
  4. Read 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 AdsGoogle AdsGoogle Analytics 4
Sent toOpenAI’s Conversions APIGoogle Ads, as click conversionsGA4 Measurement Protocol
Credited byChatGPT’s click id, opprefThe click’s gclid, wbraid or gbraidAn event for each conversion, with its value
Connect withOne Advertiser API key; setup makes the pixel, key and event settingsYour own developer token and OAuth client, then Connect Google AdsYour measurement id and API secret
Hashed email and phoneOptional, hashed as OpenAI hashes themOptional, SHA-256 (enhanced conversions for leads)Optional, SHA-256 of the normalised values
Send earlier conversionsUp to 7 daysUp to 90 daysUp to 3 days
Which conversionsThose from ChatGPT ad clicks, or widen it to one traffic source or allThe campaigns you choose, each with its own conversion action if you likeThe campaigns you choose

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.

05 / Privacy

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.
Prefer files?

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.

How to send offline conversions

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.