Importing offline conversions into Google Ads so the platform tells Google which clicks actually turned into revenue.
Bring your stack to a call and we will connect it, test every field in both directions, and hand it over documented.
Book a callOn the Google side sits a Google Ads account with its campaigns, its conversion actions and its bidding strategies. The important object is the conversion action: a named thing Google counts, with a category, a counting rule, a click-through window and a value. Google's automated bidding optimizes toward whatever those conversion actions tell it, and it has no independent knowledge of your business. Alongside that sits the click identifier Google appends to ad landing-page URLs, which is the token that lets you tie a later event back to a specific click.
On the AppBO side sit the contact record, the opportunity pipeline, and the knowledge of what actually happened: who answered the phone, who turned up, who signed, how much they paid, and who turned out to be a time-waster. That knowledge is invisible to Google unless you send it.
The integration closes that loop. Without it, Google optimizes toward form fills, and will happily find you a large number of cheap form fills from people who never buy. With offline conversion import, you tell Google which clicks became qualified leads, booked appointments and closed sales, with the value attached, and the bidding strategy starts chasing revenue instead of volume. The mechanical requirement is simple and unforgiving: you must capture and store the click identifier at the moment of the first visit, because nothing can reconstruct it later.
Scenario: a commercial roofing company stops optimizing for form fills and starts optimizing for signed contracts.
The Google Ads API applies daily operation quotas that depend on your access level, and bulk uploads consume them quickly. A backfill of months of historical conversions is the operation most likely to exhaust the budget, so batch it and spread it. Google publishes current limits and access tiers in the Ads API documentation; read those figures there rather than planning against a remembered number, and expect errors that name the quota when you cross it.
There is no universal idempotency key on a conversion upload, and Google's own counting rule is what prevents a duplicate from inflating your numbers. A one-per-click rule will absorb a repeat, an every-conversion rule will not. That makes the counting rule a safety setting, not just a reporting one. On your side, guard each send with a tag or a field so a replayed workflow cannot upload twice, and never re-run a failed batch without checking what was accepted. Reporting lags by up to a day or more, so a conversion that is missing an hour after upload is not yet evidence of a problem.
The conversion action name must match exactly, and a renamed action in Google Ads breaks the mapping without any platform-side error. Conversion time must be the time the conversion actually happened, not the time of the upload, and it must fall after the click and inside the window. Currency must be stated and must match what you believe you are sending. Value fields pulled from an opportunity will be blank when nobody filled them in, and a blank value sent to a value-based strategy teaches it that the deal was worthless. Give every value field a sensible default and validate before sending.
Duplicate conversions come from two workflows triggering on overlapping conditions, from a pipeline stage that can be re-entered, and from a contact duplicated in the CRM so two records each carry the same click identifier and each send their own conversion. Deduplicate contacts before trusting the numbers, and make each conversion workflow idempotent per contact.
Google Ads has a test-account concept for API development, and it accepts uploads without affecting a live account: useful for proving the plumbing. It cannot show you how the bidding strategy will react, because that depends on real auction behavior and real volume. The practical compromise is to start with the conversion action as secondary and observed, confirm the data looks sane for a few weeks, and only then make it primary.
The connection depends on the Google account that authorized it retaining access to the Ads account. It breaks when that user is removed, when a manager-account link changes, when the password changes or the grant is revoked, and when an agency hand-over moves the account. The symptom is uploads silently failing while campaigns continue to spend, which is the expensive kind of failure. Check the conversion action's recent import activity on a schedule, not just the platform's connection badge.
We wire the integration, map the fields, test both directions and hand it over with the SOPs your team needs to run it.
Book a call