# Offline conversion import: send qualified leads and revenue back to Google Ads and Meta

Canonical URL: https://www.martechdevs.com/blog/offline-conversion-import

By [Jafrin Akter Alo](https://www.martechdevs.com/authors/jafrin-akter-alo)

Data Engineer and Co-founder, martechdevs

Published: 2025-09-01

Last updated: 2026-09-15

Offline conversion import sends later business outcomes, such as qualified leads and won deals, back to an advertising platform. Capture the permitted matching identifiers when the lead arrives, preserve them through your CRM and upload the actual outcome with its time and value. The integration is complete only when delivery, attribution eligibility and bidding configuration have all been verified.

A form fill tells Google that someone submitted a form. It does not tell Google whether the lead was spam, qualified for your service or became a $20,000 customer.

When the CRM contains that distinction but the advertising account does not receive it, optimisation can favour cheap submissions over valuable outcomes. The solution starts with a precise definition of the CRM event and a reliable connection to the original lead.

## The 2026 API change to account for

For a new custom Google Ads offline-conversion integration, use the Data Manager API. Google's June 15, 2026 restriction blocks the older `UploadClickConversions` route for integrations whose developer token had no qualifying offline upload requests between December 17, 2025 and June 15, 2026. The documented error is `CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE`.

The current deprecation page notes that developer tokens have since been replaced by Google Cloud projects, while the historical restriction remains. This is more specific than saying every existing integration stopped working on June 15. [Google Ads API deprecations](https://developers.google.com/google-ads/api/docs/deprecations).

Distinguish **Data Manager**, the interface and connectors in Google Ads, from the **Data Manager API**, the programmatic ingestion service. A native connector can be appropriate without your team writing API code. [Data Manager API overview](https://developers.google.com/data-manager/api/devguides).

[Martechdevs' analytics and tracking work](https://www.martechdevs.com/analytics-tracking) connects campaign identifiers, CRM outcomes and platform diagnostics. When the stage or revenue model also needs repair, the work extends into [CRM lifecycle implementation](https://www.martechdevs.com/crm-lifecycle).

## Step 1: choose an outcome that represents commercial progress

Define a small sequence of events, for example:

- Valid lead: a submission passes your validation and spam checks.
- Qualified lead: the record meets explicit fit and intent criteria.
- Opportunity created: sales accepts a defined potential deal.
- Won deal or paid customer: the agreed commercial event occurs.

Each event needs an owner and an observable trigger. “Sales thinks this looks good” is difficult to implement consistently. “The lead meets these three criteria and the qualification timestamp is set” is much easier to audit.

Keep contact, account and deal counts separate. Five contacts associated with one opportunity do not automatically represent five won deals. If the conversion unit is a deal, create one event per relevant deal transition.

For a long sales cycle, a reliable intermediate outcome can provide earlier feedback. Its value should reflect the business model and should be labelled as an estimate when it is one.

### A worked value example

Suppose a fictional company closes 20% of qualified opportunities, with an average contribution of $2,000 per won deal. An illustrative expected contribution per qualified opportunity is $400.

That calculation is useful only if the cohort, time horizon and economics are appropriate. Different products or markets may have different close rates. Update the estimate from mature cohorts rather than assigning every form fill the same impressive-looking value.

If both the estimated opportunity value and the final sale are included in bidding goals, decide how their values should interact. Adding $400 and $2,000 as though both are new revenue can distort optimisation and reporting.

## Step 2: preserve the identifiers at lead creation

Capture advertising identifiers where they are present and permitted. Keep Google identifiers in their own fields: `gclid`, `gbraid` and `wbraid` are distinct values. Do not lowercase them, move one into another's field or invent one when it is missing.

The Data Manager API's `adIdentifiers` schema supports these identifiers, with different descriptions for GCLID and the iOS-related braid fields. The exact route must support the fields you intend to send. [Event ingestion reference](https://developers.google.com/data-manager/api/reference/rest/v1/events/ingest).

Also preserve the internal lead ID, creation time, relevant landing context and permission state. Enhanced conversions for leads can use appropriate first-party customer data to supplement matching. That data needs the destination's normalisation and hashing rules. [Data formatting requirements](https://developers.google.com/data-manager/api/devguides/concepts/formatting).

Avoid one mutable CRM field that means “whichever click ID we saw most recently.” A person may submit multiple forms or engage with several campaigns. Keep acquisition records or event-level history so a later update does not silently rewrite the origin of an earlier opportunity.

Test the path through redirects, embedded forms and cross-domain booking tools. A parameter visible on the first landing page is not enough if it never reaches the saved CRM record.

## Step 3: create a durable outcome ledger

Use a record that describes each logical conversion independently from delivery attempts. At minimum, retain:

```text
logical_event_id
business_record_id
outcome_type
outcome_occurred_at
conversion_value
currency
matching_identifiers_reference
permission_state_reference
destination_account
destination_conversion_action
payload_version
delivery_status
request_id
last_attempt_at
```

This is an internal schema template, not a vendor upload-file format. It keeps the business event stable while allowing destination-specific payloads.

For example, `deal_824_won_v1` could identify a particular won-deal transition. Retrying its delivery should not create `deal_824_won_v2` unless a new logical event is intended. A correction to its value needs the supported adjustment mechanism and a clear audit trail.

Do not use the upload time as the conversion time. A deal won on Monday and uploaded on Tuesday still happened on Monday. Keep a separate timestamp for each attempt.

![Permitted ad identifiers connect leads to timed CRM outcomes in a ledger, which sends validated Google and Meta payloads and uses platform diagnostics for reconciliation and recovery.](https://www.martechdevs.com/assets/blog/offline-conversion-import.svg)

## Step 4: select the integration route

### HubSpot's native conversion events

HubSpot supports syncing lifecycle-stage changes to Google Ads under eligible Marketing Hub subscriptions. Its documented requirements include a GCLID or shared contact data, and it counts lifecycle changes after the event is created. Configure the network, account, stage, value, data-sharing choices and optimisation setting in Marketing > Ads. [HubSpot Google conversion events](https://knowledge.hubspot.com/ads/create-and-sync-ad-conversion-events-with-your-google-ads-account?tp=1).

Inspect the value option carefully. HubSpot documents that “Use the Deal amount” uses the weighted amount of the most recent associated deal, with a fallback value for invalid or missing cases. That may differ from your intended definition of collected revenue.

A native lifecycle event is not automatically a complete deal-revenue integration. If one contact has several opportunities, or several contacts share a deal, test the associations and event count against your business definition.

### Salesforce through Google Ads Data Manager

Google's current Salesforce integration supports post-lead outcomes and scheduled imports using eligible identifiers. The legacy Salesforce integration ended support on May 31, 2025, so use the current Data Manager workflow. [Salesforce integration guidance](https://support.google.com/google-ads/answer/13548778?hl=en).

Plan access to the relevant objects and fields, including the history needed to establish when a stage changed. A current opportunity stage by itself does not prove the exact time of an earlier transition.

Google also documents that the Data Manager Salesforce connection does not import Salesforce sandbox environments. Account for that in the testing plan instead of promising a sandbox connection the product does not support. [Salesforce connector requirements](https://support.google.com/google-ads/answer/14006189?hl=en).

### A warehouse or custom API pipeline

Use a custom route when the outcome requires joins across CRM, billing and product data, or when native connector semantics do not match the business event.

For the Data Manager API, enable the service in the intended Google Cloud project, configure supported authentication and grant access to the destination account. An API key alone is not the supported authentication route. [API access setup](https://developers.google.com/data-manager/api/devguides/quickstart/set-up-access).

The warehouse can calculate the business event, but the delivery worker still needs validation, stable identities, diagnostics and recovery. The [warehouse design guide](https://www.martechdevs.com/blog/data-warehouse-design) explains the source models underneath that process.

## Step 5: map the Google destination and event

For the documented offline-conversion route, the destination identifies the Google Ads account owning the conversion action and the action ID. The conversion action uses the `UPLOAD_CLICKS` type. The event includes its actual timestamp and event source, with appropriate identifiers; value, currency and transaction ID should be mapped deliberately. [Sending offline events](https://developers.google.com/data-manager/api/devguides/events/google-ads/offline/send-events).

Prefer a stable `transactionId` even where the API treats it as optional. It gives the integration an explicit event identity and supports the documented handling of matched records.

Keep currency amounts in the units expected by the destination. If the CRM stores $250 as 25,000 cents, convert it deliberately before upload. A technically accepted value can still be financially wrong.

Map the real consent state using the current schema. A copied example containing `CONSENT_GRANTED` is not evidence that the contact granted the required permission.

Validate a representative payload with `validateOnly: true` before ingestion. That checks initial structural requirements; it does not prove that an outcome will later match an eligible advertising interaction.

## Step 6: handle errors at both stages

The Data Manager API uses a fast-fail model for structural or required-field validation. One invalid record can reject the entire request. Optional-field problems may instead produce warnings, and further validation occurs asynchronously. [Understanding API errors](https://developers.google.com/data-manager/api/devguides/concepts/understand-errors).

Build two checks into the worker:

1. Inspect the immediate response, including field warnings. Keep rejected requests recoverable and fix invalid records before resending.
2. Save the returned request ID and retrieve destination diagnostics. Follow processing until it reaches a final success, partial-success or failure state. Google recommends an initial wait and backoff rather than continuous polling. [Request diagnostics](https://developers.google.com/data-manager/api/devguides/diagnostics).

For permission errors, verify both account ownership and the login path used by the integration. Having direct access to a child Ads account does not necessarily satisfy a request that specifies an inaccessible manager account.

For “conversion before click,” inspect time zones, event timestamps and the relationship between records. Correct the underlying data; do not move the conversion date forward simply to suppress the error.

For unmatched clicks, separate expected non-Google outcomes from a regression in a known eligible cohort. Google's troubleshooting guidance notes that enhanced-conversion uploads can include outcomes from other channels, so not every uploaded event is expected to become Google-attributed. [Offline import troubleshooting](https://support.google.com/google-ads/answer/13321563?hl=en).

## Step 7: respect all three time windows

There are three different clocks to check:

- The conversion action's attribution window.
- The destination's maximum supported upload or identifier age.
- The connector's extraction or backfill window.

Google's import guidelines describe a 90-day limit from the associated last click for standard offline imports and 63 days for enhanced-conversion lead uploads. Your selected workflow and conversion window still determine actual eligibility. [Offline import timing guidelines](https://support.google.com/google-ads/answer/15081888?hl=en).

Connector extraction is a separate limitation. Google documents different historical retrieval behaviour for file sources, CRM connectors and database sources. For example, its HubSpot and Salesforce Data Manager flows initially retrieve recent data and then follow changes between successful runs. Verify the current source-specific window before promising a historical backfill. [GCLID import setup and source windows](https://support.google.com/google-ads/answer/7012522?hl=en-419).

Upload promptly and at least daily where the workflow supports it. For a sales cycle longer than the supported attribution period, send a legitimate earlier qualification event if useful. Keep the final sale in business reporting even when it cannot receive platform credit.

## Step 8: send the Meta equivalent as its own integration

Meta uses Conversions API for the relevant event delivery. Its payload, matching identifiers, action sources and deduplication rules differ from Google's. Build a separate mapping from the same internal outcome ledger.

HubSpot can send Meta lifecycle-stage and form events, with documented eligibility and configuration limits. Verify the campaign's supported lead-optimisation workflow as well as the event sync. [HubSpot Meta conversion events](https://knowledge.hubspot.com/ads/create-and-sync-ad-conversion-events-with-your-meta-ads-accounts-using-metas-conversion-api).

For a custom route, the [Meta CAPI setup guide](https://www.martechdevs.com/blog/meta-conversions-api-setup) covers the event identity, real click identifiers and browser/server overlap. Do not label a later CRM outcome as the original form submission or overwrite its occurrence time to fit a window.

## Prove the integration before changing bidding

Reconcile a completed cohort from the CRM to the outcome ledger, the upload results and the platform diagnostics. Report distinct counts for eligible business outcomes, attempted deliveries, accepted records and attributed conversions.

Then review the campaign goals. A form submission, qualified lead and won deal can all remain visible, but their inclusion in bidding needs an intentional strategy. Secondary actions included in custom goals can still affect Google bidding, so inspect campaign configuration rather than relying on the secondary label alone.

The [Ads-versus-GA4 guide](https://www.martechdevs.com/blog/google-ads-vs-ga4-conversions) explains the reporting-date and attribution differences. Use actual business revenue for the company total and label platform-attributed value separately.

## Implementation checklist

- [ ] Outcome definitions specify contact, account or deal as the counting unit.
- [ ] Genuine identifiers survive lead creation and CRM updates.
- [ ] Event time, upload time and stage history remain separate.
- [ ] Value, currency and fallback behaviour match the business definition.
- [ ] Consent and sharing rules are enforced before delivery.
- [ ] Each destination receives the correct action and account IDs.
- [ ] Validation failures and asynchronous diagnostics are monitored.
- [ ] Retries and adjustments preserve event identity.
- [ ] Backfills fit both connector and platform windows.
- [ ] Bidding goals are reviewed after measurement quality is established.

At Martechdevs, we implement tracking from the customer action through the records used in reporting and optimisation. Start with the [free martech AI audit](https://www.martechdevs.com/martech-ai-audit), or explore an [AI assistant built around your approved workflows](https://www.martechdevs.com/custom-martech-ai-agent).

## Frequently asked questions

### Can I send HubSpot deals directly to Google Ads?

You can use native conversion features when their lifecycle and value semantics fit, or build a pipeline around the actual deal outcome. Inspect associations and the documented deal-value calculation. “Deal connected to contact” does not by itself define a unique revenue event.

### Do I need GCLID for every conversion?

No. Supported enhanced-conversion workflows can use appropriate first-party identifiers, and current APIs support additional matching fields. Capture genuine available identifiers and verify support in your selected connector. Do not substitute one identifier type for another.

### How often should I upload?

As soon as the outcome is reliably known, with a consistent schedule and recovery for failures. Daily uploads are a useful minimum operating target for many CRM workflows. Waiting until month-end can weaken feedback and place older outcomes outside supported windows.

### Is an accepted upload the same as an attributed conversion?

No. Acceptance confirms only part of the processing path. Matching, eligibility, attribution and the selected reporting column determine what appears in advertising reports. Preserve the diagnostics needed to explain the difference.

### Can I correct a conversion value later?

Use the supported adjustment workflow for the destination and conversion type. Data Manager API documents matching by transaction ID within the same action and restating value. Keep the required identifiers, because a request still undergoes validation and an unmatched ID may create a new event. [Conversion adjustments](https://developers.google.com/data-manager/api/devguides/events/google-ads/conversion-adjustments).

## Sources

1. [Google Ads API deprecations](https://developers.google.com/google-ads/api/docs/deprecations). Accessed 15 September 2026.

2. [Data Manager API overview](https://developers.google.com/data-manager/api/devguides). Accessed 15 September 2026.

3. [Event ingestion reference](https://developers.google.com/data-manager/api/reference/rest/v1/events/ingest). Accessed 15 September 2026.

4. [Data formatting requirements](https://developers.google.com/data-manager/api/devguides/concepts/formatting). Accessed 15 September 2026.

5. [HubSpot Google conversion events](https://knowledge.hubspot.com/ads/create-and-sync-ad-conversion-events-with-your-google-ads-account?tp=1). Accessed 15 September 2026.

6. [Salesforce integration setup](https://support.google.com/google-ads/answer/13548778?hl=en). Accessed 15 September 2026.

7. [Salesforce connector requirements](https://support.google.com/google-ads/answer/14006189?hl=en). Accessed 15 September 2026.

8. [Data Manager API access](https://developers.google.com/data-manager/api/devguides/quickstart/set-up-access). Accessed 15 September 2026.

9. [Sending offline events](https://developers.google.com/data-manager/api/devguides/events/google-ads/offline/send-events). Accessed 15 September 2026.

10. [API errors](https://developers.google.com/data-manager/api/devguides/concepts/understand-errors). Accessed 15 September 2026.

11. [Request diagnostics](https://developers.google.com/data-manager/api/devguides/diagnostics). Accessed 15 September 2026.

12. [Offline conversion troubleshooting](https://support.google.com/google-ads/answer/13321563?hl=en). Accessed 15 September 2026.

13. [Import timing guidelines](https://support.google.com/google-ads/answer/15081888?hl=en). Accessed 15 September 2026.

14. [Connector extraction windows](https://support.google.com/google-ads/answer/7012522?hl=en-419). Accessed 15 September 2026.

15. [HubSpot Meta conversion events](https://knowledge.hubspot.com/ads/create-and-sync-ad-conversion-events-with-your-meta-ads-accounts-using-metas-conversion-api). Accessed 15 September 2026.

16. [Conversion adjustments](https://developers.google.com/data-manager/api/devguides/events/google-ads/conversion-adjustments). Accessed 15 September 2026.
