# Converly Help
> Guides, walkthroughs, and troubleshooting for Converly.
Source: https://help.converly.io
---
# How Converly works with your cookie banner
URL: https://help.converly.io/cookie-consent/how-it-works-with-cookie-banners
Category: cookie-consent
Updated: 2026-09-23
Set up your cookie banner so Converly only tracks the visitors who accept marketing cookies.
A cookie banner is the pop-up that asks your website visitors whether they're happy to be tracked. Tools like Cookiebot, CookieYes and OneTrust show the banner, remember each visitor's answer, and stop tracking scripts from running until the visitor says yes.
Converly works with all the popular cookie banners. Once it's set up, visitors who accept marketing cookies are tracked as normal, and visitors who decline aren't tracked at all.
This article explains how that works. For step by step instructions, pick your cookie banner from the list below:
## Pick your cookie banner
- [Complianz](/cookie-consent/use-with-complianz)
- [Cookiebot](/cookie-consent/use-with-cookiebot)
- [CookieYes](/cookie-consent/use-with-cookieyes)
- [HubSpot](/cookie-consent/use-with-hubspot-cookie-banner)
- [iubenda](/cookie-consent/use-with-iubenda)
- [OneTrust](/cookie-consent/use-with-onetrust)
- [Osano](/cookie-consent/use-with-osano)
- [Real Cookie Banner](/cookie-consent/use-with-real-cookie-banner)
- [Squarespace](/cookie-consent/use-with-squarespace-cookie-banner)
- [Termly](/cookie-consent/use-with-termly)
- [Usercentrics](/cookie-consent/use-with-usercentrics)
- [Wix](/cookie-consent/use-with-wix-cookie-banner)
If you installed Converly through Google Tag Manager, follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead, whichever cookie banner you use.
These guides work on any website builder. So if your site is on Webflow, WordPress or anything else, simply follow the guide for the cookie banner you use.
If your cookie banner isn't listed, it almost certainly works the same way. Look in its settings for an option to block a script until a visitor accepts marketing (or advertising) cookies, and add Converly there. And if you get stuck, [get in touch](/contact) and we'll help you set it up.
## How it works
Converly is a marketing tool, so it belongs in your cookie banner's marketing (or advertising) category.
When a visitor first lands on your site, your cookie banner holds the Converly code back. Converly doesn't run, doesn't set any cookies and doesn't capture anything.
If the visitor accepts marketing cookies, your cookie banner switches Converly on straight away. Converly picks up the ad click that brought them to your site, and tracks their form fills and bookings as normal.
If the visitor declines, Converly never runs for them. Nothing is captured, nothing is sent to your ad platforms, and you won't see anything for that visitor in your conversion log.
## A few things worth knowing
- **It's all or nothing.** Converly switches on for visitors who accept marketing cookies and stays off for everyone else. That includes the conversions it sends to analytics tools like Google Analytics, so a visitor who accepts analytics cookies but declines marketing cookies isn't tracked in either.
- **The only slight oddity will be if someone accepts on a later page.** The details of the ad click (like Google's click ID) are in the web address of the first page a visitor lands on. If they browse to another page before answering the banner, Converly can't see that click any more. It still tracks their conversion and sends their scrambled contact details, which ad platforms use to match it back to them, but it can't attach the original click. Most visitors answer the banner on the first page, so this only affects a small number of conversions.
- **Changing their mind.** If a visitor withdraws their consent, Converly stops from the next page they load. No cookie banner can stop a script that is already running on the current page, so this is the same for every tracking tool.
- **Browser privacy settings still apply.** On top of your cookie banner, Converly honours Global Privacy Control, a privacy setting some visitors switch on in their browser. You can [read more about how Converly handles personal data here](/platform/personal-data).
Every guide ends with a quick test. Please don't skip it. If the cookie banner isn't holding Converly back properly, you'll track visitors who said no. If it's holding Converly back for everyone, you won't track anyone at all. The test takes 2 minutes and tells you which it is.
---
# Use Converly with Complianz
URL: https://help.converly.io/cookie-consent/use-with-complianz
Category: cookie-consent
Updated: 2026-09-23
Set up Complianz so Converly only tracks visitors who accept marketing cookies.
Complianz is one of the most popular cookie consent plugins for WordPress. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with Complianz, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all. Everything below works on the free version of Complianz.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Open the Script Center
The first step is to open the part of Complianz that controls which scripts it holds back. In your WordPress admin, go to **Complianz**, then **Integrations**, then **Script Center**.
You don't need to move your Converly code. Leave it wherever you pasted it (your theme's header code box or a header code plugin), and Complianz will find it there.
## Step 2: Tell Complianz to block Converly
The next step is to add Converly to the list of scripts Complianz blocks. In the **Block a script, iframe or plugin** section, add a new entry and fill it in like this:
- **Name:** Converly
- **URLs that should be blocked:** `js.converly.io`
- **Category:** Marketing
Leave the placeholder option switched off, since Converly doesn't show anything on the page. Then save your changes.
You might wonder why you need to do this if Complianz blocks scripts automatically. Complianz only blocks scripts from services it already knows about, and Converly isn't on its list yet. Adding it here takes care of that.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with Cookiebot
URL: https://help.converly.io/cookie-consent/use-with-cookiebot
Category: cookie-consent
Updated: 2026-09-23
Set up Cookiebot so Converly only tracks visitors who accept marketing cookies.
Cookiebot is one of the most popular cookie consent tools. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with Cookiebot, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Find your Converly code
The first step is to find where you pasted the Converly code on your website. For most sites this is the head code box in your website builder's settings, or a header code plugin if you're on WordPress. If you're not sure, the [install guides](/installing-converly/install-converly) show where it usually goes for each platform.
It should look something like this:
```html
```
## Step 2: Mark Converly as a marketing script
The next step is to tell Cookiebot that Converly is a marketing script. To do that, simply add 2 things to the start of the code, `type="text/plain"` and `data-cookieconsent="marketing"`, so it looks like this:
```html
```
The first part stops the browser from running Converly when the page loads. The second tells Cookiebot to switch it on as soon as the visitor accepts marketing cookies.
**Important:** Make sure NOT to change anything else in the code, especially the part after `key=`. That's the key that is unique to your site, and if it changes, Converly won't track anything.
Then save your changes and publish your site.
You might wonder why you need to do this if Cookiebot has automatic blocking. Cookiebot's automatic blocking only holds back scripts its scanner has found and you have categorised. Until then, a new script like Converly runs for everyone. Marking it in the code like this means it's held back from day 1, and it works on Cookiebot's free plan too.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with CookieYes
URL: https://help.converly.io/cookie-consent/use-with-cookieyes
Category: cookie-consent
Updated: 2026-09-23
Set up CookieYes so Converly only tracks visitors who accept advertisement cookies.
CookieYes is a popular cookie consent tool that works on any website, and has a WordPress plugin too. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with CookieYes, so visitors who accept advertisement cookies (CookieYes's name for marketing cookies) are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Open the Cookie Manager
The first step is to open the Cookie Manager, which is where you tell CookieYes which scripts to hold back.
- **If you use the CookieYes website**, log in and click **Cookie Manager** in the top menu.
- **If you use the WordPress plugin on its own**, go to **CookieYes**, then **Dashboard**, then **Cookie Manager**, and open the **Cookie List**.
You don't need to move your Converly code. Leave it wherever you pasted it.
## Step 2: Add Converly to the Advertisement category
The next step is to add Converly to CookieYes's Advertisement category. Open the **Advertisement** category and click **Add Cookie**. Then fill it in like this:
- **Cookie ID:** `_converly_gclid`
- **Domain:** your website's domain (for example `yourcompany.com`)
- **Duration:** 90 days
- **Description:** Converly conversion tracking. Records which ad a visitor clicked so conversions can be reported back to the ad platform.
- **Script URL Pattern:** `js.converly.io`
The Script URL Pattern is the important part. It's what tells CookieYes to hold back the Converly code until a visitor accepts advertisement cookies. The cookie details just describe one of the cookies Converly sets, so it shows up properly in your cookie policy.
Then click **Save Draft**, followed by **Publish changes**. Your changes don't go live until you publish them.
You might wonder why you need to do this if CookieYes blocks scripts automatically. Its automatic blocking is built around services it already recognises, and Converly isn't one of them yet. Adding it by hand makes sure it's held back.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with the HubSpot cookie banner
URL: https://help.converly.io/cookie-consent/use-with-hubspot-cookie-banner
Category: cookie-consent
Updated: 2026-09-23
Set up HubSpot's cookie banner so Converly only tracks visitors who accept advertisement cookies.
HubSpot has a free cookie banner you can show on your HubSpot pages, and on any other website that has the HubSpot tracking code installed.
Converly works with the HubSpot cookie banner, so visitors who accept advertisement cookies are tracked as normal and visitors who decline aren't tracked at all.
The only slight oddity is that HubSpot's banner can't hold back scripts you've added to the page yourself (HubSpot says so in its own documentation). So instead of the normal one-line Converly code, you paste a slightly longer version that asks HubSpot for the visitor's answer first. It sounds technical, but it's simply a copy and paste.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Make sure your HubSpot banner asks for consent
The first step is to check your HubSpot cookie banner is set up to ask visitors for permission. In HubSpot, go to **Settings**, then **Privacy & Consent**, then the **Cookies** tab, and make sure your banner is switched on for your website's domain. If your website isn't built on HubSpot, add it with **Add external domain**.
This only works on pages that also have the HubSpot tracking code installed, because that's what shows the banner.
## Step 2: Find your site key
Next, grab your Converly site key. In Converly, click **Settings** in the left sidebar, then open the **Install** tab. Your tracking code is shown in step 2, and your site key is the part after `key=` (it starts with `site_`). Copy it somewhere handy.
## Step 3: Replace your Converly code
The final change is to swap your normal Converly code for the version that waits for consent. Go to wherever you pasted your Converly code (your website's head code box, or the site header HTML in HubSpot), delete it, and paste this in its place:
```html
```
Replace `YOUR_SITE_KEY` with the site key you copied in Step 2, then save and publish your site.
**Important:** Make sure you delete the old Converly code. If it's still there, Converly will run for every visitor whether they accept cookies or not.
This code asks HubSpot for the visitor's answer as each page loads, and again the moment they make a choice, so Converly switches on straight away when they accept.
## Step 4: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with iubenda
URL: https://help.converly.io/cookie-consent/use-with-iubenda
Category: cookie-consent
Updated: 2026-09-23
Set up iubenda so Converly only tracks visitors who accept marketing cookies.
iubenda is a popular privacy and consent tool, especially in Europe. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with iubenda, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Find your Converly code
The first step is to find where you pasted the Converly code on your website. For most sites this is the head code box in your website builder's settings, or a header code plugin if you're on WordPress. It should look something like this:
```html
```
## Step 2: Mark Converly as a marketing script
The next step is to change the code so iubenda holds it back until the visitor accepts marketing cookies. iubenda needs 4 small changes:
- Add `type="text/plain"`
- Add `class="_iub_cs_activate"`
- Add `data-iub-purposes="5"` (5 is iubenda's number for marketing)
- Change `src=` to `data-suppressedsrc=`
When you're done, it should look like this:
```html
```
**Important:** Make sure NOT to change anything else in the code, especially the part after `key=`. That's the key that is unique to your site, and if it changes, Converly won't track anything.
Then save your changes and publish your site.
iubenda also has an automatic blocking option, but it only catches scripts it already knows about, and adding your own domains to it needs a paid plan. Changing the code like this works on any plan.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with OneTrust
URL: https://help.converly.io/cookie-consent/use-with-onetrust
Category: cookie-consent
Updated: 2026-09-23
Set up OneTrust so Converly only tracks visitors who accept targeting cookies.
OneTrust is a cookie consent tool used by a lot of larger businesses. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with OneTrust, so visitors who accept targeting cookies (OneTrust's name for marketing cookies) are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Find your targeting cookies ID
OneTrust gives each cookie category an ID. The first step is to find the ID of your **Targeting Cookies** category, because that's the one Converly belongs in.
In OneTrust, go to **Cookie Consent** in the menu, then select **Categorizations** and open the **Categories** tab. Each category is listed with its ID next to it. For most accounts the Targeting Cookies ID is **C0004**, but it can be different if your categories have been customised, so it's worth checking.
## Step 2: Mark Converly as a targeting script
The next step is to find where you pasted the Converly code on your website (usually your website builder's head code box, or a header code plugin on WordPress). It should look something like this:
```html
```
Simply add 2 things to the start of the code, `type="text/plain"` and `class="optanon-category-C0004"`, so it looks like this:
```html
```
If your Targeting Cookies ID from Step 1 isn't C0004, use your ID instead.
**Important:** Make sure NOT to change anything else in the code, especially the part after `key=`. That's the key that is unique to your site, and if it changes, Converly won't track anything.
Then save your changes and publish your site.
The only slight oddity to be aware of is that OneTrust's own code needs to load before Converly. OneTrust's setup instructions already ask you to put it at the very top of your site's head code, so if you followed them you're all set.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with Osano
URL: https://help.converly.io/cookie-consent/use-with-osano
Category: cookie-consent
Updated: 2026-09-23
Set up Osano so Converly only tracks visitors who accept marketing cookies.
Osano is a cookie consent tool that shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with Osano, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Open your script rules
The first step is to open the part of Osano that decides which category each script belongs to. In Osano, go to **Consent Manager**, open the **Scripts** tab, then the **Rules** tab.
You don't need to move your Converly code. Leave it wherever you pasted it.
## Step 2: Add a rule for Converly
The next step is to add a rule that puts Converly in the Marketing category. Click the purple **+** button and fill it in like this:
- **Rule type:** Path Match
- **URL:** `https://js.converly.io/`
- **Category:** Marketing
Then click **Save and Publish**. It can take up to 15 minutes for the change to go live on your site.
**Important:** Don't skip this step, even if Osano has already spotted Converly on your site. If your Osano setup is in its default "Permissive" mode, any script that hasn't been given a category is allowed to run for everyone, whether they accepted cookies or not.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly. If Converly still tracks the visitor who declined, wait 15 minutes for Osano to publish the change and try again.
---
# Use Converly with Real Cookie Banner
URL: https://help.converly.io/cookie-consent/use-with-real-cookie-banner
Category: cookie-consent
Updated: 2026-09-23
Set up Real Cookie Banner so Converly only tracks visitors who accept marketing cookies.
Real Cookie Banner is a popular cookie consent plugin for WordPress. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with Real Cookie Banner, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all. Everything below works on the free version of the plugin.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Add Converly as a service
Real Cookie Banner needs to know about Converly before it can block it, so the first step is to add Converly as a service.
In your WordPress admin, go to **Cookies**, open the **Services (Cookies)** tab and click **Create from scratch**. Fill it in like this:
- **Name:** Converly
- **Group:** Marketing
- **Provider:** Converly
- **Purpose:** Conversion tracking. Records which ad a visitor clicked and reports their form fills and bookings back to the ad platforms.
Leave the code fields empty, since your Converly code is already on your site. Then save the service.
## Step 2: Add a content blocker for Converly
The next step is to tell Real Cookie Banner to hold back the Converly code. Go to **Cookies**, open the **Content Blocker** tab, click **Add content blocker** and choose **Create from scratch**. Fill it in like this:
- **Name:** Converly
- **URLs to block:** `*js.converly.io*`
- **Connected service:** Converly (the service you created in Step 1)
Then save the content blocker. This leaves your Converly code exactly where it is and simply stops it from running until the visitor accepts marketing cookies.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with the Squarespace cookie banner
URL: https://help.converly.io/cookie-consent/use-with-squarespace-cookie-banner
Category: cookie-consent
Updated: 2026-09-23
Set up Squarespace's built-in cookie banner so Converly only tracks visitors who accept marketing cookies.
Squarespace has its own built-in cookie banner that asks your visitors whether they accept cookies.
Converly works with the Squarespace cookie banner, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all.
The only slight oddity is that Squarespace's banner doesn't hold back code you've added through Code Injection on its own. So instead of the normal one-line Converly code, you paste a slightly longer version that waits for the visitor's answer first. It sounds technical, but it's simply a copy and paste.
To set it up, follow the instructions below:
## Step 1: Set your cookie banner to opt in
The first step is to make sure your cookie banner actually asks visitors for permission. In Squarespace, open the **Cookies & Visitor Data** settings, switch on **Cookie banner**, and choose **Opt in & out**. This shows your visitors a button to accept and a button to decline.
## Step 2: Find your site key
Next, grab your Converly site key. In Converly, click **Settings** in the left sidebar, then open the **Install** tab. Your tracking code is shown in step 2, and your site key is the part after `key=` (it starts with `site_`). Copy it somewhere handy.
## Step 3: Replace your Converly code
The final change is to swap your normal Converly code for the version that waits for consent. From your Squarespace dashboard, open the **Website** menu, then go to **Website Tools**, then **Code Injection**.
In the **Header** box, find your existing Converly code and delete it. Then paste this in its place:
```html
```
Replace `YOUR_SITE_KEY` with the site key you copied in Step 2, then click **Save**.
**Important:** Make sure you delete the old Converly code. If it's still there, Converly will run for every visitor whether they accept cookies or not.
This code checks the visitor's answer as each page loads, and again the moment they click accept, so Converly switches on straight away when they say yes.
## Step 4: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with Termly
URL: https://help.converly.io/cookie-consent/use-with-termly
Category: cookie-consent
Updated: 2026-09-23
Set up Termly so Converly only tracks visitors who accept advertising cookies.
Termly is a popular consent tool for small businesses. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with Termly, so visitors who accept advertising cookies are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Find your Converly code
The first step is to find where you pasted the Converly code on your website. For most sites this is the head code box in your website builder's settings, or a header code plugin if you're on WordPress. It should look something like this:
```html
```
## Step 2: Mark Converly as an advertising script
The next step is to tell Termly that Converly is an advertising script. To do that, simply add 2 things to the start of the code, `type="text/plain"` and `data-categories="advertising"`, so it looks like this:
```html
```
**Important:** Make sure NOT to change anything else in the code, especially the part after `key=`. That's the key that is unique to your site, and if it changes, Converly won't track anything.
Then save your changes and publish your site.
You might wonder why you need to do this if Termly has an Auto Blocker. Termly doesn't recognise Converly yet, so its Auto Blocker files it as "Unclassified". Unclassified scripts only run for visitors who accept every category, which means visitors who accept advertising cookies but decline something else wouldn't be tracked. Marking Converly as advertising fixes that.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with Usercentrics
URL: https://help.converly.io/cookie-consent/use-with-usercentrics
Category: cookie-consent
Updated: 2026-09-23
Set up Usercentrics so Converly only tracks visitors who accept marketing cookies.
Usercentrics is a popular consent tool, particularly with European businesses. It shows your visitors a cookie banner and stops tracking scripts from running until they say yes.
Converly works with Usercentrics, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
Follow the [Google Tag Manager guide](/cookie-consent/use-with-google-tag-manager) instead. The steps below are for sites where the Converly code is pasted straight into the website.
## Step 1: Add Converly as a service in Usercentrics
Usercentrics works with services rather than individual scripts, so the first step is to add Converly as a service.
Log in to your Usercentrics admin and go to **Service Settings**. Create a new custom service (Usercentrics calls this a custom data processing service, or DPS), name it **Converly**, and put it in the **Marketing** category. Then save and publish your changes.
**Important:** Write down the exact name you gave it. You'll need it in the next step, and it has to match exactly, including capital letters.
## Step 2: Link your Converly code to that service
The next step is to find where you pasted the Converly code on your website (usually your website builder's head code box, or a header code plugin on WordPress). It should look something like this:
```html
```
Simply add 2 things to the start of the code, `type="text/plain"` and `data-usercentrics="Converly"`, so it looks like this:
```html
```
If you named the service something other than Converly in Step 1, use that name instead.
**Important:** Make sure NOT to change anything else in the code, especially the part after `key=`. That's the key that is unique to your site, and if it changes, Converly won't track anything.
Then save your changes and publish your site.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with the Wix cookie banner
URL: https://help.converly.io/cookie-consent/use-with-wix-cookie-banner
Category: cookie-consent
Updated: 2026-09-23
Set up Wix's built-in cookie banner so Converly only tracks visitors who accept marketing cookies.
Wix has its own built-in cookie banner, which shows your visitors a cookie banner and holds back tracking code until they say yes.
Converly works with the Wix cookie banner, so visitors who accept marketing cookies are tracked as normal and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
## Step 1: Turn on the Wix cookie banner
If your cookie banner is already showing on your site, you can skip straight to Step 2.
If not, the first step is to switch it on. In your Wix dashboard, go to **Settings**, then **Privacy & Cookies**. Click **Add to Site**, then **Agree & Add**, and switch on **Show banner**. The basic banner is free.
## Step 2: Set the Converly code to Marketing
By default, Wix treats any custom code as "Essential", which means it runs for every visitor whether they accept cookies or not. So the next step is to tell Wix that Converly is a marketing tool.
In your Wix dashboard, go to **Settings**, then **Custom Code**, and find the Converly code you added when you [installed Converly](/installing-converly/install-on-wix). Open it, click the **Code Type** tab, and choose **Marketing**. Then click **Apply**.
That's all you need to change. Wix now holds the Converly code back until a visitor accepts marketing cookies.
## Step 3: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Use Converly with your cookie banner in Google Tag Manager
URL: https://help.converly.io/cookie-consent/use-with-google-tag-manager
Category: cookie-consent
Updated: 2026-09-23
If you installed Converly through Google Tag Manager, set it to only fire once a visitor accepts marketing cookies.
If you installed Converly through Google Tag Manager, you set up consent in Tag Manager itself rather than in your website's code. This works whichever cookie banner you use.
Once it's set up, the Converly tag only fires for visitors who accept marketing cookies, and visitors who decline aren't tracked at all.
To set it up, follow the instructions below:
## Step 1: Make sure your cookie banner talks to Tag Manager
This only works if your cookie banner tells Tag Manager when a visitor accepts. Most popular cookie banners (Cookiebot, Complianz, OneTrust, Termly, Usercentrics and others) have a Google Tag Manager setup of their own, and each time a visitor accepts marketing cookies, they send Tag Manager a signal called an event.
If your cookie banner is already controlling other tags in Tag Manager (like your Google Ads or Meta tags), it's already set up and you can move on to Step 2. If not, follow your cookie banner's own Google Tag Manager setup instructions first.
## Step 2: Create a trigger for marketing consent
The next step is to create a trigger that fires when a visitor accepts marketing cookies. In Tag Manager, go to **Triggers** in the left menu and click **New**. Choose **Custom Event** as the trigger type, and enter the event name your cookie banner uses:
- **Cookiebot:** `cookie_consent_marketing`
- **Complianz:** `cmplz_event_marketing`
- **OneTrust:** `OneTrustGroupsUpdated`, then set the trigger to fire on **Some Custom Events** where the `OnetrustActiveGroups` variable matches the regular expression `,C0004,` (you'll need to create that variable first, as a Data Layer Variable)
- **Termly:** Termly provides a ready-made trigger called **Unblock Advertising Cookies** when you import its Tag Manager setup, so use that instead of creating your own
For any other cookie banner, its Google Tag Manager instructions will tell you the name of the event it sends when someone accepts marketing or advertising cookies.
Give the trigger a name you'll recognise, such as Marketing consent given, and save it.
## Step 3: Switch the Converly tag to that trigger
Now open your Converly tag (go to **Tags** and click on it). In the **Triggering** box, remove the **All Pages** trigger and add the marketing consent trigger you created in Step 2. Then click **Save**.
**Important:** Make sure you remove All Pages. If it's still there, the Converly tag will fire for every visitor whether they accept cookies or not.
## Step 4: Publish your container
Tag Manager changes don't go live until you publish them. Click **Submit** in the top right, make sure **Publish and Create Version** is selected, give the version a name such as Converly consent, then click **Publish**.
## Step 5: Test it works
That's it! The final step is to test it, and it only takes a couple of minutes.
First, open a new **incognito window** (or private window) and go to your website. When the cookie banner appears, decline marketing cookies. Then submit a test entry through one of your forms.
Now open the conversion log in Converly by clicking **Logs** in the left sidebar. The test entry should NOT appear there, because Converly never ran for that visitor.
Next, close that window, open another **new incognito window**, and go to your website again. This time accept marketing cookies (or click accept all), then submit another test entry. Head back to the conversion log, and this time the test conversion should show up within a moment.
If both of those happen, your cookie banner is holding Converly back properly.
---
# Welcome to Converly
URL: https://help.converly.io/getting-started/welcome
Category: getting-started
Updated: 2026-05-15
A quick overview of what Converly does and how to get started.
Converly sends conversions from your website to the ad platforms and analytics tools you already use. When someone fills out a form, books a meeting, or starts a chat on your site, Converly fires the right event in the right place automatically.
## What Converly does
Most marketing tools live in their own silo. Calendly knows when someone books a meeting, but your Google Ads account does not. Converly is the connective layer between them.
You connect your lead capture tools on one side, and your ad platforms and analytics tools on the other. When a lead is captured, Converly sends a conversion event everywhere it needs to go.
## Who Converly is for
Converly was built for small and medium marketing teams that:
- Run paid ads on Google, Meta, LinkedIn, Microsoft, or TikTok
- Capture leads through Calendly, Typeform, HubSpot, or a custom form
- Need accurate conversion data without a developer rewriting their tracking setup
If that sounds like you, the next step is the [quick start guide](/getting-started/quick-start).
## What you need
You will need:
1. A Converly account
2. Admin access to at least one ad platform or analytics tool you want to send conversions to
3. A way to capture leads on your website
That is it. There is no code to write.
---
# Quick start
URL: https://help.converly.io/getting-started/quick-start
Category: getting-started
Updated: 2026-10-07
Send your first conversion event in under 10 minutes.
This guide walks you through sending your first conversion event with Converly. Plan for about 10 minutes.
Make sure you have a Converly account and admin access to at least one ad platform. If you do not have an account yet, sign up at converly.io.
## What you will set up
By the end of this guide you will have:
1. Created a flow
2. Added your lead capture tool as its trigger (the source of conversions)
3. Added your ad platform as its action (the destination)
4. Published the flow and added Converly's tracking code to your website
5. Sent a test conversion
## Steps
Open Converly and click **Flows** in the left sidebar. On the **Conversion Flows** page, click **Create New Flow**, give the flow a name and click **Create Flow**.
If Converly doesn't know your website address yet, it asks for it first. Simply enter it and click **Next**. Converly only accepts conversions from this address.
Click **Add Trigger** and choose the tool you use to capture leads, like your website's form builder, Calendly or Typeform. If the tool needs connecting to Converly, you do it right here the first time.
Click the **+** button below the trigger to add an action and pick your ad platform. The first time, you connect your ad platform account here, so make sure you can log in to it. Then choose the conversion it should record.
Click **Publish Flow** in the top right. The first time you publish, Converly shows your tracking code (unless you installed Converly with one of our plugins). Simply copy it and add it to every page of your website. Our [install guides](/installing-converly/install-converly) show you how for each website builder.
Open a new **incognito window**, go to your website and submit your form. Then click **Logs** in Converly's left sidebar and check your test conversion is in your conversion log. Our guide to [testing that Converly is working](/testing-it-works/test-converly-is-working) walks you through it, including where to see it in each ad platform.
## What to do next
Once your first flow is live, browse [Setup Triggers](/setup-triggers) to connect more lead sources, or check out [Building a flow](/setup-destinations/building-a-workflow) to learn what else you can do.
If your test didn't show up, the [testing guide](/testing-it-works/test-converly-is-working) has a troubleshooting section that covers the most common reasons.
---
# Install Converly
URL: https://help.converly.io/installing-converly/install-converly
Category: installing-converly
Updated: 2026-09-24
Add the Converly code to your website so it can track form fills and bookings.
Before Converly can track anything, its code needs to be on your website. It is a single small script tag that goes in the `
` of every page. You only add it once, and it works for every conversion flow you build.
## Step 1: Copy your tracking code
In Converly, click **Settings** in the left sidebar, then open the **Install** tab.
The first thing on the tab is your website address. Converly only accepts conversions from this address, so check it matches your live website. If it doesn't, click **Edit** and fix it. If no address is there yet, type it in and click **Add website**, and your tracking code appears straight away.
Your tracking code is in step 2. It is unique to your site, so copy the exact code shown there. Simply click the **Copy Code** button next to it.
## Step 2: Add it to the head of every page
Paste the code into the `` section of your website, on every page. Most website builders have one place to add head code that applies to the whole site, so you usually only paste it once.
Under the code, the Install tab shows icons for popular platforms. Click one to open the step by step guide for that platform.
Using the Converly app for Webflow? The Install tab shows **Installed by the Webflow app** instead of the code, because the app adds it for you. All you need to do is publish your Webflow site.
If one of your flows uses a tool that needs its own code (Acuity Scheduling, for example), the Install tab shows an extra step with that code and tells you where to paste it.
## Pick your platform
These guides walk through where to paste the code on specific platforms:
- [WordPress](/installing-converly/install-on-wordpress)
- [Google Tag Manager](/installing-converly/install-on-google-tag-manager)
- [Webflow](/installing-converly/install-on-webflow)
- [Squarespace](/installing-converly/install-on-squarespace)
- [Wix](/installing-converly/install-on-wix)
- [Unbounce](/installing-converly/install-on-unbounce)
- [Drupal](/installing-converly/install-on-drupal)
- [Duda](/installing-converly/install-on-duda)
- [Leadpages](/installing-converly/install-on-leadpages)
- [Ghost](/installing-converly/install-on-ghost)
- [Instapage](/installing-converly/install-on-instapage)
- [ClickFunnels](/installing-converly/install-on-clickfunnels)
If your platform is not listed, the same rule applies. Paste the code in the `` of every page. Most website builders call this setting something like "custom code" or "header code".
## Using a cookie banner?
If your website shows visitors a cookie banner, there's one more quick step once Converly is installed. You set your cookie banner to hold Converly back until a visitor accepts marketing cookies, so Converly only tracks the visitors who say yes. We have [step by step guides for all the popular cookie banners here](/cookie-consent/how-it-works-with-cookie-banners).
Always copy the code from the **Install** tab in your own Converly settings. It contains a key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on WordPress
URL: https://help.converly.io/installing-converly/install-on-wordpress
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a WordPress site so it can track form fills and bookings.
WordPress is the most popular website platform in the world, powering a large share of business websites. It lets you add code to the head of your site in a few different ways, which is all Converly needs to track the forms on your pages. To install Converly on your WordPress website, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Add the code to your website
The next step is to add that code to your website. WordPress gives you a few ways to do this, so simply pick whichever suits you. Any one of them works, so you only need to follow one.
### Method 1: Your theme's built-in header code
Many WordPress themes and page builders include their own box for head code, which is the quickest option if your theme has one. For example, in Divi you go to **Divi → Theme Options → Integrations** and paste your code into the box labelled **Add code to the head of your blog**. Themes like Elementor, Avada, and Astra have a similar setting under their own options.
If you are not sure whether your theme has this, check its settings for anything mentioning header code, head, or integrations.
### Method 2: A header code plugin
If your theme does not have a head code box, the most reliable option is a free plugin that adds one. In your WordPress admin, go to **Plugins → Add New** and search for a header code plugin such as **WPCode** or **Insert Headers and Footers**. Install and activate it, then open its settings, find the **Header** box (sometimes labelled Scripts in Header), paste your Converly code into it, and save.
The code now loads on every page of your site automatically.
### Method 3: Google Tag Manager
If you already manage your tracking through Google Tag Manager, you can add Converly there instead and skip editing WordPress directly. Follow the [Google Tag Manager guide](/installing-converly/install-on-google-tag-manager) for the exact steps.
## Test it works
That's it! Converly is now installed on your WordPress site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Google Tag Manager
URL: https://help.converly.io/installing-converly/install-on-google-tag-manager
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a site through Google Tag Manager so it can track form fills and bookings.
Google Tag Manager is a free tool from Google that lets you manage tracking code on your website without editing the site directly. You add the Converly code once as a tag, and Tag Manager loads it on every page for you. To install Converly through Google Tag Manager, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Create a new tag
The next step is to create a new tag for Converly. Open your Google Tag Manager container, go to **Tags** in the left menu, and click **New**. Give the tag a name you will recognise later, such as Converly.
## Step 3: Choose Custom HTML and paste your code
Click the **Tag Configuration** box and choose **Custom HTML** from the list of tag types. Then paste your Converly code into the HTML box that appears.
## Step 4: Set it to fire on all pages
Next, click the **Triggering** box and choose **All Pages**. This makes the Converly code load on every page of your site, so it can track every form fill and booking. Once the tag configuration and trigger are both set, click **Save** in the top right.
## Step 5: Publish your container
Tag Manager changes do not go live until you publish them. Click **Submit** in the top right, make sure **Publish and Create Version** is selected, give the version a name such as Added Converly, then click **Publish**.
You can confirm it worked by checking that your Converly tag appears in the version summary.
## Test it works
That's it! Converly is now installed through Google Tag Manager. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Webflow
URL: https://help.converly.io/installing-converly/install-on-webflow
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a Webflow site so it can track form fills and bookings.
Webflow is a popular website builder that gives designers a lot of control over how their site looks. It has a built-in place to add head code that applies to your whole site, which is all Converly needs to track your forms. To install Converly on your Webflow site, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Open your Webflow site settings
The next step is to find where Webflow lets you add custom code. Open your project, go to **Site Settings**, and select the **Custom Code** tab at the top.
## Step 3: Paste your code in the head and save
In the **Head Code** box, paste the code from your Converly account, then click **Save Changes**.
Webflow only applies custom code on the published site, so click **Publish** afterwards to push the change live.
## Test it works
That's it! Converly is now installed on your Webflow site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Squarespace
URL: https://help.converly.io/installing-converly/install-on-squarespace
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a Squarespace site so it can track form fills and bookings.
Squarespace is a popular all-in-one website builder known for its design templates. It has a site-wide code injection area, so you only add the Converly code once and it loads on every page. To install Converly on your Squarespace site, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Open Code Injection in your settings
The next step is to open Squarespace's code injection area. From your Squarespace dashboard, open the **Website** menu, then go to **Website Tools**, then **Code Injection**.
## Step 3: Paste your code in the Header and save
In the **Header** box, paste the code from your Converly account, then click **Save**.
Putting it in the Header means it loads on every page, so Converly is ready to capture a conversion the moment a visitor submits a form.
## Test it works
That's it! Converly is now installed on your Squarespace site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Wix
URL: https://help.converly.io/installing-converly/install-on-wix
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a Wix site so it can track form fills and bookings.
Wix is a popular website building tool that makes it easy for anyone to create a marketing website for their business. Wix lets you add custom code that loads on every page, which is all Converly needs to track the forms and bookings on your site. To install Converly on your Wix website, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Go to the Custom Code section of your Wix settings
The next step is to find where Wix lets you add custom code. From the dashboard of your Wix account, select **Settings** in the left-hand menu, then select **Custom Code** under the Advanced section.
## Step 3: Add a new custom code snippet
Once you are in the Custom Code section, simply click the **Add Custom Code** button in the top right.
## Step 4: Paste your Converly code
In the dialog box that appears, paste the code from your Converly account into the box labelled **Paste the code snippet here**. Give it a name you will recognise later, such as Converly, set **Add Code to Pages** to **All pages**, and under **Place Code in** select **Head**.
Placing the code in the Head means it loads before the rest of the page, so Converly is ready to capture a conversion the moment a visitor submits a form.
## Step 5: Set the code type to Essential
Next, switch to the **Code Type** tab in the same dialog and make sure **Essential** is selected.
Setting it as Essential means the Converly code loads on every page for every visitor, so it can track every form fill and booking. If you do not set it as Essential, the code only loads for some visitors and you would end up missing conversions. Once both tabs are set, click **Apply**.
## Step 6: Check the code is enabled
Once you have added the code, you are taken back to the Custom Code section. Make sure the code is switched on by checking the toggle next to your Converly entry is enabled.
## Test it works
That's it! Converly is now installed on your Wix site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Unbounce
URL: https://help.converly.io/installing-converly/install-on-unbounce
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to your Unbounce landing pages so it can track form fills and bookings.
Unbounce is a popular landing page builder used by marketers to create high-converting campaign pages. It lets you add code either across all your pages or to a single page, so you can choose the approach that suits you. To install Converly on Unbounce, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Add the code to Unbounce
The next step is to add your code to Unbounce. There are two ways to do this. Use Option 1 if you want Converly on all of your pages, or Option 2 if you only want it on a single page.
### Option 1: Script Manager (all pages)
In your Unbounce dashboard, open the **Settings** menu in the left sidebar and select **Script Manager**.
Script Manager lists all your scripts. Click **Add a Script** to create a new one.
Choose **Custom Script** from the dropdown, give it a name such as Converly, then click **Add Script Details**.
Set **Placement** to **Head**, set **Included On** to **Main Landing Page**, paste your Converly code into the script box, and choose which domains it should run on. Save the script.
### Option 2: A single page
If you only want Converly on one page, open that page in the Unbounce builder and select **Javascripts** at the bottom of the editor. Click **Add Script to this Variant**, give it a name such as Converly, set **Placement** to **Head**, and paste your Converly code. Save and republish the page. Repeat for any other page you want Converly to track.
## Test it works
That's it! Converly is now installed on your Unbounce pages. To check it is working, open a new incognito window, go to one of your pages, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Drupal
URL: https://help.converly.io/installing-converly/install-on-drupal
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a Drupal site so it can track form fills and bookings.
Drupal is a flexible open-source platform used to build everything from small sites to large enterprise websites. There are a few ways to add code to the head of a Drupal site, which is all Converly needs to track your forms. To install Converly on Drupal, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Add the code to your site
The next step is to add that code to your Drupal site. There are a few ways to do this, so simply pick whichever suits you. You only need to follow one.
### Method 1: Your theme's template
If you are comfortable editing your theme, you can add the Converly code directly to the `` of your theme's `html.html.twig` template so it loads on every page. If you are not sure how to do this, your developer can add it for you in a couple of minutes.
### Method 2: The JS Injector module
If you would rather not edit theme files, the simplest option is a free module. Install and enable the **JS Injector** module (the similar **Asset Injector** module works the same way). Add a new code snippet containing your Converly code, set it to load site-wide in the page **head**, then save and clear the Drupal cache.
### Method 3: Google Tag Manager
If you already manage tracking through Google Tag Manager, you can add Converly there instead and skip editing Drupal directly. Follow the [Google Tag Manager guide](/installing-converly/install-on-google-tag-manager) for the exact steps.
## Test it works
That's it! Converly is now installed on your Drupal site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Duda
URL: https://help.converly.io/installing-converly/install-on-duda
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a Duda site so it can track form fills and bookings.
Duda is a website builder popular with agencies for building and managing client sites. It has a site-wide head HTML area, so you only add the Converly code once and it loads on every page. To install Converly on your Duda site, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Open your site settings
The next step is to find where Duda lets you add custom code. Open your site in the Duda editor and open the site settings from the left menu.
## Step 3: Paste your code in Head HTML and republish
In the settings menu, choose **Head HTML**. Paste the code from your Converly account into the **Head HTML** box, then save your changes and republish the site so the code goes live.
Duda also has an **End Body HTML** box. Make sure you paste the Converly code into **Head HTML**, not End Body HTML, so it loads early enough to track every conversion.
## Test it works
That's it! Converly is now installed on your Duda site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Leadpages
URL: https://help.converly.io/installing-converly/install-on-leadpages
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to your Leadpages pages so it can track form fills and bookings.
Leadpages is a landing page builder used by marketers to quickly create pages for their campaigns. It lets you add tracking code to each page, so you add the Converly code to every page you want tracked. To install Converly on Leadpages, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Open your landing page settings
The next step is to open the page you want to track. Open the landing page in the Leadpages editor, then click the **Settings** icon in the left menu and choose **Analytics**.
## Step 3: Paste your code in the Head Section Tracking Code
Paste the code from your Converly account into the **Head Section Tracking Code** box.
## Step 4: Publish or update the page
Click the button in the top right of the editor. Choose **Publish** for a new page, or **Update** for a page that is already live.
Repeat these steps for any other page you want Converly to track.
## Test it works
That's it! Converly is now installed on your Leadpages pages. To check it is working, open a new incognito window, go to one of your pages, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Ghost
URL: https://help.converly.io/installing-converly/install-on-ghost
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to a Ghost site so it can track form fills and bookings.
Ghost is a clean publishing platform popular with bloggers, newsletters, and content creators. It has a site-wide code injection area, so you only add the Converly code once and it loads on every page. To install Converly on your Ghost site, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Open Code Injection
The next step is to find where Ghost lets you add custom code. In your Ghost admin, click the **settings** cog in the bottom left, then select **Code injection**.
## Step 3: Paste your code in the Site Header and save
Paste the code from your Converly account into the **Site Header** box, then click **Save**.
## Test it works
That's it! Converly is now installed on your Ghost site. To check it is working, open a new incognito window, go to your website, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on Instapage
URL: https://help.converly.io/installing-converly/install-on-instapage
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to your Instapage pages so it can track form fills and bookings.
Instapage is a landing page builder built for marketing campaigns and ad traffic. You can add the Converly code to a single page, or across your whole workspace if you are on the Convert plan. To install Converly on Instapage, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Add the code to Instapage
The next step is to add your code to Instapage. There are two ways to do this. Use Method 1 to add it to a single page, or Method 2 to add it across your whole workspace at once.
### Method 1: A single landing page
From the left menu, go to **Landing Pages** and select the page you want to track.
In the panel that slides out, click **Scripts & Privacy**, make sure the **Head** tab is selected, and paste your Converly code into the box. Repeat for any other page you want Converly to track.
### Method 2: Your whole workspace (Convert plan)
If you are on the Instapage Convert plan, you can add Converly once for every page in your workspace. From the left menu, select **Assets**, then **Scripts**. Choose how you want the script applied: to all current and future pages automatically, or available for each page to switch on individually. Select the **Head** tab, paste your Converly code into the box, and save.
## Test it works
That's it! Converly is now installed on your Instapage pages. To check it is working, open a new incognito window, go to one of your pages, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Install Converly on ClickFunnels
URL: https://help.converly.io/installing-converly/install-on-clickfunnels
Category: installing-converly
Updated: 2026-05-17
Add the Converly code to your ClickFunnels pages so it can track form fills and bookings.
ClickFunnels is a popular tool for building sales funnels and the pages inside them. It lets you add code to each page, so you add the Converly code to every step you want tracked. To install Converly on ClickFunnels, follow the instructions below:
## Step 1: Copy your tracking code
The first step is to grab your Converly tracking code. In Converly, click **Settings** in the left sidebar, open the **Install** tab and copy the code shown in step 2. It is unique to your site, so make sure you copy the exact code shown there rather than reusing code from anywhere else. See [Install Converly](/installing-converly/install-converly) for the full walkthrough.
## Step 2: Open your page in the editor
The next step is to open the page you want to track. In your ClickFunnels account, select the funnel, then click **Edit** on the page that contains your form (usually the Optin page).
## Step 3: Open the tracking code settings
In the editor, open **Settings** and choose **Show Code**. This opens the area where you add tracking code to the page.
## Step 4: Paste your code in the Header Code tab and save
Select the **Header Code** tab and paste the code from your Converly account into the box, then click **Save**.
Repeat these steps for any other step in your funnel you want Converly to track.
## Test it works
That's it! Converly is now installed on your ClickFunnels pages. To check it is working, open a new incognito window, go to one of your pages, and submit a test entry through one of your forms. Then click **Logs** in Converly's left sidebar to open your conversion log. If the code is installed correctly, the test conversion shows up there within a moment.
Any code shown in a screenshot is only an example. Always paste the exact code from the **Install** tab in your own Converly settings, which contains the key that is unique to your site. Code copied from anywhere else will not track to your account.
---
# Update your account details
URL: https://help.converly.io/manage-your-account/update-account-details
Category: manage-your-account
Updated: 2026-05-17
Change the name and company shown on your Converly account.
You can update the name and company on your account at any time from Settings.
## Step 1: Open Settings
Click **Settings** in the left sidebar. You land on the **Details** tab, which shows your account details, website, and login details.
## Step 2: Edit your details
In the **Account details** section, click **Edit**. A window opens with your first name, last name, and company. Change what you need, then click **Save Changes**.
Your company name is also used as the name of your website inside Converly, so updating it here keeps both in sync.
---
# Update your email address
URL: https://help.converly.io/manage-your-account/update-your-email
Category: manage-your-account
Updated: 2026-09-23
Change the email address you use to sign in to Converly.
Your email address is also your login, so keep it current. You can change it from Settings.
## Step 1: Open Settings
Click **Settings** in the left sidebar. On the **Details** tab, scroll to the **Login details** section. It shows your current email and password.
## Step 2: Edit your email
Click **Edit** next to your email. A window opens with a single field for your new email address. Enter it, then click **Save Email**.
After you change it, use the new email address the next time you sign in. You may be asked to verify the new address before the change takes full effect.
---
# Update your password
URL: https://help.converly.io/manage-your-account/update-your-password
Category: manage-your-account
Updated: 2026-09-23
Change the password you use to sign in to Converly.
You can change your password at any time from Settings. You will need your current password to do it.
## Step 1: Open Settings
Click **Settings** in the left sidebar. On the **Details** tab, scroll to the **Login details** section.
## Step 2: Edit your password
Click **Edit** next to your password. A window opens with three fields. Enter your current password, then your new password twice, and click **Update Password**.
Your new password must be at least 8 characters, and the two new-password fields must match.
If you've only ever logged in with Google or a login link, you won't have a password yet. You'll see **Set Password** instead of Edit, and you only need to enter your new password twice.
The most common reason is an incorrect current password. Re-enter it carefully and try again.
Changing your password also makes Converly forget any devices you've told it to trust for [two-factor authentication](/manage-your-account/turn-on-two-factor-authentication), so you'll be asked for a code the next time you log in on them. If you haven't turned on two-factor authentication yet, it's the best way to protect your account on top of a strong password.
---
# Turn on two-factor authentication
URL: https://help.converly.io/manage-your-account/turn-on-two-factor-authentication
Category: manage-your-account
Updated: 2026-09-24
Protect your Converly login with a 6-digit code from an authenticator app on your phone.
Two-factor authentication (often called 2FA) adds a second step when you log in to Converly. As well as your password or login link, you enter a 6-digit code from an authenticator app on your phone.
It means that even if someone gets hold of your password, or gets into your email inbox, they still can't get into your Converly account without your phone. It's optional, it's included on every plan, and it takes about 2 minutes to set up.
To set it up, follow the instructions below:
Two-factor authentication in Converly protects password and login link logins. If you log in with your Google or Webflow account, Converly won't ask you for a code. Your login is protected by the security settings on your Google or Webflow account instead, so we recommend turning on 2-Step Verification there too.
## What you'll need
An authenticator app on your phone. Google Authenticator, Microsoft Authenticator, 1Password and Authy all work. If you don't have one yet, simply install one from your phone's app store before you start.
## Step 1: Start the setup in Settings
The first step is to start the setup. Click **Settings** in the left sidebar. On the **Details** tab, find the **Two-factor authentication** row under Login details and click **Turn On**.
If your account has a password, Converly asks you to enter it first so it knows it's really you. Enter it and click **Continue**. If you only ever log in with a login link, you won't be asked for one.
## Step 2: Scan the QR code
The second step is to connect your authenticator app. Open the app on your phone, add a new account, and simply scan the QR code shown on your screen. Then click **Continue**.
If you can't scan it (for example, you're setting up on the same phone you're reading this on), click **Can't scan it? Enter a setup key instead** and type the setup key into your app.
## Step 3: Enter the 6-digit code
Your app now shows a 6-digit code for Converly. It changes every 30 seconds. Type the code that's showing into Converly and click **Turn On**.
If it isn't accepted, wait for the next code to appear in your app and try that one.
## Step 4: Save your backup codes
The final step is to save your backup codes. Converly gives you 10 of them, and each one lets you log in once if you ever lose your phone.
Click **Copy All** or **Download** and keep them somewhere safe, like your password manager. Then tick **I've saved these codes somewhere safe** and click **Finish**.
**Important:** Save your codes before you click Finish. Apart from contacting our support team, they're the only way back into your account without your phone.
That's it! Two-factor authentication is now on, and the row shows how many backup codes you have left. To make the protection start straight away, Converly logs you out on every other browser, so you'll need a code the next time you log in on those.
## Step 5: Test it works
The last thing to do is check it works. Open a new **incognito window** (or private window) and log in to Converly with your password or a login link, just as you normally would.
Instead of going straight to your dashboard, you should see **Enter your login code**. Open your authenticator app, type the 6-digit code for Converly and click **Log In**. If you land on your dashboard, everything is working.
## Logging in from now on
Each time you log in with your password or a login link, Converly asks for the 6-digit code from your app. You have 10 minutes to enter it. If you take longer, you'll see **This login has timed out**, so simply click **Start Again**.
### Trust this device for 30 days
On the code screen, tick **Trust this device for 30 days** and Converly won't ask that browser for a code again for 30 days. Only tick it on your own computer, never on a shared one.
Changing or resetting your password, or turning two-factor authentication off, makes Converly forget every trusted device.
### Log in with a backup code
If you don't have your phone with you, click **Use a backup code instead** on the code screen and enter one of your backup codes. Each code only works once. When you're running low, Converly shows a reminder next to the Two-factor authentication row in Settings.
## Get new backup codes
If you've used most of your backup codes, or you think someone else might have seen them, you can replace them. In **Settings**, on the **Details** tab, click **Manage** on the Two-factor authentication row. The window that opens shows how many backup codes you have left. Click **Get New Codes**, enter the code from your app and save your new codes.
Your old backup codes stop working straight away.
## Switch to a new phone
To move to a new phone, turn two-factor authentication off and then back on again. In **Settings**, on the **Details** tab, click **Manage** on the Two-factor authentication row, then click **Turn 2FA Off**. Enter the code from your app (or click **Use a backup code instead**) and click **Turn Off**.
Then follow the steps above on your new phone. You'll get a new set of backup codes too.
## If you lose your phone
Log in with one of your backup codes, then follow the steps under **Switch to a new phone** to set it up on your new one.
If you don't have your backup codes either, email us at help@converly.io from the email address on your account. We'll confirm it's really you and help you get back in.
## Troubleshooting
**The code isn't accepted.** Check you're typing the code from the Converly entry in your app, and that the code hasn't just changed. Authenticator codes also depend on your phone's clock, so make sure your phone sets its date and time automatically. After several wrong tries in a row, Converly asks you to wait a few seconds before trying again.
**You're asked to log in again before changing your settings.** To protect your account, Converly only lets you turn two-factor authentication on or off, or get new backup codes, if you logged in within the last day. Simply log out, log back in, and try again.
We'll never ask you for a login code or a backup code, by email or anywhere else. If someone does, don't share it.
---
# Change your website address
URL: https://help.converly.io/manage-your-account/update-your-website
Category: manage-your-account
Updated: 2026-09-24
Update the domain Converly is installed on and authorizes conversions from.
Converly only accepts conversions from the website domain on your account. If your site moves to a new domain, update it here.
## Step 1: Open Settings
Click **Settings** in the left sidebar. On the **Details** tab, find the **Website** section. It shows the domain Converly is currently installed on.
## Step 2: Edit your website
Click **Edit**. A window opens with your website address. Enter the new domain and click **Save**. You can simply type `acme.com` and Converly adds `https://` for you.
## Step 3: Confirm the change
If you're moving to a different domain, Converly asks you to confirm before it saves. The window shows the old address, which **Stops accepting conversions**, and the new one, which **Starts accepting conversions**. Check both are right, then click **Change Address**.
This step is there because Converly only accepts conversions from the address on your account. Any conversions from your old address after the change won't be recorded, and they can't be recovered later. Smaller changes, like adding `www` or changing `http` to `https`, save straight away without this step.
Converly only authorizes conversions coming from the domain set here. After you change it, make sure the Converly code is installed on the new domain, or conversions from it will not be tracked.
---
# Change your plan
URL: https://help.converly.io/manage-your-account/change-your-plan
Category: manage-your-account
Updated: 2026-10-06
Upgrade or downgrade your Converly plan, or move between a Single site plan and a Multiple sites plan.
You can move to a different plan at any time, and your new plan starts straight away.
Converly has 2 kinds of plan. **Single site** plans (Standard and Premium) cover one website. **Multiple sites** plans (5 Sites, 10 Sites and 20 Sites) are for agencies and anyone else who tracks several websites, with one login and one bill for all of them.
To change your plan, follow the instructions below:
## Step 1: Open the Billing tab
The first step is to open the Billing tab. Where you find it depends on your plan:
- **On Standard or Premium.** Click **Settings** in the left sidebar, then open the **Billing** tab.
- **On a Multiple sites plan.** Go to the **Sites** page, click **Account Settings** in the left sidebar, then open the **Billing** tab. If you're inside a client site, click the site's name at the top of the sidebar first to get back to Sites.
The **Plan** section shows your current plan, its price and its limits. On a Multiple sites plan it also shows how many of your sites you're using.
## Step 2: Choose a new plan
The next step is to pick your new plan. Click **Change Plan** and a window opens with a toggle at the top, with **Single site** on one side and **Multiple sites** on the other. It opens on the kind of plan you have now, so simply click the other side to see the other plans.
Your current plan is marked **Current plan** and can't be selected. Click the plan you want to move to. The button at the bottom changes to match your choice, for example **Upgrade to Premium** or **Switch to Standard**. Click it to review the change.
## Step 3: Review and confirm
The final step is to check the change before it happens. The review shows your new plan and its monthly price, plus a **What happens** list that explains exactly what changes on your account.
If you're happy with it, click the button at the bottom again (for example **Switch to Standard**) to confirm. If not, click **Back** and pick a different plan. Your new plan starts as soon as you confirm.
That's it! You're on your new plan.
## How you're charged
When you pay for the change depends on the move you're making:
- **Upgrading from Standard to Premium.** Nothing is charged when you make the change. The difference for the rest of your billing period is added to your next invoice.
- **Upgrading to a Multiple sites plan, or to a bigger one.** You're charged the difference for the rest of your billing period straight away, then the new monthly price from your next renewal date. The window doesn't show the exact amount. Your receipt will show it, and so will the new invoice in the **Invoices** section of the Billing tab.
- **Moving to any smaller plan.** Nothing is charged. The unused time on your old plan comes off your next invoice.
- **During your free trial.** Your new plan starts straight away, and you won't be charged until your trial ends. The review shows the date and amount of your first charge.
When you're charged straight away, your bank may ask you to confirm the payment. Converly shows **Verifying with your bank** while it waits, so keep the window open until it finishes. If the payment doesn't go through, your plan stays exactly as it was.
## Moving to a Multiple sites plan
If you're on Standard or Premium and pick a Multiple sites plan, here's what happens:
- **Your website becomes your first site.** It's named after your company, and you can rename it later.
- **Nothing on your website changes.** Its flows, connections and tracking code stay exactly as they are.
- **You get a Sites page.** This is where you add more sites, up to the number your plan covers. See [Add a site](/manage-your-account/add-a-site).
- **Settings splits in two.** **Account Settings** covers your login, billing and other account options. **Site Settings** covers each website. [Account Settings and Site Settings](/manage-your-account/account-and-site-settings) explains what lives where.
Once you confirm, Converly takes you to your new Sites page.
## Moving to a smaller plan
You can only move to a plan that covers all the sites you have. If you have more sites than the new plan covers, the window tells you how many to remove (for example **Remove 2 sites to move to Premium**) and the button stays greyed out. Click **Go to Sites** to choose which ones to remove.
To move from a Multiple sites plan back to Standard or Premium, you need exactly 1 site left. That site becomes your account's website, the Sites page goes away, and Converly takes you to **Settings** and the **Billing** tab. If you want to track more websites later, simply move back to a Multiple sites plan.
Removing a site deletes its flows and connections, and it can't be undone. Read [Remove a site](/manage-your-account/remove-a-site) before you remove one to fit a smaller plan.
## Need more websites or conversions?
Click **Talk to us about Enterprise** at the bottom of the same window. On the Single site side it sits under **Need more conversions?**, and on the Multiple sites side under **Need more than 20 sites?**. Fill in a few details about your websites and conversions, and send it. We'll reply by email to work out a plan that fits.
## Troubleshooting
If your subscription is already scheduled to cancel, the Change Plan button is hidden. Reactivate your subscription first, then change the plan.
If the change doesn't go through, the window tells you why:
- **Your payment didn't go through.** Your plan hasn't changed, and nothing else has either. Click **Update Card**, check your card details, then try the upgrade again. You can [read more about updating your card here](/manage-your-account/update-your-card).
- **Update your card first.** Your last payment failed, so Converly can't charge for an upgrade yet. Update your card in the Billing tab first, then change your plan.
- **Still confirming with your bank.** Your bank hasn't finished checking the payment. You can close the window, and your plan switches as soon as the bank confirms.
- **Your plan is billed yearly.** Yearly plans can't be changed here. Email [help@converly.io](mailto:help@converly.io) to change it.
On a free trial with no card added yet, you won't see **Change Plan** at all. Click **Pick Plan & Add Card** in the Billing tab instead.
---
# Update your payment card
URL: https://help.converly.io/manage-your-account/update-your-card
Category: manage-your-account
Updated: 2026-09-24
Replace the credit card Converly bills your subscription to.
When your card expires or changes, update it here so your subscription keeps running without interruption.
## Step 1: Open the Billing tab
Click **Settings** in the left sidebar, then open the **Billing** tab. The **Payment method** section shows the card currently on file.
## Step 2: Enter your new card
Click **Update Card**. A window called **Update payment method** opens with a secure card form from our payment processor, Stripe. Enter your new card number, expiry date, and security code, then click **Update Card**.
Converly stores one card for billing. When you add a new one, it replaces the old card straight away. Your next invoice will be charged to the new card.
---
# View and download your invoices
URL: https://help.converly.io/manage-your-account/view-your-invoices
Category: manage-your-account
Updated: 2026-05-17
Find, view, and download your past Converly invoices.
Every Converly payment has an invoice you can view or download for your records.
## Step 1: Find your invoices
Click **Settings** in the left sidebar, then open the **Billing** tab. Scroll to the **Invoices** section. Each invoice shows its number, date, and status.
To open one, click **View** on its row. The full invoice opens in a new tab, where you can download it as a PDF or print it.
A green **Paid** badge means the invoice was charged successfully. An amber or red badge means a payment is open or failed, which usually means you need to [update your card](/manage-your-account/update-your-card).
---
# Cancel your account
URL: https://help.converly.io/manage-your-account/cancel-your-account
Category: manage-your-account
Updated: 2026-09-24
How to cancel your Converly subscription, and how to come back if you change your mind.
You can cancel your Converly account from Settings. Cancelling is immediate, so read this first.
When you cancel, your subscription ends immediately and all your flows stop firing straight away. It is not an end-of-period cancellation, and we don't refund the rest of the month, so it's worth cancelling close to your renewal date. If you only want to pause spending, consider [changing to a smaller plan](/manage-your-account/change-your-plan) instead.
## Step 1: Open the Cancel tab
Click **Settings** in the left sidebar, then open the **Cancel** tab. You'll see a short form headed **Cancel your subscription**.
## Step 2: Tell us why
We ask 2 quick questions before you go. Choose a reason from the **Why are you cancelling?** dropdown, then answer the follow-up question that appears (for example, which tool you're switching to). Both are required. When you're ready, click **Cancel Subscription**.
## Step 3: That's it
As soon as you click **Cancel Subscription**, your subscription ends and your flows stop firing. You'll see **Your subscription is cancelled**. Click **Done** and Converly logs you out.
We also recommend removing the Converly code from your website, the same way you added it.
## Changed your mind? Come back any time
If you change your mind, simply log back in to Converly. You will be asked to pick a plan, and as soon as your new plan starts, your flows are switched back on exactly as you left them.
If you removed the Converly code from your website, simply add it back. You can [follow the install instructions here](/installing-converly/install-converly).
---
# Delete a visitor's data
URL: https://help.converly.io/manage-your-account/delete-visitor-data
Category: manage-your-account
Updated: 2026-09-24
Erase a visitor's submission history from Converly when they ask, for GDPR and similar requests.
If a visitor asks you to delete their data (a GDPR right-to-erasure request, for example), you can remove their submission history from your Converly logs in a few seconds.
## Step 1: Open the Privacy tab
Click **Settings** in the left sidebar, then open the **Privacy** tab. Enter the visitor's email address in the **Visitor's email** box and click **Delete Data**. The email is scrambled (hashed) in your browser before it's sent, so Converly never sees the raw email of a deletion request.
## Step 2: Confirmation
Converly confirms how many records were removed, with a timestamp you can quote back to the visitor. If nothing matched, you'll see **No records found**, which is still a useful confirmation to send. To handle another request, click **Delete Another**.
Deleting here removes the visitor from Converly only. It does **not** delete data you already sent to Google Ads or Meta. To fully honour the request, also delete it in those platforms.
---
# Manage your connected integrations
URL: https://help.converly.io/manage-your-account/manage-connected-integrations
Category: manage-your-account
Updated: 2026-05-17
See everything connected to Converly, and disconnect, reconnect, or recheck an integration.
The Integrations tab is where you see every ad platform and lead source connected to Converly, and where you disconnect or reconnect them.
## Step 1: Open your integrations
Click **Settings** in the left sidebar, then open the **Integrations** tab. Each connected platform is listed with its status. A green **Connected** badge means it is working. **Needs reconnection** means the login expired, so use the **Reconnect** button on that row.
## Step 2: Open the menu
Find the platform you want to disconnect and click the **⋮** menu on its row. Choose **Disconnect**.
## Step 3: Confirm
A confirmation window appears. It tells you how many flows use this integration and will stop firing until you reconnect. Click **Disconnect** to confirm.
Google Ads is connected through a manager (MCC) link. Disconnecting in Converly stops the data, but to fully revoke access you also need to remove Converly from the Managers tab inside your Google Ads account.
---
# Manage your sites
URL: https://help.converly.io/manage-your-account/manage-your-sites
Category: manage-your-account
Updated: 2026-10-06
Use the Sites page to see every client website in your account and move between them.
The Sites page is your home in Converly when you're on a Multiple sites plan (5 Sites, 10 Sites or 20 Sites). It lists every client website in your account, and it's where you open a site to work on its flows, logs and settings.
Each site has its own tracking code, its own flows and its own connections to ad platforms, so you set up and look after each client on its own.
On Standard or Premium you won't see a Sites page. Your account covers one website, and everything lives under **Flows**, **Logs** and **Settings**. To track several websites, [move to a Multiple sites plan](/manage-your-account/change-your-plan).
Follow the instructions below:
## Step 1: Open the Sites page
Converly opens on the Sites page when you log in. You can also get back to it at any time by clicking **Sites** in the left sidebar.
Each row shows the site's name, its website address, its tracking status and how many flows it has. The **Tracking** column tells you at a glance whether each site is working:
- **Tracking.** The tracking code has been seen on the site's website in the last 7 days, and at least 1 of its flows is live.
- **No live flows.** The tracking code is on the website, but none of the site's flows are active yet.
- **Not installed.** Converly hasn't seen the tracking code on the site's website address in the last 7 days. Usually the code isn't on the website yet, or it's on a different address from the one saved in Converly. A website that has had no visitors for a week shows this too.
- **Status unknown.** Converly couldn't check the site just now. Refresh the page to try again.
- **Removing.** The site is being removed, so you can't open it.
If you have more than 6 sites, a **Search sites** box appears above the list. Simply type part of a site's name or website address to find it.
## Step 2: Open a site
The next step is to open the site you want to work on. Simply click its row, and Converly opens that site's **Conversion Flows** page.
Inside a site, the left sidebar changes. The site's name sits at the top, with **Flows**, **Logs** and **Site Settings** below it. Everything you see and change here belongs to that site only, including its flows, its logs, its tracking code and its connections.
You can also jump straight to part of a site from the Sites page. Click the **⋮** menu at the end of a site's row and choose one of these:
- **Site Settings.** Opens the site's name, website address and other settings.
- **Get Tracking Code.** Opens the site's **Install** tab, where you can copy its tracking code.
- **Remove Site.** Opens the page where you remove the site. You can [read more about removing a site here](/manage-your-account/remove-a-site).
## Step 3: Go back to your sites
When you've finished with one client and want to work on another, go back to the Sites page. Simply click the site's name at the top of the left sidebar. When you point at it, it changes to **Back to sites**.
From the Sites page, click the next site you want to work on. There's no shortcut that jumps from one site straight to another, so you always go back through Sites.
On a phone, the sidebar is tucked away. Tap the menu button at the top right of the screen to open it.
That's all you need to do to move between your sites!
## Where are my account settings?
Your billing, login and other account options are under **Account Settings**, in the sidebar on the Sites page. It isn't in the sidebar inside a site, so go back to Sites first. [Account Settings and Site Settings](/manage-your-account/account-and-site-settings) explains exactly what lives where.
## Your plan's limits
Your plan sets how many sites you can have. Each site can then have up to 5 flows and 500 conversions a month.
To see how many sites you're using, open **Account Settings**, then the **Billing** tab, and look at the **Sites** row. When you're using every site on your plan, the Sites page shows an **Upgrade to Add Sites** button instead of **Add Site**. [Add a site](/manage-your-account/add-a-site) explains your options when that happens.
---
# Account Settings and Site Settings
URL: https://help.converly.io/manage-your-account/account-and-site-settings
Category: manage-your-account
Updated: 2026-10-06
On a Multiple sites plan, find out which settings cover your whole account and which belong to each site.
On a Multiple sites plan (5 Sites, 10 Sites or 20 Sites), your settings live in 2 places. **Account Settings** covers everything that applies to your whole account, like your login and your bill. **Site Settings** covers one client website, like its tracking code and its connections.
This article shows you where everything is. Keep it handy, because most of our other help articles were written for Standard and Premium plans and tell you to click **Settings**. On a Multiple sites plan there's no button called Settings, so you use one of these 2 instead.
This article doesn't apply to you. Everything is under **Settings** in the left sidebar, exactly as our other help articles describe.
## Where to find everything
Find what you want to do in the left column, then go to the place in the right column.
| What you want to do | Where to find it |
| - | - |
| [Change your name or company](/manage-your-account/update-account-details) | **Account Settings**, then the **Details** tab |
| [Change your email](/manage-your-account/update-your-email), [password](/manage-your-account/update-your-password) or [two-factor authentication](/manage-your-account/turn-on-two-factor-authentication) | **Account Settings**, then the **Details** tab |
| [Change your plan](/manage-your-account/change-your-plan) | **Account Settings**, then the **Billing** tab |
| [Update your payment card](/manage-your-account/update-your-card) | **Account Settings**, then the **Billing** tab |
| [View or download invoices](/manage-your-account/view-your-invoices) | **Account Settings**, then the **Billing** tab |
| Create or delete API keys | **Account Settings**, then the **API** tab |
| [Delete a visitor's data](/manage-your-account/delete-visitor-data) | **Account Settings**, then the **Privacy** tab (one request covers every site) |
| [Cancel your whole subscription](/manage-your-account/cancel-your-account) | **Account Settings**, then the **Cancel** tab |
| Rename a site | **Site Settings** inside that site, then the **Details** tab |
| [Change a site's website address](/manage-your-account/update-your-website) | **Site Settings** inside that site, then the **Details** tab |
| [Get a site's tracking code](/installing-converly/install-converly) | **Site Settings** inside that site, then the **Install** tab |
| [See, reconnect or disconnect a site's integrations](/manage-your-account/manage-connected-integrations) | **Site Settings** inside that site, then the **Integrations** tab |
| [Remove a site](/manage-your-account/remove-a-site) | **Site Settings** inside that site, then the **Cancel** tab |
| [Build or edit a site's flows](/setup-destinations/building-a-workflow) | **Flows** inside that site |
| [See a site's conversions](/platform/event-log) | **Logs** inside that site |
## How to open Account Settings
Account Settings is in the left sidebar on the **Sites** page, near the bottom. Click **Account Settings** and you'll see 5 tabs, called **Details**, **Billing**, **API**, **Privacy** and **Cancel**.
If you're inside a client site, you won't see Account Settings in the sidebar. Simply click the site's name at the top of the sidebar to go back to the Sites page first.
## How to open Site Settings
Each site has its own Site Settings. On the **Sites** page, click the site to open it, then click **Site Settings** in the left sidebar. You'll see 4 tabs, called **Details**, **Install**, **Integrations** and **Cancel**. Everything here applies to that one site only.
A quicker way is the **⋮** menu at the end of the site's row on the Sites page. Choose **Site Settings** to open its settings, or **Get Tracking Code** to go straight to its Install tab.
## What's in each tab
### Account Settings
- **Details.** Your name, your company and your login details (email, password and two-factor authentication). There's no website address here, because each site has its own.
- **Billing.** Your plan, its price, how many sites you're using, your payment card and your invoices. You get one plan and one bill for every site in your account.
- **API.** API keys that connect the Converly command line tool to your account, so you or an AI agent can set up tracking.
- **Privacy.** Deletes a visitor's form submissions from the logs of every site in your account, so you only need to do it once.
- **Cancel.** Cancels your whole subscription, which stops tracking on every site.
### Site Settings
- **Details.** The site's name (only you see it) and the website address Converly accepts its conversions from.
- **Install.** The site's own tracking code, plus guides for adding it to the client's website.
- **Integrations.** The ad platforms and lead tools connected to this site. You connect them while building a flow, and they only work for this site.
- **Cancel.** Removes this one site. It doesn't touch your subscription or your other sites.
**Cancel** in Site Settings permanently removes one site. **Cancel** in Account Settings cancels your whole subscription and stops tracking on every site at once. Check which one you're on before you click. See [Remove a site](/manage-your-account/remove-a-site) and [Cancel your account](/manage-your-account/cancel-your-account).
## Following our other help articles
When a help article tells you to click **Settings** in the left sidebar, simply swap it for the right place:
- **Articles about your login, plan, card, invoices, API keys, visitor data or cancelling.** Go to the **Sites** page and click **Account Settings**.
- **Articles about the tracking code, a website address or connected integrations.** Open the client's site first, then click **Site Settings**.
Then carry on with the article from the tab it names. The tabs have the same names in both places.
That's all there is to it!
---
# Add a site
URL: https://help.converly.io/manage-your-account/add-a-site
Category: manage-your-account
Updated: 2026-10-07
Add a client website to your account so you can track its conversions on their own.
A site is one website you track with Converly, usually one client's website. On a Multiple sites plan you can add a site for each client, up to the number your plan covers (5, 10 or 20).
Each new site starts fresh, with its own tracking code, flows and connections. Adding a site doesn't change your bill, as long as you have space on your plan.
You need a Multiple sites plan (5 Sites, 10 Sites or 20 Sites) to add sites. If you're on Standard or Premium, [change your plan](/manage-your-account/change-your-plan) first. Your current website becomes your first site, and you can then add the rest.
To add a site, follow the instructions below:
## Step 1: Click Add Site
The first step is to open the **Sites** page and click **Add Site** at the top right.
If you see **Upgrade to Add Sites** there instead, you're already using every site on your plan. See **At your plan's limit** at the bottom of this article.
## Step 2: Enter the site's details
The next step is to tell Converly about the website. A window opens with 2 fields:
- **Site name.** What you call this site in Converly, usually the client's business name. Only you see it, and you can change it later.
- **Website address.** The client's website. The `https://` is already filled in, so simply type the address, for example `smithplumbing.com.au`. If you paste a full link, Converly removes the `www` and any page path for you.
Make sure the address is the website where you'll install the code. Converly only accepts this site's conversions from that address.
## Step 3: Click Add Site
Click **Add Site**. Converly creates the site and takes you straight inside it, to its empty **Conversion Flows** page. A message confirms the site was added and points you to the next step. For a site called Smith Plumbing, it reads **Smith Plumbing added. Create your first flow to start sending conversions.**
The new site shows as **Not installed** on the Sites page until its tracking code is on the client's website.
If Converly can't add the site, the window tells you why:
- **Enter a site name.** The site name is empty. Type a name and try again.
- **Enter the website address.** The website address is empty.
- **That doesn't look like a website address.** Check for typos. The address needs a full domain, like `smithplumbing.com.au`.
- **Already in your account.** The window says the address is already in your account and names the site it belongs to. Each website can only be in your account once, so click **Go to That Site** to open the one you already have.
## Step 4: Create your first flow
The next step is to create the site's first flow. A flow tells Converly which form or booking to watch on the client's website, and which ad platforms to send the conversion to.
You're already on the site's **Conversion Flows** page, so simply click **Create New Flow**, give the flow a name and click **Create Flow**. Then add a trigger and one or more actions, the same way you would for any website. You can [read how to build a flow here](/setup-destinations/building-a-workflow).
Connections to ad platforms and lead tools belong to each site. So if 2 of your clients both advertise on Google Ads, you connect Google Ads inside each site and pick the right ad account for that client.
When the flow is ready, click **Publish Flow**. Because it's the site's first flow, a window then opens with the site's tracking code ready to copy. Its heading reads **You have published your first flow!** You'll add that code to the client's website in the next step.
If you close the window before copying the code, don't worry. You can find it any time inside the site. Simply click **Site Settings** in the left sidebar and open the **Install** tab.
## Step 5: Install the tracking code on the client's website
The next step is to put the site's tracking code on the client's website. Each site has its own code, so make sure you copy it from the right site rather than reusing code from another one.
Copy the code from the window that opened when you published the flow. Or, inside the site, click **Site Settings** in the left sidebar, open the **Install** tab and click **Copy Code**. Then add the code to the head of every page of the client's website. If someone else looks after the website, simply send them the code.
You'll find step-by-step instructions for each website builder in [Install Converly](/installing-converly/install-converly). Those articles say to click **Settings**. On a Multiple sites plan, use **Site Settings** inside the site instead.
The Converly plugins and apps for website builders (like WordPress, Webflow and Framer) only work with Standard and Premium accounts. If you try one with a Multiple sites account, it shows **This account manages several websites**. Add the tracking code to the website's head yourself, or through Google Tag Manager.
## Test it works
The final step is to check everything works. Open a new **incognito window**, go to the client's website and submit one of the forms your flow tracks. Then check the conversion shows in the site's **Logs** in Converly, and in the ad platform. You can [read more about how to test Converly properly here](/testing-it-works/test-converly-is-working).
That's it! The site is set up and tracking.
## At your plan's limit
When you're using every site on your plan, the Sites page shows a notice like **You're using all 5 sites on your plan**, and the **Add Site** button becomes **Upgrade to Add Sites**. You have 2 options:
- **Move to a bigger plan.** Click **Change Plan** in the notice, or **Upgrade to Add Sites**. The Change plan window opens with the next plan already picked. Unless you're on a free trial, you're charged the difference for the rest of your billing period straight away. See [Change your plan](/manage-your-account/change-your-plan).
- **Remove a site you no longer need.** That frees up its space straight away. See [Remove a site](/manage-your-account/remove-a-site).
If you're already on 20 Sites, click **Change Plan**, then **Talk to us about Enterprise** at the bottom of the window.
Not sure where a setting lives now that you have several sites? [Account Settings and Site Settings](/manage-your-account/account-and-site-settings) shows you where everything is.
---
# Remove a site
URL: https://help.converly.io/manage-your-account/remove-a-site
Category: manage-your-account
Updated: 2026-10-06
Permanently remove a client website from your account and free up its space on your plan.
When you stop working with a client, you can remove their site from your account. Converly stops tracking it and frees up its space on your plan, so you can add another site in its place.
There's no confirmation step and no way to undo it. As soon as you click **Remove Site**, the site's tracking stops and its flows and connections are deleted. If you want to track the website again later, you'll need to add it as a new site and set it up from scratch, including installing a new tracking code.
To remove a site, follow the instructions below:
## Step 1: Open the site's Cancel tab
The first step is to find the site you want to remove. On the **Sites** page, click the **⋮** menu at the end of its row and choose **Remove Site**.
You can also get there from inside the site. Click **Site Settings** in the left sidebar, then open the **Cancel** tab.
The **Cancel** tab in Site Settings only removes this one site. It doesn't cancel your subscription, which is done from **Account Settings** instead. [Account Settings and Site Settings](/manage-your-account/account-and-site-settings) explains the difference.
## Step 2: Tell us why
We ask 2 quick questions before you go. Choose a reason from the **Why are you removing this site?** dropdown, then answer the follow-up question that appears (for example, **Client work ended** asks whether there's anything we could have done better). Both are required, and the **Remove Site** button stays greyed out until you've answered them.
## Step 3: Click Remove Site
When you're ready, click **Remove Site**. The site is removed straight away, and you'll see a message saying it's removed, along with how many sites you're now using (for example **You're now using 3 of 5 sites**). Click **Back to Sites list** to return to your sites.
## Step 4: Remove the code from the client's website
We also recommend removing the site's tracking code from the client's website, the same way you added it. Once the site is removed, the code no longer tracks anything, but it's tidier to take it off.
That's it! The site is removed.
## What happens when you remove a site
Here's what changes, and when:
- **Tracking stops straight away.** Converly stops accepting and sending the site's conversions as soon as you click, usually within a second. The only exception is a visitor who already has a page of the website open. Any tags running in their browser may still fire until they reload the page or leave.
- **Its flows and connections are deleted.** The site's saved logins for ad platforms and lead tools are deleted within a few minutes. Your other sites and their connections aren't affected.
- **Its logs are deleted.** The site's logs disappear from Converly. Contact details like names, emails and phone numbers are deleted within 7 days, and the rest of its conversion history within 30 days, the same as for any conversion.
- **Its space on your plan frees up straight away.** You can add a new site in its place right away.
- **Your bill stays the same.** Removing a site doesn't change your plan or its price. If your sites now fit on a smaller plan, you can [change to it](/manage-your-account/change-your-plan) to pay less.
## Removing your last site
On a Multiple sites plan you can remove every site. The Sites page then shows **No sites yet**, and you can add a new one whenever you're ready.
You keep paying for your plan until you change it or cancel. To stop paying altogether, [cancel your account](/manage-your-account/cancel-your-account) from **Account Settings**.
## Troubleshooting
Occasionally Converly can't confirm straight away that tracking has stopped, and you'll see **We couldn't confirm the removal. Try again.** Simply click **Remove Site** again, as it's safe to retry. If you've already left the page, there's nothing more you need to do. The site shows **Removing** on the Sites page and Converly finishes the removal automatically. Until it does, the site may still track conversions.
If you see **Another change to your plan is in progress**, wait a moment and click **Remove Site** again.
---
# Overview
URL: https://help.converly.io/platform/overview
Category: platform
Updated: 2026-09-23
What happens to a conversion, from ad click to ad platform.
A step by step look at what happens to a conversion, from the moment a visitor lands on your website to the moment it reaches your ad platforms and analytics tools.
There's a lot that happens between someone clicking one of your ads and a conversion showing up in Google Ads, Meta, GA4 etc.
This article walks through that process step by step. Each step includes a short summary of what happens, along with a link to a more detailed article if you want to dig deeper into how it works.
## The journey of a conversion
### Step 1: Click IDs are captured when the visitor arrives
The Converly tracking code sits in the `` of every page on your website. When someone clicks one of your ads, the ad platform adds a click ID to the end of the URL they land on (like `?gclid=` for Google Ads or `?fbclid=` for Meta).
The Converly tracking code reads these click IDs, along with any campaign parameters (like `utm_source` and `utm_campaign`) and the page the visitor first landed on, and stores them in first-party cookies in the visitor's browser. That way they're still available when the visitor converts, even if that's on a different page or a later visit.
You can read more about this in our articles on [The tracking script](/platform/tracking-script) and [Click IDs](/platform/click-ids).
### Step 2: The conversion is detected
When the visitor submits a form, books a meeting or starts a chat, Converly detects it. But it only records a conversion once the tool confirms it was actually successful.
How that success is detected depends on the tool you're using. Some tools send a postMessage event when a form is successfully submitted and we listen for that, where for others we need to watch for a visible element on the page to appear.
You can read more about this in our article on [Conversion detection](/platform/form-detection).
### Step 3: The lead's details are gathered
Once a conversion is detected, Converly gathers all the data it needs to send the conversion to your ad platforms and analytics tools.
It first gathers the lead's name, email, phone, etc as they are needed by ad platforms for advanced matching. In some cases those details are read straight from the form on the page, or from the success message the tool sends when the form is submitted. For some tools the details aren't available on the page at all, so Converly fetches them from the tool directly (usually via an API call) shortly afterwards.
Once the lead's details have been gathered, they combined with the click IDs and campaign parameters that were saved in the visitor's browser back in Step 1, along with other browser data like the Google Analytics client ID. And when the conversion reaches our servers, the visitor's IP address, user agent and country are added too.
You can read more about this in our articles on [Conversion detection](/platform/form-detection) and [Click IDs](/platform/click-ids).
### Step 4: The conversion is sent to our servers and saved
The Converly tracking code you place on your website then sends the conversion to our servers. We check that it came from one of the website domains on your account, work out which of your flows it belongs to, and save it to our database before doing anything else.
Saving the conversion first is important. It means a slow or unavailable ad platform can never cause a conversion to be lost, because we already have it safely stored and can keep trying to send it.
You can read more about this in our articles on [Delivery](/platform/delivery) and [Security and access](/platform/security).
### Step 5: Duplicates are caught
It's surprisingly easy for a conversion to be reported more than once. A form tool might announce a successful submission twice, a visitor's connection might drop so their browser sends the conversion again, or the same conversion might reach an ad platform from both your pixel and our servers.
Rather than happening in one single step, Converly catches duplicates at several points along the way (in the browser, on our servers, and in the ad platform itself), so each conversion only ever counts once.
You can read more about this in our article on [Deduplication](/platform/deduplication).
### Step 6: The conversion is prepared for each platform
Every ad platform wants the lead's details in a slightly different format. Converly formats the lead's name, email, phone, etc the way each platform expects, hashes them where the platform requires it, and picks the click IDs and browser identifiers that platform accepts.
This happens separately for each platform, just before the conversion is sent, so every platform gets its data in exactly the format it needs to match the conversion to an ad click.
You can read more about this in our article on [Normalization and hashing](/platform/normalization).
### Step 7: The conversion is delivered
Converly then sends the conversion to each of your ad platforms and analytics tools. Each one is sent independently, so a problem with one platform never stops the conversion reaching the others.
If a send fails for a temporary reason (like the ad platform being down), it's retried automatically. And if a conversion can't be delivered, it's marked as failed and you are notified (rather than just quietly disappearing).
You can read more about this in our articles on [Delivery](/platform/delivery) and [Setup](/platform/setup), including the checks Converly runs to make sure your ad platform accounts are set up to receive conversions.
## Seeing what happened
Every conversion that Converly captures is recorded in your conversion log, along with the exact data we captured.
Each conversion has a status (like **Delivered**, **Partly delivered** or **Failed**) that tells you at a glance whether it was delivered successfully, and you can zoom in every destination and see what data that was sent, the exact API calls that were made, error messages, and more.
You can read more about this in our articles on [Reading the conversion log](/platform/event-log) and [Statuses and errors](/platform/failure-states).
## Personal data
Converly is careful with the lead's personal data at every step. If a visitor's browser sends a Global Privacy Control signal, nothing is captured at all. Sensitive fields on forms (like passwords and card numbers) are always skipped before their value is even read. Contact details are hashed before being sent to platforms that require it, and raw contact details are only kept for a limited time (for debugging purposes) before they're erased.
You can read more about this in our article on [Personal data](/platform/personal-data).
## Security and access
Similarly, security isn't a single step. Conversions are only accepted from the website domains you specify on your account, messages sent by form tools are validated before they're trusted, and your ad platform credentials are stored in an encrypted vault.
You can read more about this in our article on [Security and access](/platform/security).
---
# Setup
URL: https://help.converly.io/platform/setup
Category: platform
Updated: 2026-09-23
Connect your accounts and choose which conversions to fire.
Learn how to setup triggers, connect an ad platform or analytics tool to Converly, and choose which conversions to fire.
In order to set up Converly to detect conversions on your website and send them to your chosen ad platforms and analytics tools, you need to connect your accounts and tell us what conversions to fire.
To do that, you need to create a Conversion Flow in your account. A Conversion Flow has a Trigger (i.e. what starts the flow) and Destinations (i.e. where the conversion gets sent).
This article explains how configuring a Conversion Flow works:
## Selecting a trigger
A trigger is the thing that starts a conversion flow, like someone submitting a form or booking a meeting. Every flow has one.
### How triggers work
How a trigger works depends on what tool you are using as the trigger (I.e. Gravity Forms, Calendly, etc). This is because each tool works slightly differently. Some tools send a success message with all the lead's details in it, others you need to call their API to get the lead's details.
### Triggers Converly detects on your page
Most form tools need no connection at all. The Converly tracking script recognises that tool's own success signal on the page, and the lead's details can be grabbed straight from the form they just filled in, so there is nothing to fetch from anywhere.
This covers WordPress form builders like Gravity Forms, WPForms, Contact Form 7, Elementor, Fluent Forms, Formidable, Forminator, Ninja Forms and WS Form as well as form builders built into a larger website builder, like Webflow Forms, Framer Forms, Wix Forms, etc.
These triggers require no setup at all. You simply select them from the list when you are building your conversion flow.
### Triggers you connect
Scheduling and form tools that load in an iFrame work differently, because the booking or form submission happens inside the iFrame rather than on your website.
So when setting up these triggers, you'll need to sign in to the tool from within Converly (using a process known as OAuth) and then authorise Converly to access your data.
Some examples include:
| Trigger | How you connect | What the connection adds |
| - | - | - |
| Calendly | Sign in with Calendly | The details of who booked, and filtering by event type. |
| Cal.com | Sign in with Cal.com | The same, plus the booking's real outcome, so a booking that needs confirming only counts once it is confirmed. |
| Acuity Scheduling | Sign in with Acuity, then paste a snippet into Acuity | The details of who booked, and filtering by calendar or appointment type. |
| Typeform | Sign in with Typeform | Who submitted. Without it Converly can still count the submission, but it arrives with nothing to match on. |
| Jotform | Paste your Jotform API key | Required rather than optional, because Converly adds a tracking field to your form through Jotform's API. |
### Triggers your own backend reports
Some conversions are only real once your own systems say so. For instance, if you are a SaaS product you might only want to count a conversion when a user signs up and verifies their email address.
Setting up these types of triggers requires custom development. You have to send your own identifier for the conversion to our API (so a retry or a duplicate call can never count twice) and a correlation token that the tracking script created in the visitor's browser when they signed up (which is what ties the conversion back to the ad they clicked).
There is a Node SDK for this at `@converly/sdk-node`. See [Conversion detection](/platform/form-detection).
## Filtering which submissions count
By default a trigger fires on every submission it sees, but you can add filters so that only certain form submissions or meeting types get counted.
What you can filter on depends on the type of trigger:
- **Triggers detected on your page can be filtered by page.** If you are using a tool like Gravity Forms or Webflow forms, you can filter conversions by the page the form is submitted on. So you could tell Converly only to send conversions when the form on /contact-us or /request-a-quote is submitted, and not to send a conversion when the job application form on the /careers page is submitted.
- **Triggers you connect can be filtered by the real thing in your account.** If you are using a scheduling tool like Calendly or Cal.com, then you can filter conversions by event type (I.e. You could tell Converly to send a conversion when the Sales Consultation meeting type is booked). If you are using a form tool like Typeform or Jotform form, then you can filter by specific forms (I.e. Only send a conversion when the Quote Request form is submitted). Converly lists the real options from your connected account when you set the filter, so you pick from what actually exists rather than typing a name and hoping it matches.
## Selecting Destinations
A Destination is where the conversions get sent when the trigger occurs.
### Connecting your accounts
Most destinations are connected by signing in to the platform within Converly, which is the safest option because no credential is ever typed, pasted or stored by you.
Here's how each one works:
| Destination | How you connect | What you supply |
| - | - | - |
| Google Ads | Sign in with Google | Nothing to paste. |
| Meta | Sign in with Facebook, or paste | A System User access token and your pixel ID, if you paste. |
| GA4 | Sign in with Google | Nothing to paste. |
| LinkedIn | Sign in with LinkedIn, or paste | A Campaign Manager API token, if you paste. |
| TikTok | Sign in with TikTok, or paste | An Events Manager token and your pixel code, if you paste. |
| Reddit | Sign in with Reddit | Nothing to paste. |
| ChatGPT Ads | Paste | Your pixel ID and a Conversions API key. |
| Microsoft Ads | Paste | Your UET tag ID and the Conversions API token generated in Microsoft Advertising. |
| Snapchat | Paste | An access token generated by an Organization Admin in Business Manager. |
| Pinterest | Sign in with Pinterest, or paste | A conversion access token from Ads Manager, if you paste. |
| X Ads | Sign in with X | Nothing to paste. |
Whichever route you take, the credential is stored in an encrypted vault and never in the part of Converly that runs in your browser. See [Security and access](/platform/security).
Each site holds one connection per platform. Connecting a different account for the same platform replaces the previous one.
### Manager and agency accounts
If you are an agency, you may not own the ad account directly. Instead, you might have simply been granted access to manage the ad account.
Not all ad platforms have this agency/client management structure, and the ones that do have different names and mechanisms for it. But if the ad platform has it, then Converly supports it.
| Destination | How it's structured | What you see |
| - | - | - |
| Google Ads | Manager accounts, which can be nested | Every account you can reach is listed, grouped under the manager it came through. Manager accounts can't receive conversions themselves, so they appear as headings rather than choices. |
| Meta | Pixels can belong to your own business portfolio or be shared with you | Converly looks in both your ad accounts and your business portfolios, because neither on its own finds every pixel. A pixel shared with you is marked as partner access. |
| Reddit | Business, then ad account, then pixel | The full path is followed, and the business the pixel belongs to is remembered. |
| GA4 | Account, then property, then data stream | All three are picked during the connection. |
| LinkedIn | Ad accounts, with conversion rules that can be shared between them | Rules your account owns and rules shared with it are both listed. |
| TikTok | Business Center | TikTok returns a flat list of advertisers, so the owning Business Center isn't shown rather than guessed at. |
| ChatGPT Ads | One account | Nothing to choose. |
Furthermore, in some platforms (namely Google Ads) the manager account can own conversion tracking for every client in it. So when you log in and pick which ad account you want to use with Converly, it reads who owns the conversion tracking for the account you picked, confirms it can fire conversions through the manager account you are logged in to, and then sends conversions to the correct account.
## Selecting a conversion
A conversion is the name of the event that gets sent to your chosen ad platform and analytics tools.
### Choosing which conversion to send
When setting up your conversion flow, Converly pulls the available conversions from your account and displays them in a dropdown. This makes it easy for you to select the conversion you want Converly to send to, and saves you from having to go dig around in your ad account looking for an account ID, conversion ID, etc.
Every destination identifies a conversion differently. In Google Ads it's called a conversion action, in Meta it's an event name, and in LinkedIn it's a conversion rule. When you add a destination to a flow, you choose which one your conversions should be reported as.
The table below shows what's possible for each destination:
| Destination | Name | Notes |
| - | - | - |
| Google Ads | conversion action | You can select an existing one or create a new one from inside Converly. |
| Meta | event name | You can select a standard event (such as `Lead`), or create a custom event. |
| GA4 | event name | You can select one of the recommended events from GA4 (such as `generate_lead`), or create a custom event. |
| LinkedIn | conversion rule | Conversion rules must already exist in Campaign Manager. You can select a rule for the server-side conversion, a rule for the browser-side conversion, or both. |
| TikTok | event name | You can choose from a list of TikTok's standard events. |
| Reddit | event name | You can choose from a list of Reddit's standard events. |
| ChatGPT Ads | event type | You can select an existing one from your account or create a new one from inside Converly. |
| Microsoft Ads | event action | You can select an existing one from your account or create a new one from inside Converly. |
| Snapchat | event type | You can choose from a list of Snapchat's standard events. |
| Pinterest | event name | You can choose from a list of Pinterest's standard events. |
| X Ads | event | Each event has its own ID in Events Manager, and has to be created there first. |
Some platforms (like Google Ads, LinkedIn and ChatGPT Ads) allow you to create conversions with whatever name you want, so Converly pulls those from your account and displays them in a dropdown for you to choose from. It will also let you create new conversions from within Converly if needed.
Other platforms (like TikTok, Reddit, Snapchat) have a standard list you can select from and you cannot create custom ones, so Converly gives you the list of conversions the platform will accept in a dropdown and lets you choose the most relevant one (I.e. Lead Generated, Appointment Booked, Chat Started, Account Created, etc).
### Checking whether the account can receive conversions
An ad account can be connected and fully authorised and still refuse every conversion. This can happen for a number of different reasons, but usually it's to do with a setting not being enabled in the account.
So when you connect an ad platform or analytics tool, Converly checks the account for problems that can prevent conversions from being successfully sent.
Some of the most common ones Converly checks for include:
| Platform | Check | What it catches |
| - | - | - |
| Google Ads | Customer Data Terms | Google won't accept conversions into an account that hasn't accepted its Customer Data Terms. |
| Google Ads | Enhanced conversions for leads | Google won't accept conversions carrying the lead's contact details until enhanced conversions for leads is turned on. |
| Google Ads | Permissions | The connected Google user needs enough permissions to send conversions to the account. Without it, the connection works but conversions are refused. |
When the check finds a problem, it names the specific cause and links to the help article for fixing it. The whole goal is to make sure that once you set up your conversion tracking in Converly, it just works.
### What Converly can set up for you
To prevent you from having to go into your account and muck around with a bunch of technical settings, we can change them for you automatically. We only ever change settings that are related to setting up conversion tracking and you always approve the changes inside Converly before they happen.
Some examples include:
- **GA4.** Sending conversions to GA4 server-side needs a Measurement Protocol secret, and the property's user data collection terms have to be accepted. Converly creates the secret and accepts the terms during the connection, which saves you from having to look through GA4's admin section trying to do it. These settings have no other impact on your account other than allowing us to send through conversion data.
- **Google Ads.** If the account has no conversion action you can use, it's possible to create one from within Converly rather than having to go over to your Google Ads account and do it. You set the name of the conversion action and approve it within Converly before any changes are made.
## Setting up Converly using an AI tool
Conversion flows can be built visually using the flow builder at app.converly.io, but you can also connect AI tools like Claude or ChatGPT to your account (using our MCP or CLI) and tell them to 'Setup conversion tracking in Google Ads' (as an example) and they will do it all for you:
1. **It sets the website address for you.** Converly only accepts conversions from the website address specified in your account, so the AI tool will ask you which website you want to use it on and then set the address.
2. **It sets up the trigger.** It asks you what form builder, scheduling tool, etc you use and sets that as the trigger for your conversion flow.
3. **It asks which submissions should count.** It reads the forms or events you have in your connected accounts and asks you which form submissions should count as conversions (I.e. only submissions of my Request A Quote form). It can also set up page-level filters (I.e. only form submissions on the /request-a-quote page should count).
4. **It gives you a link to connect your ad platforms and analytics tools.** An AI tool cannot sign in to your Google Ads account for you, so it gives you a link to a secure page to open in your browser. From that page you would log in to your account, approve the connection on the platform's own authorisation screen, then you tell the AI you're done.
5. **It asks which conversion to send.** It reads the conversions on your connected ad account (the same list you'd see in the dropdown if you were using the flow builder) and suggests which one to use. If the account has nothing usable, it offers to create one.
6. **It builds the flow as a draft and checks it.** It builds the conversion flow in your account (you could literally log in to app.converly.io and see it sitting there). It then runs validation on the flow to make sure everything is set up correctly.
7. **It publishes the flow.** It sets the flow to Published in your account so that it's ready to start tracking.
8. **It gives (or installs) the tracking code.** It gives you the tracking code to place on your website, or if your AI tool is connected to your website via MCP or has access to its files, it can install the code for you.
9. **It confirms the conversion arrived.** Once a real submission comes through, it reads your conversion log and tells you which destinations accepted the conversion and which didn't.
There are a few things it deliberately can't do on its own:
- **It can't connect an account for you.** Every connection goes through a link you open and approve yourself, on the platform's own sign-in screen. Your credentials never touch the AI tool.
- **It can't quietly put a test conversion into your reporting.** Where a platform has a proper test mode, it uses it. Where one doesn't exist, the test would be a real conversion that shows up in your campaign reporting, so it has to ask you first.
- **It can't invent options.** Form names, event types and conversions all come from your real accounts. If your form tool isn't supported, it tells you so rather than improvising some workaround that looks like it worked.
- **It can't delete or disconnect anything by accident.** Removing a flow or disconnecting a platform means typing the exact name of the thing being removed.
---
# The tracking script
URL: https://help.converly.io/platform/tracking-script
Category: platform
Updated: 2026-09-23
What the snippet does, what it costs your page, how it fails.
What the snippet you add to your site actually does, what it costs your page, and how it behaves when things go wrong.
## What you install
To use Converly, you need to install a script tag in the `` of every page. You will be given it when you create a flow in your account (or you can access it in the Settings section of your account). It looks a bit like this:
```html
```
The site key travels in the URL rather than a `data-` attribute deliberately. This is because popular WordPress optimization plugins strip `data-` attributes when they defer scripts, and this breaks the tracking as the code snippet wouldn't know which Converly account to associate conversions with.
## What it does
When placed on your website, the Converly tracking code does the following:
- Sends a heartbeat back to Converly's servers so we know it's installed and running.
- Reads any ad click identifiers and campaign parameters from the URL when the visitor first arrives and stores them in first-party cookies on your domain.
- Records the landing page and referrer once, so the original source survives later navigation.
- Loads the detection module for whichever form tools your published flows use
- The detection module then listens for a successful conversion (i.e. the Gravity Forms detection module listens for the specific signal Gravity Forms sends on submission success) and reports it back to the main Converly tracking code
- The Converly tracking code then generates a conversion ID and sends everything to our servers as a conversion, where it is processed and sent on to your ad platforms and analytics tools.
## What it costs your page
The Converly tracking code is small and served to your visitors from the nearest of 750+ data centers around the world, so it won't affect your page load speed and the normal operation of your website.
| Attribute | Value | Notes |
| --- | --- | --- |
| Transfer size | ~41 KB | Gzipped, which is what actually crosses the network. Around 136 KB uncompressed. |
| Delivery | 750+ edge locations | Converly's tracking code is stored and served to a visitor from the nearest of 750+ data centers around the world, so load time does not depend on where in the world they are. |
| Loading | asynchronous | Does not block rendering or delay your page becoming interactive. |
| Detection code | loaded on demand | Only the detection needed for the tools you actually use is fetched, rather than every supported integration. |
| Failure mode | silent and safe | If the script fails to load, your page and your forms work exactly as they did before. It never sits between a visitor and your form submitting. |
## When it refuses to run
If the browser sends the Global Privacy Control signal, the script stops immediately and completely. No cookies, no storage, no network request. And if your cookie banner is set up to hold Converly back ([here's how](/cookie-consent/how-it-works-with-cookie-banners)), the script doesn't run at all until the visitor accepts marketing cookies.
## When the network is unreliable
A conversion that cannot be sent to Converly's servers is queued locally and retried on the next page load, using the same conversion identifier so it cannot double count. Personal data is stripped before anything is written to local storage, so a queued conversion carries the identifiers needed to attribute it and nothing sensitive.
Sends also survive the visitor navigating away mid-submission, which is required for a form that redirects to a thank-you page.
## Guardrails
- Two copies of the script on one page do not double fire. The second stands down.
- Conversions are only accepted from the domains on your account, so a copied snippet on another site records nothing. See [Security and access](/platform/security).
- Oversized field values are capped, so a visitor pasting something enormous into a textarea cannot break the submission.
- Sensitive fields are skipped before their value is read. See [What happens to personal data](/platform/personal-data).
---
# Click IDs and attribution
URL: https://help.converly.io/platform/click-ids
Category: platform
Updated: 2026-09-19
Which ad identifiers we capture, and how long they last.
Which advertising identifiers Converly captures, where they are stored, how long they last, and which one is sent with a conversion.
When a visitor clicks one of your ads, ad platforms like Google & Meta append a click ID to the end of the URL they land on.
So instead of clicking an ad and landing on `https://converly.io`, visitors actually land on `https://converly.io?gclid=123456789`.
There are unique identifiers for every click on every ad platform, and the idea is that if you can capture them and pass them back with the conversion, then the ad platform can use it to match the conversion to the original ad click with 100% confidence.
## Identifiers Converly captures
To help improve the accuracy of your conversion tracking, Converly captures these identifiers, stores them in a cookie in the visitor's browser, and then passes them back to the ad platforms with each conversion.
The below tables outline the identifiers that Converly captures:
### Captured on arrival
| Identifier | Platform | Description |
| - | - | - |
| gclid | Google Ads | Standard Google Ads click identifier. |
| gbraid | Google Ads | Used for app and web journeys on iOS where `gclid` is often absent entirely. |
| wbraid | Google Ads | Used for web-to-app journeys on iOS, same reason. |
| fbclid | Meta | Stored in the format Meta’s own pixel uses, so both agree on the value. |
| ttclid | TikTok | Sent with the server-side conversion. |
| rdt_cid | Reddit | Paired with the Reddit pixel’s visitor identifier where one exists. |
| li_fat_id | LinkedIn | Present on ad landing pages when the advertiser has enhanced conversion tracking enabled. LinkedIn’s own tag does not need to be installed. |
| oppref | ChatGPT Ads | Kept for the platform’s own 30 day window rather than the default. |
One further identifier is generated rather than captured. `_fbp` is Meta’s browser identifier, and Converly creates it in Meta’s own format when it is absent, because Meta counts it toward match quality. It is the only platform-owned identifier Converly writes rather than only reads. Every other one is left alone, as set out below.
### Pulled from the platform's own tag
Several platforms set their own browser identifier through their own pixel. Where one is present, Converly reads it and passes it along to improve matching. It does not create these, so if you do not run that platform’s pixel on your website the value is simply absent.
| Identifier | Platform | Description |
| - | - | - |
| `_rdt_uuid` | Reddit | Set by the Reddit pixel. Sent alongside the Reddit click identifier. |
| `_ttp` | TikTok | Set by the TikTok pixel. |
| `__obref` | ChatGPT Ads | Set by OpenAI’s pixel. Converly deliberately does not create this one, because doing so would set a long-lived identifier on every page of every site including those with no ChatGPT Ads destination, and OpenAI’s own coverage metric does not count it. |
| `_ga` | GA4 | Google Analytics client identifier, taken from the last two segments of the cookie value. |
| `_ga_` | GA4 | Google Analytics session identifier. There is one of these per GA4 property, so the cookie jar is scanned for the pattern rather than a single fixed name. |
## How identifiers are stored
Converly stores identifiers in **first-party cookies in the visitor's browser**.
### How cookies are scoped
A cookie set on `example.com` cannot normally be read on `app.example.com` because, as far as the browser is concerned, those are two separate places.
This presents a problem because it's common for someone to click your ad, land on your marketing site (i.e. `example.com`), and then convert on a subdomain (like `app.example.com`). And if the cookie can't be read on the subdomain (i.e. `app.example.com`) then the click ID can't be retrieved and sent with the conversion.
So Converly sets its cookies across your whole domain rather than on the single subdomain the visitor happened to land on. So if someone clicked your ad and arrived on `example.com`, then read something on `blog.example.com`, and finally converted on `app.example.com`, their click ID follows them the whole way.
To do that, Converly has to work out which web address actually belongs to you. For `app.example.com` that is `example.com`. For `shop.example.co.uk` it is `example.co.uk`, because `co.uk` is a shared ending that nobody owns, in the same way nobody owns `.com`.
There is a published list of those shared endings, and Converly checks your domain against it before setting anything. That is what stops a cookie ever being set wider than the domain you actually own.
### How cookies are stored
The cookies are stored under 3 different naming conventions depending on whether we created the cookie, whether it's shared with the platform's own pixel, or whether it's owned entirely by another tag.
| Name | Type | Description |
| - | - | - |
| `_converly_*` | Our Storage | Used when the platform doesn't store the click identifier in a cookie of its own. For example `_converly_gclid` for storing the Google Click ID (GCLID) or `_converly_ttclid` for storing the TikTok Click ID. Namespaced so it cannot collide with anything else on your site. |
| Platform's own name | Shared | Used when the platform's pixel/tag creates its own cookie. We use this rather than creating our own to ensure there's no mismatch. This includes `_fbc` & `_fbp` (Meta Ads) as well as `__oppref` (ChatGPT Ads). |
Each identifier is stored with its own lifetime. Generally speaking, most are kept for 90 days, but our ChatGPT Ads integration follows OpenAI's shorter click window and only stores the identifier for 30 days, whereas the cookies set by another platform's own pixel (such as `_ga` for Google Analytics) keep whatever lifetime that pixel gave them.
| Platform | Stored For | Description |
| - | - | - |
| Google Ads | 90 days | Applies to `gclid`, `gbraid` and `wbraid`. |
| Meta | 90 days | Applies to `_fbc` and `_fbp`. |
| TikTok | 90 days | Applies to `ttclid`. |
| Reddit | 90 days | Applies to `rdt_cid`. |
| LinkedIn | 90 days | Applies to `li_fat_id`. |
| ChatGPT Ads | 30 days | Matches the platform’s own click window. The original capture time is stored separately, so the window stays fixed rather than extending each time the visitor returns. |
Campaign parameters (like utm_medium, utm_source, etc) are stored for 90 days, as is the lead's initial landing page and referrer (which are captured on a first-touch attribution basis).
## Which identifiers are sent
Each platform accepts a different set of identifiers, and the ones that travel with a conversion are selected at send time from whatever was captured.
| Platform | Identifiers Sent | Description |
| - | - | - |
| Google Ads | one click ID | Exactly one of `gclid`, `gbraid` or `wbraid` per conversion, with `gbraid` preferred when both braid identifiers are present. `gclid` travels with hashed contact details. `gbraid` and `wbraid` travel without them, because attaching user data to those two marks the upload as enhanced conversions for leads, which Google does not support for them. |
| Meta | click ID and browser ID | `fbc` and `fbp` together in `user_data`, unhashed, alongside the hashed contact details. |
| TikTok | click ID and browser ID | `ttclid` and `ttp` together in `user`, unhashed, alongside the hashed contact details. |
| Reddit | click ID and browser ID | `rdt_cid` as an event-level `click_id`, and `_rdt_uuid` as `user.uuid`. |
| LinkedIn | click ID only | `li_fat_id` in `userIds`, as a `LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID` entry next to the hashed email. |
| ChatGPT Ads | click ID and browser ID | `oppref` at the event level and `__obref` inside the `user` block. An event-level `obref` is rejected outright. |
| GA4 | client and session ID | The visitor's `_ga` client identifier and `_ga_` session identifier, with `gclid` passed through as an event parameter. |
It's possible for a person to click your ads and visit your website multiple times before converting, and in that case we need to decide which identifiers to send (the identifiers from the first click, the last click, or something in between).
Fortunately, ad platforms and analytics tools document which one they want you to send and we simply follow their requirements.
| Type | Attribution Model | Description |
| - | - | - |
| Click identifiers | last touch | We send the click identifier from the most recent visit to the website. |
| Campaign parameters | last touch | We capture and send campaign parameters from the most recent visit to the website. Note these are only sent to analytics tools as ad platforms don't require them. |
| Landing page and referrer | first touch | Written once and never overwritten, so how the visitor originally found you is retained alongside what they last clicked. |
Similarly, analytics tools like Google Analytics require us to send the Client ID and Session ID with each conversion.
Without it, GA4 has no way to connect the conversion being reported to the website session it happened in. The conversion event still arrives, but because there's no session ID to attach it to, GA4 creates its own session just for this one conversion event. And because it doesn't know what the Source, Medium or Landing Page of that session was, they get recorded as '(not set)'.
To fix this common problem, Converly captures the Client ID and Session ID (assuming the customer has Google Analytics on their website) and sends it over with each conversion.
## Limits
There are a couple of limitations worth knowing about:
* A visitor who arrives from organic channels (like organic search, organic social, direct traffic, etc) will have no click identifier (because they didn't click an ad). The conversion is still captured in Converly and still sent to ad platforms, and those ad platforms will try to match it to an ad click based on the contact details passed through. Assuming this person hasn't clicked an ad, this matching will fail and the conversion won't show up in reports in your ad platforms. This is completely expected behaviour and how it should work.
* Cookie lifetime in the browser is subject to each browser’s own limits, which are shorter in Safari than elsewhere.
See also [Deduplication](/platform/deduplication) for how identifiers interact with a pixel you already have installed, and [Normalization and hashing](/platform/normalization) for what happens when no click identifier is present.
---
# How conversions are detected
URL: https://help.converly.io/platform/form-detection
Category: platform
Updated: 2026-09-19
What counts as a conversion, and the five categories they fall into.
What Converly treats as a conversion, the five categories a conversion can fall into, and what each category means for the data you end up with.
## The rule
A conversion is recorded only when the tool confirms the submission succeeded. Converly never tracks proxies for a conversion (like clicking the submit button or visiting a thank you page) and it never tracks rejected form submissions (like those that get rejected because the user missed a required field, or entered their email address in the wrong format, or spam submissions).
## Approaches to detection
There are many different ways to detect a successful form submission (or meeting being booked or chat being started), and it really depends on the tool you are using. Some form tools send a postMessage event when a form is successfully submitted, others you need to watch for a visible element on the page. Some give you the lead's name, email, phone, etc with the success event, others you have to call the API or set up a Webhook.
Generally speaking though, they all fall into one of 5 categories, and the category determines what Converly can capture and how it captures it.
| Category | How it works |
| - | - |
| Category 1: Read from the page | The form is part of the HTML of the page, so the lead's details can be grabbed from the form when it is successfully submitted. Examples include Gravity Forms, Webflow forms, Elementor forms and more. |
| Category 2: Sent by the tool | The form is loaded on the page but isn't part of it (usually it's loaded inside an iFrame). However, its success message carries the lead's name, email, phone, etc. so they can be captured from there. Examples include HubSpot Forms, Tally Forms and others. |
| Category 3: Fetched from the tool | The form is loaded on the page but isn't part of it (usually it's loaded inside an iFrame). It sends a success message but doesn't include the lead's name, email, phone etc so Converly listens for the success message then fetches the lead's details via an API call. Examples include Typeform, Calendly and Acuity Scheduling. |
| Category 4: Reported server to server | The conversion happens somewhere where Converly's code cannot be installed, so the platform sends it to us directly (usually via Webhooks or a native integration). Examples include Stripe, Recurly and Teachable. |
| Category 5: Custom conversions | Converly has an API which allows you to send custom conversion actions. Examples include a SaaS tool sending a conversion when someone purchases a subscription, or a custom-coded website sending a conversion when their custom-built 'Request A Quote' tool is used. |
## Category 1: Read from the page
Tools in this category render the form in the HTML of the page, so both detecting the form was successfully submitted and extracting the lead's name, email, phone, etc. can be done via the Converly JavaScript code you place on your site.
### How data is captured
Even within this category, there is no single way to detect a successful form submission (or a meeting being booked or a chat being started). This means detection has to be implemented on a per tool basis.
Generally speaking though, there are 4 different ways this happens:
| Pattern | Condition | What Converly does |
| - | - | - |
| Success event | fields readable | The tool emits an event on success and the submitted values are still present. Values are read at that point. |
| Success event | fields cleared | The tool clears the form before announcing success. Values are captured as they are entered and held until success is confirmed. |
| Framework event | proprietary | The tool uses its own internal messaging rather than standard browser events. Detection subscribes to that framework directly. |
| Dual embed | hosted and inline | The tool offers both an embedded and a hosted version, which behave differently. Both paths run and resolve to the same conversion. |
### How fields are read
Converly does not require you to map the fields in your form (i.e. you don't have to manually tell us which field contains the name or email). Converly works out which field contains the email address, the phone number, the name, etc by scoring each field and taking the strongest available signal.
**Signal precedence**
| Signal | Strength | What is matched |
| - | - | - |
| Input type | strongest | `type="email"` and `type="tel"` are treated as definitive. |
| Autocomplete attribute | strong | `autocomplete="email"`, `tel`, `given-name`, `family-name` and `name` are read where present, including the variants some form libraries emit. |
| Field name or id | weakest | Used only when the first two are absent. Names are normalised before matching, so `first_name`, `firstName`, `First-Name` and `FirstName` all resolve to the same field. |
Email address, phone number, first name, last name and full name are identified this way. A field that matches nothing is left alone rather than guessed at.
Sensitive fields are excluded before their value is ever read, by type, by name and by visible label. See [What happens to personal data](/platform/personal-data).
### Forms that reload the page
Certain form tools submit by reloading the page, which destroys the work the Converly script is in the middle of doing. And leaving the page cannot be treated as success either, because the page reloads whether the submission succeeded or failed.
In this case, Converly takes a snapshot of the lead's name, email, phone, etc when the visitor submits the form, carries it across the page reload, and then reads the outcome from what the tool rendered on the next page.
If a success message is shown on the next page, a conversion is deemed successful and is sent to your chosen ad platforms and analytics tools. If an error message is shown (like if the visitor forgot to complete a required field), then no conversion is sent.
For form tools that use this method, Converly maintains a list of what the success and error messages look like and regularly tests it on live versions of the form to detect changes in the way the form tool shows these messages.
### Forms that redirect
Where a form redirects to a thank-you page, work still in flight is carried across the redirect and completed on the next page. Anything already sent from the server is not repeated.
## Category 2: Sent by the tool
Tools in Category 2 render the form inside an iFrame on your website, which means the lead's name, email, phone, etc cannot be read from the form directly.
Instead, the success message that the tool sends (usually a postMessage to the browser) provides them, so Converly reads them out of that message.
From a Converly customer perspective, this is nearly identical to Category 1 (reading them from the page). The conversion is still only recorded when the submission is confirmed successful, the same data is captured, and the conversion is sent to your chosen ad platforms and analytics tools in near real-time. The difference is only in where we get the data from.
But because the message arrives from outside your page, it is validated before anything is accepted. Here's how we validate it:
**What is checked before a message is trusted**
| Check | Rule | What it prevents |
| - | - | - |
| Origin | the platform's own domain, over HTTPS | A script on your page claiming to be the platform, and a message arriving over plain HTTP. |
| Source | the frame Converly is expecting | Another frame on the page forging a success message. |
| Version | a message shape we recognise | An unrecognised payload being interpreted as if it were understood. |
| Site key | this site's own key | A message intended for a different site being accepted as yours. |
## Category 3: Fetched from the tool
Tools in Category 3 send a success message when a form is successfully submitted (usually a postMessage to the browser), but do not provide the lead's name, email, phone, etc as part of the success message.
In this case, Converly records the conversion in our database as soon as it happens, and it saves the data that is only available in the browser (like the Google Click ID, Facebook Click ID, User Agent, etc).
It then fetches the contact details from the tool separately (usually via an API call or a Webhook) and joins the two together.
The below table shows how the details are retrieved and how they are joined.
| Method | What it uses | How it works |
| - | - | - |
| Platform's own ID | the success message | The tool's success message carries its own record ID, such as a booking ID or a form submission ID. Converly uses that ID to fetch the submission from the tool's API. Tools that use this method include Calendly, Cal.com and Typeform. |
| Tracking identifier | hidden field | For tools whose success message carries no ID. Converly generates an identifier, passes it into the form through a hidden field, then queries the tool's API for the submission carrying it. Needs the hidden field adding to the form once, per form. Tools that use this method include Jotform. |
| Conversion tracking snippet | platform code field | Where the tool offers a field for conversion tracking code, a Converly snippet posts from inside the tool's own frame and the Converly code on the page receives it. Nothing is added to the form itself. Tools like Acuity Scheduling work this way. |
Although the conversion is assembled over multiple steps, it actually happens quite quickly:
| Step | Typical time | What happens |
| - | - | - |
| Conversion recorded | immediately | The conversion is recorded as soon as the platform confirms the submission was successful, before any details are fetched. |
| Lead details retrieved | 1 to 5 seconds | It usually takes between 1-5 seconds for the platform's API to return the details of the submission. |
| Halves joined | under 100 ms | Where both halves arrive together, they are matched and promoted to a conversion. |
So for tools in Category 3, a conversion is typically sent to the ad platform or analytics tool anywhere between 1-5 seconds after it happened.
That being said, the timestamp sent with the conversion is the one recorded when the submission initially happened, so an ad platform or analytics tool will record the exact time the conversion happened (even if it was actually sent to them 5 seconds later).
### When only one half arrives
In rare cases, one half of a Category 3 conversion never makes it to our servers. What Converly does depends on which half is missing, and the two are treated differently on purpose.
If the tool sends us the lead's name, email, phone, etc., then Converly will still send the conversion with just that information. Ad platforms know who has clicked your ads, so sending the conversion with just this data can still result in a match (assuming the user entered the email address or phone number linked to their account on that ad platform). In this scenario, information that is usually retrieved from the browser (like the click identifiers, user agent, etc) is not sent.
If the browser's half arrives and the tool's half never does, nothing is reported. This is a deliberate measure as typically the browser only knows a form is submitted or a meeting is booked, but it does not know it was confirmed. It may have been rejected due to invalid data, not passing a spam check, etc. So if the tool does not provide the user's details, then we consider that form submission/meeting booking failed and do not send a conversion.
## Category 4: Reported server to server
Tools in Category 4 do not allow outside code (like Converly's JavaScript snippet) to be placed on the page where the conversion happens (Stripe's hosted checkout is a common one).
They do, however, allow data about the lead (name, email, phone, etc) to be retrieved via API calls, Webhooks or a dedicated app/integration.
**What data is available in this category**
As you'll see in the table below, the fact the Converly JavaScript code is not installed on the page where the conversion happens changes what data is available to us.
| Data | Availability | Why |
| - | - | - |
| Contact details | Available | Provided to us by the tool via API calls, Webhooks or a dedicated Converly app/integration. |
| Click identifiers | Not Available | Because Converly's JavaScript code cannot be placed on the page where the conversion happens, we have no access to the ad platforms' click IDs as they are only available in the browser (and our code isn't running in the browser on the conversion page). |
| IP and user agent | Not Available | Because Converly's JavaScript code cannot be placed on the page where the conversion happens, we have no access to the IP address and User Agent as they are only available in the browser (and our code isn't running in the browser on the conversion page). |
**What gets sent to each destination**
Because certain information is not made available to us with each conversion in Category 4 tools, it changes what data is sent to each destination.
| Destination | Behaviour | Why |
| - | - | - |
| Meta | sent | Reported through the Conversions API on contact details alone, which Meta supports. |
| Google Ads | sent | Requires the conversion action to be set up for enhanced conversions for leads rather than for web, because there is no browser conversion for it to enhance. |
| GA4 | not sent | GA4 attributes on session, and there is no session. Sending would create a conversion attributed to nothing, so Converly does not send one. |
| Other destinations | sent | Reported from the server on contact details, in the same shape as Meta. |
## Category 5: Custom conversions
Categories 1 to 4 show how we detect conversions in known third-party tools like Calendly, Gravity Forms, Typeform, etc.
However, Converly also provides an API that you can use to send conversions to us from custom-built forms and applications. Common examples include a SaaS app that wants to send a conversion only after the user verifies their email address, or a website with its own custom-built 'Request A Quote' tool that wants to send a conversion once the quote is generated.
### Why your code reports it rather than ours
A conversion is only recorded once the thing actually succeeded, and here your backend is the only place that knows.
Converly's JavaScript code can see somebody click the button on your signup page. It cannot see whether the account was created, whether the card was declined, whether the email address was already taken, or whether the trial actually started. Your backend knows all of that, so your backend is what reports it.
### The problem this creates
Your backend knows who signed up. It does not know they arrived from a Google ad three days ago, because click IDs only exist in the browser and your server never saw them.
So a Category 5 conversion arrives in two halves, and Converly joins them back together.
**The two halves**
| Half | Where it comes from | What data it provides |
| - | - | - |
| Browser | Converly's JavaScript code on your signup page | The Google Click ID, the Facebook Click ID, the Facebook browser cookies, the page URL and the referrer. Everything that only exists in the browser. |
| Backend | Your own code, calling Converly's API | The lead's name, email, phone, etc, and the confirmation that the thing actually happened. |
The two are tied together by a correlation token. When the visitor reaches your signup page, Converly's JavaScript code generates a random token, sends it to Converly along with everything it captured from the browser, and writes it to a short-lived cookie on your domain.
Your backend reads that token off the incoming request and passes it back when it reports the conversion. Converly matches the two halves on the token and sends one conversion carrying both.
### The SDK
You can call the API directly, but Converly publishes a server-side SDK that handles the signing, the retries and the cookie reading for you.
```bash
npm install @converly/sdk-node
```
It runs on Node 18 or later, has no runtime dependencies, and ships in both module formats. You create a client once using the three values your Converly dashboard gives you, then use two methods.
**What the SDK handles**
| Method | What it does |
| - | - |
| `readCorrelation(req)` | Pulls the correlation token out of the `cnv_signup_correlation` cookie. It accepts an Express request, a Fetch `Request`, or a framework's own cookie object, so it works the same way on Next.js, Astro, SvelteKit, Remix and Express. |
| `completeSignup(payload)` | Signs the request and sends it, then tells you what actually happened rather than just succeeding silently. |
Despite the name, `completeSignup` reports any conversion your backend confirms. It is named that for historical reasons. For a lead form you use it exactly the same way, with a `customer_event_id` such as `lead_4471`.
**The step that is easiest to miss**
The correlation cookie only exists if the page captured conversion intent in the first place, so you have to mark the thing that starts the conversion:
```html
```
Or call `window.__converly.captureSaasSignupIntent()` from your own JavaScript, for a single page app route change or an SSO button that is not a form at all.
Without this there is no token to read, `readCorrelation` returns nothing for every visitor, and conversions either fire at reduced match quality or not at all. It is the most common reason an otherwise correct integration produces nothing.
If your backend sits on a different domain from your site, the cookie will not be on the request for your server to read. Converly's JavaScript code exposes `window.__converly.getCorrelationToken()` for that case, so your front end can read the token itself and pass it to your backend along with everything else.
**When something goes wrong**
A Converly outage never becomes an exception inside your signup handler. Server errors, rate limits and network timeouts are retried three times behind the scenes, waiting one second, then three, then nine. A `4xx` response fails immediately instead, because a rejected request is a configuration problem rather than a temporary one. Every retry is signed fresh, so a slow run of retries cannot drift outside the five minute signature window.
### What your backend sends
**Fields in the call**
| Field | Required | What it is |
| - | - | - |
| `correlation_token` | yes, in practice | The token Converly's JavaScript code put in the cookie. This is what connects the conversion to the ad click. |
| `customer_event_id` | yes | Your own identifier for this conversion, such as `account_created_8842`. Used to make sure it only ever fires once. |
| `email` | yes | The lead's email address. |
| `phone` | no | The lead's phone number. |
| `first_name`, `last_name` | no | The lead's name. |
Send these raw, exactly as the customer entered them. Do not hash them first. Each ad platform normalises contact details differently, and a value that has already been hashed cannot be re-normalised for a second platform. Converly hashes per destination. See [Normalization and hashing](/platform/normalization).
### Making sure it only fires once
The `customer_event_id` you choose is what stops a conversion being counted twice.
Converly keeps a durable record of which identifiers have already fired, held for 18 months. So if your backend retries after a network timeout, or your code path runs twice, or a returning customer logs in months later and your own guard misses it, the conversion still only reaches your ad platforms once.
This matters more here than anywhere else on this page, because in Categories 1 to 4 the conversion is a one-off event that happened in a browser. In Category 5 it is a call your own code makes, and code gets retried. The SDK itself retries on a server error, so the most likely source of a repeat call is Converly's own client library rather than anything you wrote.
### Order and timing
Neither half has to arrive first, and neither has to wait for the other.
**What happens in each case**
| Situation | What happens |
| - | - |
| Browser half arrives first | The usual case. Converly holds it for 24 hours waiting for your backend to confirm. |
| Backend half arrives first | Held for about five minutes for the browser half to catch up. If it lands in that window the conversion fires with full attribution, and if it never does the conversion is still sent on contact details alone. |
| Backend half arrives much later | Common where an account only becomes real after email verification. Inside 24 hours you get the full conversion with click IDs. Beyond that it is sent on contact details alone. |
The practical version is that you call the API whenever the conversion genuinely becomes true, rather than trying to call it at the same moment the visitor is on the page.
### When there is no browser half
Sometimes the browser half never arrives. The visitor uses an ad blocker, or sends a Global Privacy Control signal, or signs up directly without ever landing on a page carrying your Converly snippet.
By default, Converly fires nothing in that situation rather than sending a conversion with no attribution attached to it. In the SDK this is the behaviour when no correlation token is found, and the call simply does nothing rather than failing.
If you would rather have the conversion anyway, matched on contact details alone, set `allow_uncorrelated` to true on the call. That is worth doing deliberately rather than by default, because it also fires for accounts created by an admin, by a backfill script, or by anyone who never visited your marketing site at all.
### Authentication
The call from your backend is signed, and the signature covers the method and the path as well as the payload, so a captured request cannot be replayed against a different endpoint. Signatures are only accepted for five minutes, so a captured request cannot be replayed later either.
The SDK does this for you, so signing is only something you need to implement if you are calling the API directly. See [Security and access](/platform/security).
---
# Deduplication
URL: https://help.converly.io/platform/deduplication
Category: platform
Updated: 2026-09-19
How Converly stops the same conversion being counted twice.
Learn about the many mechanisms Converly has in place to prevent double-counting conversions.
## Preventing duplicate submissions
It is possible for a lead to submit a form twice on your site in a manner that should only count as one conversion.
For instance, they might complete the form, hit the submit button, but the submission is rejected because they missed a required field or entered an invalid input (i.e. they enter an email address without the @ symbol). They then correct the error and submit the form again.
To prevent these two form submission attempts from being counted as two conversions, Converly listens for a 'submission success' signal being sent by the form tool and only fires the conversion when it is received. This prevents rejected submissions (like when a required field is left blank) from being counted as a conversion.
This is different for every form tool, and you can read more about how it works in our article on Form Detection.
## Deduplication inside Converly
Converly will not record the same conversion twice regardless of how many times it arrives. Five separate mechanisms prevent it, each one catching the duplicates the one before it missed:
**The form tool announces success more than once.** This is far more common than it sounds. Fluent Forms fires its success signal twice, once on the form itself and once on the page body. Contact Form 7 sends two of them when a WordPress caching plugin has loaded its script twice. Elementor's success event gets re-triggered by other plugins on the page, and HubSpot occasionally sends its own a second time. Converly handles each of these on a tool by tool basis, either by listening to only one of the duplicate signals or by marking the form as already being processed and ignoring anything that follows it.
**A conversion fails to send and is retried.** If the visitor's connection drops or times out mid-send, the conversion is held in a short queue in their browser and sent again on the next page they load (for up to 30 minutes). It carries the same identifier as the first attempt, so the retry cannot create a second conversion.
**The same identifier arrives twice.** In rare cases, the Converly code snippet you place on your site can send the conversion to our servers, the conversion is saved successfully, but the response never makes it back to the visitor's browser. The browser assumes the worst and sends it again, but because a conversion is given its identifier by our JavaScript snippet as soon as it happens (as opposed to when it's received by our servers), Converly will recognise the second one is a duplicate, will disregard it, and report back to the browser that the conversion already exists.
**One conversion arrives in two pieces.** With some form tools, we receive the signal that the form was submitted successfully via the JavaScript snippet you place on your site, but we have to fetch the lead's name, email, phone, etc via the tools API. These are two separate pieces of information about one conversion, and they arrive from different places at different times. Converly joins them rather than recording each of them separately. See [How conversions are detected](/platform/form-detection).
**Your own code reports the same conversion twice.** When your backend reports a conversion through Converly's API, you supply your own identifier for it (often a user or account ID from your database). Converly keeps a record of every identifier that has already fired, held for 18 months. So an API call your code retries after a timeout, or a returning customer signing in months later, does not create a second conversion.
Between them, these mean a visitor double-clicking the submit button, a page being refreshed, a connection dropping halfway, a plugin firing an event twice, or your own code running twice, all end up as a single conversion.
## Deduplicating in ad platforms
Most ad platforms recommend you fire a conversion browser-side (i.e. you send an event to the Google Tag/Facebook Pixel on the website) and also send the same conversion server-side as well.
The goal is redundancy. If either of the conversions don't arrive, maybe because an ad blocker stops the Google Tag from loading on the site so therefore the browser-side conversion event is never seen, then the idea is that the other conversion still arrives and it can be recorded successfully.
But what happens if both of them arrive? How does the ad platform know not to count them as two conversions?
The mechanism is slightly different by platform, but the general idea is that Converly sends a matching identifier with both the browser-side conversion and the server-side conversion and the ad platform then uses that shared identifier to deduplicate the conversion.
Here's the identifiers Converly sends to each platform:
| Platform | Identifier | Description |
| --- | --- | --- |
| Meta | `event_id` | The value passed to the pixel as `eventID` is the same value sent with the Conversions API event. Meta keeps whichever of the two arrived first and discards the other. |
| Google Ads | `transactionId` | A stable transaction identifier derived from the event itself, so a repeat upload of the same conversion is recognised rather than added. |
| GA4 | `transaction_id` | GA4 only deduplicates purchase events by transaction ID, so the same protection does not exist for lead events. Converly accounts for this by never re-firing a GA4 event that has already been sent, rather than relying on GA4 to catch it. |
| LinkedIn | `eventId` | Shared between the Insight Tag and the Conversions API. LinkedIn always keeps the Insight Tag event and deducts the duplicate from the Conversions API count, so the two appear separately in reporting. |
| TikTok | `event_id` | The same identifier is sent to the pixel and to the Events API. TikTok recognises the pair and counts it once. |
| Reddit | `conversion_id` | Sent as `metadata.conversion_id` on the server event and as `conversionId` on the pixel. |
| ChatGPT Ads | `event_id` | The same identifier is sent to the browser tag and with the server event. |
| Microsoft Ads | `eventId` | Shared between the UET tag and the Conversions API, along with the same tag ID and event name. |
| Pinterest | `event_id` | Pinterest keeps the first event it captured and removes duplicates within 48 hours. |
| Snapchat | `client_dedup_id` | Used for all events except purchases, which deduplicate on `transaction_id` instead. 48 hour window. |
| X Ads | `conversion_id` | Sent with both the pixel event and the Conversions API event. Only events received within 48 hours of each other are deduplicated. |
## What this does not solve
Our deduplication systems prevent accidentally double counting the *same* conversion event.
They do not prevent two genuinely separate submissions from the same person being sent to your ad platforms and analytics tools, and that is by design. If someone submits your contact form twice in a week, that is two separate conversion events and should be treated as such.
If you prefer those to be counted as one conversion, then there are settings inside the ad platforms and analytics tools for this. For example, In Google Ads you can set a conversion to be counted once per ad click, and in Google Analytics you can set a conversion to only be counted once per session.
---
# Normalization and hashing
URL: https://help.converly.io/platform/normalization
Category: platform
Updated: 2026-09-19
How contact details are formatted and hashed before they are sent.
How Converly formats and hashes the lead's contact details before sending them to each ad platform, and why the exact format decides whether a conversion matches.
## What is normalisation and hashing?
When Converly sends a conversion to an ad platform, it sends the lead's name, email address and phone number along with it. The ad platform then uses these details to help match the conversion back to a real person and the original ad they clicked.
But for privacy and security reasons, ad platforms don't allow you to just send personally identifiable information (like name, email, phone, etc) as plain text. Instead, they require you hash them.
If you've never heard of it before, hashing turns a sensitive piece of text into a fingerprint (i.e. a long string of letters and numbers) that doesn't contain the original text.
So when hashed, the email address jane@example.com would become 8c87b489ce35cf2e2f39f80e282cb2e804932a56a213983eeeb428407d43b52d
The ad platforms store personally identifiable information about their users in a hashed format, and the idea is that if we send the data in the same hashed format, they can match the two fingerprints together.
But a fingerprint only matches if the text it was made from is exactly the same, character for character. So continuing the example from above, `Jane@Example.com` and `jane@example.com` produce completely different fingerprints. And if the fingerprints we send don't match the fingerprints the ad platforms have stored, the ad platform still accepts the conversion and reports it as successful, but it's never matched to anyone and never shows up as a conversion in your reports.
That's why normalization matters. Before hashing, Converly formats each bit of information (name, email, phone, etc) exactly the way each ad platform formats the details of its own users, so the fingerprints will match when we send them over.
## How we normalize and hash personal information
Every ad platform has its own rules for how each bit of information should be formatted, and some platforms take certain details without hashing at all. The table below shows at a glance what each platform receives, and the sections after it show exactly how each detail is formatted.
| Platform | Email | Phone | Name | Country |
| - | - | - | - | - |
| Google Ads | hashed | hashed | full address only | full address only |
| Meta | hashed | hashed | hashed | hashed |
| GA4 | hashed | hashed | hashed | not hashed |
| LinkedIn | hashed | not accepted | not hashed | not hashed |
| TikTok | hashed | hashed | not accepted | not accepted |
| Reddit | not hashed | not hashed | not accepted | not accepted |
| ChatGPT Ads | hashed | not accepted | not accepted | not hashed |
| Microsoft Ads | hashed | hashed | not accepted | not accepted |
| Snapchat | hashed | hashed | hashed | hashed |
| Pinterest | hashed | hashed | hashed | hashed |
| X Ads | hashed | hashed | not accepted | not accepted |
| AdRoll | hashed | not accepted | not accepted | not accepted |
| Taboola | not accepted | not accepted | not accepted | not accepted |
### Name
The table below shows how we normalise and hash the lead's name for each platform.
| Platform | Format | Hashed | Notes |
| - | - | - | - |
| Google Ads | full address only | | Google Ads only accepts a name as part of a full postal address, together with a postal code and country. |
| Meta | trimmed, lowercased | yes | First and last name are sent separately. |
| GA4 | trimmed, lowercased | yes | First and last name are sent separately. |
| LinkedIn | trimmed | no | LinkedIn requires names in clear text, and only accepts them when both a first and last name are present. |
| TikTok | not accepted | | TikTok doesn't accept a name with a conversion. |
| Reddit | not accepted | | Reddit doesn't accept a name with a conversion. |
| ChatGPT Ads | not accepted | | ChatGPT Ads doesn't accept a name with a conversion. |
| Microsoft Ads | not accepted | | Microsoft Ads doesn't accept a name with a conversion. |
| Snapchat | trimmed, lowercased, punctuation removed | yes | First and last name are sent separately. |
| Pinterest | trimmed, lowercased | yes | First and last name are sent separately. |
| X Ads | not accepted | | X doesn't accept a name with a conversion. |
| AdRoll | not accepted | | AdRoll doesn't accept a name with a conversion. |
| Taboola | not accepted | | Taboola doesn't accept a name with a server-side conversion. |
Accents and non-Latin characters are kept rather than stripped out, for every platform.
### Email
The table below shows how we normalise and hash the email address for each platform.
| Platform | Format | Hashed | Notes |
| - | - | - | - |
| Google Ads | trimmed, lowercased, Gmail rules | yes | Spaces are removed. For `gmail.com` and `googlemail.com` addresses, dots are removed from the part before the `@` and anything after a `+` is dropped. Anything that isn't a valid email address is left out. |
| Meta | trimmed, lowercased | yes | Dots and anything after a `+` are kept, because Meta explicitly says they must not be removed. |
| GA4 | trimmed, lowercased | yes | Gmail rules are not applied. |
| LinkedIn | trimmed, lowercased | yes | |
| TikTok | trimmed, lowercased | yes | |
| Reddit | trimmed | no | Sent as entered, because Reddit hashes it on its own side. |
| ChatGPT Ads | trimmed, lowercased | yes | Only sent if it looks like a valid email address. |
| Microsoft Ads | trimmed, lowercased, dots and aliases removed | yes | Dots are removed from the part before the `@` and anything after a `+` is dropped. Unlike Google Ads, Microsoft applies this to every address, not only Gmail. |
| Snapchat | trimmed, lowercased | yes | |
| Pinterest | trimmed, lowercased | yes | |
| X Ads | trimmed, lowercased | yes | |
| AdRoll | trimmed, lowercased | yes | |
| Taboola | not accepted | | Taboola doesn't accept an email address with a server-side conversion. It matches on the Taboola click identifier instead. |
The Google Ads and Meta rules are direct opposites for Gmail addresses. Before hashing, `Jane.Doe+ads@gmail.com` becomes `janedoe@gmail.com` for Google Ads but `jane.doe+ads@gmail.com` for Meta, which is why each platform's rules are applied separately.
### Phone number
The table below shows how we normalise and hash the phone number for each platform.
| Platform | Format | Hashed | Notes |
| - | - | - | - |
| Google Ads | digits with a `+` in front | yes | Every character that isn't a digit is removed, then a `+` is added. |
| Meta | digits only | yes | Every character that isn't a digit is removed, including any `+`. |
| GA4 | digits with a `+` in front | yes | The same format as Google Ads. |
| LinkedIn | not accepted | | LinkedIn doesn't accept a phone number with a conversion. |
| TikTok | international format only | yes | Only sent when the visitor entered the number with a `+` and country code. Anything else is left out rather than guessed at. |
| Reddit | digits with a `+` in front | no | Sent in clear text, because Reddit hashes it on its own side. |
| ChatGPT Ads | not accepted | | ChatGPT Ads doesn't accept a phone number with a conversion. |
| Microsoft Ads | digits with a `+` in front | yes | The same format as Google Ads. |
| Snapchat | digits only | yes | Every character that isn't a digit is removed, including any `+`, and a `00` in front of the country code is dropped. |
| Pinterest | digits only | yes | Every character that isn't a digit is removed, including any `+`, along with any leading zeros. |
| X Ads | digits with a `+` in front | yes | The same format as Google Ads. |
| AdRoll | not accepted | | AdRoll doesn't accept a phone number with a conversion. |
| Taboola | not accepted | | Taboola doesn't accept a phone number with a server-side conversion. |
Every platform that accepts a phone number needs it to include its country code to match, because Converly can't tell which country a number without one belongs to. TikTok goes a step further and leaves the number out entirely unless it was entered in international format.
### Country
Converly doesn't take the country from the form. It works it out from the visitor's IP address when the conversion reaches our servers, and sends it as a two-letter country code.
| Platform | Format | Hashed | Notes |
| - | - | - | - |
| Google Ads | full address only | | Google Ads only accepts a country as part of a full postal address, together with a first name, last name and postal code. |
| Meta | two-letter code, lowercased | yes | |
| GA4 | two-letter code, uppercase | no | |
| LinkedIn | two-letter code, uppercase | no | LinkedIn only accepts a country alongside a first and last name. |
| TikTok | not accepted | | TikTok doesn't accept a country with a conversion. |
| Reddit | not accepted | | Reddit doesn't accept a country with a conversion. |
| ChatGPT Ads | two-letter code, uppercase | no | |
| Microsoft Ads | not accepted | | Microsoft Ads doesn't accept a country with a conversion. |
| Snapchat | two-letter code, lowercased | yes | |
| Pinterest | two-letter code, lowercased | yes | |
| X Ads | not accepted | | X doesn't accept a country with a conversion. |
| AdRoll | not accepted | | AdRoll doesn't accept a country with a conversion. |
| Taboola | not accepted | | Taboola doesn't accept a country with a server-side conversion. |
## Empty fields
Converly leaves a field out entirely when it's empty or contains only spaces. It never sends the fingerprint of an empty value.
This matters because hashing empty text still produces a valid fingerprint, and both Google and Meta accept it as a match key. Sending it would group every visitor who didn't fill in that field into one single identity, which actually makes matching worse (with no error reported anywhere to alert you this is happening).
---
# How delivery works
URL: https://help.converly.io/platform/delivery
Category: platform
Updated: 2026-09-23
How a conversion is stored, retried and recovered after capture.
What happens to a conversion after capture. How it is stored, retried, recovered and counted, and the point at which Converly stops trying.
After detecting a conversion, deduplicating it and then normalising and hashing the data, Converly sends the conversion off to your chosen ad platforms and analytics tools.
## How conversions are delivered to ad platforms and analytics tools
### The two ways a conversion reaches a platform
Ad platforms accept conversions in two different ways, and they actually recommend you send a single conversion both ways to maximise the chance it makes it to the ad platform (which is what Converly does):
* **From the visitor's browser.** If you have the platform's native tracking code installed on your site (i.e. the Google Tag or the Meta Pixel), then the Converly tracking script you place on your site calls the platform's native tag and tells it a conversion happened. Because the platform's native tag sees the visitor directly, it can capture the click identifiers, cookie data, etc itself.
* **From our servers.** Converly sends the same conversion to the platform's API from our own servers, and includes information about the lead (like their name, email, phone, any click identifiers they had, IP address, user agent, etc).
The whole idea is that by sending the conversion through both paths at the same time, you get a much better delivery rate (a conversion just sent through the visitor's browser won't work whenever an ad blocker, a privacy setting or a closed tab stops the tag from running).
The ad platforms then deduplicate them based on a shared identifier that Converly sends with each conversion. You can read more in the [Deduplication](/platform/deduplication) article.
The table below breaks down how a conversion reaches each of the destinations Converly supports:
| Destination | Browser | Server | Notes |
| - | - | - | - |
| Google Ads | yes | yes | |
| Meta | yes | yes | |
| GA4 | no | yes | Sent server-side only, deliberately. GA4 reliably deduplicates purchases and not much else, so firing both would double count your leads. |
| LinkedIn | yes | yes | Needs a conversion rule for each leg. With only one, only that leg can fire. |
| TikTok | yes | yes | |
| Reddit | yes | yes | |
| ChatGPT Ads | yes | yes | |
| Microsoft Ads | yes | yes | |
| Snapchat | yes | yes | |
| Pinterest | yes | yes | |
| X Ads | yes | yes | |
| AdRoll | yes | yes | |
| Taboola | yes | yes | |
| Plausible | yes | no | |
| Fathom | yes | no | |
| Pirsch | yes | no | |
| GoSquared | yes | no | |
| Simple Analytics | yes | no | |
### What information gets sent
### Browser-side
The browser-side conversion is a call to the platform's own tag, so most of what the platform ends up recording comes from the tag itself rather than from Converly. The tag already knows the visitor, the page they're on, their browser, and any data it has stored in its own cookie (like its own click identifiers).
What Converly sends is:
* The conversion or event name you chose when setting up the conversion
* The value and currency you chose for the conversion
* The identifier that ties the browser-side conversion to the server-side one, so the platform can recognise the two as a pair.
The platform's tag then adds its own click identifiers, cookies and page context, and sends the conversion to its own servers.
### Server-side
Conversions are sent to each server-side destination using their API (typically called the Conversions API, or CAPI for short). The API call to each destination is sent one after another, so every result is recorded before the next destination is attempted. Each call carries:
* The conversion you chose for that destination, covered in [Destinations](/platform/setup).
* The value and currency, when your flow carries them.
* The time the conversion happened, and the identifier that ties it to the browser-side conversion.
* The lead's details, formatted and hashed the way that platform requires, covered in [Normalization and hashing](/platform/normalization).
* The click IDs and browser identifiers that platform accepts, covered in [Click IDs](/platform/click-ids).
* The visitor's IP address and user agent, and the page they converted on with any query string removed.
GA4 is the exception, because it matches conversions to the visitor's Google Analytics session rather than to the lead's contact details. So for GA4, we send the client and session identifiers read from the visitor's own Google Analytics cookies instead.
### Exceptions
A few things work differently to the general pattern above:
* **Conversions from certain form tools and scheduling widgets are only ever sent server-side.** Converly only ever sends a conversion when the form submission/meeting booking is confirmed successful, and certain form tools and scheduling platforms only confirm success later on via an API call that Converly makes to the platform. And we can't fire a browser-event from a server. We send all relevant data with the server-side conversion anyway so this has no impact on the accuracy of your conversion tracking, it's just worth mentioning. See [Conversion detection](/platform/form-detection) for more information.
* **No platform tag on the page means no browser-side conversion.** Converly fires into the tag you already have rather than loading a second copy of it (because two copies of the same tag cause problems of their own). So if you don't have the platform tag on your website already (i.e. you don't have the Google Tag or the Meta Pixel installed), then sending the conversion browser-side is skipped. All relevant data is still sent with the server-side conversion though, so this has no impact on the accuracy of your conversion tracking.
* **A visitor with Global Privacy Control turned on isn't tracked at all.** Global Privacy Control is a signal some browsers send on the visitor's behalf, telling every website they visit not to sell or share their personal information. Brave and DuckDuckGo send it by default, Firefox has a setting for it, and several US state privacy laws require websites to honour it. When the Converly tracking script sees that signal, it switches itself off for that visit before doing anything else. No cookies are set, nothing is captured if they submit a form, and nothing is sent to us or to your ad platforms. You won't see a failed conversion in your event log for these people, because there was never a conversion recorded in the first place. This applies to every site running Converly and cannot be turned off.
* **A visitor who hasn't agreed to marketing cookies isn't tracked either.** This applies once you've set your cookie banner to hold Converly back until a visitor accepts marketing cookies ([here's how](/cookie-consent/how-it-works-with-cookie-banners)). If a visitor declines, or hasn't answered the banner yet, the Converly code never runs, so the conversion isn't recorded or sent anywhere, browser-side or server-side. If that same visitor accepts later, Converly switches on and their next conversion is tracked normally. If your cookie banner isn't set up to hold Converly back, none of this applies and nothing is blocked.
## How failures are handled
### How we know whether a send worked
Not every platform tells you the truth in its response. Some report success for a conversion they didn't really accept, and others accept everything up front and only check it properly later. So Converly doesn't simply trust the status code that comes back. Where a platform puts the real result inside the response, Converly reads that instead.
The table below shows what Converly treats as a successful send for each destination, and what that success does and doesn't tell you.
| Destination | How success is determined | Notes |
| - | - | - |
| Google Ads | Google's API returns a `200` success response | Google accepts the conversion but doesn't actually check the details until afterwards. If it finds anything wrong then a message appears in the Diagnostics section of Google Ads within 24 hours. |
| Meta | Meta's API returns a `200` success response | Meta accepts the conversion but whether the conversion was matched to a Meta user is reported separately, as Event Match Quality in Events Manager. |
| GA4 | GA4's API returns a `204` success response | GA4 returns that for every event it receives, even a malformed one, so the response proves nothing on its own. So Converly checks each event against Google's rules before sending it to make sure it isn't malformed. |
| LinkedIn | LinkedIn's API returns a `201` success response | LinkedIn will accept the conversion but it only appears in your reporting if LinkedIn is able to match it back to an actual ad click. |
| TikTok | TikTok's API returns a `200` success response with a result code of `0` inside it | TikTok reports most errors inside a success response, so the status code on its own can't be trusted. Converly reads the result code in the body instead. |
| Reddit | Reddit's API returns a `200` success response | Reddit will accept the conversion, but it will only appear in your reports if it gets matched it to an ad click. |
| ChatGPT Ads | The ChatGPT Ads API returns a `200` success response | ChatGPT Ads doesn't validate the data at ingestion, so you could send junk data and it would never tell you it's wrong. So Converly checks every field itself before sending |
| Microsoft Ads | Microsoft's API returns a `200` success response with no errors | Microsoft accepts the conversion even if some details are invalid (like badly formatted email). It drops that detail and says so only as a warning inside the success response. So Converly reads those warnings and alerts you if a conversion arrived with less than it should have. |
| Snapchat | Snapchat's API marks the conversion as valid | |
| Pinterest | Pinterest's API returns a success result for the conversion | Pinterest reports the outcome in the body of its response rather than in the status code, so a conversion can fail while the response itself looks fine. Converly reads that result rather than the status code. |
| X Ads | The X API reports the number of conversions processed and it matches the number Converly sent | X doesn't return errors, so the count is the only signal it gives that the conversion was taken. |
Converly keeps each platform's full response against the conversion, including any trace ID the platform returned (such as Meta's `fbtrace_id`), which is the first thing their support teams ask for. Sites set to store no personal data don't keep the response.
### Failed sends are retried automatically
A send that fails for a temporary reason (server errors, timeouts, rate limits, network failures, etc) is retried up to 3 times in total, with a short pause between attempts.
A rejection that will never succeed, such as a malformed conversion or a revoked credential, fails immediately rather than burning retries.
Some of that classification is platform specific and not obvious. Meta, for example, reports rate limiting inside an HTTP `400`, which naive code treats as a permanent rejection and gives up on. Converly reads the body and retries it.
### Nothing is left behind
The retries mentioned above handle the situation where an ad platform or analytics tool is down, but they do not handle a situation where Converly itself is down.
To make sure that is handled, a recovery job sweeps every 5 minutes, finds any conversion that was interrupted, and picks it up again. While a conversion is being sent it is claimed by one of our servers for 15 minutes, so two servers can never be sending the same conversion at the same time. And if one of our servers drops out after a platform has accepted a conversion but before the result was recorded, the copy that gets sent again carries the same identifier, so the platform recognises it and discards it.
### Retries don't result in duplicate conversions
Every conversion is given its own identifier in our database as soon as it happens, and every attempt to send it carries that same identifier rather than a new one.
Retrying stops as soon as the conversion is delivered successfully, so in the normal case the platform only ever receives the conversion once. But in rare cases the ad platform's success message may not make it back to us, so the retry system will continue to send the conversion.
In this case, the ad platform receives the same conversion twice, but because the same identifier is sent with each retry, the ad platform recognises it's a duplicate and discards it.
Our article on [Deduplication](/platform/deduplication) covers the full set of protections, including what happens on the few platforms that don't deduplicate this way themselves.
### One platform failing does not block the others
A single conversion flow in Converly can send a conversion to several destinations. Each destination is attempted independently and recorded independently, so if a flow sends to 4 platforms and one rejects the event, the other 3 still receive it.
The conversion itself is still marked as failed when that happens, rather than partly delivered, so one destination failing is never hidden behind the three that worked. You can always see which destination did what in the logs. [Reading the event log](/platform/event-log) covers the per-destination detail.
### When Converly gives up, it says so
Retries and recovery do not continue forever. A conversion that cannot be delivered within about an hour is marked as failed and stops.
A conversion that reaches this point stays visible in your conversion log with the reason it failed. The goal is to alert you of the issue (i.e. a platform needs reconnecting) so you can fix it. Our support team can replay conversions back into ad platforms and analytics tools when asked, so once you have fixed the issue you can contact us and we can resend the conversions to your chosen ad platforms and analytics tools (with the original timestamps so they appear in your reporting for the correct dates).
How long you have to do that is set by the platforms rather than by us, because each one refuses conversions past a certain age:
| Destination | Limit | Measured from | Notes |
| - | - | - | - |
| Google Ads | 90 days | The ad click | Or 63 days when the conversion carries the lead's contact details, which Google calls enhanced conversions for leads. |
| Meta | 7 days | The conversion | |
| GA4 | 72 hours | The conversion | An older event is still accepted, but GA4 records it as having happened 72 hours ago. |
| LinkedIn | 90 days | The conversion | |
| ChatGPT Ads | 7 days | The conversion | |
| Microsoft Ads | 7 days | The conversion | |
| Snapchat | 7 days | The conversion | |
| Pinterest | None published | | Pinterest asks for conversions to be sent within an hour of happening, but doesn't publish a limit. |
| X Ads | None published | | |
---
# Reading the conversion log
URL: https://help.converly.io/platform/event-log
Category: platform
Updated: 2026-09-23
What the log records, and how to check a single conversion.
What the conversion log records for every conversion, what each status means, and how to drill into a single conversion to see exactly what was sent to each destination and what came back.
Every conversion Converly captures gets written to the conversion log, regardless of whether it was delivered or not.
It's the place you go to answer the question "did that conversion actually reach Google Ads", and it's the fastest way to tell whether your conversion is working correctly or not.
## What the conversion log is
The conversion log is a record of the conversions Converly has captured on your website and sent off to ad platforms and analytics tools.
It is designed to be an operational/debugging tool rather than a permanent archive of all conversions. It's meant for answering questions like "what happened to this conversion, and did it get where it was supposed to go" and is not designed to be a lead tracking tool. Your ad platforms and analytics tools are where the numbers live.
## Opening the conversion log
In Converly, click **Logs** in the left sidebar. You can also click **View logs** on one of your flows, which opens the log already filtered to that flow.
## The summary at the top
Across the top of the page are 3 numbers that sum up the last 30 days:
- **Conversions in the last 30 days.** How many conversions Converly captured on your website.
- **Did not reach a destination.** How many of those had a problem, meaning they failed or were only partly delivered. Click it to show just those conversions.
- **Time since the most recent conversion.** How long ago the last conversion came in. If this is much longer than you'd expect for your website, it's worth checking your forms are still being tracked.
## What the list shows
Below the summary is a table of your recent conversions, newest first. Here's what it shows:
| Column | What it shows |
| - | - |
| Time | How long ago the conversion happened, like "3 hrs ago". Hover over it to see the exact date and time. |
| Person | The email address captured from the person who converted. It's blank if no email was captured. Once a conversion is more than 7 days old it shows **Details unavailable** instead, because contact details are deleted after 7 days (see the section below on how long conversions stay in the log). |
| Flow | The name of the conversion flow that fired. |
| Destinations | The logo of each ad platform and analytics tool this conversion was sent to. Hover over a logo to see its name. If there are more than 3, the rest are counted with a number like "+2". |
| Status | Whether everything was successfully delivered or not. |
The log keeps itself up to date while you have it open. The pill in the top right corner shows **Live** and when it last checked, and new conversions appear at the top of the list with a **New** marker. If you don't want to wait, simply click the pill to check straight away.
As you scroll down, older conversions load automatically. Conversions stay in the log for 30 days, so that's as far back as it goes.
One thing is worth knowing about what you're looking at. **Conversions that were deliberately filtered out don't appear.** If a flow is narrowed to one specific form, submissions of your other forms aren't failures and they aren't listed. This is the single most common reason someone thinks a submission went missing.
## Searching and filtering
To find a specific conversion, click the magnifying glass above the list and type a name, email address or phone number. Search only covers the last 7 days, because Converly deletes names, emails and phone numbers from older conversions.
Click the filter icon next to it to narrow the list down:
- **Flow.** Show conversions from the flows you pick. This only appears when you have more than 1 flow.
- **Delivery.** Tick **Only show problems** to see just the conversions that failed or were only partly delivered. Clicking **Did not reach a destination** in the summary does the same thing.
If you need something more specific, like every conversion from a particular day, the AI tools covered at the end of this article can filter by email address, date range, status and flow.
## When the log is empty
If Converly hasn't captured any conversions in the last 30 days, the log shows a set of setup checks instead of an empty table. They tell you what's missing, and what to do about it. The ones you're most likely to see are:
- **No flow is published yet.** A flow that's still a draft doesn't track anything. Publish a flow and your conversions start appearing.
- **We have not seen the tracking code on your site yet.** Either the code isn't on your website, or nobody has visited a page with it since you added it. Click **Get the tracking code** to go straight to the Install tab in your settings.
- **Your code is running on a website not associated with this account.** The code is working, but on a web address that doesn't match the website in your settings, so Converly turns those conversions away. You can update the address right there.
- **No conversions received yet.** Everything looks ready. Submit a form on your site and watch for the conversion to appear.
## What each status means
The status on a row describes the conversion as a whole. It's a summary of how every destination did.
| Status | What it means |
| - | - |
| Queued | Captured and waiting to be sent. Normal for a few seconds after a conversion happens. |
| Processing | Currently being sent to your selected ad platforms and analytics tools. |
| Delivered | The conversion was successfully delivered to all destinations in the flow. |
| Failed | A destination Converly sends from its own servers rejected the conversion. This is deliberately strict. If a flow sends to 4 platforms and one rejects it, the whole conversion reads as failed rather than partly delivered, so a single destination failing is never hidden behind the three that worked. Open the conversion to see which one. |
| Partly delivered | Nothing Converly sends from its own servers failed, but a browser-side destination couldn't fire, and at least one other destination did get through. This usually means the platform's own tag isn't on the page, or it's misconfigured. Open the conversion to see which one. |
| Recorded | The conversion was captured and stored, but there was nothing to send from our servers. This mainly appears when the conversions are set up to only be sent browser-side (with none being sent server-side). It's not possible to confirm delivery of browser-side conversions so we don't overstate it and say success. |
You can read more about the different statuses and what they mean in the article on [conversion statuses and errors](/platform/failure-states).
## Opening a conversion
Clicking a row slides open a panel with everything Converly recorded about that particular conversion. It's laid out top to bottom in the order you'd want to read it.
The following information is shown in this panel:
- **Who converted.** At the top of the panel you'll see the person's name and email address, how long ago it happened, and the same status badge from the list. If no name was captured, Converly falls back to the email address, and if there was no identity at all it says "Anonymous visitor".
- **User details.** The full set of what was captured about that person and their visit. This includes the contact details they entered (like first name, last name, email and phone), as well as details about their device, browser, operating system, IP address and country. Any click identifiers they arrived with, like `GCLID` from Google or `FBCLID`, `fbc` and `fbp` from Meta, plus their GA4 client ID are also shown here. Similarly, any UTM parameters they landed with, the landing page they first arrived on, and the website that referred them are also shown. Anything that wasn't captured is simply left out rather than shown as blank. For instance, if a lead came to your site from Organic Search then no UTM parameters will be shown because there wasn't any.
- **Destinations.** One card per destination, each showing the platform's name and how it did. A destination that fires both ways shows two lines, one for the server-side delivery and one for the browser pixel, each with its own status. Clicking a card opens the full detail for that destination, covered in the next section.
- **Source.** Which flow fired, which trigger detected the conversion (like Gravity Forms or Calendly), and the page the person converted on. The page is a link, so you can open it and check the form yourself.
- **Form fields detected.** A collapsed list of the fields Converly found on the form. This is how you confirm Converly is reading the right inputs, which matters when a form has several email-looking fields and the wrong one is being picked up.
- **Event ID.** This is the ID in our databases for this particular conversion. If you're emailing us about an issue with a specific conversion, this is the thing to include.
## Opening a single delivery
Within the initial panel, you'll see there are cards for each destination the conversion was delivered to (and they typically show the delivery status for that destination).
If you click one of these cards, it will then open another panel and show all the information about that specific delivery. It's where you find out exactly what Converly sent and exactly what the platform said back.
Each destination gets its own status, and this is a different and more detailed set than the conversion statuses above.
| Status | What it means |
| - | - |
| Delivered | The platform's API confirmed it received the conversion. |
| Fired | The platform's tag in the browser was called successfully. It says Fired rather than Delivered because no browser tag confirms the platform actually received anything, so this is as much as can honestly be claimed. |
| Pending | Still in flight. |
| Failed | The delivery was attempted and didn't get through. |
| Error | Something went wrong making the call itself. |
| Skipped | Nothing was sent on this path, because sending is switched off for this action. |
| Pixel not found | The platform's own tag wasn't on the page, so the browser fire had nowhere to go. This one is worth acting on, and it's the most common fixable misconfiguration there is. |
| Consent blocked | The visitor hadn't agreed to advertising cookies, so nothing was sent. |
| Recorded only | The conversion was stored but this destination was never going to receive it. |
| Unknown | An outcome Converly didn't recognise. |
Below the status you get two things.
**What information was sent.** The actual list of fields that went to that platform, with the real values, laid out with that platform's own names for them. So a Google Ads delivery shows its conversion action, the value and currency, the `GCLID`, the conversion time and the consent flags, alongside the contact details. Anything Converly hashed before sending carries a small Hashed badge next to it, and you see the plain value rather than the scrambled one, so you can actually check it's the right email address. A field that exists for that platform but had nothing to put in it shows as "Not captured".
**The exact API call made.** There's also a collapsible block showing the exact API request that was sent, for when you need to hand something to a platform's support team. Hashed values are replaced in that view, because a hashed email is still personal data.
**What came back.** The platform's response, including how long it took. Where a platform returns something useful inside its response, Converly pulls it out and labels it. For example, a Meta delivery returns the `fbtrace_id` that Meta's support team always asks for, and a Google Ads delivery surfaces the conversion action Google matched it to. The full raw response is available underneath.
**When it failed**, an error message sits at the top of this view in plain language, with a hint about what to do about it. The platform's own raw error text is tucked behind a "Show technical details" toggle, so it's there when you want it and out of the way when you don't. If the browser fire failed as well, that's named separately rather than folded into the same message.
## How long conversions stay in the log
The log is intended for debugging and operational purposes only, so it only holds recent conversions rather than your whole history. For privacy and security reasons, two things happen to a record as it ages.
- After 7 days the contact details are deleted, including name, email and phone. Click identifiers, UTMs, and all the delivery information remains, which means a conversion older than a week is still fully diagnosable, just not attributable to a named person.
- After 30 days the record is deleted entirely, including the IP address and user agent.
Both happen on a schedule and neither depends on anyone remembering to do anything. See [What happens to personal data](/platform/personal-data) for the full picture.
## Reading the log with an AI tool
The same log is available to AI tools like Claude and ChatGPT through our MCP or CLI, so you can ask things like "Did a conversion come through for this email address, and did it reach Google Ads" or "Show me everything that failed yesterday". Your chosen AI tool can then look these up and provide the information to you, as well as reading any error messages, finding links to documentation and suggesting fixes.
For privacy and security reasons, AI tools like Claude or ChatGPT cannot access the personally identifiable information of any of your conversions. This would be providing data on your leads to a third-party tool that they never authorised their personal data to be shared with, and this is illegal in many places.
That being said, it is possible to give your AI tool the email addresses of a particular conversion and it can look up the status (because in this case you are supplying the email to the AI tool). So if you say 'I just got a lead from john@smith.com. Check the conversion was captured and sent to Google Ads' then the AI tool can connect to Converly, search for that particular conversion by the email address, and return all the non-personal information about the conversion and whether it was successfully sent to Google Ads or not.
---
# When conversions fail
URL: https://help.converly.io/platform/failure-states
Category: platform
Updated: 2026-09-19
What each error means, and whether you need to do anything.
What each error means, whether it is something you can fix or something that fixes itself, and exactly what to do about it.
Most conversions go through without anyone looking. This is the page for the ones that don't.
Converly distinguishes a conversion that failed from one that was deliberately not sent. Both are visible, and confusing the two is the usual reason people think tracking is broken when it is working correctly.
## Where to find the error
Open the [conversion log](/platform/event-log), click the conversion, then click the destination that didn't work. The error sits at the top of that panel in plain language, with a suggested next step underneath it.
The platform's own raw error text is tucked behind a "Show technical details" toggle. You rarely need it, but it is the thing a platform's support team will ask for.
## Errors you fix by reconnecting
These all mean the same thing. The credential Converly uses to talk to that platform no longer works, usually because it was revoked, regenerated or expired. Conversions will keep failing until you reconnect, and the ones that failed in the meantime are not re-sent automatically.
| Destination | What went wrong | What to do |
| - | - | - |
| Google Ads | Google rejected the sign in, or the connection is missing a permission Google now requires for conversion uploads. | Reconnect Google Ads from Connected Accounts and approve every permission on Google's consent screen. |
| Meta | The access token for your pixel expired or was revoked. | Reconnect Meta, or generate a new System User access token in Meta Business Manager and paste it in. |
| LinkedIn | The token was revoked or regenerated in Campaign Manager, or the connection reached its 12 month expiry. | Generate a fresh Conversions API token in Campaign Manager under Analyze, then Signals Manager, then Direct API. Then reconnect LinkedIn. |
| TikTok | The access token was deleted or regenerated in Events Manager, or the connected TikTok account lost access to the ad account. | Generate a fresh Events API token in Events Manager, or reconnect with an account that can manage that ad account. |
| Reddit | The authorisation was revoked. | Reconnect your Reddit Ads account. |
| ChatGPT Ads | The Conversions API key was deleted or regenerated. | Reconnect ChatGPT Ads. |
## Errors you fix in your ad platform
These mean the connection is fine but something in the ad account itself is blocking the conversion. Nothing in Converly will fix them.
| Destination | What went wrong | What to do |
| - | - | - |
| Google Ads | Google declined permission for this account. | Usually one of two things. Either the account has not accepted Google's Customer Data Terms, which an admin can do under Data manager, or the connected Google user needs Standard access or higher. Check the terms first. |
| Google Ads | Enhanced conversions are switched off, so conversions carrying customer details can't be recorded. | In Google Ads open Goals, then Conversions, then Settings, turn on enhanced conversions and accept the terms. Conversions matched by click ID alone still record while this is off. |
| Google Ads | The conversion action this flow sends to no longer exists. | Check it still exists in Google Ads, then edit the flow and reselect it. |
| GA4 | The property has not accepted Google's User Data Collection terms. | In GA4 open Admin, then Data Streams, then your stream, and accept the User Data Collection Acknowledgement. |
| GA4 | The connected Google account only has Viewer access. | Ask your GA4 admin for Editor access, or reconnect with an account that already has it. |
| LinkedIn | The conversion rule is disabled, deleted, or belongs to a different ad account than the token. | Check the rule in Campaign Manager under Measurement, then Conversion tracking, and update the rule in your flow if it changed. |
| TikTok | The pixel code in your TikTok connection doesn't match the pixel the token was generated in. | Reconnect TikTok making sure the pixel code matches. |
| Reddit | The pixel was deleted, or the connected account lost access to it. | Reconnect and pick a current pixel. |
| ChatGPT Ads | The pixel or data source was removed in Ads Manager. | Reconnect ChatGPT Ads to pick a current one. |
## Errors you fix in your flow
These mean the conversion itself is configured in a way the platform won't accept. They are all fixed by editing the flow and publishing it again.
| Destination | What went wrong | What to do |
| - | - | - |
| Google Ads | The Google Ads connection changed after the conversion action was chosen, so the flow is pointing at something that no longer lines up. | Open the flow, reselect the conversion action, and republish. |
| LinkedIn | The flow's conversion rule isn't tied to an ad account, or is tied to a different one than the account now connected. | Open the flow, reselect the LinkedIn conversion rules, and republish. |
| TikTok | The event name isn't valid for TikTok. | Edit the TikTok destination and use letters, numbers, underscores and hyphens only, starting with a letter, up to 50 characters. |
| ChatGPT Ads | The conversion type isn't one ChatGPT Ads accepts. | Edit the ChatGPT Ads destination, pick a supported conversion type, and republish. |
## Errors that resolve themselves
You don't need to do anything with these. The platform was temporarily unavailable or throttling us, Converly retried automatically, and new conversions go through as normal. They are worth recognising so you don't go looking for a problem that isn't there.
| Destination | What went wrong | What to do |
| - | - | - |
| Any platform | The platform is rate limiting conversion uploads right now. | Nothing. Rate limits usually clear within minutes. If you see this constantly, tell us. |
| Google Ads, ChatGPT Ads | The platform's own service had a temporary problem. | Nothing, unless it keeps happening. |
| TikTok | TikTok was reconnected while this conversion was being sent. | Nothing. It is retried against the new connection. |
## Conversions that were never eligible
These are not failures in the normal sense. The conversion was real, but that particular platform could never have accepted it. The most common cause by far is the first row.
| Destination | What went wrong | What to do |
| - | - | - |
| LinkedIn, TikTok, ChatGPT Ads | The submission carried nothing the platform can match a person with. | Make sure your form collects an email address, and a phone number where the platform accepts one. Visitors who arrived by clicking an ad on that platform can also be matched by the click identifier it left behind. |
| LinkedIn | The conversion's timestamp was more than 90 days old. | Nothing, unless you were deliberately replaying old conversions. New ones are unaffected. |
| ChatGPT Ads | The conversion was more than 7 days old. | Usually means it sat waiting on data from another tool. Newer conversions are unaffected. |
| TikTok, ChatGPT Ads | No page URL was available, and both platforms require one on every web conversion. | Nothing in normal use. This only affects conversions recorded outside an ordinary page visit. |
For the full set of platform age limits, see [How delivery works](/platform/delivery).
## Problems at our end
Some errors are ours. Converly says so rather than dressing them up as something you configured wrongly, and these are reported to us automatically.
| Destination | What went wrong | What to do |
| - | - | - |
| Any platform | The platform rejected the conversion as invalid, which usually means Converly formatted something incorrectly. | Nothing you can fix. Contact us with the conversion's event ID and we'll look at it. |
| Google Ads | A configuration issue on our side is temporarily blocking uploads. | Contact us. This is not something to fix in your account. |
| ChatGPT Ads | OpenAI's network blocked the request before it reached their conversion API. | Nothing. Not a problem with your account or your key. |
## When a conversion was never counted at all
Everything above is about a conversion that exists and failed to reach one destination. Separately, a conversion can fail to be counted in the first place, usually because Converly could not confirm with the source tool that the submission or booking actually happened.
These appear as a notice on the conversion rather than as a per-destination error, because the problem affects the whole thing rather than one platform.
| What went wrong | What to do |
| - | - |
| The connection to your form or scheduling tool expired, was revoked, or lost a permission it needs. | Reconnect that tool from your dashboard. Until you do, conversions from it are either not counted or counted with much weaker matching. |
| The booking was cancelled or declined. | Nothing. Converly deliberately does not count a booking that did not go ahead. |
| The tool never made the submission or booking readable, even after repeated attempts. | Nothing immediately. If it keeps happening on the same tool, tell us. |
| The submission didn't match the filter set on the flow. | Nothing. This is the filter working. These are hidden from the conversion log by default. |
| The filter couldn't be evaluated, usually because the connection it depends on is gone. | Reconnect the tool the filter depends on. |
| Your Acuity plan doesn't include API access. | Converly falls back to what it can read from the page, which matches less well. Upgrading your Acuity plan restores full matching. |
| The visitor's browser data never reached us, so the conversion was sent with the email address alone. | Check the Converly script is installed on every page where the booking widget or form can be reached. Matching will be weaker for these. |
---
# What happens to personal data
URL: https://help.converly.io/platform/personal-data
Category: platform
Updated: 2026-09-23
What we capture, what we never touch, and how long it survives.
Exactly what Converly captures from a form submission, what it never touches, what leaves our systems, and how long any of it survives.
In order to report a conversion to an ad platform, we need to capture and send information about the lead so the ad platform can match the conversion back to a real person and the original ad they clicked.
This means that Converly is capturing and sending personally identifiable information about the leads that come through your website, and in this article we outline what gets captured and how it's handled.
## What data is captured
When someone completes a form, Converly captures the fields needed to report and match the conversion.
Typically that includes the lead's name, email and phone number, but it depends on what you actually ask for on your form (if you don't ask for the lead's phone number on the form then we can't capture it).
Converly also captures the ad click identifier that brought the visitor to the site, the first page they landed on, the page they were on when they converted, and the referrer.
## What is never captured
Some fields are skipped before their value is ever read. This includes:
- Passwords, in any field marked as a password or labelled as one.
- Card numbers, security codes, expiry dates and cardholder names.
- One-time codes, PINs and social security numbers.
- Honeypot fields that form builders add to catch bots, which are recognised and ignored.
Information in skipped fields is never read nor stored, so it isn't available in Converly or sent to any ad platform or analytics tool.
## Where it's stored and how it's protected
Conversions are stored in a PostgreSQL database hosted by Supabase, and Converly itself runs on Railway. Both are in the United States.
The database is encrypted at rest by Supabase, and everything travelling to or from Converly goes over HTTPS. That includes every call we make out to an ad platform or analytics tool. There is no path anywhere in Converly that sends your data over an unencrypted connection.
Your ad platform credentials are kept apart from your conversion data. When you connect Google Ads or Meta, the token goes into a dedicated encrypted vault rather than into the database alongside your conversions, and the database only holds a reference to it. That credential is never returned by any API, never included in a response, and cannot be retrieved by an AI assistant connected to your account. [Security and access](/platform/security) covers that side of things properly, including what an API key can do and what we don't yet have.
## How contact details are hashed before sending
Before contact details are sent to an ad platform, Converly hashes them with SHA-256 wherever that platform requires it, so Google and Meta (for example) receive a fingerprint rather than a plain-text email address.
There are 2 exceptions, both because the platform asks for it:
- **Reddit** receives the email address and phone number unhashed, and hashes them on its own side as soon as they arrive.
- **LinkedIn** receives the first and last name unhashed. The email address is still hashed.
Either way, everything travels over an encrypted HTTPS connection.
Each platform requires its own normalization before hashing, and our article on [Normalization and hashing](/platform/normalization) covers the per-platform rules.
## How long data is retained for
The following table shows how long each type of data in your account is held for.
| What | How long | What happens |
| --- | --- | --- |
| Raw contact details | 7 days | Name, email and phone are erased from the conversion record by a scheduled job, along with the full request and response exchanged with each platform. This is a privacy purge, not a retry window. Delivery finishes long before it. |
| The conversion record | 30 days | Deleted entirely. That includes the IP address, the user agent, and the operational detail of what was sent where and what each platform said. |
| API signup identifiers | 18 months | Only for conversions sent through the API trigger. Converly keeps the identifier your own system sent for each signup (for example `account_created_123`), so a retried or repeated signup is never counted twice. It's your reference for the signup, not the person's contact details. |
| Your flows and settings | Until you delete them | Configuration is not visitor data and is not on this schedule. |
Both jobs run on a schedule rather than on demand, so retention does not depend on anyone remembering to run anything.
## Privacy signals and cookie consent
Converly works with all the most popular cookie consent tools as well as honouring browser-level settings.
### Working with your cookie banner
Converly works with the cookie banner you already run.
Converly is a marketing tool, so you set your cookie banner to hold the Converly code back until a visitor accepts marketing (or advertising) cookies. We have [step by step guides for all the popular cookie banners](/cookie-consent/how-it-works-with-cookie-banners), including Cookiebot, CookieYes, OneTrust and Complianz, and the built-in banners on Wix, Squarespace and HubSpot.
Once it's set up, here is what happens:
- **A visitor who accepts marketing cookies is tracked.** If a visitor accepts marketing cookies, your cookie banner switches Converly on and it works as normal. It listens for conversions, collects all the data, fires the browser-side conversion, sends the data to our own servers, and then sends the server-side conversion to your chosen ad platforms and analytics tools.
- **A visitor who declines marketing cookies is not tracked.** If a visitor declines, your cookie banner never lets the Converly code run, so nothing is captured and nothing is sent (on either the browser path or the server-side one). You will not see a failed conversion in the conversion logs either, because there was never a conversion recorded.
- **No answer counts as no.** If the banner has not loaded yet, or the visitor has not answered it, the Converly code stays switched off. It only runs once there is a clear yes.
- **Withdrawing consent takes effect from the next page.** If a visitor changes their mind, Converly stops from the next page they load. No cookie banner can stop a script that is already running on the current page, so this is the same for every tracking tool.
- **It's all or nothing.** Converly runs for visitors who accept marketing cookies and not for anyone else. That includes the conversions it sends to analytics tools like GA4, so a visitor who accepts analytics cookies but declines marketing ones is not tracked in either.
- **The consent state travels with the conversion.** Google's conversion APIs accept the Consent Mode v2 signals `ad_user_data` and `ad_personalization`, and Converly marks every conversion it sends to Google as consented. That is accurate once your cookie banner is holding Converly back for visitors who say no, which is one more reason to make sure it is set up. Google's own documentation warns that conversions uploaded without these signals may not be attributable at all, so this matters for your reporting as much as for your compliance.
Some tools imply that sending a conversion from a server rather than from the browser gets you around a visitor declining cookies, on the grounds that no cookie was involved. That is not how the rules work. European regulators have been explicit that reading information from someone's device and sending it on to a server is covered regardless of whether a cookie was the mechanism, and Google's own terms separately require consent for visitors in the EEA, the UK and Switzerland no matter how the conversion reaches them. Google also discards data it knows was collected without consent, so sending it anyway does not even win you the conversion.
Server-side delivery is genuinely valuable, and it recovers conversions lost to ad blockers, closed tabs and browser restrictions. It does not recover conversions lost to someone saying no, and any vendor suggesting otherwise is selling you a compliance problem rather than a measurement one.
### Honouring browser-level privacy settings
Separately from your cookie banner, some visitors carry a privacy setting in the browser itself. It applies to every website they visit rather than to yours specifically, and Converly honours it.
That signal is called Global Privacy Control. Brave and DuckDuckGo send it for every user by default, Firefox has a setting for it, and Chrome users can add it with an extension. When it is switched on, the browser attaches a flag to everything that visitor does, and any website is able to read it.
It carries real legal weight, which is what separates it from older browser signals. States like California, Colorado and Connecticut all treat it as a binding opt-out of selling or sharing someone's personal information. So a visitor who switches it on has essentially opted out of every website they will ever visit, in a single action.
Here's how Converly handles visitors with the Global Privacy Control flag turned on:
- **No data is captured.** If the signal is present, the tracking script stops completely. No conversions are captured and no data is sent to any of your ad platforms or analytics tools.
- **It overrules your cookie banner.** Converly checks the browser signal first, before anything else, so if a visitor has Global Privacy Control switched on but then clicks Accept on your banner, they are still not tracked. This is the legally required position because several countries and states treat Global Privacy Control as a binding opt-out (regardless of what they say in your cookie banner).
- **No conversions appear in the conversion log.** Because the conversion is never recorded in the first place, it won't appear in the log. Worth noting because the lead will likely still appear as a form submission in your form tool, or as a booked meeting in your scheduling tool.
## Deleting a specific person
A visitor exercising their right to erasure can be removed by email or phone number through a single endpoint, and the deletion works across the whole retention window rather than only on records still holding raw details.
This only deletes data that Converly holds though. It does not delete data an ad platform has already received, which has to be requested from that platform directly.
## Where data is not written
Personal data is kept out of logs and crash reports deliberately, and not only by filtering field names. Free text is scrubbed too, because ad platforms routinely include a customer’s email address inside their own error messages, which no field-name filter would ever catch.
## Switching to privacy mode
If you need to pass an IT security review in order to use Converly, then one option is to switch your site to privacy mode. In this mode, no personally identifiable information is ever written to the conversion log in the first place.
This ultimately means that Converly never actually stores your lead data, and IT teams are generally much happier with this posture.
The personally identifiable information is still sent to ad platforms with each conversion so there is no impact to the accuracy of your conversion tracking, it's just that the conversion log will not show the lead's name, email, phone, etc.
---
# Security and access
URL: https://help.converly.io/platform/security
Category: platform
Updated: 2026-09-26
Where credentials live, and what keys and AI tools can access.
Where your ad platform credentials live, what an API key or an AI assistant can and cannot do with your account, and what we have and haven't been audited on.
Converly connects to your ad accounts and handles your leads' details, so it's fair to want to know exactly what it can reach and what it can't.
This article covers how your credentials are held, what access you can hand out, and the limits that apply to anything acting on your behalf.
## Connecting an ad account
When you connect Google Ads, Meta or any other platform, the credential travels from your browser, through Converly's own authorisation window, and into Supabase Vault. That's a dedicated secrets store, kept separate from the database your conversions live in, and the key that protects it is held by the vault rather than sitting in Converly's own configuration. Your conversion database holds a reference to the credential and nothing more. It isn't returned by any API, it is never included in a response, and reading it is restricted to the single service that needs it to send your conversions.
You always complete the connection yourself. Converly can generate the link, but the sign in itself happens on the platform's own screen, so your password and the token it produces never pass through Converly's interface. This also means nobody should ever ask you to paste a token into a chat window, and Converly never will.
Each site holds one connection per platform. Connecting a different account for the same platform replaces the previous one.
You can read more about how conversion data itself is stored in [What happens to personal data](/platform/personal-data).
## Conversions are only accepted from your own site
Every conversion carries the browser's own statement of which site it came from, which JavaScript cannot forge. Converly checks it against the domains on your account and rejects anything else. So someone who copies your tracking script onto their own website can't push conversions into your ad accounts.
Your subdomains are covered automatically, worked out from the public suffix list rather than from a list you have to maintain. So adding `example.com` also accepts `app.example.com` without accepting anything you don't own.
This is also the most common silent misconfiguration. A site with no website address set rejects every conversion while everything else looks healthy. It is the first thing to check when a published flow captures nothing.
## How your data is protected in transit and at rest
Everything travelling to or from Converly goes over HTTPS. That includes every call we make out to an ad platform or analytics tool, so there is no path anywhere in Converly that sends your data over an unencrypted connection.
The database holding your conversions is encrypted at rest, and your ad platform credentials sit in a separate encrypted vault rather than in that database. [What happens to personal data](/platform/personal-data) covers what is stored, for how long, and when it is erased.
## What an API key can do
If you're connecting your own tools to Converly, or building something against the API, you'll generate an API key. Here's how they work:
- **They're server-side only.** A key starts with `sk_live_` and should be treated like a password. It belongs on your server, never in a web page or an app where a visitor could read it.
- **They're stored hashed.** Converly keeps a SHA-256 hash rather than the key itself, so a key can never be recovered after it's issued, only replaced. If you lose one, you generate a new one.
- **Access is granted per capability.** A key gets the specific permissions you give it rather than everything your account can do, and every request re-checks the exact permission it needs.
- **A key can be bound to a single site.** So an integration built for one website can't read another site in the same account.
## What an AI assistant can and cannot do
You can connect an AI tool like Claude or ChatGPT to your Converly account and have it build and manage your conversion tracking for you, which is covered in [Setup](/platform/setup). Handing an AI tool access to your ad accounts is a reasonable thing to be careful about, so the access it gets is deliberately narrower than your own.
Here's what an AI tool connected to your account cannot do:
- **It can't retrieve your ad platform credentials.** Not as a matter of policy, but because the permission that would allow it is excluded from assistant access entirely. It can build flows, publish them and read results, and it physically cannot read your Google Ads token.
- **It can't connect an account on your behalf.** It can generate the link and wait for you to finish, but the sign in happens on the platform's own screen. If an AI tool ever asks you to paste a token into the chat, something is wrong.
- **It can't quietly put a test conversion into your reporting.** Where a platform has a proper test mode it uses it. Where one doesn't exist, the test would create a real conversion in your campaign reporting, so the request is refused outright unless you explicitly agree to it first.
- **It can't delete or disconnect anything casually.** Removing a flow or disconnecting a platform means naming the exact thing being removed, rather than answering yes to a general question.
- **It can't change your plan or delete a site.**
- **It can't read your leads' personal information.** When an AI tool reads your conversion log it's told which fields were captured, not what they contained. No email addresses, no phone numbers, no IP addresses. That's enough to diagnose a matching problem and not enough to walk away with your customer list.
- **It can't invent options.** Form names, event types and conversions are all read from your real accounts. If your form tool isn't supported, it tells you so rather than improvising a workaround that looks like it worked.
## Everything is attributed
Every consequential action on your account is recorded along with where it came from, so you can always tell whether a flow was published from the dashboard, the API, the CLI or an AI assistant. That matters most when more than one thing is touching your account, because "who changed this" is the first question when something looks different from how you left it.
API requests are logged separately for 90 days, including which key was used. The account and user are recorded at the time of the request, so the history stays readable even after a key has been revoked.
## Other controls
- **Rate limits apply per credential and per source**, so one misbehaving integration can't exhaust your capacity.
- **Webhooks are signed**, and a signature is only valid for a short window, so a captured request can't be replayed later.
- **Errors never return internal detail.** A failure says what went wrong in terms you can act on, without describing our internals to whoever asked.
- **Signing in is protected too.** Resetting your password signs out every existing session, and sign-in links sent by email expire after 15 minutes and are stored hashed rather than in readable form.
- **Two-factor authentication is available on every account.** Once it's on, logging in with a password or an emailed sign-in link also needs a 6-digit code from an authenticator app, with 10 single-use backup codes in case a phone is lost. Turning it on signs out every other session, and changing it needs a login from the last 24 hours. Logins through Google or Webflow rely on that account's own security instead. [Turn on two-factor authentication](/manage-your-account/turn-on-two-factor-authentication) covers setup.
- **Your leads' contact details are hashed** before they are sent to any platform that requires it, so the platform can match the conversion without ever receiving a readable email address or phone number. The [Normalization and hashing](/platform/normalization) article covers exactly what each platform gets.
## Certifications and audits
**Automated security scanning.** The code behind the dashboard and the service that receives and sends your conversions is scanned automatically by Aikido Security every 3 days. It looks for known vulnerabilities in the open source packages Converly uses, flaws in Converly's own code, and keys or passwords committed by mistake. The public website at converly.io is checked weekly. Every finding is reviewed, and critical and high severity issues are prioritised for fixing.
**Penetration testing.** Converly is penetration tested by an independent third party every year. The most recent test was carried out by IntegSec in September 2026 and covered the dashboard and the API. Every critical and high severity finding from that test has been fixed. The signed attestation letter is available on request from help@converly.io.
**Certifications.** Converly runs on infrastructure that holds SOC 2 Type II, but Converly itself is not independently certified. If your procurement process needs a certification, just ask. We are happy to walk you through where we are at and what we can share in the meantime.
**Subprocessors.** Converly relies on a handful of third-party services to operate, and the full list of what each one processes and where is published at [converly.io/subprocessors](https://converly.io/subprocessors). We notify customers before that list changes.
**A data processing agreement** is available on request. Email help@converly.io and tell us which jurisdiction you are contracting from, so we can send the right transfer terms with it.
## Reporting a security problem
If you think you have found a vulnerability, email help@converly.io with "Security" in the subject line so it gets picked up quickly. We will acknowledge you and keep you posted while we work on it. Please give us a reasonable window to fix anything before disclosing it publicly.
---
# Building a flow
URL: https://help.converly.io/setup-destinations/building-a-workflow
Category: setup-destinations
Updated: 2026-10-07
A flow is the rule that connects a lead source to one or more conversion destinations.
A flow is the core of how Converly works. It is a rule that says "when this happens here, send this conversion there." This guide walks you through building one.
## The parts of a flow
Every flow has three parts:
1. **A trigger.** The lead capture tool and event that starts the flow, for example "someone submits the Contact Us form" or "someone books a Calendly meeting."
2. **One or more actions.** Each action sends the conversion to a destination, like Google Ads, Meta, or Google Analytics. A single flow can send to several destinations at once.
3. **A conversion.** The specific conversion you want to record in each destination, along with its value.
## Creating a flow
Click **Flows** in the left sidebar. This opens the **Conversion Flows** page, which lists every flow on your site. Click **Create New Flow** to start a new one, give it a name and click **Create Flow**.
In the flow builder, click **Add Trigger** and choose the lead capture tool that should start the flow. Converly detects most form builders automatically once it is installed on your site. For tools like Calendly you connect them here the first time.
Click the **+** button below the trigger to add an action. Pick a destination, then choose the conversion it should record and set its value. Repeat to send the same event to more than one platform.
When the trigger and at least one action are set, click **Publish Flow** in the top right. The status changes to Active and Converly starts sending conversions.
If it's the first flow you've published, a window then shows your tracking code, ready to copy onto your website (unless you installed Converly with one of our plugins). You can also find the code any time on the **Install** tab in **Settings** (or in **Site Settings** inside the site, on a Multiple sites plan).
If you edit a flow after publishing it, the button changes to **Publish Changes**. Your edits only start working once you click it.
Click **Logs** in the left sidebar to open your conversion log. Every conversion Converly sends shows up here, with the visitor, the flow, the destinations it reached, and whether it was delivered.
## Common patterns
### Send one event to several platforms
A single form submission or booking can fire conversions to Google Ads, Meta, and Google Analytics at the same time. Add each one as a separate action in the same flow.
### Different events for different stages
If you track separate stages, like a demo booking and a closed deal, build a flow for each. One records a lead when the demo is booked, the other records a purchase when the deal closes.
Send a test conversion before you publish. A misconfigured conversion can inflate or deflate your reported numbers, and your ad platforms bid on those numbers.
---
# Connect Google Ads
URL: https://help.converly.io/setup-destinations/connect-google-ads
Category: setup-destinations
Updated: 2026-09-23
Send your conversions to Google Ads so it can optimise bidding and show which campaigns actually drive leads.
Sending conversions to Google Ads tells it which clicks turned into real leads. Google Ads uses that to bid smarter and to show you which campaigns and keywords are working.
A destination is added inside a flow as an action. So you connect Google Ads while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), and access to your Google Ads account.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Google Ads
A panel slides in from the right listing every destination Converly can send to. Click **Google Ads**.
## Step 3: Connect Google Ads
The first time you use Google Ads you need to connect it. Click **Log in with Google**.
A Google window opens. Sign in with the Google account that has access to your Google Ads, and approve the request. The window closes and you come back to Converly, where you pick which Google Ads account Converly should send conversions to. This is a one time step. After this, Google Ads stays connected for every flow.
If you manage client accounts through a manager (MCC) account, use **Or connect another way** instead. That path links Converly to your manager account using your 10-digit customer ID.
## Step 4: Choose your conversion
Now tell Converly which Google Ads conversion to record. Pick an existing conversion action from the dropdown, or choose **Create a new conversion** if you do not have one yet.
You can set a **value** and **currency** if each lead is worth a fixed amount to you. Leave the value blank if not.
Leave **Enhanced Conversions** turned on. It sends securely hashed customer details alongside the click ID, which significantly improves how many conversions Google can match back to a click. This is the single biggest lever on accuracy, so only turn it off if you have a specific reason. On Google's side this is the setting called enhanced conversions for leads, which your Google Ads account has to have switched on before it will accept anything. [Accept the Customer Data Terms in Google Ads](/troubleshooting/google-ads-customer-data-terms) covers that.
Google doesn't allow Enhanced Conversions for some sensitive categories, including health and medical services, and divorce or family law. If your business is in one of these, switch **Enhanced Conversions** off so Converly only sends the click ID. Breaking this rule can lead Google to switch off Enhanced Conversions for your account, or suspend the account altogether. You can [read Google's full list of restricted categories here](https://support.google.com/google-ads/answer/7475709).
## Step 5: Send a test
Click **Send test event** to push a test conversion through to Google Ads. Then click **Add action** and publish the flow.
Unlike some tools, Google Ads does **not** have a screen that shows conversions arriving in real time. A test you send will **not** appear straight away. Google Ads can take **up to 48 hours** to display it, in the Diagnostics tab of the conversion action. A test not showing immediately is completely normal and does not mean anything is broken. Do not keep re-sending tests expecting instant confirmation. Come back and check Google Ads a day or two later.
## What happens next
Once the flow is published, real conversions flow to Google Ads automatically. You can watch them arrive in your Converly conversion log right away, even though Google Ads itself takes longer to show them.
If conversions still are not showing in Google Ads after 48 hours, check that the conversion action you picked is set to Active in Google Ads, that the flow is Active rather than Draft in Converly, and that the connection still shows as connected under Settings.
If Converly says the conversion was delivered but you still can't find it in Google Ads, there are several reasons that can happen without anything being broken. You can [read more about why a conversion isn't showing in Google Ads here](/troubleshooting/conversion-not-showing-in-google-ads).
---
# Connect Meta Ads
URL: https://help.converly.io/setup-destinations/connect-meta-ads
Category: setup-destinations
Updated: 2026-05-16
Send your conversions to Meta so Facebook and Instagram ads can optimise and report on the leads they actually drive.
Sending conversions to Meta tells Facebook and Instagram which ad clicks turned into real leads. Meta uses that to optimise delivery and to report accurately, even when the browser pixel is blocked, because Converly sends server-side through the Conversions API.
A destination is added inside a flow as an action, so you connect Meta while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), and access to your Meta Business account and pixel.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Meta Ads
A panel slides in from the right listing every destination Converly can send to. Click **Meta Ads**.
## Step 3: Connect Meta
The first time you use Meta you need to connect it. Click **Connect with Facebook**.
A Facebook window opens. Sign in with the account that has access to your Meta Business and pixel, and approve the request. The window closes and you come back to Converly, where you pick which pixel Converly should send conversions to. This is a one time step. After this, Meta stays connected for every flow.
## Step 4: Choose your conversion
Pick which Meta event to record. Choose a standard event like **Lead** or **CompleteRegistration** from the dropdown, or pick **Use a custom event name** if you track something specific.
Set a **value** and **currency** if each lead is worth a fixed amount, or leave the value blank.
Leave **Conversions API** turned on. It sends the conversion server-side, so it still counts even when a visitor's browser blocks the Meta pixel. This is the main reason server-side tracking is more accurate, so only turn it off if you have a specific reason.
## Step 5: Send a test
Meta has a live Test Events view, so you can watch your test arrive.
1. In Meta, open **Events Manager**, select your pixel, and open the **Test Events** tab.
2. Copy the **Test Events code** shown there.
3. Paste it into Converly's box, then click **Send test event**.
Watch the **Test Events** tab in Meta. The event usually appears within a minute or two. Once you have seen it, click **Add action** and publish the flow.
Unlike Google Ads, Meta shows test events in near real time. If nothing appears after a few minutes, double check you pasted the exact Test Events code from the same pixel you connected, and that the Test Events tab is still open.
## What happens next
Once the flow is published, real conversions flow to Meta automatically. You can also watch them arrive in your Converly conversion log.
If conversions are not showing in Meta later, check that the pixel you connected is the one your ads use, that the flow is Active rather than Draft in Converly, and that the connection still shows as connected under Settings.
---
# Connect LinkedIn Ads
URL: https://help.converly.io/setup-destinations/connect-linkedin-ads
Category: setup-destinations
Updated: 2026-09-23
Send your conversions to LinkedIn so it can optimise your ads and report on the leads they actually drive.
Sending conversions to LinkedIn tells it which ad clicks turned into real leads. LinkedIn uses that to optimise delivery and to report accurately, even when the browser can't be tracked, because Converly also sends server-side through the LinkedIn Conversions API.
One thing that makes LinkedIn a little different is that it counts browser conversions and server conversions in separate conversion rules. Converly handles that for you with 2 rules, and this article shows you where they fit.
A destination is added inside a flow as an action, so you connect LinkedIn while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), and access to your LinkedIn Campaign Manager account.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose LinkedIn Ads
A panel slides in from the right listing every destination Converly can send to. Click **LinkedIn Ads**.
## Step 3: Connect LinkedIn
The first time you use LinkedIn you need to connect it. Click **Connect with LinkedIn**.
A LinkedIn window opens. Sign in with the account that has access to your Campaign Manager, and approve the request. The window closes and you come back to Converly, where you pick which LinkedIn ad account Converly should send conversions to. This is a one time step. After this, LinkedIn stays connected for every flow.
## Step 4: Choose your conversion rules
Because LinkedIn counts browser and server conversions separately, Converly asks for 2 rules.
- **Browser rule** - the conversion LinkedIn records from your visitor's browser, through your Insight Tag.
- **Server rule** - the conversion Converly fires from its servers, which ad blockers can't stop.
Pick an existing rule in each dropdown, or choose **Create a new conversion** at the bottom to have Converly create one in your LinkedIn account. Give it a name, pick a category (Lead is the usual choice for form conversions), and Converly sets it up with the right method for that slot.
## Step 5: Send a test
The last step is to make sure everything is working. Click **Send test event** in Converly.
Then check it arrived. In LinkedIn Campaign Manager, open **Measurement**, then **Conversion tracking**. Find your server rule in the list. LinkedIn shows when each conversion last received a signal, and your test should register there. LinkedIn can take a few minutes to update this, so don't worry if it isn't instant.
Once you have seen it, click **Add action** and publish the flow.
### Prefer to paste a token instead?
If you'd rather not use the LinkedIn login, Converly also accepts a LinkedIn **Direct API access token** pasted directly.
Click **paste your own token** on the connect screen, then grab the token from Campaign Manager. Open the **Measure** dropdown in the left menu, select **Signals Manager**, choose the **Direct API** option, and click **Generate Access Token**. Paste it into Converly and continue.
## What happens next
Once the flow is published, real conversions flow to LinkedIn automatically. You can also watch them arrive in your Converly conversion log right away.
If conversions are not showing in LinkedIn later, check that the ad account you connected is the one your campaigns use, that the flow is Active rather than Draft in Converly, and that the connection still shows as connected under Settings.
---
# Connect Reddit Ads
URL: https://help.converly.io/setup-destinations/connect-reddit-ads
Category: setup-destinations
Updated: 2026-07-13
Send your conversions to Reddit so it can optimise your ads and report on the leads they actually drive.
Sending conversions to Reddit tells it which ad clicks turned into real leads. Reddit uses that to optimise delivery and to report accurately, even when the browser pixel is blocked, because Converly sends server-side through the Reddit Conversions API.
A destination is added inside a flow as an action, so you connect Reddit while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), and access to your Reddit Ads account.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Reddit Ads
A panel slides in from the right listing every destination Converly can send to. Click **Reddit Ads**.
## Step 3: Connect Reddit
The first time you use Reddit you need to connect it. Click **Connect with Reddit**.
A Reddit window opens. Sign in with the account that has access to your Reddit Ads, and approve the request. The window closes and you come back to Converly, where you pick which Reddit Ads account Converly should send conversions to. This is a one time step. After this, Reddit stays connected for every flow.
## Step 4: Choose your conversion
Pick which Reddit event to record from the **Conversion** dropdown. The options are Lead, Sign up, Purchase, View content, Search, and Add to cart. Most people sending form conversions want **Lead**.
Set a **value** and **currency** if each lead is worth a fixed amount, or leave the value blank.
## Step 5: Send a test
Reddit shows test conversions arriving live, but only while the right page is open. So set that up first.
1. In the Reddit Ads Manager, open **Events Manager** and go to the **Event Testing** page. Leave it open.
2. Copy the **Test ID** shown on that page and paste it into the **Test ID** box in Converly.
3. Click **Send test event**.
Watch the **Event Testing** page in Reddit. The event usually appears within a minute. Once you have seen it, click **Add action** and publish the flow.
The **Test ID** is what tells Reddit this is only a test. If you click **Send test event** without one, Converly sends a real conversion to your Reddit account, and it can show up in your campaign reporting. So paste the Test ID first. And remember Reddit only shows tests while the **Event Testing** page is open, so keep it open when you send.
## What happens next
Once the flow is published, real conversions flow to Reddit automatically. You can also watch them arrive in your Converly conversion log right away.
If conversions are not showing in Reddit later, check that the account you connected is the one your ads use, that the flow is Active rather than Draft in Converly, and that the connection still shows as connected under Settings.
---
# Connect TikTok Ads
URL: https://help.converly.io/setup-destinations/connect-tiktok-ads
Category: setup-destinations
Updated: 2026-08-02
Send your conversions to TikTok so it can optimise your ads and report on the leads they actually drive.
Sending conversions to TikTok tells it which ad clicks turned into real leads. TikTok uses that to optimise delivery and to report accurately, even when the browser pixel is blocked, because Converly also sends server-side through the TikTok Events API. TikTok recognises when the same conversion arrives both ways and counts it once.
A destination is added inside a flow as an action, so you connect TikTok while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), access to your TikTok Ads account, and a TikTok pixel created in TikTok Events Manager.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose TikTok Ads
A panel slides in from the right listing every destination Converly can send to. Click **TikTok Ads**.
## Step 3: Connect TikTok
The first time you use TikTok you need to connect it. Click **Connect with TikTok**.
A TikTok window opens. Sign in with the account that has access to your TikTok Ads, and approve the request. The window closes and you come back to Converly, where you pick the ad account Converly should use, then the pixel conversions should be recorded against (the same pixel you see in TikTok Events Manager). This is a one time step. After this, TikTok stays connected for every flow.
During authorisation, TikTok sends a verification code to the email address on the ad account. So make sure you can access that inbox before you start. If you can't, use the paste-a-token option instead (see the end of this article).
## Step 4: Choose your conversion
Pick which TikTok event to record from the **Conversion** dropdown. The options are Submit form, Complete registration, Contact, Subscribe, and Download. Most people sending form conversions want **Submit form**.
Set a **value** and **currency** if each lead is worth a fixed amount, or leave the value blank.
## Step 5: Send a test
TikTok shows incoming events in Events Manager, so you can check your test conversion arrived.
1. In TikTok Events Manager, open your pixel and go to the **Test events** tab. Leave it open.
2. Back in Converly, click **Send test event**.
The event usually appears within a minute or two. Once you have seen it, click **Add action** and publish the flow.
### Prefer to paste a token instead?
If you can't use the TikTok login (for example you can't access the inbox TikTok sends its verification code to), Converly also accepts a TikTok **Events API access token** pasted directly.
Click **paste your own token** on the connect screen, then grab 2 things from TikTok Events Manager:
- **Access token** - in Events Manager, open your pixel's settings and generate an Events API access token.
- **Pixel code** - the pixel's ID, shown at the top of the pixel's page in Events Manager.
Paste both into Converly and continue. Everything from Step 4 onwards is the same.
## What happens next
Once the flow is published, real conversions flow to TikTok automatically. You can also watch them arrive in your Converly conversion log right away.
If conversions are not showing in TikTok later, check that the pixel you connected is the one your campaigns use, that the flow is Active rather than Draft in Converly, and that the connection still shows as connected under Settings.
---
# Connect ChatGPT Ads
URL: https://help.converly.io/setup-destinations/connect-chatgpt-ads
Category: setup-destinations
Updated: 2026-09-24
Send your conversions to ChatGPT Ads so OpenAI can optimise your ads and report on the leads they actually drive.
ChatGPT Ads is OpenAI's advertising platform, where your ads appear inside ChatGPT itself. Sending conversions to it tells OpenAI which ad clicks turned into real leads, so it can optimise delivery and report accurately.
Converly sends every conversion to ChatGPT Ads from our servers to OpenAI's Conversions API, so ad blockers can't get in the way. You don't need OpenAI's pixel on your website for this to work.
If you do have OpenAI's pixel installed, Converly also sends each conversion to the pixel through the visitor's browser. Both carry the same ID, so OpenAI counts them as one conversion.
A destination is added inside a flow as an action, so you connect ChatGPT Ads while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), and access to your ChatGPT Ads account.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose ChatGPT Ads
A panel slides in from the right listing every destination Converly can send to. Click **ChatGPT Ads**.
## Step 3: Create an Ads API key
The next step is to grab an API key from ChatGPT Ads Manager so Converly can set everything up for you.
In [ChatGPT Ads Manager](https://ads.openai.com), open **Settings**, click the **General** tab, and create an API key. Copy it straight away.
ChatGPT Ads has 2 different keys and their names are easy to confuse. The **Ads API key** (the one you just created under Settings) is what Converly needs. The **Conversions API key** is a different key that lives under the Conversions section. You don't need to create that one at all. Converly creates it for you.
## Step 4: Paste the key into Converly
Back in Converly, simply paste the Ads API key into the box and click **Continue**.
This step is completely safe to repeat. Converly only uses the key to read your account's conversion setup, so nothing is created or changed yet.
## Step 5: Choose your data source
Converly then shows the data sources in your ChatGPT Ads account. A data source is the container OpenAI uses to group your conversions, and you can see the same list in Ads Manager under the Conversions section.
Pick the one Converly should send conversions to from the dropdown. Each option shows the data source's name and its ID, so you can match it against what you see in Ads Manager.
If you don't have one yet (or want a fresh one), choose **Create a new data source** at the bottom of the dropdown, give it a name, and click **Create and connect**. Converly suggests a name based on your website so it stays recognisable in Ads Manager later.
ChatGPT Ads has no way to rename or delete a data source once it exists. That's an OpenAI limitation, not a Converly one. So if you create a new one, pick a name you're happy to see in your account permanently.
## Step 6: Choose your conversion
The next step is to pick which conversion event Converly should record. The dropdown lists the conversion events that exist on your data source.
If there isn't one yet, simply choose **Create a new conversion** from the bottom of the dropdown. You can create a **Lead created**, **Registration completed**, or **Appointment scheduled** event. Most people sending form conversions want **Lead created**.
## Step 7: Send a test
ChatGPT Ads has a live event stream, so you can watch your test conversion arrive in real time.
1. In ChatGPT Ads Manager, go to **Tools**, then **Conversions**, and open the **Event Stream** tab.
2. Make sure your data source is selected, then click **Start polling**. Leave the page open.
3. Back in Converly, click **Send test event**.
Watch the Event Stream page. The event usually appears within a minute, with your event type shown and the channel listed as server_to_server. Once you have seen it, click **Add action** and publish the flow.
### If automatic setup isn't available
Some ChatGPT Ads accounts don't have API setup access yet. If yours is one of them, Converly tells you during Step 4 and offers a manual path instead.
For the manual path, you create the data source, the Conversions API key, and the conversion event yourself in Ads Manager (all under the Conversions section), then give Converly 3 things:
- **Data source ID** - shown next to your data source in the Conversions section.
- **Conversions API key** - OpenAI shows this key once, at the moment you create it. If you didn't save it, simply create a new one.
- **Conversion event** - pick the same event type you created in Ads Manager. This matters, because OpenAI quietly accepts events that don't match a conversion event and never reports them.
## What happens next
Once the flow is published, real conversions flow to ChatGPT Ads automatically. You can also watch them arrive in your Converly conversion log right away.
If conversions stop showing up in ChatGPT Ads later, check that the flow is Active rather than Draft in Converly, and that the connection still shows as connected under Settings. If the connection has broken (for example the API key was revoked in Ads Manager), simply reconnect and pick the same data source again. Nothing gets duplicated.
---
# Connect Google Analytics
URL: https://help.converly.io/setup-destinations/connect-google-analytics
Category: setup-destinations
Updated: 2026-05-16
Send your conversions into GA4 so they show up as events and key events alongside the rest of your analytics.
Sending conversions to Google Analytics 4 records each lead as an event in GA4, so it sits alongside the rest of your traffic and funnels. Converly sends server-side through the Measurement Protocol, so events still land even if the GA4 browser tag is blocked.
A destination is added inside a flow as an action, so you connect GA4 while building (or editing) a flow.
**Before you start:** you need a flow that already has a trigger set up (see [Building a flow](/setup-destinations/building-a-workflow)), and access to a GA4 property with a web data stream.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Google Analytics
A panel slides in from the right listing every destination Converly can send to. Click **Google Analytics**.
## Step 3: Connect Google Analytics
The first time you use GA4 you need to connect it. Click **Log in with Google**.
A Google window opens. Sign in with the account that has access to your GA4 property, and approve the request. The window closes and you come back to Converly, where you pick your GA4 account, property, and the web data stream Converly should send to. This is a one time step. After this, GA4 stays connected for every flow.
## Step 4: Choose your conversion
Pick which GA4 event to record. Choose a recommended event like **generate_lead** or **sign_up** from the dropdown, or pick **Use a custom event name** to send your own.
Set a **value** and **currency** if each lead is worth a fixed amount, or leave the value blank.
Leave **Measurement Protocol** turned on. It sends the event server-side, so it still records even if the GA4 browser tag is blocked by an ad blocker or privacy tool.
## Step 5: Send a test
GA4 has a live debug view, so you can watch your test arrive. You do not need a code for this one.
1. Click **Send test event**. Converly fires it with debug mode on.
2. In Google Analytics, open **Admin**, then **DebugView**.
The event usually appears in DebugView within about 30 seconds. Once you have seen it, click **Add action** and publish the flow.
Unlike Google Ads, GA4 shows debug events almost instantly. If nothing appears after a minute, make sure you are looking at DebugView in the same property and data stream you connected.
## What happens next
Once the flow is published, real conversions flow to GA4 automatically. You can also watch them arrive in your Converly conversion log.
If events are not showing in GA4 later, mark the event as a key event in GA4 if you want it counted as a conversion, check the flow is Active rather than Draft in Converly, and confirm the connection still shows as connected under Settings.
---
# Connect Plausible Analytics
URL: https://help.converly.io/setup-destinations/connect-plausible-analytics
Category: setup-destinations
Updated: 2026-09-23
Record your form submissions as goal conversions in Plausible Analytics, with the conversion value included.
Plausible Analytics is a popular privacy-friendly alternative to Google Analytics. It gives you simple, cookie-free website stats without the complexity.
Converly can send your conversions to Plausible as custom events, so your form submissions show up as goals in your Plausible dashboard alongside your traffic data, complete with the conversion value if you set one.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the Plausible script needs to be installed on your website. Converly fires the event into the Plausible script already running on your page. It does not install Plausible for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Plausible Analytics
A panel slides in from the right listing every destination Converly can send to. Click **Plausible Analytics**.
## Step 3: Configure the event
The next step is to tell Converly what to send. It should look something like this:
- **Goal Name** = the name of the goal in your Plausible account. Plausible matches events to goals by their exact name, so "Form Submitted" and "Form Submission" are 2 different goals. Copy the name carefully.
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100).
- **Currency** = the currency for that value.
Click **Add action**, then **publish your flow**.
## Step 4: Create the goal in Plausible
The final step is to create the matching goal inside Plausible.
In your Plausible dashboard, go to **Site Settings**, then **Goals**, then click **Add goal**. Choose **Custom event** and enter the exact same name you used in Converly.
**Important:** Create the goal before you start sending conversions. Plausible only starts counting a goal from the moment you create it, so any conversions sent before then won't show up in your dashboard.
Revenue tracking is a Business plan feature in Plausible. When you create the goal, switch on **Enable Revenue Tracking** and pick the same currency you chose in Converly. Plausible only attaches revenue to conversions that arrive after the revenue goal exists, so set this up before you start sending if the dollar figures matter to you. The currency on a goal cannot be changed later.
Plausible's own script automatically tracks form submissions as a goal called "Form: Submission". That one counts every form on your site. The goal you just created is different. It only counts conversions from your Converly flow, and it can carry the conversion value once revenue tracking is enabled on it. It is normal to have both.
## Step 5: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with Plausible Analytics marked as fired.
2. In Plausible, filter your dashboard by your new goal. The conversion should appear within a minute or two, with the revenue figure if you enabled it.
That means the Plausible script was not on the page when the form was submitted. Converly still records the conversion for you, but nothing reaches Plausible until their script is installed on your site. Add the Plausible snippet to your site and test again.
---
# Connect Fathom Analytics
URL: https://help.converly.io/setup-destinations/connect-fathom-analytics
Category: setup-destinations
Updated: 2026-09-23
Record your form submissions as events in Fathom Analytics, with the conversion value included.
Fathom Analytics is a simple, privacy-focused alternative to Google Analytics. Everything sits in a clean dashboard, with no cookies and no consent banners needed.
Converly can send your conversions to Fathom as events, so your form submissions show up in your Fathom dashboard alongside your traffic data, with the conversion value included.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the Fathom script needs to be installed on your website. Converly fires the event into the Fathom script already running on your page. It does not install Fathom for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Fathom Analytics
A panel slides in from the right listing every destination Converly can send to. Click **Fathom Analytics**.
## Step 3: Configure the event
The next step is to tell Converly what to send. It should look something like this:
- **Event Name** = the name the event appears under in your Fathom dashboard.
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100). Fathom counts values in cents behind the scenes, but you don't need to think about that. Converly converts it for you.
Click **Add action**, then **publish your flow**.
There is nothing to set up on the Fathom side. The event appears in your Fathom dashboard after the first conversion arrives.
## Step 4: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with Fathom Analytics marked as fired.
2. In Fathom, open your site's dashboard and look at the **Events** section. Your event should appear with its count and total value.
That means the Fathom script was not on the page when the form was submitted. Converly still records the conversion for you, but nothing reaches Fathom until their script is installed on your site. Add the Fathom snippet to your site and test again.
---
# Connect Simple Analytics
URL: https://help.converly.io/setup-destinations/connect-simple-analytics
Category: setup-destinations
Updated: 2026-09-23
Record your form submissions as events in Simple Analytics, with the conversion value attached.
Simple Analytics is a privacy-first alternative to Google Analytics. No cookies, no personal data, just clean website stats.
Converly can send your conversions to Simple Analytics as events, so your form submissions show up in your Simple Analytics dashboard alongside your traffic, with the conversion value attached as metadata.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the Simple Analytics script needs to be installed on your website. Converly fires the event into the script already running on your page. It does not install Simple Analytics for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Simple Analytics
A panel slides in from the right listing every destination Converly can send to. Click **Simple Analytics**.
## Step 3: Configure the event
The next step is to tell Converly what to send. It should look something like this:
- **Event Name** = the name the event appears under in Simple Analytics. The default, form_submitted, follows their naming style (lowercase with underscores).
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100). Converly attaches it to the event as metadata whenever it is above 0.
Click **Add action**, then **publish your flow**.
There is nothing to set up on the Simple Analytics side. Events appear automatically the first time one arrives.
## Step 4: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with Simple Analytics marked as fired.
2. In Simple Analytics, open the **Events** tab for your website. Your event name should appear with a count. To see the conversion value, click **Add a column** and choose the value field from the metadata list.
2 things to check. First, if the conversion shows as Pixel not found in your Converly conversion log, the Simple Analytics script was not on the page when the form was submitted. Add their snippet to your site and test again. Second, Simple Analytics filters out traffic that looks automated. If you test with a bot, a testing tool, or an unusual browser, they may silently ignore the visit and the event. Always test in a normal browser.
---
# Connect Pirsch Analytics
URL: https://help.converly.io/setup-destinations/connect-pirsch-analytics
Category: setup-destinations
Updated: 2026-09-23
Record your form submissions as events in Pirsch Analytics, with the conversion value attached.
Pirsch Analytics is a privacy-friendly, cookie-free alternative to Google Analytics, popular with businesses that want simple stats without consent banners.
Converly can send your conversions to Pirsch as events, so your form submissions show up in your Pirsch dashboard alongside your traffic data, with the conversion value attached.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the Pirsch script needs to be installed on your website. Converly fires the event into the Pirsch script already running on your page. It does not install Pirsch for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Pirsch Analytics
A panel slides in from the right listing every destination Converly can send to. Click **Pirsch Analytics**.
## Step 3: Configure the event
The next step is to tell Converly what to send. It should look something like this:
- **Event Name** = the name the event appears under in your Pirsch dashboard.
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100). Converly attaches it to the event as metadata, which you can see when you click into the event in Pirsch.
Click **Add action**, then **publish your flow**.
There is nothing to set up on the Pirsch side. Events appear automatically the first time one arrives.
## Step 4: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with Pirsch Analytics marked as fired.
2. In Pirsch, open your site's dashboard and look at the **Events** panel. Your event should appear there, and clicking into it shows the value metadata.
That means the Pirsch script was not on the page when the form was submitted. Converly still records the conversion for you, but nothing reaches Pirsch until their script is installed on your site. Add the Pirsch snippet to your site and test again.
---
# Connect GoSquared
URL: https://help.converly.io/setup-destinations/connect-gosquared
Category: setup-destinations
Updated: 2026-09-23
Record your form submissions as events in GoSquared, with the conversion value attached.
GoSquared is a website analytics tool known for its live, real-time view of who is on your site right now.
Converly can send your conversions to GoSquared as events, so your form submissions show up in your GoSquared dashboard alongside your traffic data, with the conversion value attached.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the GoSquared tracker needs to be installed on your website. Converly fires the event into the tracker already running on your page. It does not install GoSquared for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose GoSquared
A panel slides in from the right listing every destination Converly can send to. Click **GoSquared**.
## Step 3: Configure the event
The next step is to tell Converly what to send. It should look something like this:
- **Event Name** = the name the event appears under in your GoSquared dashboard.
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100). Converly attaches it to the event as a property.
Click **Add action**, then **publish your flow**.
There is nothing to set up on the GoSquared side. Events appear automatically the first time one arrives.
## Step 4: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with GoSquared marked as fired.
2. In GoSquared, open **Trends** for your project and look at the **Events** widget. Your event should appear with its count.
That means the GoSquared tracker was not on the page when the form was submitted. Converly still records the conversion for you, but nothing reaches GoSquared until their tracker is installed on your site. Add the GoSquared tracking code to your site and test again.
---
# Connect Taboola
URL: https://help.converly.io/setup-destinations/connect-taboola
Category: setup-destinations
Updated: 2026-09-23
Send conversions to your Taboola pixel so Taboola can see which campaigns and placements drive real leads.
Taboola is a native advertising platform that places your ads across a huge network of publisher websites.
Converly can fire your conversions into the Taboola pixel on your website, so Taboola knows which campaigns and placements are actually turning into leads and can optimise your spend accordingly.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the Taboola pixel needs to be installed on your website. Converly fires the conversion into the pixel already running on your page. It does not install the pixel for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose Taboola
A panel slides in from the right listing every destination Converly can send to. Click **Taboola**.
## Step 3: Configure the conversion
The next step is to tell Converly what to send. It should look something like this:
- **Event Name** = the event name Taboola should receive, for example lead. Use the same event name as the conversion you set up in your Taboola account, so Taboola can match them up.
- **Account ID** = your numeric Taboola account ID. Taboola includes it on every conversion event, so Converly cannot fire without it. You can find it in the top right of your Taboola Ads dashboard.
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100).
- **Currency** = the currency for that value.
**Important:** the Account ID must be a plain number, with no leading zero and no more than 15 digits. If the ID doesn't look like that, Converly skips the conversion rather than send something Taboola cannot attribute.
Click **Add action**, then **publish your flow**.
## Step 4: Set up the matching conversion in Taboola
For Taboola to count what Converly sends, your Taboola account needs a conversion defined with the same event name. In Taboola Ads, this lives under your tracking settings, where you can add a conversion based on an event (Taboola calls these event-based conversions).
If you already track this conversion with Taboola, simply reuse its event name in Converly rather than creating a new one.
## Step 5: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with Taboola marked as fired.
2. In Taboola Ads, check your conversion's activity. Taboola can take a while to reflect new conversions in reporting, so don't panic if it isn't instant.
2 common causes. If the Taboola pixel was not on the page when the form was submitted, nothing can be sent until it is installed. And if the Account ID is missing or not a plain number, Converly deliberately skips the fire, because Taboola cannot attribute a conversion without a valid account ID. Fix the field and test again.
---
# Connect AdRoll
URL: https://help.converly.io/setup-destinations/connect-adroll
Category: setup-destinations
Updated: 2026-09-23
Record your form submitters into an AdRoll audience segment, with the conversion value attached.
AdRoll is an advertising platform best known for retargeting, showing your ads to people who have already visited your website.
Converly can work with the AdRoll pixel on your website to record the people who submit your forms into an AdRoll audience segment, with the conversion value attached. That gives you a clean audience of actual leads to retarget or exclude, rather than just page visitors.
To set it up, follow the instructions below:
**Before you start:** you need a flow with a trigger already set up (see [Building a flow](/setup-destinations/building-a-workflow)), and the AdRoll pixel needs to be installed on your website. Converly fires into the pixel already running on your page. It does not install the pixel for you.
## Step 1: Add an action
Open the flow with your trigger. Below the trigger card there is a **+** button. Click it to add an action.
## Step 2: Choose AdRoll
A panel slides in from the right listing every destination Converly can send to. Click **AdRoll**.
## Step 3: Configure the segment
The next step is to tell Converly which AdRoll segment to record people into. It should look something like this:
- **Segment Name** = the segment code from your AdRoll audience. In AdRoll, create (or open) the audience you want your form submitters recorded into, and copy the segment value from its setup.
- **Advertiser ID** = optional and for your reference only. AdRoll records the segment without it.
- **Conversion Value** = optional. What a conversion is worth to you, in normal dollars (100 means $100). Converly sends it to AdRoll in the format their pixel expects.
- **Currency** = the currency for that value.
Click **Add action**, then **publish your flow**.
## Step 4: Test it works
That's it! You've set everything up!
The final step is to make sure everything is working. To do this, **open a new incognito window** and submit the form on your website that triggers your flow.
Then check 2 places:
1. In Converly, click **Logs** in the left sidebar to open your conversion log. You should see the conversion with AdRoll marked as fired.
2. In AdRoll, open the audience you connected. Audience sizes update on AdRoll's own schedule, so allow some time before expecting the count to move.
That means either the AdRoll pixel was not on the page when the form was submitted, or no Segment Name was configured on the action. Converly still records the conversion for you, but nothing reaches AdRoll until both are in place.
---
# Connect Calendly
URL: https://help.converly.io/setup-triggers/connect-calendly
Category: setup-triggers
Updated: 2026-05-15
Send conversions to your ad platforms whenever someone books a meeting through Calendly.
Calendly is one of the most common lead capture tools we see. If you run ads that send people to a Calendly booking page, this guide is for you.
By the end, every Calendly booking will flow into Converly as a conversion, ready to send to Google Ads, Meta, or anywhere else you need it.
**Before you start:** you need admin access to your Calendly account, and Converly installed on your site.
## Step 1: Create a flow
A flow is the rule that turns a Calendly booking into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Demo bookings".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Calendly
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Calendly is under the scheduling tools.
Click **Calendly**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Connect your Calendly account
The first time you use Calendly, Converly asks you to connect it. This is what lets Converly see your bookings and the details of who booked.
Click **Connect Calendly**. A Calendly window opens and asks you to authorize Converly. Sign in if needed, then approve it. The window closes and you come back here, now connected.
Authorize the Calendly account your bookings actually run through. A common mistake is connecting a personal account when the team account takes the bookings. If that happens, reconnect and choose the correct account.
## Step 4: Choose which bookings count
Now you decide which Calendly bookings should fire a conversion.
By default the dropdown is set to **Always trigger this conversion flow**, which counts every booking. To only count certain meetings, change it to **A specific event type is selected**, then tick the event types that matter.
For example, if you only want a conversion when someone books a real sales demo, tick **Product demo** and leave the others unticked. A short intro call will then be ignored. You can tick more than one.
When you are happy, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If bookings are not showing up later, check that the right event types are still ticked on the trigger, that the flow is set to Active rather than Draft, and that Calendly is still connected on the Integrations tab under Settings.
---
# Connect Acuity Scheduling
URL: https://help.converly.io/setup-triggers/connect-acuity
Category: setup-triggers
Updated: 2026-05-15
Send conversions to your ad platforms whenever someone books an appointment through Acuity Scheduling.
If you run ads that drive people to an Acuity Scheduling booking page, this guide turns every appointment into a conversion you can send to Google Ads, Meta, or anywhere else.
**Before you start:** you need admin access to your Acuity Scheduling account, and Converly installed on your site.
## Step 1: Create a flow
A flow is the rule that turns an Acuity booking into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Acuity bookings".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Acuity Scheduling
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Acuity Scheduling is under the scheduling tools.
Click **Acuity Scheduling**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Connect your Acuity account
Acuity gives you two ways to track bookings:
- **Connect Acuity Scheduling (recommended).** Converly links to your Acuity account so it can read each booking in full. This gives you the best conversion match quality, which means more of your bookings get matched back to the ad click that drove them.
- **Use snippet only.** Tracking still works, but with reduced match quality. You paste a small snippet into Acuity instead of connecting your account.
We recommend connecting. Click **Connect Acuity Scheduling**, sign in to Acuity in the window that opens, and approve it. You come back here, now connected.
## Step 4: Choose which appointments count
Now you decide which Acuity bookings should fire a conversion.
By default the dropdown is set to **Always trigger this conversion flow**, which counts every booking. To only count certain meetings, change it to **A specific appointment type is selected**, then tick the appointment types that matter.
For example, if only a paid strategy session is a real conversion for you, tick that one and leave the free intro call unticked. You can tick more than one.
When you are happy, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If bookings are not showing up later, check that the right appointment types are still ticked on the trigger, that the flow is set to Active rather than Draft, and that Acuity is still connected on the Integrations tab under Settings.
---
# Connect Typeform
URL: https://help.converly.io/setup-triggers/connect-typeform
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms when someone completes a Typeform survey or lead form.
Typeform is a popular way to capture leads with conversational forms. If you run ads that send people to a Typeform, this guide turns every completed form into a conversion you can send to Google Ads, Meta, or anywhere else.
**Before you start:** you need admin access to your Typeform workspace, and Converly installed on your site.
## Step 1: Create a flow
A flow is the rule that turns a Typeform submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Typeform leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Typeform
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Typeform is under the form builders.
Click **Typeform**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Connect your Typeform account
The first time you use Typeform, Converly asks you to connect it. This is what lets Converly see your form submissions and the details of who submitted.
Click **Connect Typeform**. A Typeform window opens and asks you to authorize Converly. Sign in if needed, then approve it. The window closes and you come back here, now connected.
Authorize the Typeform workspace your forms actually live in. If your forms are in a different workspace, reconnect and choose the correct one.
## Step 4: Choose which forms count
Now you decide which Typeform submissions should fire a conversion.
By default the dropdown is set to **Always trigger this conversion flow**, which counts every submission across all your forms. To only count certain forms, change it to **A specific form is selected**, then tick the forms that matter.
For example, if only your "Request a quote" form represents a real lead, tick that one and leave the others unticked. A newsletter signup will then be ignored. You can tick more than one.
When you are happy, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that the right forms are still ticked on the trigger, that the flow is set to Active rather than Draft, and that Typeform is still connected on the Integrations tab under Settings.
---
# Connect Jotform
URL: https://help.converly.io/setup-triggers/connect-jotform
Category: setup-triggers
Updated: 2026-05-15
Send conversions to your ad platforms whenever someone submits a Jotform form.
If you run ads that send people to a Jotform form, this guide turns every submission into a conversion you can send to Google Ads, Meta, or anywhere else.
**Before you start:** you need admin access to your Jotform account, and Converly installed on your site.
## Step 1: Create a flow
A flow is the rule that turns a Jotform submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Jotform leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Jotform
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Jotform is under the form builders.
Click **Jotform**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Connect Jotform with an API key
Jotform connects with an API key rather than a sign in window. The key lets Converly read your forms and add its tracking field automatically, so you do not have to paste anything into Jotform yourself.
To get your key, log in to Jotform, open your account settings, and go to the **API** section. Create a new key. By default Jotform creates it as **Read Only**, so change its permission to **Full Access** before you copy it. Back in Converly, paste it into the box and click **Connect Jotform**. The **How do I find my API key?** link is there if you need a reminder.
This is the most common mistake. When you create an API key in Jotform it is set to **Read Only** by default. You have to manually change it to **Full Access**. A Read Only key looks like it connects, but Converly cannot add its tracking field to your forms, so no conversions will ever fire. If submissions are not coming through, check this first.
## Step 4: Choose which forms count
Now you decide which Jotform submissions should fire a conversion.
By default the dropdown is set to **Always trigger this conversion flow**, which counts every submission across all your forms. To only count certain forms, change it to **A specific form is selected**, then tick the forms that matter.
For example, if only your "Request a quote" form represents a real lead, tick that one and leave the others unticked. A newsletter signup will then be ignored. You can tick more than one.
When you are happy, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that the right forms are still ticked on the trigger, that the flow is set to Active rather than Draft, and that Jotform is still connected on the Integrations tab under Settings.
---
# Connect Gravity Forms
URL: https://help.converly.io/setup-triggers/connect-gravity-forms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a Gravity Forms form on your WordPress site.
Gravity Forms is one of the most common ways WordPress sites capture leads. This guide turns every Gravity Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Gravity Forms submissions automatically. By default it counts every Gravity Form on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the Gravity Form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Gravity Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Gravity Forms is under the form builders, near the top.
Click **Gravity Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific Gravity Form. It listens for *any* Gravity Form being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** Gravity Form anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built in Gravity Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits any Gravity Form, on any page of your site. Only choose this if you have a single Gravity Form, or if every Gravity Form on the site genuinely should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a Gravity Form submission that happens on that page, which is usually enough to pin the trigger to one form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
Filtering by page narrows the trigger to a page, not to a form. If a single page holds two Gravity Forms, say a contact form and a newsletter box, both count as the same conversion and there is no setting that separates them.
Two ways around it. Move one form onto its own page, or give the two forms different conversions by putting each on a page of its own and linking to it. If neither works for you, [contact support](/contact) and we will look at your setup.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect Contact Form 7
URL: https://help.converly.io/setup-triggers/connect-contact-form-7
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Contact Form 7 on your WordPress site.
Contact Form 7 is a popular WordPress form plugin. This guide turns every Contact Form 7 submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Contact Form 7 submissions automatically. By default it counts every form built with Contact Form 7 on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Contact Form 7
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Contact Form 7 is under the form builders.
Click **Contact Form 7**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Contact Form 7 being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Contact Form 7 anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Contact Form 7, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Contact Form 7, on any page of your site. Only choose this if you have a single form, or if every form built with Contact Form 7 should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect WP Forms
URL: https://help.converly.io/setup-triggers/connect-wpforms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with WP Forms on your WordPress site.
WP Forms is a popular WordPress form plugin. This guide turns every WP Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects WP Forms submissions automatically. By default it counts every form built with WP Forms on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose WP Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. WP Forms is under the form builders.
Click **WP Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with WP Forms being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with WP Forms anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with WP Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with WP Forms, on any page of your site. Only choose this if you have a single form, or if every form built with WP Forms should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect Elementor Forms
URL: https://help.converly.io/setup-triggers/connect-elementor-forms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Elementor Forms on your WordPress site.
Elementor Forms is a popular WordPress form plugin. This guide turns every Elementor Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Elementor Forms submissions automatically. By default it counts every form built with Elementor Forms on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Elementor Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Elementor Forms is under the form builders.
Click **Elementor Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Elementor Forms being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Elementor Forms anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Elementor Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Elementor Forms, on any page of your site. Only choose this if you have a single form, or if every form built with Elementor Forms should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect Ninja Forms
URL: https://help.converly.io/setup-triggers/connect-ninja-forms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Ninja Forms on your WordPress site.
Ninja Forms is a popular WordPress form plugin. This guide turns every Ninja Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Ninja Forms submissions automatically. By default it counts every form built with Ninja Forms on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Ninja Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Ninja Forms is under the form builders.
Click **Ninja Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Ninja Forms being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Ninja Forms anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Ninja Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Ninja Forms, on any page of your site. Only choose this if you have a single form, or if every form built with Ninja Forms should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect Formidable Forms
URL: https://help.converly.io/setup-triggers/connect-formidable-forms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Formidable Forms on your WordPress site.
Formidable Forms is a popular WordPress form plugin. This guide turns every Formidable Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Formidable Forms submissions automatically. By default it counts every form built with Formidable Forms on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Formidable Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Formidable Forms is under the form builders.
Click **Formidable Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Formidable Forms being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Formidable Forms anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Formidable Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Formidable Forms, on any page of your site. Only choose this if you have a single form, or if every form built with Formidable Forms should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect Fluent Forms
URL: https://help.converly.io/setup-triggers/connect-fluent-forms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Fluent Forms on your WordPress site.
Fluent Forms is a popular WordPress form plugin. This guide turns every Fluent Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Fluent Forms submissions automatically. By default it counts every form built with Fluent Forms on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Fluent Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Fluent Forms is under the form builders.
Click **Fluent Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Fluent Forms being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Fluent Forms anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Fluent Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Fluent Forms, on any page of your site. Only choose this if you have a single form, or if every form built with Fluent Forms should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect Forminator
URL: https://help.converly.io/setup-triggers/connect-forminator
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Forminator on your WordPress site.
Forminator is a popular WordPress form plugin. This guide turns every Forminator submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Forminator submissions automatically. By default it counts every form built with Forminator on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Forminator
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Forminator is under the form builders.
Click **Forminator**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Forminator being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Forminator anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Forminator, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Forminator, on any page of your site. Only choose this if you have a single form, or if every form built with Forminator should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect WS Form
URL: https://help.converly.io/setup-triggers/connect-ws-form
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with WS Form on your WordPress site.
WS Form is a popular WordPress form plugin. This guide turns every WS Form submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects WS Form submissions automatically. By default it counts every form built with WS Form on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose WS Form
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. WS Form is under the form builders.
Click **WS Form**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with WS Form being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with WS Form anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with WS Form, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with WS Form, on any page of your site. Only choose this if you have a single form, or if every form built with WS Form should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect ActiveCampaign
URL: https://help.converly.io/setup-triggers/connect-activecampaign
Category: setup-triggers
Updated: 2026-08-25
Fire conversions to your ad platforms whenever someone submits an ActiveCampaign form on your website.
ActiveCampaign is a popular email marketing and automation tool, and one of the things it does is give you forms you can embed on your website to collect leads. Converly turns every one of those form submissions into a conversion you can send to Google Ads, Meta, or anywhere else you advertise.
There is nothing to connect and nothing to paste inside ActiveCampaign. No API key, no extra tracking code, no changes to the form itself. Once Converly is installed on your site it watches your pages for ActiveCampaign submissions and counts the ones that genuinely went through.
To set it up, follow the instructions below.
**Before you start:** Converly needs to be installed on your site (see [Install Converly](/installing-converly/install-converly)), your website address needs to be set in Converly, and your ActiveCampaign form needs to be live on a page.
## Which ActiveCampaign forms this works with
This trigger works with ActiveCampaign forms that are embedded on **your own website**.
All 4 form styles are covered, so it does not matter which one you picked when you built the form in ActiveCampaign.
- **Inline.** The form sits in the page, in amongst your content.
- **Modal.** The form pops up over the page.
- **Floating box.** The form floats in a corner of the page.
- **Floating bar.** The form sits in a strip across the top or bottom of the page.
Both of the embed options ActiveCampaign offers you are covered too. It works the same whether you used the **Simple** embed (the short snippet of code ActiveCampaign gives you) or the **Full embed** (the long block of code you paste in). Each of them puts a real form on your page, which is exactly what Converly watches for.
This trigger only works on your own website. If your form lives on a landing page that ActiveCampaign hosts for you (an address ending in `activehosted.com`, or a domain you pointed at ActiveCampaign's landing page builder), Converly cannot track it. Those pages are built and served by ActiveCampaign, so there is nowhere for you to install the Converly snippet. To track those leads, move the form onto a page of your own website.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "ActiveCampaign enquiries".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose ActiveCampaign
A panel slides in from the right listing every lead capture tool Converly supports. ActiveCampaign sits under the **Marketing** category, so simply click that chip along the top to narrow the list down, or type "active" into the search box.
Click **ActiveCampaign** to select it.
Notice there is no connect step and no login. Converly reads the form on your own page, so it never needs access to your ActiveCampaign account.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific ActiveCampaign form. It listens for *any* ActiveCampaign form on your site being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** ActiveCampaign form anywhere on your site. If you have an enquiry form on your contact page and a newsletter box floating on every blog post, both would count as the same conversion. To track just one of them, use the specific pages option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits an ActiveCampaign form, on any page of your site. Only choose this if you have a single form, or if every ActiveCampaign form on the site genuinely should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your enquiry form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so a newsletter box sitting on your blog is ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
A floating box, floating bar or modal form usually appears on every page of your site, not just one. If that is the form you want to count, All Pages is the right choice for it. Give it its own flow, separate from the flow tracking your main enquiry form, so the 2 do not get mixed together in your reporting.
When you have picked an option, click **Set trigger**.
## Step 4: Add your destinations and publish
A trigger on its own does not send anything anywhere. The next step is to add one or more destinations (Google Ads, Meta, GA4 and so on), then publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
Publishing is the bit people forget. A flow that is saved but not published captures nothing at all.
## Step 5: Test it works
Open **a new incognito window** and go to the page with your ActiveCampaign form. Fill it in exactly as a real visitor would, using a real email address so ActiveCampaign accepts it, then submit it.
Let the page do whatever it normally does. It will either show you the thank-you message in place, or send you off to a thank-you page. Both are fine, and both count.
Then go back to Converly and click **Logs** in the left sidebar to open your conversion log. Your test should appear within a minute or so, showing the details that came off the form and the destinations it was sent to.
If nothing shows up, work through [If your form isn't being tracked](#if-your-form-isnt-being-tracked) at the bottom of this page.
That's it! You've set everything up.
The rest of this article explains how the tracking actually works. You do not need any of it to get up and running, but it is worth a read if something isn't being counted and you want to know why.
## How Converly knows a submission worked
Converly never counts a conversion just because someone pressed Submit. Plenty of submissions get knocked back, and counting those would fill your ad platforms with leads that never existed.
So when someone submits your form, Converly takes a note of what they typed and then waits for ActiveCampaign to confirm it accepted the submission. Only then does it count a conversion. There are 2 ways ActiveCampaign gives that confirmation, and which one you see depends on how you set the form up.
### Your form shows a thank-you message
This is the default. The form disappears and your thank-you message appears in its place, without the page reloading.
That swap only happens once ActiveCampaign's servers have accepted the submission, which makes it solid proof. Converly watches for your form's own thank-you message to appear, and counts the conversion when it does.
### Your form sends the visitor to another page
This is the option ActiveCampaign calls **Open URL**, where a successful submission takes the visitor to a thank-you page you nominate.
Converly handles this one differently, because the page is on its way out. It waits for ActiveCampaign's answer to come back, checks that answer wasn't a rejection, and then counts the conversion as the visitor moves to the thank-you page. The conversion is sent in a way that survives the page changing, so nothing is lost in the move.
### Submissions that get rejected
A rejected submission is never counted, and there are 3 ways your form can reject one.
- **A field the visitor missed.** ActiveCampaign checks required fields before it sends anything, so nothing leaves the page at all.
- **An email address that isn't valid.** Same as above. The little error appears under the field and the submission never goes anywhere.
- **A rejection from ActiveCampaign's servers.** Sometimes the form looks fine on the page but ActiveCampaign knocks it back once it arrives, most often over a phone number in a format it won't accept. Converly reads the answer that comes back, sees the error, and counts nothing.
If your visitor corrects the problem and submits again, that second attempt is judged on its own. A successful retry after a rejected attempt counts once, which is exactly what you want.
## What Converly captures from your form
From the submitted form, Converly reads:
- **Email, name and phone number.** These are hashed before being sent to any ad platform, which is what lets Google and Meta match your conversions back to the ad click that produced them.
- **The names of the fields on your form, without their values.** This is what lets Converly show you what your form asked for in the conversion log.
Alongside that, Converly adds the browser context it already tracks, like click IDs from Google and Meta, the referrer, and any UTM parameters on the page.
One nice detail on phone numbers. ActiveCampaign tidies up whatever the visitor typed into a proper international format before it sends it on, and Converly picks up that tidied version rather than the raw typing. So a number typed as "021 555 0123" is captured in the same format ActiveCampaign itself recorded it, which is the format the ad platforms want.
Passwords, card numbers and one-time codes are never read, whatever form they appear on.
## Known limitations
Being straight with you about where this trigger under reports. All of these fail in the safe direction, meaning a conversion is missed rather than invented.
**ActiveCampaign-hosted landing pages.** Covered in the callout near the top of this article. There is nowhere to install Converly on a page ActiveCampaign hosts, so those forms cannot be tracked. Move the form onto your own website.
**Forms that clear the thank-you message straight away.** If your page has been customised to wipe or replace the thank-you message the instant it appears, the proof Converly relies on can be gone before it is seen, and the conversion is not counted.
**A very slow thank-you page.** On a form that redirects, Converly counts the conversion when the visitor moves to your thank-you page shortly after ActiveCampaign answers. If something on your site delays that move by more than a few seconds, the conversion is not counted.
## If your form isn't being tracked
Work through this in order.
1. **Check Converly is installed on the page with the form.** Your install status in the dashboard will show whether Converly has ever seen that page.
2. **Check the form is on your own website**, not on a landing page hosted by ActiveCampaign.
3. **Check your website address is set correctly in Converly.** Conversions from an address Converly doesn't recognise are rejected. See [Update your website](/manage-your-account/update-your-website).
4. **Check the flow is published**, not just saved. An unpublished flow captures nothing.
5. **Check the page paths you entered** exactly match the real page addresses, if you chose Specific Pages in Step 3.
6. **Check the submission actually went through.** Look in ActiveCampaign for the contact your test created. If the contact isn't there, ActiveCampaign rejected the submission, and Converly was right not to count it.
7. **Still stuck?** Send us the address of the page your form is on and we'll take a look.
---
# Connect Avada Forms
URL: https://help.converly.io/setup-triggers/connect-avada-forms
Category: setup-triggers
Updated: 2026-05-15
Fire conversions to your ad platforms whenever someone submits a form built with Avada Forms on your WordPress site.
Avada Forms is a popular WordPress form plugin. This guide turns every Avada Forms submission into a conversion you can send to Google Ads, Meta, or anywhere else.
Unlike booking tools, there is no account to connect. Once Converly is installed on your site, it detects Avada Forms submissions automatically. By default it counts every form built with Avada Forms on your site, so the important step is telling it which one you actually care about.
**Before you start:** Converly needs to be installed on your WordPress site, and the form needs to be live on a page.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose Avada Forms
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. Avada Forms is under the form builders.
Click **Avada Forms**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form. It listens for *any* form built with Avada Forms being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** form built with Avada Forms anywhere on your site. If you have a contact form, a newsletter box, and a job application form all built with Avada Forms, all three would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a form built with Avada Forms, on any page of your site. Only choose this if you have a single form, or if every form built with Avada Forms should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## What happens next
A trigger on its own does not send anything yet. Next you add one or more destinations (Google Ads, Meta, and so on) and publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
If submissions are not showing up later, check that Converly is installed on the pages with the form, that any page paths you entered exactly match the real URLs, and that the flow is set to Active rather than Draft.
---
# Connect HTML Forms
URL: https://help.converly.io/setup-triggers/connect-html-form
Category: setup-triggers
Updated: 2026-08-06
Fire conversions to your ad platforms when someone submits a hand-built HTML form, or a form from a tool Converly doesn't list by name.
Plenty of websites have a contact form that somebody built by hand in HTML, rather than with a form builder like Gravity Forms or Typeform. The HTML Form trigger is for exactly those forms, plus any form tool Converly doesn't yet list by name.
There is nothing to connect and nothing to paste into your form. Once Converly is installed on your site, it watches your pages for form submissions and works out on its own which ones are genuine conversions, so you can send them to Google Ads, Meta, or anywhere else.
To set it up, follow the instructions below.
If your form was built with Webflow, Gravity Forms, WP Forms, Contact Form 7, Elementor, Fluent Forms, Formidable, Forminator, Ninja Forms, Divi, WS Form, Framer, Jotform, Kit, ActiveCampaign, Mailchimp, Unbounce, HubSpot or Wix, use that tool's own trigger instead. Those triggers know each platform's exact success signal, so they are more accurate. Converly deliberately steps back from those forms in the HTML Form trigger, so setting both up would not double count, but it would leave you with a trigger that never fires.
**Before you start:** Converly needs to be installed on your site (see [Install Converly](/installing-converly/install-converly)), your website address needs to be set in Converly, and the form needs to be live on a page.
## Will this work with my form?
The HTML Form trigger works things out on its own, so it is worth 30 seconds to check your form fits before you build the flow. There are 2 questions.
**1. Does your form look like a lead form?** Converly only pays attention to a form that has an email field, or a message box (the multi-line kind), or 2 or more text fields. It skips any form containing a password field, and it skips search boxes and filters.
**2. Does something visible happen when a submission succeeds?** Converly never counts a conversion just because someone pressed Submit. It waits for proof your site accepted the submission, which means one of these needs to happen. A confirmation message appears, or the page redirects to a thank-you page, or the form empties itself, or the form is replaced by a confirmation.
Almost every real contact form does one of those 4 things. If yours does something else, read [Known limitations](#known-limitations) before you go further.
Both of these questions are covered in full detail further down this page, which is the section to read if a form ever isn't being tracked.
## Step 1: Create a flow
A flow is the rule that turns a form submission into a conversion. Click **Flows** in the left sidebar, then **Create New Flow**, and give it a name like "Contact form leads".
You land in the flow builder. It is empty for now. Click **Add Trigger** to choose what starts this flow.
## Step 2: Choose HTML Form
A panel slides in from the right listing every lead capture tool Converly supports, grouped by type. **HTML Form** is at the end of the form builders.
Click **HTML Form**. If you do not see it straight away, scroll the panel or use the search box at the top.
## Step 3: Choose where it fires
This step is the one to get right. Converly does not ask you to pick a specific form, because a hand-built form has no name or ID for it to offer you. It listens for *any* qualifying form on your site being submitted. The page setting is how you narrow that down to the one form you actually want to count.
If you do not set a specific page, this trigger fires every time someone submits **any** qualifying form anywhere on your site. If you have a contact form, a newsletter box, and a job application form all hand-built in HTML, all 3 would count as the same conversion. To track just one of them, use the specific page option below.
### Option 1: Trigger on all pages
A conversion fires whenever anyone submits a qualifying form, on any page of your site. Only choose this if you have a single form, or if every hand-built form on the site genuinely should count as the same conversion.
### Option 2: Trigger on specific pages
This is how most people should set it up. Listing a page tells Converly to only count a submission that happens on that page, which is how you isolate one specific form.
For example, to count only your contact form, find the page that form lives on (say `https://www.yoursite.com/contact-us`), select **Specific Pages**, and enter the path `/contact-us`. The path is just the part of the address after your domain. Start it with a slash, and do not include your domain. A submission now only counts if it happens on that page, so the newsletter box and job form elsewhere are ignored.
Click **Add another page** if the same form appears on more than one page, or the **x** to remove one.
When you have picked an option, click **Set trigger**.
## Step 4: Add your destinations and publish
A trigger on its own does not send anything anywhere. The next step is to add one or more destinations (Google Ads, Meta, GA4 and so on), then publish the flow. See [Building a flow](/setup-destinations/building-a-workflow) for that part.
Publishing is the bit people forget. A flow that is saved but not published captures nothing at all.
## Step 5: Test it works
This trigger is worth testing properly, because it depends on how your particular form behaves.
Open **a new incognito window**, go to the page with your form, and fill it in exactly as a real visitor would. Use a real email address so the submission gets through your own validation. Submit it, and let the page do whatever it normally does.
Then go back to Converly and click **Logs** in the left sidebar to open your conversion log. Your test should appear within a minute or so, showing the fields on your form and the destinations it was sent to.
If nothing appears, work through [If your form isn't being tracked](#if-your-form-isnt-being-tracked) at the bottom of this page.
That's it! You've set everything up.
The rest of this article explains exactly how the detection works. You do not need any of it to get up and running, but it is the section to read if something isn't being tracked and you want to know why.
## Which forms Converly watches
A form has to look like a lead form before Converly pays any attention to it. It qualifies if it has **any one** of these.
- An email field, or
- a message box (a multi-line text area), or
- 2 or more text fields.
That covers contact forms, quote requests, callback requests, newsletter signups, and enquiry forms.
### Forms Converly deliberately ignores
**Login and password forms.** Any form containing a password field is skipped entirely. Signing in is not a conversion, and we never want password fields anywhere near the tracking pipeline. If you want to track account signups, use the [API trigger](/setup-triggers/connect-api) instead.
**Search boxes and filters.** A form is treated as a search box, and skipped, if any of these are true.
- It, or a section around it, is marked up as a search area.
- It contains a search box and has no email field or message box.
- It is set up to submit as a GET request and has no email field or message box.
- Its only text field is named something like q, s, search, query or keyword.
**Forms belonging to a form builder Converly supports by name.** If the form carries the signature of Webflow, Gravity Forms, WP Forms, Contact Form 7, Elementor, Fluent Forms, Formidable, Forminator, Ninja Forms, Divi, WS Form, Framer, Jotform, Kit, ActiveCampaign, Mailchimp, Unbounce, HubSpot or Wix, this trigger stands back and leaves it to that tool's own trigger. Use the matching trigger from the picker for those.
## How Converly decides a submission worked
Converly never counts a conversion just because someone pressed Submit. A submission can still be rejected, either by the form's own validation or by the server behind it, and counting those would inflate your numbers with leads that never existed.
So the moment someone submits, Converly takes a snapshot of what they typed and then waits for proof your site actually accepted it. There are 4 kinds of proof, and any one of them is enough.
Converly keeps watching for about 30 seconds. If none of the 4 appear in that time, it assumes the submission did not go through and counts nothing.
### 1. A confirmation message appears
The most common pattern by far. Your form stays on the page and a confirmation message appears above, below, or in place of the button.
Converly recognises a message as a confirmation in either of 2 ways.
**By its name in the page code.** The element's CSS class, id, or data attribute contains "success" or "thank". Examples that work are `class="form-success"`, `id="thank-you"` and `class="submissionSuccess"`. This route works no matter what language your site is written in, because class names are nearly always in English even on non-English sites.
**By its wording.** The visible text contains one of thanks, success, received, "in touch", submitted, "message sent", "got it", appreciate or subscribe. This route is English only.
**The rule that keeps this accurate.** In both cases the message must have *changed state*. It has to have been hidden, or not on the page at all, at the moment of submission, and become visible afterwards. This is why a page that already displays the words "Thank you for visiting" in its footer will never produce a false conversion. Only a message that appears in response to the submission counts.
A message is rejected as proof if any of these are true.
- It is longer than about 300 characters, which means it is a page section rather than a confirmation banner.
- Its wording contains a negative, like "your message was not submitted" or "submission unsuccessful".
- Its wording is a progress update, like "Sending..." or "Please wait".
- Its class or id names an error or a failure.
### 2. The page redirects to a thank-you page
The second most common pattern, and the other one most sites use.
Converly snapshots what the visitor typed, then watches for the page to navigate away. If it does, and nothing on the page indicated a rejection, the conversion is counted and sent using the browser mechanism designed to survive a page leaving, so nothing is lost in the redirect.
There are 2 time limits, because the 2 styles of redirect carry different weight as proof.
**7 seconds** when your form submits the traditional way, where the browser leaves the page by itself as part of the submission. Here the navigation *is* the submission, which is strong proof.
**4 seconds** when your page handles the submission itself and then sends the visitor to a thank-you page afterwards, which is what a modern form usually does. Here the navigation is more circumstantial, so Converly is stricter about how long it will wait.
Navigate later than that and Converly assumes the visitor simply left the page, and counts nothing.
### 3. The form clears itself
Some forms empty their fields on success. If every field that had something in it is empty afterwards, and the form is still on the page, that counts.
There are 2 guards on this one. If the visitor clicked a Reset button, it does not count, because they cleared the form themselves. And Converly checks again before counting, so a form that clears itself the instant you press Submit, before the server has answered, does not count if the server then rejects it.
### 4. The form is replaced by a confirmation
The form is removed from the page or hidden, and a confirmation message appears in its place. This is common on sites that swap the form out for a confirmation panel.
Note that a form simply disappearing is **not** enough on its own. A popup closing, or a page section being swapped out, looks identical to a form being replaced on success, so Converly needs the confirmation message as well.
### The double check before counting
Whichever proof appears, Converly waits about 2 seconds and looks again before counting the conversion. It checks that no error message has appeared in the meantime, and that the proof is still there.
This catches a very common real-world case. Plenty of forms show a confirmation optimistically the instant you press Submit, and only then find out the server rejected it. Without the pause, that would count as a conversion. With it, the error arrives during the wait and the conversion is correctly dropped.
The wait costs you nothing. Conversions are sent from Converly's servers, and no part of your page is waiting on it. If your site redirects during that window, the redirect completes the check immediately rather than losing the conversion.
### What counts as a failed submission
Converly treats a submission as rejected, and counts nothing, if any of this appears while it is watching.
- A field marked as invalid.
- An element whose class, id or data attribute names an error, an invalid state, a failure, or a danger state.
- Text containing error wording, such as error, required, invalid, "try again", "please enter", "cannot", "unable", "went wrong" or "rejected".
- An accessibility alert (the kind a screen reader reads out loud) whose wording isn't a confirmation.
Once a rejection has been seen, that submission is finished. Even if the error message disappears afterwards (which it usually does, the moment the visitor starts correcting the field), Converly will not count that attempt. If they fix it and submit again, that is a fresh attempt and is judged on its own.
An ordinary informational notice, such as a blue "Check your inbox for the next step" box, is **not** treated as an error, so it won't suppress a genuine conversion.
## What Converly captures from your form
From the submitted form, Converly reads:
- **Email, phone, first name and last name.** These are worked out from the field types, the autocomplete hints, and the field names. They are hashed before being sent to any ad platform, which is what lets Google and Meta match your conversions back to real ad clicks.
- **A list of the field names on your form, without their values.** This is what lets Converly show you what is on your form in the conversion log.
Alongside that, Converly contributes the browser context it already tracks, like click IDs, the referrer and UTM parameters.
### Fields Converly never reads
Passwords, credit card fields and one-time codes are skipped before their value is read at all. A field is skipped when its type, its autocomplete hint, its name, its id, or its visible label indicates a password, a card number, a security code, a one-time code, a PIN or a social security number. Neither the value nor the field name enters Converly's system.
## Known limitations
Being straight with you about where this trigger under reports. All of these fail in the safe direction, meaning a conversion is missed rather than invented.
**A confirmation message a long way from the form.** Converly watches the form and the area immediately around it. If your confirmation appears as a site-wide notification bar or a floating toast at the very top of the page, while the form itself sits deep inside the page, it may not be seen.
**Confirmation wording in another language, with no English class name.** Message wording is matched in English. If your confirmation element also has a class or id containing "success" or "thank", which is very common, you are fine in any language. If it has neither, that message won't be recognised.
**Sites that swap the confirmation for a countdown before redirecting.** If your thank-you message is replaced by something like "Redirecting in 3..." before the page navigates, the original proof is gone by the time the page leaves, so the conversion isn't counted.
**Forms with no real form submission.** Some modern web apps use a button that sends the data in the background, with no actual form submission underneath. There is nothing for Converly to detect. If your form is built this way, get in touch and we'll look at the options.
**Forms inside an embedded frame from another website.** Converly can't see inside those. Most of those platforms have their own Converly trigger, so use that instead. See [Typeform](/setup-triggers/connect-typeform), [Jotform](/setup-triggers/connect-jotform), [Calendly](/setup-triggers/connect-calendly) and [Acuity Scheduling](/setup-triggers/connect-acuity).
**Signup forms with a password field.** Skipped on purpose. Use the [API trigger](/setup-triggers/connect-api).
## If your form isn't being tracked
Work through this in order.
1. **Check Converly is installed on the page with the form.** Your install status in the dashboard will show whether Converly has ever seen that page.
2. **Check your website address is set correctly in Converly.** Conversions from an address Converly doesn't recognise are rejected. See [Update your website](/manage-your-account/update-your-website).
3. **Check the flow is published**, not just saved. An unpublished flow captures nothing.
4. **Check your form qualifies.** It needs an email field, a message box, or at least 2 text fields, and it must not contain a password field.
5. **Check the page paths you entered** exactly match the real page addresses, if you chose Specific Pages in Step 3.
6. **Check what your form does on success.** If it shows a confirmation, does that confirmation appear only after submission, rather than sitting on the page the whole time? If it redirects, does the redirect happen within a few seconds?
7. **Still stuck?** Send us the page address. The most common fix is a confirmation element that needs a "success" class name, which is a one line change on your side, and we'll tell you exactly what to add.
---
# Connect your app via the API
URL: https://help.converly.io/setup-triggers/connect-api
Category: setup-triggers
Updated: 2026-10-07
Track SaaS signups by sending user data from your app's backend to Converly's API, with full ad-platform match quality.
The API trigger lets your app's backend tell Converly when someone signs up, so Converly can fire that signup as a conversion to Google Ads and Meta. It is built for SaaS products and membership sites, where the signup happens in your app rather than in a form builder Converly can detect on its own. The dashboard setup takes a few minutes, then your developer wires up one backend call. To set it up, follow the instructions below.
This is the only Setup Triggers article aimed partly at developers. The first half (setting it up in Converly) is for you, the marketer. The second half is a developer reference you can hand straight to whoever owns your app's backend.
## Why this matters
Unlike a generic webhook forwarder, Converly captures the things that actually move ad-platform match quality: the visitor's click ID (GCLID from Google, fbclid from Meta), the browser fingerprint cookies (FBP, FBC), the IP address, and the user agent, alongside hashed email and name.
The difference this makes:
- Meta Event Match Quality typically jumps from around 3 (the score for hashed-email-only events) to around 8 or 9 (the score Meta rewards with better ad delivery).
- Google Ads enhanced conversions for leads activates, because Google needs the GCLID plus hashed customer data to attribute the conversion back to the original ad click.
The challenge for SaaS signups specifically is that a server-side webhook from your backend does not have those browser-side signals. Your backend never sees the visitor's GCLID. So Converly uses a two-step pattern to combine the browser context captured by the Converly loader on your site with the signup confirmation from your backend.
The loader has to be on your marketing site (where visitors land from ads and the click IDs arrive) AND on your app or signup pages (where signup intent is captured). It is the same snippet in both places. See [Install Converly](/installing-converly/install-converly). Without this, the API trigger has no browser context to attach and your match quality stays low.
## How it works in 60 seconds
A signup is a two-halves problem:
```
MARKETING SITE YOUR APP / BACKEND
-------------- ------------------
Visitor clicks ad
?gclid=ABC arrives in URL
|
| Converly loader captures
| GCLID, fbclid, FBP/FBC,
| UTMs into a cookie
v
Cookie scoped to .yourdomain.com
(visible across all subdomains)
|
| Visitor navigates to
| app.yourdomain.com/signup
v
App page loads, Converly loader runs
|
| Signup intent detected
| (form submit, SSO click, page mount)
v
Loader generates a correlation_token,
POSTs browser context to Converly,
AND writes the token to a cookie
cnv_signup_correlation
|
| <- HALF 1 of the pair
v
Visitor fills out form, submits
|
| Your backend creates the user
| Your backend reads the cookie
| AND calls Converly with:
| - the correlation_token
| - the user's email
| - your stable account ID
v
<- HALF 2 of the pair
Converly's server matches the two halves by correlation_token,
combines browser context and customer data, and fires the
conversion to Google Ads and Meta with full match quality.
```
Your developer's job is the bottom-right box: read the cookie, and call Converly when the user account is genuinely created. Everything else (capturing GCLIDs, signing the request, hashing data for the ad platforms) is handled by Converly's loader in the browser and Converly's server on the backend side.
# Part 1: Set it up in Converly
This part is for the marketer. It takes about five minutes.
## Step 1: Add the API trigger to a flow
Create a flow (or open an existing one) and click **Add Trigger**.
In the tool picker, choose **API**. It is in the Custom section, with a code brackets icon.
## Step 2: Get your keys
You will see a short intro screen. Click **Get started**.
Enter a **Trigger Key**: a short label for this signup flow, such as `main-signup` or `ios-signup`. Letters, numbers, hyphens and underscores only. If you have more than one signup path (for example a main signup and an invite-only signup), use a different Trigger Key for each and configure one flow per path.
Converly then shows you three values: your **Site Key**, your **Trigger Key**, and a **Webhook Secret**. The webhook secret is how your backend proves the request genuinely came from you, so treat it like a password.
You can reveal, copy, and rotate the webhook secret from this screen. Rotating breaks any backend currently signing with the old secret, so only rotate if you think it has leaked, and coordinate with your developer first.
Click **Set trigger**, then connect your destinations (Google Ads, Meta) and publish the flow as you would for any other trigger. See [Building a flow](/setup-destinations/building-a-workflow) if you need a refresher.
## Step 3: Hand the three values to your developer
Send your developer the **Site Key**, **Trigger Key**, and **Webhook Secret**, along with the rest of this article. The webhook secret should be shared securely (a password manager, not email or chat). Everything from here on is your developer's work.
# Part 2: Developer reference
Everything below is for the developer wiring up the backend call. You will need the three values from Part 1.
## Quick start: Node and Express
If your backend is Node.js with Express, this is about 10 minutes of work.
Install the SDK:
```sh
npm install @converly/sdk-node
```
Initialise once at startup:
```js
// converly.js
import { createClient } from '@converly/sdk-node';
export const converly = createClient({
siteKey: process.env.CONVERLY_SITE_KEY,
triggerKey: process.env.CONVERLY_TRIGGER_KEY, // 'main-signup'
webhookSecret: process.env.CONVERLY_WEBHOOK_SECRET,
});
```
Use it in your signup handler:
```js
// signup.js
import { converly } from './converly.js';
app.post('/signup', async (req, res) => {
// Read the correlation token from the cookie Converly set in the browser
const correlationToken = converly.readCorrelation(req);
// Your normal signup logic
const user = await createUser(req.body);
// ONLY fire for genuinely new accounts (see Critical pitfalls)
if (user.created) {
await converly.completeSignup({
correlation_token: correlationToken,
customer_event_id: `account_created_${user.id}`,
email: user.email,
phone: user.phone, // optional
first_name: user.firstName, // optional
last_name: user.lastName, // optional
}).catch((err) => {
// Don't let a Converly failure crash your signup flow.
// Converly retries on its own; you just log and continue.
console.warn('converly fire failed', err);
});
}
res.redirect('/dashboard');
});
```
That is the whole integration for a same-origin signup flow on Node and Express. The rest of this reference covers SSO, cross-origin SPA setups, non-Node backends, and the operational details.
## Setup, step by step
### 1. Confirm the loader is on both sites
Before this can work, the Converly loader has to be installed on the marketing pages where visitors land from ads (where the click IDs arrive in the URL) and on the signup pages where the form or SSO button lives. It is the same snippet from your Converly dashboard in both places.
Verify it is running by opening DevTools, Console, on each page. You should see `[Converly] Loader v1.0 initialized (siteKey: site_...)`.
### 2. Install the SDK
```sh
npm install @converly/sdk-node
```
Requires Node 18 or newer (for global `fetch`). For older Node, see the `fetch` option in the raw HTTP reference.
### 3. Configure the client
The SDK takes three required values plus a few optional ones. Store the secrets in environment variables, never in source code:
```js
import { createClient } from '@converly/sdk-node';
const converly = createClient({
// Required
siteKey: process.env.CONVERLY_SITE_KEY,
triggerKey: process.env.CONVERLY_TRIGGER_KEY,
webhookSecret: process.env.CONVERLY_WEBHOOK_SECRET,
// Optional
apiBase: 'https://api.converly.io', // default
timeoutMs: 5000, // per-attempt timeout
});
```
Export the configured client from a shared module so the rest of your app uses one instance.
### 4. Read the correlation cookie
When a request hits your signup endpoint, the visitor's browser is sending a cookie called `cnv_signup_correlation`. Read it with the SDK helper:
```js
const correlationToken = converly.readCorrelation(req);
```
`req` is your Express request object. The SDK supports both `req.cookies` (if you use `cookie-parser` middleware) and the raw `Cookie` header. It returns the token string, or `null` if the cookie is not present.
`null` is normal in some cases. Visitors who came to your site by direct URL (typed it in, or clicked an email link) and never landed on your marketing pages will not have a token. The pitfalls section explains how the SDK handles this safely by default.
### 5. Call completeSignup after creating the user
```js
await converly.completeSignup({
correlation_token: correlationToken,
customer_event_id: `account_created_${user.id}`,
email: user.email,
phone: user.phone,
first_name: user.firstName,
last_name: user.lastName,
});
```
Put this call as close to the moment of actual account creation as possible: after the insert succeeds and your transaction commits. Not before (you would fire conversions for failed signups), not days later (you would time out the correlation cookie).
The fields:
| Field | Required? | What it is |
|---|---|---|
| `correlation_token` | yes* | The string from `readCorrelation(req)`. *Required unless you set `allow_uncorrelated: true`. |
| `customer_event_id` | yes | Your stable per-account identifier. Used to dedup if your backend retries. The pattern `account_created_` is recommended. Max 200 chars. |
| `email` | recommended | The user's email. Raw. Converly hashes it server-side before sending to Google or Meta. |
| `phone` | optional | Raw phone. Same server-side hashing. |
| `first_name` | optional | Raw. |
| `last_name` | optional | Raw. |
| `allow_uncorrelated` | optional | `false` by default. See the pitfalls section. |
`completeSignup` returns a Promise. On success it resolves with `{status: 'promoted', promoted_count: N, customer_event_id: '...'}` (and a few other fields). On persistent failure (after 3 attempts in total for 5xx errors, pausing 1 second and then 3 seconds between them) it rejects.
Always wrap it in `.catch`. A Converly failure should not crash your user's signup flow. Log and continue.
## Handling social SSO (Google, GitHub, etc.)
The SSO case is structurally similar to a form submit. It just happens in your OAuth callback handler instead of your form POST handler.
### Same-origin OAuth callback
If your OAuth callback URL is on the same domain as your marketing site (for example both on `app.yourdomain.com`):
```js
app.get('/auth/google/callback', async (req, res) => {
// Exchange the code for a Google profile (your existing OAuth library)
const googleProfile = await google.handleCallback(req);
// Read the correlation cookie. It has been sitting there since the
// user clicked "Sign up with Google" on your signup page
const correlationToken = converly.readCorrelation(req);
// Your normal user create-or-find
const { user, created } = await findOrCreateUser({
email: googleProfile.email,
googleId: googleProfile.id,
});
// CRITICAL: only fire for genuinely new accounts. SSO callbacks fire
// for every login, including users who already have an account.
if (created) {
await converly.completeSignup({
correlation_token: correlationToken,
customer_event_id: `account_created_${user.id}`,
email: user.email,
first_name: googleProfile.given_name,
last_name: googleProfile.family_name,
}).catch((err) => console.warn('converly fire failed', err));
}
res.redirect('/dashboard');
});
```
If you do not guard with `if (created)`, you will fire a conversion every time an existing user logs in. Converly has a duplicate-fire backstop on the server side, but the customer-side guard is your primary defence and should always be in place.
### Cross-origin OAuth callback
If your OAuth callback is on a different host than your signup page (for example callback on `api.yourdomain.com` but signup page on `app.yourdomain.com`), the cookie is not visible to the callback. In that case, pass the correlation token through the OAuth `state` parameter:
```js
// On the signup page, when the user clicks "Sign up with Google":
const state = JSON.stringify({
correlationToken: window.__converly.getCorrelationToken(),
// ... your own state fields
});
window.location = `/auth/google/start?state=${encodeURIComponent(state)}`;
```
Then in the callback, decode `req.query.state` and use the `correlationToken` from there instead of `readCorrelation(req)`.
## SPA and cross-origin API setup
If your frontend is a single-page app calling an API on a separate origin (for example SPA on `app.yourdomain.com`, API on `api.yourdomain.com`), the API cannot read the cookie set on the SPA's origin. Your SPA has to read the token client-side and forward it to your API in the request body.
On the SPA, the Converly loader exposes a helper:
```js
const correlationToken = window.__converly.getCorrelationToken();
const response = await fetch('https://api.yourdomain.com/signup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'include',
body: JSON.stringify({
email,
password,
correlationToken, // forward to your API
}),
});
```
On the API, use the value from the request body instead of reading the cookie:
```js
app.post('/signup', async (req, res) => {
const correlationToken = req.body.correlationToken || null;
const user = await createUser(req.body);
if (user.created) {
await converly.completeSignup({
correlation_token: correlationToken,
customer_event_id: `account_created_${user.id}`,
email: user.email,
}).catch((err) => console.warn(err));
}
// ...
});
```
`null` is fine. The SDK no-ops on null correlation tokens by default.
## Critical pitfalls, read before shipping
### Only fire for NEW accounts
The most common bug is calling `completeSignup` on every signup-page submission rather than gating on actual account creation. That fires conversions for returning SSO users, failed validations, admin-created accounts, and rolled-back transactions.
Call `completeSignup` from inside the `if (user.created)` (or equivalent) branch, after the transaction commits. Never speculatively, never optimistically.
Converly's server has a durable dedup ledger keyed by `customer_event_id`, so a retry of the same event will not double-fire. But the dedup ledger only protects against retries of the same event. It cannot tell that "Tim signing up the first time" and "Tim signing up again after deleting his account" are different events from your perspective.
### Use a stable customer_event_id
`customer_event_id` is your stable identifier for "this specific account creation". If your backend retries the call, use the same `customer_event_id` and Converly will dedup.
Recommended format: `account_created_${user.id}`, assuming `user.id` is your database primary key and is immutable. Avoid timestamps, request IDs, or anything that changes on retry. Those defeat the dedup.
### What happens when correlation_token is null
A null `correlation_token` means the visitor never went through the Converly-instrumented marketing flow (direct URL navigation, an email link, an admin-created account).
By default the SDK no-ops on null tokens: `completeSignup` returns without firing a conversion. This is intentional. Firing a conversion with no click attribution is wasted ad-platform quota and pollutes your conversion volume.
If you genuinely want to fire for uncorrelated signups (for example you have an organic-signup metric that matters), pass `allow_uncorrelated: true`:
```js
await converly.completeSignup({
correlation_token: null,
customer_event_id: `account_created_${user.id}`,
email: user.email,
allow_uncorrelated: true, // fire anyway
});
```
The conversion still fires but with no click ID attached. Meta will accept it with low match quality. Google Ads enhanced conversions for leads will not activate (it requires the GCLID).
### Don't block the user on completeSignup
`completeSignup` makes an HTTP call to Converly. Do not make your user wait on it:
```js
// Good: user is redirected immediately, conversion fires in the background
converly.completeSignup({...}).catch(err => log.warn('converly', err));
res.redirect('/dashboard');
// Bad: adds 100-500ms to the user's perceived signup time
await converly.completeSignup({...}); // blocks the response
res.redirect('/dashboard');
```
The awaited version is fine if your latency budget tolerates it and you want it for log clarity. Just be intentional.
If your backend runs on serverless hosting (for example Vercel, Netlify or AWS Lambda), the function can be shut down as soon as it sends its response, which cuts off a background call before it finishes, retries included. In that case, either await `completeSignup`, or hand it to your platform's "run after the response" feature (such as `waitUntil`) so it's allowed to finish.
Store it in environment variables, never in source code, and never expose it to the browser. You can re-view it any time from the API trigger's setup screen in your Converly dashboard. If you suspect it leaked, rotate it from that screen: any backend still signing with the old secret will start getting 401s until it is updated, so coordinate the rollout.
## Raw HTTP API reference (non-Node backends)
If your backend is Python, Ruby, PHP, Go, etc., you do not need the SDK. Two endpoints matter to your backend.
### Endpoint 1: completeSignup
```
POST https://api.converly.io/api/webhook-bridge/saas-signup/{site_key}/{trigger_key}
```
URL components:
- `{site_key}` - your Site Key from the dashboard
- `{trigger_key}` - your Trigger Key
Headers:
- `Content-Type: application/json`
- `X-Converly-Signature: t=,v1=` (see the signing spec below)
Body (JSON):
```json
{
"correlation_token": "abc123...",
"customer_event_id": "account_created_42",
"email": "user@example.com",
"phone": null,
"first_name": "Aaron",
"last_name": "Beashel"
}
```
`correlation_token` can be `null` (the uncorrelated path). All other fields except `customer_event_id` are optional.
Response (200):
```json
{
"status": "promoted",
"promoted_count": 1,
"customer_event_id": "account_created_42"
}
```
`status` can be one of:
- `promoted` - conversion fired
- `awaiting_browser_half` - the webhook arrived first; it will fire when the browser half lands, or be cleaned up at 5 minutes if it never arrives
- `no_matching_flows` - your trigger_key has no active flows in your dashboard
- `no_promotion` - an internal status, usually a no-op
### Endpoint 2: the browser-set cookie
The browser-side loader writes a cookie called `cnv_signup_correlation` to the visitor's browser. Your backend just reads it from the request:
```
Cookie: cnv_signup_correlation=; ...other_cookies
```
The value is URL-encoded, so decode it before use.
### Example: Python (Flask)
```python
import os
import time
import hmac
import hashlib
import json
import requests
CONVERLY_SITE_KEY = os.environ['CONVERLY_SITE_KEY']
CONVERLY_TRIGGER_KEY = os.environ['CONVERLY_TRIGGER_KEY']
CONVERLY_WEBHOOK_SECRET = os.environ['CONVERLY_WEBHOOK_SECRET']
CONVERLY_API_BASE = 'https://api.converly.io'
def fire_converly_signup(correlation_token, customer_event_id, email, **extra):
path = f'/api/webhook-bridge/saas-signup/{CONVERLY_SITE_KEY}/{CONVERLY_TRIGGER_KEY}'
body = json.dumps({
'correlation_token': correlation_token,
'customer_event_id': customer_event_id,
'email': email,
'phone': extra.get('phone'),
'first_name': extra.get('first_name'),
'last_name': extra.get('last_name'),
}, separators=(',', ':'))
timestamp = int(time.time())
signing_string = f'{timestamp}.POST.{path}.{body}'
signature = hmac.new(
CONVERLY_WEBHOOK_SECRET.encode('utf-8'),
signing_string.encode('utf-8'),
hashlib.sha256,
).hexdigest()
return requests.post(
CONVERLY_API_BASE + path,
data=body,
headers={
'Content-Type': 'application/json',
'X-Converly-Signature': f't={timestamp},v1={signature}',
},
timeout=5,
)
@app.route('/signup', methods=['POST'])
def signup():
correlation_token = request.cookies.get('cnv_signup_correlation')
user, created = create_user(request.form)
if created:
try:
fire_converly_signup(
correlation_token=correlation_token,
customer_event_id=f'account_created_{user.id}',
email=user.email,
)
except requests.RequestException as e:
app.logger.warning('converly fire failed: %s', e)
return redirect('/dashboard')
```
### HMAC signing specification
Converly verifies that requests come from your backend via a Stripe-style HMAC signature. The header format is:
```
X-Converly-Signature: t=,v1=
```
To compute the `v1` value:
1. Construct the signing string:
```
{unix_timestamp}.{HTTP_METHOD_UPPERCASE}.{path}.{raw_body_bytes}
```
- `unix_timestamp` - current Unix time in seconds (integer)
- `HTTP_METHOD_UPPERCASE` - `POST` (uppercase ASCII)
- `path` - the request path, leading slash, NO query string, NO trailing-slash normalisation. Example: `/api/webhook-bridge/saas-signup/site_abc/main-signup`
- `raw_body_bytes` - the request body bytes exactly as sent on the wire. Compute this BEFORE any framework re-serialises the JSON. The serialisation must match the bytes Converly receives, byte for byte.
2. HMAC-SHA256 the signing string with your `webhookSecret` as the key.
3. Hex-encode the result, lowercase.
4. Construct the header: `t={timestamp},v1={hex}`.
Freshness window: 5 minutes. Requests where `now() - timestamp > 300 seconds` are rejected. Clock skew matters, so keep your server's clock in sync with NTP.
The header format allows multiple signatures for rotation (`t=...,v1=...,v1=...`). For now there is only one version, but design your signing code to tolerate future versions appearing in this header without breaking.
### Example: Go
```go
package converly
import (
"bytes"
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type SignupPayload struct {
CorrelationToken *string `json:"correlation_token"`
CustomerEventID string `json:"customer_event_id"`
Email *string `json:"email,omitempty"`
Phone *string `json:"phone,omitempty"`
FirstName *string `json:"first_name,omitempty"`
LastName *string `json:"last_name,omitempty"`
}
func FireSignup(payload SignupPayload) error {
siteKey := os.Getenv("CONVERLY_SITE_KEY")
triggerKey := os.Getenv("CONVERLY_TRIGGER_KEY")
secret := os.Getenv("CONVERLY_WEBHOOK_SECRET")
path := fmt.Sprintf("/api/webhook-bridge/saas-signup/%s/%s", siteKey, triggerKey)
body, err := json.Marshal(payload)
if err != nil { return err }
timestamp := time.Now().Unix()
signingString := fmt.Sprintf("%d.POST.%s.%s", timestamp, path, body)
mac := hmac.New(sha256.New, []byte(secret))
mac.Write([]byte(signingString))
signature := hex.EncodeToString(mac.Sum(nil))
req, err := http.NewRequest("POST", "https://api.converly.io"+path, bytes.NewReader(body))
if err != nil { return err }
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Converly-Signature", fmt.Sprintf("t=%d,v1=%s", timestamp, signature))
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Do(req)
if err != nil { return err }
defer resp.Body.Close()
if resp.StatusCode >= 400 {
return fmt.Errorf("converly returned %d", resp.StatusCode)
}
return nil
}
```
### Retry policy (your responsibility)
The Converly Node SDK makes up to 3 attempts in total on 5xx errors, pausing 1 second and then 3 seconds between them, and fails fast on 4xx. If you call the API directly, replicate this:
- 5xx response: retry up to 2 more times (3 attempts in total), with an increasing pause between them. These usually clear within seconds.
- 4xx response: do not retry. A 4xx means your request is malformed (wrong signature, invalid body). Retrying will not help. Log and investigate.
- Network error or timeout: retry, same backoff as 5xx.
## Test it works
Do this once your integration is wired up:
1. Open your marketing site in a fresh incognito window with DevTools open.
2. Navigate to `https://yourdomain.com/?gclid=TESTCONVERLY&fbclid=TESTCONVERLY`.
3. Wait 2 seconds, then check DevTools, Application, Cookies, `yourdomain.com`. You should see cookies named `_converly_gclid` (value `TESTCONVERLY`), `_fbc`, `_fbp`, and so on.
4. Navigate to your signup page (for example `https://app.yourdomain.com/signup`).
5. Submit the signup form with a unique fake email like `test-1234@example.com`.
6. Open your Converly dashboard and find the debug log.
7. Within a few seconds you should see a conversion event for `test-1234@example.com`, with `browser_context.gclid = "TESTCONVERLY"` populated and a success status for each configured ad platform.
If any step fails, see Troubleshooting below.
### Verify in Meta Events Manager
Meta's Test Events tool shows incoming events in real time. Use a fresh test pixel for development, send your Converly support contact the test event code so they can route your test conversions to it temporarily, then submit a test signup. Within seconds the event should appear with a match quality score of 8 to 9. If it is below 5, something is missing from the user data, usually `fbc` (which means cross-subdomain cookies are not working) or `client_ip_address` (which Converly always populates).
### Verify in Google Ads
Google Ads enhanced conversions for leads has no real-time test tool. Conversions land in the Google Ads Conversions report within 24 to 48 hours with an "Enhanced" badge. The badge means the GCLID and hashed customer data were both received.
That's it. Once a real signup shows up in your debug log with the click ID populated and your destinations firing, the integration is live.
## Troubleshooting
### The conversion never appears in the debug log
Run through this in order:
1. Is the Converly loader installed on the marketing site? Open it, DevTools console, look for `[Converly] Loader v1.0 initialized`. If not, the install snippet is missing.
2. Is the loader installed on the signup page? Same check, on your signup URL. Both sites need it.
3. Did the loader detect signup intent? The console should show `[Converly:saas-signup] Captured signup intent token=...`. If not, check that you have configured an API trigger flow in the dashboard.
4. Did the browser POST to `/api/signup-correlations`? Network tab, filter for `signup-correlations`. You should see a POST returning 200. A 403 means your domain is not in your allowed origins (configure that in the dashboard).
5. Did your backend call completeSignup? Add a log line in your handler. If it did not run, your `if (created)` guard may be blocking it incorrectly.
6. Did completeSignup succeed? Log the response. A 401 means your webhook secret is wrong. A 400 means your payload is malformed.
7. Does the dashboard flow's Trigger Key match the one your backend uses? If the dashboard has `main-signup` but your backend calls with `signup`, the webhook is rejected with `no_matching_flows`.
### The match quality score is low on Meta
- No click ID was captured (the visitor came via organic traffic). Match quality tops out around 5 or 6 without click IDs. Expected.
- Cross-subdomain cookies are not visible: the visitor landed on `yourdomain.com` but signup is on `app.yourdomain.com`. Check the Domain column in DevTools, Cookies. It should show `.yourdomain.com` (with the leading dot), not `yourdomain.com`. If it is wrong, contact Converly support.
- The `fbp` cookie is missing from the event. A Meta Pixel installed elsewhere may be scoping the cookie differently. Try removing that Pixel and re-testing; Converly will set `_fbp` itself.
### Conversions fire for users who did not actually sign up
You are missing the `if (created)` guard, or it has a bug. SSO callbacks are the classic case: they fire for every login, not just new accounts. Audit the call site and add the guard.
### Duplicate conversions for the same user
Check that you send the same `customer_event_id` on retries. If it is random or timestamp-based, the dedup ledger cannot catch the duplicate.
### 401 from completeSignup
Signature verification failed. Common causes: wrong `webhookSecret` (typo, wrong environment); the server clock is more than 5 minutes off NTP; a runtime that mangles the request body before sending; or a manual implementation that computed the HMAC over re-serialised JSON whose bytes differ from what is on the wire.
## FAQ
**Does Converly need special infrastructure on my end?**
No. A standard HTTP POST from your backend is all that is required. The browser-side capture happens in the Converly loader you already installed. The two-halves merge happens on Converly's server.
**What if I use SSR (Next.js, Remix, SvelteKit)?**
Read the correlation cookie in your server action or route handler the same way you would in Express. The SDK's `readCorrelation(req)` accepts any object with a `headers.cookie` string or a `cookies` object, which most SSR frameworks expose.
**My users sign up via a mobile app, not the web. Does this work?**
Not directly. Converly's value here relies on browser-captured click IDs and fingerprint cookies. Mobile app installs and signups need a different model (Apple Search Ads, Google Play install referrer, and so on). Contact Converly support if this matters for you.
**What about email-verification flows (sign up now, verify later)?**
Two patterns work. Fire on the initial signup attempt (simpler, consistent with most products; the tiny number of users who never verify will count). Or fire on verification (more accurate, but you must persist the `correlation_token` on the user record at signup time and read it back at verification, because the browser cookie may have expired by then). Most teams ship with the first pattern.
**How long does the correlation cookie live?**
30 minutes by default. After that the signup is treated as uncorrelated (no click ID, lower match quality). 30 minutes covers the common case plus tolerance for verification interstitials and tab switches.
**Can I see what data Converly sends to Meta and Google?**
Yes. Your dashboard's debug log shows the full request and response for each conversion fire.
**I have multiple signup paths. Can I track them separately?**
Yes. Use a different Trigger Key per path: configure one flow per path in the dashboard, each with its own destinations and conversion event names. Your backend picks which Trigger Key to use per signup type.
**How does this compare to GTM server-side or Stape?**
Converly is purpose-built for the SaaS-signup pattern (browser-to-backend merge with full match quality). GTM server-side and Stape are general-purpose tag containers you would have to configure heavily to get similar match quality. Converly's value is the opinionated default: set it up once, get strong match quality without thinking about it.
---
# Test that Converly is working
URL: https://help.converly.io/testing-it-works/test-converly-is-working
Category: testing-it-works
Updated: 2026-09-23
Send a test conversion and check it reaches Converly and your ad platforms and analytics tools.
Once you've installed Converly and built your first flow, the last thing to do is test it. A test is simply you filling in a form on your own website, the same way a real lead would, and then checking the conversion arrived where it should.
It only takes a few minutes, and it means you know your conversions are reaching your ad platforms before you start spending money on ads that rely on them.
To test it, follow the instructions below:
## Step 1: Submit a test conversion
The first step is to submit a test, exactly like a real visitor would.
Open a new **incognito window** (or private window) and go to the page on your website that has your form on it. Using an incognito window means you arrive as a brand new visitor, with no cookies left over from earlier visits.
Fill in the form with an email address you'll recognise, so it's easy to spot later (something like yourname+test@yourcompany.com works well). Then submit it, and **wait until you see your thank you message or thank you page** before closing the window.
There are a few things worth knowing before you submit, because they catch a lot of people out:
- **Use your real website address.** Converly only accepts conversions from the website address in your Converly settings (and any subdomain of it). So a test on a preview or staging address, like yoursite.webflow.io or a Wix preview link, won't be recorded.
- **Accept marketing cookies.** If your site shows a cookie banner and you've [set it up to hold Converly back](/cookie-consent/how-it-works-with-cookie-banners), you need to accept marketing cookies, otherwise Converly won't run for you (which is exactly what it should do).
- **Don't test in Brave, or with a privacy extension switched on.** Some browsers and extensions send a "do not track me" signal called Global Privacy Control, and Converly honours it by switching itself off completely. Chrome, Safari and Edge in an incognito window are all fine.
- **Wait for the thank you message.** Converly only counts a form once your website confirms it was sent successfully. If you close the page the instant you click submit, it may not get that far.
## Step 2: Check it arrived in Converly
The next step is to check Converly received your test. In Converly, click **Logs** in the left sidebar to open your conversion log. Your test should be at the top of the list within a few seconds. The log updates itself while it's open, so there's no need to refresh the page.
Each conversion has a status, which tells you how it went across all the destinations in your flow:
- **Delivered.** Converly sent it to every destination in your flow and they all accepted it. This is what you're hoping to see.
- **Partly delivered.** Everything Converly sends from its own servers got through, but one of the conversions sent through the visitor's browser didn't fire. This usually means that platform's own tag isn't on your website.
- **Failed.** One of your destinations rejected the conversion. Click on it to see which one, and what it said.
- **Recorded.** Converly captured the conversion, but there was nothing for it to send from its servers (usually because the flow only sends through the browser).
To see more detail, simply click on your test conversion. You'll see a card for each destination, and clicking a card shows exactly what Converly sent to that platform and what the platform said back. You can [read more about the conversion log here](/platform/event-log).
If your test is showing as **Delivered**, congratulations, Converly is working!
## Step 3: Check it in your ad platforms and analytics tools
This step is optional, but it's nice to see your test arrive at the other end too.
The only slight oddity is that ad platforms don't all show you conversions the same way, and some take hours to show anything at all. So if Converly says **Delivered** but you can't see it in the platform yet, don't panic. Converly's conversion log is the best proof that your conversion was sent and accepted.
Here's where to look in each one:
### Google Ads
The short answer is you usually won't see a test conversion in Google Ads at all, and that's completely normal.
Google Ads only shows conversions it can link back to a click on one of your ads. Your test visit didn't come from an ad, so even though Google accepts it, it has nothing to credit it to. Google says this itself in its own help docs, noting that a test done without clicking an ad may not show up in Google Ads.
On top of that, Google takes time. Uploaded conversions usually take a few hours to appear, and sometimes up to a day or more.
So for Google Ads, Converly's conversion log is your proof. If the Google Ads card on your test says **Delivered**, Google received it and accepted it. Once real visitors start clicking your ads and filling in your forms, you'll see those conversions show up in your Google Ads reports over the following day or so.
If real conversions still aren't showing after a few days, you can [read more about why a conversion isn't showing in Google Ads here](/troubleshooting/conversion-not-showing-in-google-ads).
### Meta (Facebook and Instagram)
Meta shows every conversion it receives, whether it came from an ad or not, so you can see your test there.
In Meta's Events Manager, click **Data sources**, choose your pixel (Meta sometimes calls it a dataset), and open the **Overview** tab. Your test should appear in the list of events within about 20 minutes. The **Connection method** shows whether each event arrived from the browser, from Converly's servers, or both.
If you want to see it arrive in real time instead, use the **Send test event** option described [further down this page](#a-quicker-way-to-test-a-single-destination). It sends a test straight to Meta's **Test Events** tab, where it shows up within about 30 seconds.
### Google Analytics
Google Analytics shows your test almost straight away.
In Google Analytics, click **Reports**, then **Realtime**. This shows everything that's happened on your website in the last 30 minutes, and your test conversion should appear in the event list (under the event name you chose in Converly) within a few minutes.
The only slight oddity is the rest of your reports. Everything outside of Realtime can take 24 to 48 hours to fully update, so don't worry if your test isn't in your normal reports yet.
**Important:** If you want your conversion to count as a key event in Google Analytics (so you can report on it and send it to Google Ads), you need to mark it as one. In Google Analytics, go to **Admin**, then **Data display**, then **Events**, find your event and click the star next to it. This only counts conversions from that point on, so it's best to do it before you start relying on the numbers.
### LinkedIn
LinkedIn will show you that it received your test, but it won't count it as a conversion.
In Campaign Manager, click **Measure** in the left menu, then **Conversion tracking**. Look at the **Status** column next to your conversion. Once LinkedIn receives something it changes to **Active**, and if you click on the status you'll see how many events it has received in the last 7 days. The count can take a few hours to update.
The only slight oddity is the conversion columns in your campaign reports. LinkedIn only counts a conversion there if the person clicked or saw one of your LinkedIn ads, so your test won't appear in them. Real conversions can take up to 3 days to show in your reports.
### TikTok
TikTok shows every event it receives, whether it came from an ad or not.
In TikTok Ads Manager, click **Tools**, then **Events**, and choose your pixel. The **Overview** shows your events, including **Total events** (which counts events that didn't come from an ad too) and **Last received**, which is the most recent hour TikTok received that event. It isn't real time, so allow a couple of hours.
Your test won't show in the conversion columns of your campaign reports, because it didn't come from a TikTok ad.
### Reddit
Reddit also shows every event it receives, whether it came from an ad or not.
Go to Reddit's **Events Manager** (in Reddit Ads, or at ads.reddit.com/events-manager). The **Total Raw Events** column counts everything Reddit received, including events that didn't come from an ad. It can take a few hours to update.
Your test won't show in your campaign reports, because it didn't come from a Reddit ad.
### ChatGPT Ads
In ChatGPT Ads Manager, the **Event Stream** shows conversions arriving within a few minutes.
Your campaign reports are slower. OpenAI says to allow at least a day for conversions to show there, and they only count people who clicked one of your ads, so your test won't appear in them.
### Taboola
Converly sends Taboola conversions through the Taboola pixel on your website, so the Taboola pixel needs to be installed for this to work.
In Taboola Realize, click **Tracking** in the left menu and open the **Conversions** tab. Find your conversion and look at the **Last received** and **Events received** columns (you may need to scroll right to see them). Taboola says to allow up to an hour for events to show up there.
### AdRoll
Converly sends AdRoll conversions through the AdRoll pixel on your website, so the AdRoll pixel needs to be installed for this to work.
AdRoll doesn't give you a screen that shows individual conversions arriving. So the best check is on Converly's side. Open your test in the conversion log and make sure the AdRoll card says **Fired**, which means Converly passed the conversion to the AdRoll pixel on your site. If it says **Pixel not found**, the AdRoll pixel isn't on the page.
### Plausible, Fathom, Pirsch, Simple Analytics and GoSquared
Converly sends conversions to these tools through their own tracking script on your website, and they all show events almost straight away. Here's where to look in each one:
- **Plausible.** Your conversion shows in the **Goals** section at the bottom of your dashboard. Plausible only shows it once you've created a matching goal (you can [read how to set that up here](/setup-destinations/connect-plausible-analytics)). To see it live, open the **Realtime** view from the date picker in the top right.
- **Fathom.** Your conversion shows in the **Events** section of your site's dashboard.
- **Pirsch.** Your conversion shows in the **Events** panel on your dashboard.
- **Simple Analytics.** Your conversion shows on the **Events** tab.
- **GoSquared.** Your conversion shows in the **Events** widget in **Trends** for your project.
The only slight oddity is that these tools can ignore your own visits. If you've told any of them to exclude your own traffic (for example by blocking your IP address, or with a setting that ignores your browser), your test won't show up in it. An ad blocker in your browser can stop their tracking script too.
On Converly's side, open your test in the conversion log and check the card for your tool says **Fired**. If it says **Pixel not found**, that tool's tracking script isn't on the page, so Converly had nowhere to send the conversion.
## A quicker way to test a single destination
You can also send a test conversion straight to one destination from inside Converly, without going to your website at all. It's a handy way to check the connection to a platform is working.
Open your flow, click on the destination's action, and click **Send test event** on the test step. What happens next depends on the platform:
- **Google Analytics.** The test goes to Google Analytics' **DebugView**, which you'll find under **Admin**, then **Data display**, then **DebugView**. It shows up within about 30 seconds, and it won't appear in your normal reports.
- **Meta.** Before you send it, open Meta's Events Manager, choose your pixel and open the **Test Events** tab. Copy the test code shown there and paste it into Converly. Your test then appears in the Test Events tab within about 30 seconds.
- **TikTok.** It works the same way as Meta. Open the **Test Events** tab for your pixel in TikTok's Events Manager, copy the test code, and paste it into Converly. Without a test code, TikTok treats it as a real conversion.
- **Reddit.** Open the **Event Testing** page in Reddit's Events Manager and keep it open, because Reddit only shows tests while that page is open. Copy the test ID from that page into Converly, and your test should appear there within a minute.
- **Google Ads.** Google Ads doesn't have a test mode, so Converly sends a real conversion worth 1 cent. It won't show in your conversion columns (there's no ad click behind it), but it should appear in the **Diagnostics** tab of your conversion action within a few hours.
- **LinkedIn.** LinkedIn doesn't have a test mode either, so Converly sends a real conversion using made-up details that can't match anyone on LinkedIn. The sign it worked is your conversion in Campaign Manager changing to **Active** within a few minutes.
- **ChatGPT Ads.** This sends a real conversion to your ChatGPT Ads account. It should appear in the **Event Stream** within a few minutes.
Just keep in mind that these tests skip your website completely, so they check the connection to the platform, not your form. They also don't appear in your conversion log. To test the whole thing end to end, use Steps 1 to 3 above.
## Troubleshooting
If something didn't go to plan, find where your test got stuck below.
### Your test isn't in the conversion log at all
This means the form submission never reached Converly.
If your log is completely empty, Converly shows its own setup checks in place of the list. They tell you if no flow is published yet, or if Converly hasn't seen the tracking code on your site. Start there.
Here are the most common reasons:
- **The Converly code isn't on the page.** To check, open the page with your form, right-click anywhere on it and choose **Inspect**. Click the **Console** tab, and look for a line starting with **[Converly]**. If you can see it, the code is installed. If you can't, follow the [install guide](/installing-converly/install-converly) for your website platform.
- **You tested on a different website address.** Converly only accepts conversions from the website in your Converly settings. Click **Settings** in Converly and check the **Website** matches the address you tested on. A staging or preview address won't work.
- **Your flow isn't published.** A flow that's still a draft doesn't track anything. Open your flow in Converly and make sure it's published and showing as **Active**.
- **Your flow is set to run on different pages.** If you've limited your flow to certain pages, make sure the form you tested is on one of them.
- **You declined cookies, or your browser switched Converly off.** If you declined marketing cookies, or tested in Brave or with a privacy extension, Converly won't run. Try again in a fresh incognito window in Chrome, Safari or Edge, and accept cookies.
- **Your form didn't show a success message.** Converly waits for your website to confirm the form was sent successfully. If your form shows an error, or you closed the page too quickly, submit it again and wait for the thank you message.
### Your test is in the conversion log, but it failed
This means Converly received your test, but a destination rejected it. Click on the conversion, then click the card marked as failed. It shows the error the platform sent back, along with a plain English explanation of what to do about it.
For Google Ads, the most common causes are covered in [Accept the Customer Data Terms in Google Ads](/troubleshooting/google-ads-customer-data-terms) and [Grant access in Google Ads](/troubleshooting/google-ads-access).
**Important:** If your form doesn't ask for an email address or phone number, a test sent to Google Ads will fail. That's because a test visit has no ad click attached, so without an email or phone number there's nothing for Google to match it to. Real visitors who click one of your ads will carry a click ID, so it isn't a problem for them.
### Your test says Delivered, but you can't see it in the platform
This almost always comes down to timing, or the fact your test didn't come from an ad click. Check the notes for your platform in Step 3 above.
For Google Ads in particular, you can [read more about why a conversion isn't showing in Google Ads here](/troubleshooting/conversion-not-showing-in-google-ads).
If you've worked through all of this and something still isn't right, [get in touch](/contact) and we'll help you figure it out.
---
# Why a conversion isn't showing in Google Ads
URL: https://help.converly.io/troubleshooting/conversion-not-showing-in-google-ads
Category: troubleshooting
Updated: 2026-09-23
Converly says a conversion was delivered, but you can't find it in Google Ads. Here's why that happens and what to check.
This is one of the most common questions we get. The conversion log in Converly says a conversion was delivered to Google Ads, but when you go looking for it in Google Ads, it isn't there.
In almost every case, nothing is broken. Google Ads simply has its own rules about which conversions it shows in your reports, and when it shows them.
To work out what's going on, follow the instructions below. The reasons are in order of how often we see them, so start at the top and work your way down.
When Converly says **Delivered**, it means Google received the conversion and accepted it. That's the part Converly controls, and it's almost always working.
Whether Google then counts it in your reports is a separate decision Google makes afterwards, based on ad clicks, timing and your account settings. Google says this itself in its own documentation. A successful upload doesn't guarantee the conversion gets credited to one of your ads.
## Before you start, check Converly sent it
The first step is to rule out Converly. It only takes a few seconds.
In Converly, click **Logs** in the left sidebar to open your conversion log, and find the conversion. Then look at its status:
- **Delivered.** Google received it and accepted it. Carry on to the reasons below.
- **Partly delivered or Failed.** Something didn't get through. Click the conversion, then click the Google Ads card to see what Google said back. The most common causes are covered in [Accept the Customer Data Terms in Google Ads](/troubleshooting/google-ads-customer-data-terms) and [Grant access in Google Ads](/troubleshooting/google-ads-access).
- **Not there at all.** The form fill never reached Converly, so this isn't a Google Ads problem. Follow our guide to [testing that Converly is working](/testing-it-works/test-converly-is-working) instead.
While you've got the conversion open, click the Google Ads card and check whether there's a **GCLID** in the details. Make a note of it, because the first reason below depends on it.
## 1. The visitor never clicked one of your Google ads
This is by far the most common reason, and it catches almost everyone out.
Google Ads only shows conversions it can link back to a click on one of your ads. When someone clicks your ad, Google adds a click ID (called a GCLID) to the address of the page they land on. Converly captures it and sends it with the conversion, and that's how Google knows which ad the lead came from.
If the visitor found you some other way, there's no click ID to send. For example, if they:
- Clicked an organic result in Google search
- Came from Bing, Facebook or a link in an email
- Typed your website address in directly
- Clicked through from your Google Business Profile
Converly still sends the conversion to Google Ads, and Google still accepts it. But with no ad click behind it, Google has nothing to credit it to, so it never shows up in your reports.
That's exactly how it's meant to work. Google actually recommends sending all your conversions, knowing only some of them will be credited to an ad. And a lead that didn't come from a Google ad shouldn't show up as a Google Ads conversion anyway.
**How to check.** Open the conversion in Converly and click the Google Ads card. If there's a GCLID, the visitor clicked one of your ads. If there isn't, they didn't, and this conversion won't appear in Google Ads.
The only slight oddity is enhanced conversions. Along with the click ID, Converly sends Google a scrambled (hashed) copy of the person's email address and phone number. If they clicked one of your ads at some earlier point while signed in to their Google account, Google can sometimes match them back to that click even without a GCLID on this visit. That's why we recommend leaving **Enhanced Conversions** switched on. It won't create a conversion out of nothing, but it does recover some of the leads whose click ID went missing (for example, because they came back a few days later on a different device).
This is also why a test conversion from your own website usually won't show in Google Ads. Unless you clicked one of your own ads first, there's no click for Google to credit it to.
## 2. Google reports it on the day of the ad click, not the day of the form fill
This one causes a lot of confusion.
In your main Google Ads conversion columns, a conversion is reported against **the date the person clicked your ad**, not the date they filled in your form.
So if someone clicked your ad on the 2nd, thought about it for a week, and filled in your form on the 9th, Google Ads reports that conversion on **the 2nd**. If you're only looking at today, or the last few days, you won't see it.
**How to check.** Widen your date range to the last 30 days or more and look again. If the conversion count on an earlier day has gone up, you've found it.
Even better, add the column called **All conv. (by conv. time)** to your report. It reports conversions against the day they actually happened, which is what most people expect when they go looking. It's also the column Google itself suggests for checking that an uploaded conversion arrived.
## 3. Google hasn't finished processing it yet
Uploaded conversions don't appear in Google Ads straight away.
Google says imported conversions take around 3 hours to show up, and its general reporting guidance allows 24 to 48 hours. Conversions from some mobile and app placements can take longer again.
So allow a full day before you start worrying, and up to 3 days before you decide something is genuinely wrong.
**How to check.** Simply wait and look again tomorrow. If you'd like to see Google's own view of what it has received, go to **Goals**, then **Conversions**, then **Summary**, click your conversion action, and open the **Diagnostics** tab. Just keep in mind this also lags behind real time.
When a test doesn't appear within a few minutes, it's tempting to send another one. Please don't.
All you end up with is a pile of test conversions that land at once a day later, which makes your reports harder to read and can throw off your campaign data. Send one, note the time, and check back tomorrow.
## 4. It's in All conversions, but not in the Conversions column
Google Ads has 2 main conversion columns, and they don't contain the same things:
- **Conversions** only includes the conversion actions that are part of a goal used by the campaign you're looking at. These are the ones Google bids towards.
- **All conversions** includes everything.
There are 2 ways a conversion can end up in All conversions but not in Conversions. Either the conversion action is set to **Secondary** (secondary actions are deliberately kept out of the Conversions column and out of bidding), or the goal it belongs to isn't being used by that campaign.
**How to check.** Add the **All conversions** column to your report. If the conversion shows up there but not under Conversions, this is your answer.
**How to fix it.** In Google Ads, go to **Goals**, then **Conversions**, then **Summary**, and find your conversion action. Check whether it's set to Primary or Secondary, which goal it belongs to, and whether that goal is used by the campaign you're looking at.
**Important:** Only change it to Primary if you actually want Google to bid towards these leads. It directly changes how your campaigns spend money.
## 5. The ad click was outside your conversion window
Every Google Ads conversion action has a conversion window. It's the maximum time Google will wait after an ad click before it stops counting conversions from that click.
The default is 30 days, and you can set it anywhere from 1 to 90 days.
So if your window is 30 days, and someone clicked your ad 45 days ago and only filled in your form today, Google accepts the conversion and then doesn't count it. The click is simply too old.
This mostly affects businesses with long sales cycles, which is common in manufacturing, construction and professional services. Someone researches you for 2 months before they get in touch, and by then the original click has aged out.
**How to check.** In Google Ads, go to **Goals**, then **Conversions**, then **Summary**, click your conversion action, and look at its **Conversion window** setting. Compare it with how long your buyers usually take to get in touch.
**How to fix it.** Make the conversion window longer. If your sales cycle genuinely runs to 2 or 3 months, set it towards the 90 day maximum.
**Important:** Changing the window only affects conversions from that point on. It won't go back and recover leads that already fell outside the old window. Google also won't accept a conversion at all once the ad click is more than 90 days old.
## Less common reasons
If you've worked through everything above and the conversion still isn't there, it's usually one of these.
### Google filtered it out as invalid
Google runs its own checks on conversions and quietly discards any it thinks are spam or invalid. It can also remove conversions later if it decides the original click was invalid traffic.
You won't get a notification when this happens, and there's nothing to fix on your side. It's mainly worth knowing so a small gap between what Converly sends and what Google reports doesn't worry you.
### Your conversion action only counts one conversion per click
Each Google Ads conversion action has a **Count** setting. Set to **Every**, Google counts every conversion that follows an ad click. Set to **One**, it only counts the first.
So if the same person fills in your contact form twice, or fills in 2 different forms after clicking one ad, Google may accept the second one and then not count it. You'll find this setting on the conversion action, under **Goals**, then **Conversions**, then **Summary**.
### You also have your own Google Ads tag on your site
If you already had a Google Ads conversion tag on your website before you set up Converly, both your tag and Converly may be reporting the same form fill.
That's fine, and Converly is built for it. Every conversion carries a unique ID, and the same ID goes to Google from both the browser and our servers, so Google recognises them as the same conversion and only counts it once. The confusion is that people sometimes go looking for 2 conversions, find 1, and think one went missing. Nothing did.
### Your Google Ads account is in a different time zone
Google Ads reports in the time zone set on your account, which was chosen when the account was created.
If that's different to your own time zone, conversions near the start or end of the day can land on the day before or after the one you expect. You can check the time zone in your Google Ads account settings.
### The credit went to a campaign you weren't looking at
Google decides which campaign, ad group and keyword gets credit for each conversion, and it doesn't always match what you'd expect.
Most conversion actions use data driven attribution, which splits the credit across every ad the person interacted with. So a single lead can show up as 0.33 or 0.5 of a conversion against the campaign you're checking, rather than a whole one.
If you're filtering to one campaign, remove the filter and look at the total for the whole account. The conversion is often there, just credited somewhere you wouldn't have thought to look.
### The conversion action belongs to your manager account
Agencies often set up conversion actions in their manager (MCC) account and share them with client accounts.
If that's how yours is set up, check the **Attribution** reports in the manager account rather than the client account. That's where Google recommends looking for conversions tracked across accounts.
### The conversion was estimated rather than recorded
When Google can't see a conversion directly (for example, because the visitor declined advertising cookies or switched devices), it sometimes estimates it instead.
These estimated conversions do show in the Conversions column alongside the others, so they rarely explain a number that's missing altogether. But they can take up to 5 days to settle, so your totals may creep up during that time. And because they're estimates rather than a record of one specific person, you won't be able to find an individual lead among them.
### A segment is hiding the numbers
If you've added a segment to your report (like **Conversion action** or **Conversion lag**), some columns stop showing numbers and show a dash instead. If your report has suddenly gone empty after segmenting it, simply remove the segment and look again.
## Still can't find it?
If you've worked through all of the above and it still doesn't add up, [get in touch](/contact) and we'll look into it with you.
To make it quick, include the following:
- The date and time of the conversion, and which form it came from
- Whether the conversion in Converly shows a GCLID
- The name of the Google Ads conversion action your flow sends to
- Whether the conversion shows up under **All conversions** when you widen the date range to 30 days
We can see exactly what Converly sent to Google and what Google said back, so with those details we can usually tell you within a few minutes whether the conversion is sitting in your account somewhere or was never going to be counted.
---
# Accept the Customer Data Terms in Google Ads
URL: https://help.converly.io/troubleshooting/google-ads-customer-data-terms
Category: troubleshooting
Updated: 2026-09-03
Give Google the one time approval it needs before it will accept conversions from Converly.
The Customer Data Terms are Google's confirmation that you are allowed to share customer data with them. Google will not accept conversions from Converly until your Google Ads account has agreed to them, so this is usually the last thing standing between your flow and live conversion data.
It takes about a minute, you do it inside Google Ads rather than in Converly, and you only ever do it once per account.
Converly checks for it automatically. If you have landed here from the **One more step in Google Ads** screen, Converly asked Google whether your account had accepted and Google said no.
Follow the instructions below:
You need **Admin** access to the Google Ads account. Accepting terms on behalf of your company is an account level agreement, and people with Standard access often cannot see the option at all. If you are not an admin, simply send this article to whoever is.
You do not need to touch your website, install a tag, or change anything in Converly while you do this.
## Step 1: Accept the Customer Data Terms
Sign in to [Google Ads](https://ads.google.com/) and check you are in the right account. Converly's message names the account it is waiting on, in the form `302-340-4935`, so compare that with the account number in the top right of Google Ads.
Then click the **Goals** icon in the left menu and choose **Settings**.
Find the **Customer data terms** row and click the arrow on the right to expand it. If your account has not accepted yet, this row reads **Not accepted**.
The terms open in the row itself. Read the **Policies and Additional Terms for Customer Data**, tick **I have read and accept the terms on behalf of my company**, then click **Save**.
## Step 2: Turn on enhanced conversions for leads
Accepting the terms tells Google it is allowed to receive the data. Turning on enhanced conversions for leads is what actually lets Google use it. Converly needs both, and they are two separate rows on the same screen.
Staying on **Goals**, then **Settings**, find the **Enhanced conversions for leads** row and expand it.
Tick **Turn on enhanced conversions for leads**, choose **Google tag** in the method dropdown, then click **Save**.
There is a separate **Enhanced conversions** row just below this one. That is for conversions measured by a tag on your website, rather than sent from a server the way Converly sends them. You do not need to change it.
## Step 3: Go back to Converly and check again
Return to the Converly screen that sent you here and click **Check again**.
Acceptance can take up to a minute to reach Google, so if the screen says the same thing, simply wait a moment and click it once more.
You do not need to reconnect the account or rebuild your flow. Your flow was saved before this screen appeared, so **I'll do this later** is always safe to use, and picking this back up later costs you nothing.
That's it! Once Converly comes back ready it takes you straight on to testing your flow.
**Check that enhanced conversions for leads is actually turned on.** Accepting the terms on its own is not enough, and it is easy to finish Step 1 and stop there. Converly reports these as two separate things, so the screen will tell you which one is missing.
**Check the access level of the Google account you connected.** Converly reads the setting back through that account, so if it has less than Standard access on your Google Ads account it cannot see that you accepted.
**If there is no Customer data terms row on the screen at all**, your conversions are tracked by a manager account and Google keeps this setting there instead. Follow [Accept the Customer Data Terms in your manager account](/troubleshooting/google-ads-customer-data-terms-manager) instead.
---
# Accept the Customer Data Terms in your manager account
URL: https://help.converly.io/troubleshooting/google-ads-customer-data-terms-manager
Category: troubleshooting
Updated: 2026-09-03
When a manager account tracks your conversions, Google keeps this approval in the manager. Here is where to find it.
The Customer Data Terms are Google's confirmation that you are allowed to share customer data with them. Google will not accept conversions from Converly until they have been agreed, so this is usually the last thing standing between your flow and live conversion data.
**Your conversions are tracked by a manager account, so you accept them in the manager rather than in the advertiser account.** Google deliberately keeps the setting there. If you go looking for it in the advertiser account you will not find it, because it is not there to find.
The upside is that you only do this once. Accepting in the manager covers every advertiser account whose conversions that manager tracks, so an agency with 5 clients does this a single time rather than 5 times.
Follow the instructions below:
You need **Admin** access to the manager account, not to the advertiser account. Accepting terms on behalf of your company is an account level agreement, and people with Standard access often cannot see the option at all. If you are not an admin on the manager, simply send this article to whoever is.
You do not need to touch your website, install a tag, or change anything in Converly while you do this.
## Step 1: Switch to the manager account
Sign in to [Google Ads](https://ads.google.com/) and switch to the **manager account** using the account switcher in the top right.
This is the step people get wrong, so it is worth a second look before you go on. You want the manager, not the client account you connected to Converly.
## Step 2: Accept the Customer Data Terms
Inside the manager account, click the **Goals** icon in the left menu and choose **Settings**.
Find the **Customer data terms** row and click the arrow on the right to expand it. If the account has not accepted yet, this row reads **Not accepted**.
The terms open in the row itself. Read the **Policies and Additional Terms for Customer Data**, tick **I have read and accept the terms on behalf of my company**, then click **Save**.
## Step 3: Turn on enhanced conversions for leads
Accepting the terms tells Google it is allowed to receive the data. Turning on enhanced conversions for leads is what actually lets Google use it. Converly needs both, and they are two separate rows on the same screen.
Still in the manager account, on **Goals**, then **Settings**, find the **Enhanced conversions for leads** row and expand it.
Tick **Turn on enhanced conversions for leads**, choose **Google tag** in the method dropdown, then click **Save**.
There is a separate **Enhanced conversions** row just below this one. That is for conversions measured by a tag on your website, rather than sent from a server the way Converly sends them. You do not need to change it.
## Step 4: Go back to Converly and check again
Return to the Converly screen that sent you here and click **Check again**.
Acceptance can take up to a minute to reach Google, so if the screen says the same thing, simply wait a moment and click it once more.
You do not need to reconnect the account or rebuild your flow. Your flow was saved before this screen appeared, so **I'll do this later** is always safe to use, and picking this back up later costs you nothing.
That's it! Once Converly comes back ready it takes you straight on to testing your flow.
**Check you accepted in the manager, not the client account.** This is the usual mix up. The setting has to be accepted in the manager account that tracks the conversions, so go back to Step 1 and switch accounts first.
**Check that enhanced conversions for leads is actually turned on** in the manager account. Accepting the terms on its own is not enough, and it is easy to finish Step 2 and stop there.
**If there is more than one manager in the chain**, and conversions are uploaded on behalf of a manager above this one, each manager in that chain needs to have accepted. Start with the account Converly named.
**Check the access level of the Google account you connected.** Converly reads the setting back through that account, so if it has less than Standard access on the manager account it cannot see that you accepted.
---
# Grant access in Google Ads
URL: https://help.converly.io/troubleshooting/google-ads-access
Category: troubleshooting
Updated: 2026-09-03
Give the Google account you connected to Converly enough access to send conversions.
Converly sends conversions to Google Ads using the Google account you connected. If that account does not have enough access to your Google Ads account, Google refuses the conversions even though everything else is set up correctly.
The fix is to raise that account's access level to **Standard** or higher, which an admin does inside Google Ads in about a minute.
The important part, and the bit that catches people out, is the access level of **the Google account you connected to Converly**, which is not always the account you are signed in to Google Ads with right now.
Follow the instructions below:
You need **Admin** access to the Google Ads account to change anyone's access level, including your own. If you are not an admin, simply send this article to whoever is.
## Step 1: Check which Google account is connected
In Converly, go to **Settings**, then **Integrations**, and look at the Google Ads row. It shows the Google account Converly is connected as.
Make a note of that email address. It is the one you are about to grant access to.
## Step 2: Give that account Standard access
Sign in to [Google Ads](https://ads.google.com/), click the **Admin** icon in the left menu, choose **Access and security**, then open the **Users** tab.
Find the email address from Step 1 in the **User** column. Its current access level sits in the **Access level** column with a dotted underline, which means you can change it. Click it, then choose **Standard** or **Admin** from the dropdown and save.
The dropdown offers **Billing**, **Read only**, **Standard** and **Admin**. Converly needs **Standard** or **Admin**, because the levels below cannot read back the conversion settings Converly checks before it sends.
It has never been invited. Click the blue **plus** button above the table on the Users tab, enter the email address from Step 1, choose **Standard**, then click **Send invitation**.
The invitation has to be accepted before the access takes effect, so open the invitation email from that account and accept it before moving on.
## Step 3: Go back to Converly and check again
Return to the Converly screen that sent you here and click **Check again**.
Access changes can take a minute to reach Google, so if the screen says the same thing, simply wait a moment and click it once more.
You do not need to reconnect Google Ads or rebuild your flow. Your flow was saved before this screen appeared, so **I'll do this later** is always safe to use.
That's it! Once Converly comes back ready it takes you straight on to testing your flow.
**Check you changed the right account.** The most common cause is granting access to your own Google account rather than the one Converly connected with. Step 1 tells you which one that is.
**Check the invitation was accepted**, if you invited the account rather than changing an existing entry. An invitation that is sent but not accepted grants nothing.
**If Converly says conversions are managed by a manager account it cannot access**, this is a different problem and the Users tab will not fix it. The **Managers** tab on the same page shows which manager accounts are linked, which is a useful place to confirm what you are dealing with. Your conversions are owned by a Google Ads manager account that the connected Google account cannot see at all. Either sign in to Converly with a Google account that can reach that manager, or ask your Google Ads admin to give the connected account access to the manager itself, then reconnect Google Ads in Converly. Reconnecting is required here, because Converly reads the account structure at connect time.
---