Google Ads (offline click conversions)
Google Ads (offline click conversions) is a traffic source (search). Its own documentation: https://developers.google.com/data-manager/api/devguides/events/google-ads/offline/send-events.
What it connects
Section titled “What it connects”- Sends your conversions back to Google Ads (offline click conversions), with a test conversion to check it.
- Pulls your spend from its API.
- Lists placements to block, for you to export; nothing is sent.
- Pauses and resumes its campaigns, ad groups and ads.
- Sets bids on its ad groups.
- Sets daily budgets on its campaigns.
- Checks the connection with a harmless request when you test it.
How to connect it
Section titled “How to connect it”OAuth. The workspace’s owner connects the connection: Tallyray sends them to accounts.google.com to give consent to these scopes: https://www.googleapis.com/auth/datamanager, https://www.googleapis.com/auth/adwords. Tallyray refreshes the token. If the platform refuses a refresh for good, the connection shows as needing authorization, its deliveries wait, and its owner connects it again.
The OAuth client is the product’s own registration at the platform (google-ads), so you bring no client of your own.
Set these on the connection:
| Field | Name | Kind | What to enter |
|---|---|---|---|
| Customer id | customer_id | string, required | The Google Ads account the conversion actions are in, 10 digits without dashes |
| Manager account id | login_customer_id | string | When you reach the account through a manager account, its id, 10 digits without dashes |
| Conversion action id per event | conversion_actions | a list of name and value pairs, required | Each event name below to the id of a conversion action whose source is Import from clicks, with enhanced conversions for leads turned on to match by email and phone |
| Account time zone | account_time_zone | string | For spend, the account’s time zone, such as America/New_York, in Admin, Account settings; Google reports spend by its days |
| Account currency | account_currency | string | For bids and budgets, the account’s currency, such as USD, in Admin, Account settings |
Tracking macros
Section titled “Tracking macros”Each token is a query parameter on the campaign URL; the source replaces its macro with the value when it sends the visitor. The columns say which part of the visit it fills and which report column (v1 to v20) it lands in.
| Parameter | Macro | Fills | Report column |
|---|---|---|---|
gclid | added by the platform itself | The source’s click id | |
gbraid | added by the platform itself | The source’s click id | |
wbraid | added by the platform itself | The source’s click id | |
cmp | {campaignid} | Source campaign | v1 (Campaign) |
adg | {adgroupid} | Custom value | v2 (Ad group) |
ad | {creative} | Creative | v3 (Ad) |
kw | {keyword} | Keyword | v4 (Keyword) |
plc | {placement} | Placement | v5 (Placement) |
net | {network} | Site | v6 (Network) |
dev | {device} | Custom value | v7 (Device (Google)) |
The campaign URL you paste into the source is the tracking domain, the campaign’s key and the tokens the source fills, in this order (the domain below is an example, and {url_key} stands for the campaign’s own key):
https://trk.example.com/{url_key}?cmp={campaignid}&adg={adgroupid}&ad={creative}&kw={keyword}&plc={placement}&net={network}&dev={device}Cost models, the first the default: none (no cost), cpc (cost per click), cpa (cost per conversion), api (the spend pulled from the source’s API).
Preview the campaign URL
Section titled “Preview the campaign URL”Campaign URL
Paste the campaign URL into the source's ad. {url_key} stands for the campaign's own key, which the portal fills in; the macros are the source's, which it replaces with each visit's values.
How conversions get back to it
Section titled “How conversions get back to it”Tallyray sends a conversion to Google Ads (offline click conversions) when it enters one of these statuses: approved. A conversion is sent once per status it enters; an adjustment, with revenue moving and its status not, isn’t sent. A conversion older than 90d isn’t sent.
Tallyray’s event kinds, and the name each is sent as. A conversion of a kind not listed isn’t sent:
| Tallyray event | Sent to Google Ads (offline click conversions) as |
|---|---|
lead | lead |
registration | registration |
sale | purchase |
deposit | purchase |
The request: POST https://datamanager.googleapis.com/{…}/events:ingest (in batches, up to 2000 conversions each).
A conversion is sent only when this holds:
=visit.external_click_id != '' && visit.external_click_param in ['gclid', 'gbraid', 'wbraid'] || conv.user.em_google != '' || conv.user.ph_e164 != ''This template sends personal data, so it honors consent: for a visit from the EEA, the UK or Switzerland without ad_user_data granted, the conversion goes without anything personal, including the platform’s click id, and is not sent when nothing is left to match on. An explicit denial withholds the person’s hashed identifiers wherever the visit came from.
Test conversion. You can send one from the portal to check the connection. Google checks it as it would an upload and records nothing; a gclid from a recent click on your ad checks the most
Conversions are retried when the source can’t be reached or answers with an error that can pass; see the limits below.
Tallyray pulls spend from the source’s API every 3h, covering the last 3d again, as sources restate spend, 7d at most per request, by day, in the zone =conn.account_time_zone. With api among the cost models, a campaign is priced by it.
The request: POST https://googleads.googleapis.com/{…}/customers/{…}/googleAds:search.
Pulling spend needs the API’s credential. A connection without it goes on sending conversions and pulls no spend.
Placements
Section titled “Placements”Placements are the visit’s placement value, as the tokens above fill it.
This template has no block request: Tallyray keeps the blocks as a list you export into the source, and sends nothing.
Pausing and resuming
Section titled “Pausing and resuming”Rules and reports can pause and resume the source’s own objects at these levels. Tallyray reads an object before it writes, and writes only what isn’t so already, so a repeated pause never toggles anything.
| Level | Named by |
|---|---|
| campaigns | cmp |
| ad groups | adg |
| ads | adg + ad |
Rules and reports can set the source’s bids at these levels. Each value is read before it’s written, in the account’s currency, never converted; a value the source sets itself isn’t written.
| Level | Named by | Prices | Bounds | Notes |
|---|---|---|---|---|
| ad groups | adg | cpc, cpa | step minor |
Daily budgets
Section titled “Daily budgets”Rules and reports can set the source’s daily budgets at these levels, read before they’re written, in the account’s currency.
| Level | Named by | Prices | Bounds | Notes |
|---|---|---|---|---|
| campaigns | cmp | daily | step minor |
Limits
Section titled “Limits”- Rate: at most
5/sper connection, 2 at once. - Retries: up to 15 attempts, waiting from
1mand doubling up to6h, longer when the source’sRetry-Afterasks, and never past the conversion’s age limit. - Hosts it reaches:
datamanager.googleapis.com,googleads.googleapis.com,oauth2.googleapis.com,accounts.google.com. No other. - What a connection may override:
/conversions/events,/conversions/send_on,/tokens,/cost. Hosts, authentication and requests never are, and an override may only lower the limits.
This page describes version 8 of the Google Ads (offline click conversions) template, the latest published. The version your connection runs is the one your administrators approved, and the portal shows it.