Google Ads and Microsoft Advertising bid on the conversions they can see. When the sale happens somewhere their tag can't reach, such as after a sales call, in your own checkout on another domain, or when a trial turns into a paid plan weeks later, their bidding never hears about it. It keeps buying the clicks that look good, not the ones that pay.
Prosper202 already records those conversions against the click that brought them. Since 1.9.79 it can send them back to both platforms as offline conversions, on a schedule, with no spreadsheets. Here's how to set it up.
Before you start
- Prosper202 1.9.79 or later. Clicks record the platform's click id from 1.9.79 on: Google's
gclid,gbraidandwbraid, and Microsoft'smsclkid, from direct links and landing pages alike. - Auto-tagging on in Google Ads, and auto-tagging of the Microsoft Click ID on in Microsoft Advertising, so those ids reach your links.
- Your conversions reaching Prosper202 with the click named: a postback or pixel that passes the subid, an API call, an upload, or the tracking cookie. Conversions matched only by a guess are never sent (more on that below).
- For scheduled fetches, your tracking domain on HTTPS: Google only fetches
https://URLs.
Step 1: Create the conversion in the ad platform
- Google Ads: create an Import conversion action and choose Track conversions from clicks. Call it something like "Paid plan" or "Quote request".
- Microsoft Advertising: create an Offline conversions goal. Allow two hours before it accepts uploads.
The name matters: the platform matches it exactly, capitals included.
Step 2: Name your conversions in Prosper202
Open Setup › Offline Conversions. Under Conversion names, type the Google Ads conversion action and the Microsoft Advertising goal you just made. One name for the account covers every campaign; give a campaign its own name where it counts toward a different action, say "Demo booked" for your Book a Demo campaign and "Order" for your store's campaigns. Press Save names. A campaign with no name is left out of the file.
Step 3: Choose consent for Google
Google asks for Ad User Data and Ad Personalization columns with traffic from the European Economic Area. Prosper202 doesn't record a visitor's consent and never guesses it, so you state it per file: Granted, Denied or empty. Choose what your consent banner collected for that traffic.
Step 4: Try a download
Under Download a file, choose the platform and how many days to include (up to 90), and download. Prosper202 writes the platform's own import format:
- Google Ads, Data Manager: Google's recommended route, with the gclid, gbraid and wbraid columns.
- Google Ads, Uploads template: the classic Goals › Conversions › Uploads file, gclid only.
- Microsoft Advertising: the msclkid, with times in UTC.
Each line carries the conversion's time with its time zone offset, its value net of any partial refund in your account's currency and, for Google, an Order ID that stays the same on every upload, so a conversion sent twice is counted once. Upload the file once by hand (Google Ads: Goals › Conversions › Uploads; Microsoft Advertising: Conversions › Offline conversions › Uploads) to check the names match.
Step 5: Let the platform fetch it daily
Under Fetch URLs, press Make a fetch URL for each platform. Copy it straight away: it is shown once. Prosper202 keeps only a fingerprint of its key, so a lost URL is replaced, not recovered.
- Google Ads: Goals › Conversions › Uploads › Schedules, a new schedule from HTTPS (or Data Manager's HTTPS source for the Data Manager file).
- Microsoft Advertising: Conversions › Offline conversions › Schedules, HTTPS.
Both ask for a user name and password beside the URL; the URL carries its own key, so enter anything. Schedule a daily fetch. Each fetch sends the last 7 days by default, and the platforms count a conversion they already have once, so a missed fetch loses nothing. The page shows when each URL was last fetched and how many conversions it sent.
What gets sent, and what doesn't
Only conversions whose click Prosper202 was told about are sent: named by the postback, pixel, API call or upload, or found by the tracking cookie in the buyer's browser. A conversion matched only by a guess, such as the latest click from the same IP address, stays home, because sending it would teach the platform's bidding the wrong clicks.
A conversion is also left out when it no longer counts (deleted or fully refunded), when its click came without the platform's click id, when its click is more than 90 days old, or when it's less than 6 hours old (it goes in the next fetch). The page counts every conversion left out, under its reason, so you can see at a glance whether, say, a campaign is missing its conversion name.
One limit to know: a fetch doesn't take a conversion back. If you refund an order the platform already has, retract it in the platform with its conversion adjustments.
For developers
- The file:
GET /conversions/offline-exportwithformat(google,google_uploads,microsoft),days(1 to 90),campaign_id,conversion_name,ad_user_dataandad_personalization. - What was left out:
GET /conversions/offline-export/summary. - From the CLI:
p202 conversion offline-export --format google --output google-ads.csv, and--summaryfor the counts. - Each conversion's
match_method(click_id,cookie, or a weaker match) decides whether it's sent.
New to 1.9.79? Read what else is in the release.