Google: add createConversionDestination (conversion-action creation) — parity with the existing LinkedIn endpoint

The Conversions API has createConversionDestination for LinkedIn — you can create the conversion rules a customer needs with one call, making conversion onboarding fully programmatic. Google has no equivalent, even though Google has the same requirement: sendConversions can only deliver into a pre-existing conversion action of type UPLOAD_CLICKS (Google: create conversion actions (https://developers.google.com/google-ads/api/docs/conversions/create-conversion-actions)), and ad accounts don't come with one.

Today that means every end customer must manually create conversion actions inside Google Ads (picking type, category, primary/secondary, counting) before anything sent via Zernio can land. For platforms building on Zernio, it's the one manual step left in an otherwise fully API-driven flow — LinkedIn proves how clean the automated version is.

Proposed endpoint

POST createConversionDestination on a googleads SocialAccount — same shape as the LinkedIn variant, backed by Google's ConversionActionService.MutateConversionActions. Minimal body:

┌────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Field │ Notes │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ name │ string; Google enforces per-account uniqueness │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ category │ Google's ConversionActionCategory enum (https://developers.google.com/google-ads/api/reference/rpc/v24/ConversionActionCategoryEnum.ConversionActionCategory) (e.g. PURCHASE, SUBSCRIBE_PAID, SIGNUP, IMPORTED_LEAD, BOOK_APPOINTMENT) │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ primaryForGoal │ boolean — must be settable and reliably honored. Google defaults it to true (field reference (https://developers.google.com/google-ads/api/fields/v24/conversion_action)), and a primary action immediately affects the advertiser's Smart Bidding │ │ │ (primary vs. secondary (https://support.google.com/google-ads/answer/11461796)). Tools need false (record-only) as the safe create state. │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ countingType │ MANY_PER_CLICK / ONE_PER_CLICK (counting guidance (https://support.google.com/google-ads/answer/3438531)) │ └────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

type is always UPLOAD_CLICKS (immutable at creation). Everything else — value settings, attribution windows — can stay at Google's defaults. Response: the created destination's id (conversion-action resource name), matching what listConversionDestinations already returns.

Two error passthroughs that make it integration-safe

  • DUPLICATE_NAME surfaced distinctly → callers can treat "already exists" as success and reuse (this is also what makes the endpoint naturally idempotent — Google enforces unique names server-side)

  • TOO_RECENT_CONVERSION_ACTION surfaced distinctly → Google rejects uploads for ~6 hours after an action is created; callers need to recognize it as retryable, not a hard failure (troubleshooting doc (https://developers.google.com/google-ads/api/docs/conversions/troubleshooting))

One implementation note

For accounts using cross-account (manager-level) conversion tracking, the action must be created in the conversion customer (customer.conversion_tracking_setting), not necessarily the connected account — same resolution the upload path already does.

Why it's broadly useful

Anyone using Zernio to send Google conversions hits this wall — the send side is fully programmatic, but the receiving object requires end-customer clicks inside Google Ads. This single endpoint closes the loop and brings Google to the same zero-touch onboarding the LinkedIn API already delivers.

Please authenticate to join the conversation.

Upvoters
Status

In Review

Board
💡

Feature Request

Date

3 days ago

Author

Dev

Subscribe to post

Get notified by email when there are changes.