- Install
- Site settings, Custom code, Head code, then publish
- Needs
- Webflow custom code, which requires an active Site plan or a qualifying Workspace plan
- Counts as a lead
- A form with an email field, recorded when it is submitted
- Click IDs
- gclid, gbraid and wbraid, kept for up to 30 days. Safari caps JavaScript cookies at seven days
- Lead ID
- A stable submission ID that SignalBridge turns into the order ID Google receives
- Conversion action
- Offline (import), category Submit lead form, count One
- Value
- None by default. Add one in Google Ads or with sb_track
- Not sent
- Whether a lead later became a customer
How a submission gets an identity
Google uses the order ID of an upload to recognise the same conversion if it arrives twice, for example after a retry. A purchase brings its own number. A form submission does not, so SignalBridge creates one. When the visitor submits, the script gives that submission a stable ID, or uses the lead, application or submission ID your form supplies. The server turns it into an opaque ID before it goes to Google, so no raw identifier is exposed in Google Ads.
This is why a retried upload does not count a lead twice, and why two real submissions an hour apart are not merged by accident: each has its own ID. The one exception is the hourly rule below, which stops a second Lead from the same browser from being sent at all.
In Google Ads, choose the counting setting One for this action. If a person clicks an ad once and submits two forms, Google then credits one lead for that click, which is the number you want when you judge cost per lead.
From ad click to uploaded lead
This is the path a lead takes, and the point on it where each kind of loss happens.
| Step | What happens | What can go wrong |
|---|---|---|
| The visitor lands from a Google ad | The script stores gclid, gbraid or wbraid from the URL in a first-party cookie and session storage | A redirect that drops the query string removes the click ID before the script sees it |
| The visitor browses and comes back | The stored click ID is kept for up to 30 days | Safari limits cookies written by JavaScript to seven days, so a lead that arrives after a longer gap loses it |
| The visitor submits a form | The email, phone and name are read from the form, the submission gets its ID and a Lead is sent | A form with no email field is not treated as a lead and nothing is sent |
| SignalBridge uploads it | The upload carries the action, time, click ID, the submission-based order ID and consent signals | Google accepts a brand-new action slowly, and SignalBridge retries temporary rejections automatically |
| The same browser submits again within the hour | The second Lead is dropped | A visitor who fills in two forms in one session counts once |
Which submissions upload
Google needs something to match a lead to. SignalBridge checks this for every submission.
| Situation | What happens |
|---|---|
| Arrived from a Google ad and the click ID is still stored | Uploaded with the click ID. The lead's hashed email and phone ride along only once consent has been explicitly granted. |
| No click ID, but a usable email or phone and consent granted | Uploaded using the hashed identifiers, so Google can match the lead to a signed-in user. |
| Organic, direct, referral or another ad network | Not uploaded, because there is nothing to match. |
| The visitor declined marketing cookies | Not uploaded. The click ID and identifiers are cleared. |
| Form inside an iframe, such as an embedded booking or survey tool | Not seen. The browser treats the iframe as a separate page. |
Value, GA4 and Webflow Ecommerce
A form has no price, so the Lead goes up without a value. In Google Ads you can leave the action without a value, or give it a default one that reflects what a lead is worth to you. If you need a different amount for a particular form, send the event yourself with sb_track and a value.
If a Google tag is on the page, SignalBridge also calls it in the browser with an event named Lead. GA4 lists that as a custom event. By itself it does not create a Google Ads conversion. If you import GA4 key events into Google Ads, do not also import this one as a goal, or the lead will be counted by both routes.
On a Webflow Ecommerce store the order confirmation page, /order-confirmation, is recognised and the purchase is uploaded to Google Ads as well, as long as you map Purchase to an offline action of its own. The value is copied from the Meta Pixel call that Webflow makes, or from the Google tag when there is no Meta Pixel. A page that runs both a Meta Pixel and a TikTok Pixel sends each pixel's events only to its own platform, so no Google Ads upload is created from them.
Set it up
You need permission to edit Site settings and publish the site, and admin access to the Google Ads account.
Add the snippet and publish
Copy the Webflow snippet from your pixel in SignalBridge, paste it into Site settings, Custom code, Head code, save, and publish to every domain you serve the site from. Custom code shows in preview, but only goes live once you publish.
Check that auto-tagging is on
In Google Ads, under account settings, confirm that auto-tagging is enabled. Without it the landing page URL carries no gclid.
Create an offline lead action
In Goals, create a conversion action that imports data and tracks conversions from clicks. Choose the Submit lead form category, count One, and either no value or a default value.
Connect Google Ads in SignalBridge
Open the pixel's settings, choose Google Ads, sign in with the Google account that has access and select the account, adding the manager ID if you reach it through a manager account.
Map Lead to the action
Select the Lead event and enter the Conversion Action ID, which is the number after ctId= in the address when the action is open in Google Ads. Map Purchase to a separate offline action if you sell on Webflow.
Accept the customer data terms if asked
If Google reports that the enhanced conversions customer data terms are not accepted, accept them in the Google Ads account and retry the failed deliveries.
Wire your cookie banner
Call sb_consent(true) when a visitor accepts marketing cookies and sb_consent(false) when they refuse. Webflow's own banner recipe only talks to Meta, so this call has to be added. Set window.SB_REQUIRE_MARKETING_CONSENT = true above the snippet if a choice must come first.
Test with a real ad click
Click one of your own ads
In a browser that accepts marketing cookies, click a live ad and confirm that the landing URL contains a gclid.
Submit a form with a test email
On that same visit, fill in a form that has an email field and submit it. In the SignalBridge event stream a Lead should appear with a Google click ID and Google Ads as a delivered destination.
Submit again
Submit another form straight away. No second Lead should be sent within the hour, which confirms the dedupe is working.
Read the action in Google Ads
Open the conversion action and read its status and diagnostics. Uploads take several hours to show, and the first upload to a new action can take longer.
Problems that are specific to Webflow
Google Ads shows far fewer leads than the Webflow form list
Only leads that came from a Google ad click, or carry a consented email or phone, are uploaded. Forms without an email field, a second form within the hour and iframe forms are not sent.
A lead is uploaded, but Webflow shows no entry
The Lead is recorded when the visitor submits, before Webflow accepts the entry. A failed spam check or a rejected submission can therefore leave an upload behind.
Leads from iPhones disappear after a week
Safari caps the cookie holding the click ID at seven days. Those leads can still upload by hashed email or phone when consent was granted.
The action never receives anything
Check that you published after saving the head code, that the form was submitted on a page where the script loaded and that the click ID was present on the landing URL.
Google rejects uploads as an invalid action type
The Lead event is mapped to a website action. Create an offline (import) action and map that.
Embedded forms are not tracked
A form in an iframe is a separate page to the browser. Call sb_track from the embed's success callback instead.
What this does not do
- It reports the submission, not whether the lead became a customer. Later outcomes need a separate import in Google Ads, keyed by the click ID.
- There is no order feed from Webflow, so refunds, cancellations and orders created in the dashboard are not sent.
- Webflow notes that on an Ecommerce site, scripts you add are outside its control and can create PCI DSS obligations of your own.
- Webflow support does not help with custom code, so a script conflict is for you or your developer to resolve.
- Google decides attribution, so its counts will never match your form list exactly.
Questions about this setup
Do I need a Google tag on my Webflow site?
Not for these uploads. A Google tag is still useful for GA4 and remarketing, so keep it if you use them.
Does it work if my form redirects to a thank-you page?
Yes. The Lead is sent when the form is submitted, before the redirect, so it does not depend on the thank-you page loading.
Why does Google count one lead when two people submitted?
It counts one per ad click when the action is set to One. Two visitors would have two clicks and two conversions, and one visitor who submits twice has one.
Can I give leads a value?
Yes. Set a default value on the action in Google Ads, or send the event yourself with sb_track and the value you want.
Does it work with Performance Max and Search campaigns?
The upload does not depend on the campaign type. It depends on the lead carrying a Google click ID or a consented email or phone number.
Do I need a paid Webflow plan?
Yes. According to Webflow, custom code is available with an active Site plan or with a Core, Growth, Agency or Freelancer Workspace.
Sources
The vendor documents this guide relies on. Statements about SignalBridge come from the product itself.
- Google Ads API: Upload click conversionsClick ID requirements for imports and how the order ID is used.
- Google Ads Help: Use a transaction ID to minimize duplicate conversionsHow an order ID stops the same conversion being counted twice.
- Webflow Help Center: Custom code in head and body tagsPlan requirements, where head code runs, publishing and the PCI note for Ecommerce sites.