Import offline store purchase conversions into Google Ads via the OfflineUserDataJobService
domain: developers.google.com/google-ads/api · 6 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
Identify the Google Ads conversion action configured for STORE_PURCHASES or UPLOAD_CLICKS type in the account and retrieve its resource name for use in the upload payload
Call OfflineUserDataJobService.CreateOfflineUserDataJob in Google Ads API v23 to create a new job of type STORE_SALES_UPLOAD_FIRST_PARTY or CLICK_CONVERSION_UPLOAD, receiving a job resource name
Prepare conversion records: for store sales, include hashed user identifiers (email, phone, address) and transaction amount; for click conversions, include gclid, conversion_date_time, and conversion_value
Call OfflineUserDataJobService.AddOfflineUserDataJobOperations in batches of up to 100,000 records per RPC call, passing the job resource name and conversion data
Call OfflineUserDataJobService.RunOfflineUserDataJob to trigger processing; this is asynchronous — poll the job status via a GAQL query on the offline_user_data_job resource until status=SUCCESS or FAILED
Check job.failure_reason and operation-level error details on FAILED jobs; common failures include insufficient match rate or malformed identifiers
Known gotchas
Store sales uploads require a minimum number of matched transactions to clear Google's privacy threshold; uploads with fewer than the minimum matched records (typically around 1,000) are accepted but produce no reportable data
Conversion date_time must fall within the 90-day upload window relative to the current date; conversions older than 90 days are silently discarded without a job-level error
Hashed identifiers must use SHA-256 with the exact normalization Google specifies (lowercase, no leading/trailing spaces for email; E.164 for phone); using MD5 or incorrect normalization produces near-zero match rates
Give your agent this knowledge — and 15,600+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?