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.
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
When your CRM marks a deal as won, it sends the deal to ClickRuntime straight away.
ClickRuntime reads the Google Ads click the deal came from, the deal value and when it closed.
It records the sale in Google Ads as a conversion with that value, so your campaigns get credit for real revenue.
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
Build your own
Need it to work differently?
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
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?
How long after the click can I upload the conversion?
Can I send the deal amount as conversion value?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get last week's results per campaign
Every Monday you see spend, clicks, conversions and cost per conversion for each campaign.
See how it worksCatch campaigns that overspend
You get an email when a campaign spent far more yesterday than it usually does.
See how it worksFind keywords spending with no conversions
Each week you get the keywords that cost money for a month without converting, and can have them paused.
See how it worksKeep exploring
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.