Skip to content

The moment it happens

Send won deals to Google Ads as conversions

When your CRM marks a deal won, it is uploaded to Google Ads as a conversion with its value.

Runs
The moment it happens
Apps
Google Ads
AI
Not needed
Access
read+write

Send this to your assistant

Create a ClickRuntime automation: give me a link my CRM can post won deals to; upload each one with a gclid to Google Ads as a 'Closed deal' conversion with its value, and email me if an upload fails.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A solar installer gets leads from Google Ads, but the sale closes three weeks later in a CRM after a site visit and a quote. Google Ads only sees the form fill, so it optimizes toward cheap leads that never buy. The money goes to clicks that look good in the interface while the clicks that produced actual installations are never rewarded.

When the CRM marks a deal as won, it calls a ClickRuntime trigger link carrying the GCLID that was captured at the original click, the deal value and the time. ClickRuntime uploads that as an offline click conversion to Google Ads straight away. If the upload fails, you are emailed the reason.

It suits any business with a long sales cycle, where the real conversion happens off the website.

What you get out of it

  • Bidding learns from actual sales

    Smart bidding can only aim at what it can see. Feeding closed deals back lets it favor the keywords and audiences that produced revenue, not just the ones that filled in a form.

  • Real revenue per campaign

    With deal value attached, Google Ads reports return on ad spend based on closed business. You can finally compare a $15 cost per lead against a $9,000 install and decide where money should go.

  • Junk leads stop looking good

    Campaigns that bring lots of cheap but unqualified inquiries stop being rewarded. Over weeks the account shifts toward searches that lead to won deals, which cuts wasted spend. Money shifts toward keywords whose clickers actually sign contracts.

  • No weekly CSV uploads

    Many teams export won deals and upload a file to Google Ads by hand, which gets forgotten. Sending each conversion the moment it happens keeps the data complete and the timing accurate.

  • Failures are not silent

    A bad GCLID or an expired click would otherwise vanish. Because an email follows any upload error, someone can fix the CRM field mapping rather than losing conversions for weeks unnoticed.

How it works

What happens, step by step

  1. When your CRM marks a deal as won, it sends the deal to ClickRuntime straight away.

  2. ClickRuntime reads the Google Ads click the deal came from, the deal value and when it closed.

  3. It records the sale in Google Ads as a conversion with that value, so your campaigns get credit for real revenue.

  4. If Google Ads rejects it, for example because the click is too old, you get an email with the deal and the reason.

Before it runs live

  • Connect Google Ads
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Send won deals to Google Ads as conversionsjust nowSucceeded
Email · Google Ads conversion upload failedDeal 4821: The click associated with the given identifier is too old to be imported.

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Google Ads steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
offline_conversion_upload_from_a_trigger_link.pyexample
from clickruntime import on_event, credentials, http, notify, log

CUSTOMER_ID = "1234567890"
CONVERSION_ACTION = f"customers/{CUSTOMER_ID}/conversionActions/987654321"

@on_event
def handle(event):
    deal = event.json
    res = http.post(f"https://googleads.googleapis.com/v21/customers/{CUSTOMER_ID}:uploadClickConversions",
        headers={"Authorization": f"Bearer {credentials.connection('google', 'ads')}",
                 "developer-token": credentials.secret("GOOGLE_ADS_DEVELOPER_TOKEN")},
        json={"partialFailure": True, "conversions": [{
            "gclid": deal["gclid"], "conversionAction": CONVERSION_ACTION,
            "conversionDateTime": deal["won_at"],  # "2026-10-19 14:05:00+00:00"
            "conversionValue": float(deal["value"]), "currencyCode": deal.get("currency", "USD"),
        }]}).json()
    if "partialFailureError" in res:
        notify.email_me("Google Ads conversion upload failed", f"Deal {deal.get('id')}: {res['partialFailureError']['message']}")
        return {"uploaded": False}
    log.info("conversion uploaded", {"deal": deal.get("id")})
    return {"uploaded": True}

FAQ

Common questions

What is a GCLID and where do I get it?
The GCLID is the Google click ID added to your landing page URL when someone clicks an ad. Your site must capture it into a hidden form field so the CRM stores it with the lead. Without it, Google cannot match the sale to a click.
How long after the click can I upload the conversion?
Google accepts offline click conversions for a window of up to 90 days after the click, so most sales cycles fit. Uploading late is fine within that window, but the conversion time you send should be when the sale really happened.
Can I send the deal amount as conversion value?
Yes. The value and currency in the payload are sent with the upload, so Google Ads can report conversion value and return on ad spend. Make sure the conversion action in Google Ads is set up to use values, not a fixed one.
What permissions does it need?
read+write. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run for each event the app sends.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Send won deals to Google Ads as conversions” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.