How to track Typeform submissions as conversions, by source
Count Typeform submissions as conversions with the embed callback, pass UTM tags into hidden fields, and see which ad or post brought each response.
On this page
To track Typeform submissions as conversions, embed the typeform on your own page with Typeform's embed library and send a conversion from its onSubmit callback. The submission is then counted on your page, tied to the visit that came from your ad or post. A plain link to form.typeform.com loses the source, because the response happens on Typeform's domain.
This page compares three setups (callback, thank-you page redirect and webhook), shows how to carry UTM tags into the responses, and what to send to the ad platforms.
Why a typeform loses the source
An embedded typeform is an iframe from Typeform's domain. Your page's analytics tag sees the page, not what happens inside the frame, so it never sees a question answered or the form sent. A shared link is worse: the visitor leaves your site, and unless the link carries UTM tags, nobody knows where they came from.
The three ways to count a submission
| Setup | How the submission is counted | Needs | Best for |
|---|---|---|---|
Embed and onSubmit | Typeform's callback runs on your page when the form is sent | Typeform's embed code on your page | Most sites |
| Redirect to your thank-you page | A visit to /thanks is the conversion | A Typeform plan with redirects | Counting only; the source is often lost |
| Webhook to your server | Typeform posts each response to your endpoint | A server, or an automation tool | Responses with a value, or a CRM in between |
Embed: count Typeform's onSubmit callback
Typeform's embed library takes callbacks for what happens inside the form: onReady, onStarted, onQuestionChanged, onSubmit and others. onSubmit "fires when user submits the form" and passes the formId and the responseId (Typeform, embed library). Send your conversion from it.
Use Typeform's embed code, the data-tf-widget or data-tf-popup markup with embed.js, rather than a hand-made iframe, so the callbacks work. In plain HTML, a callback is the name of a function on the page, such as data-tf-on-submit="sentTypeform".
Redirect: count a page on your site
Typeform can send people to a web address when they finish. The embed's redirectTarget option decides where that page opens; the default, _parent, opens it in your page rather than inside the frame (Typeform). Point the redirect at a page such as /thanks and count a visit to it.
The catch: the thank-you page is opened from Typeform's domain, so many analytics tools read it as a new visit referred by typeform.com, and the ad that brought the visitor loses the credit. Sporetag reads it the same way today, which is why the callback is the better setup.
Keep answers out of that address. If you add answers or hidden fields such as an email to the redirect URL, an analytics tag that records full addresses stores personal data. Google asks you never to send that to Google Analytics (Google).
Webhook: count it on your server
Typeform can post every response to a URL you choose (Typeform). Your server, or an automation tool, then forwards the conversion with any details you want, such as a quote value. Use the responseId as the event id, so a retried webhook counts once.
Install Sporetag with Typeform
- Add the Sporetag tag to your site (see the HTML install guide), and open the page that embeds the typeform.
- Use Typeform's embed code with an
onSubmitcallback that sends aTypeform sentevent, as in the code below. - On the Goals tab, add a custom goal, An action happens, with the event name
Typeform sent. - Send a test response from the page and check the goal on the Goals tab.
- Leave Typeform's redirect off, or keep it for the visitor's sake and count the callback, not the page.
The embed, with the callback and the UTM tags forwarded:
<div data-tf-widget="FORM_ID" data-tf-on-submit="sentTypeform"
data-tf-transitive-search-params="utm_source,utm_medium,utm_campaign"></div>
<script src="//embed.typeform.com/next/embed.js"></script>
<script>
function sentTypeform(e) { sporetag('Typeform sent', { form: e.formId }); }
</script>Sporetag's Someone fills in a form goal reads forms on your own pages. It cannot see inside Typeform's frame, which is why the callback is needed.
Pass UTM tags into the responses
Your analytics knows the campaign from the page address. Typeform does not, unless you pass it in. Two options from Typeform's embed library (Typeform):
transitiveSearchParams: forwards the parameters you name from your page's address to the form, such asutm_source,utm_mediumandutm_campaign. Add hidden fields with the same names to the typeform to store them with each response.hidden: passes values you set yourself into hidden fields.
With the tags in each response, Typeform's results, exports and integrations show the campaign too, and a CRM that receives the responses keeps it.
Send submissions to Google Ads and Meta
A submission is a lead, so the ad platforms should learn from it:
- Google Ads: fire a conversion from the same
onSubmitcallback or the thank-you page. The lead-gen conversion tracking guide covers values and counting. - Meta: send a
Leadevent from the callback, and the same event from your server with theresponseIdas event id, so it counts once. See the Meta Conversions API guide. - Not every response is a lead. A quiz or survey may bring many responses and few buyers. Count the ones that qualify, and send those as the main conversion.
Common questions
How do I track Typeform submissions in Google Analytics 4?
Embed the typeform with Typeform's embed code and send a GA4 event, such as generate_lead, from the onSubmit callback. Mark it as a key event.
Why does Typeform show no source for my responses?
The form ran on Typeform's domain or in a frame, so it never saw the page's UTM tags. Forward them with transitiveSearchParams into hidden fields of the same names.
Can I track a Typeform link shared in a bio or an email?
You can count the click with a tagged short link, and keep the tags with utm_ hidden fields on the form's own link. Counting the submission itself needs a redirect to your site or a webhook.
Does a Typeform submission count twice if someone reloads?
The onSubmit callback runs once per submission. A thank-you page counts again on reload, so use the callback, or a webhook with the responseId as event id, when exact counts matter.
Sources
- Typeform for Developers: Embed callbacks, Embed configuration, Webhooks. Checked October 2026.
- Typeform embed library: README. Checked October 2026.
- Google Analytics Help: Best practices to avoid sending personally identifiable information. Checked October 2026.
Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.