
When you use the same contact form across multiple pages — in a footer, modal, or sidebar — every submission looks identical in your inbox or CRM. You see the name, email, and message, but you have no idea which page the lead came from. Was it your homepage? A specific service page? A blog post about pricing?
Framer gives you native hidden fields and built-in UTM tracking, but it doesn't have a native feature to automatically inject the current page URL or browser title into form submissions. That means if you want page-level context on each lead, you need to add it yourself.
This guide shows you how to implement BRIX Templates' Form Source Tracker — a simple script that automatically fills hidden fields with the current page URL and title on every form submission, so you always know exactly where each lead originated.

This implementation becomes valuable whenever the same form appears on multiple pages and you need submission-level attribution.
Framer has solid form infrastructure, but there's a specific gap this solution fills.
What Framer gives you:
What Framer doesn't give you:
That gap is exactly what the BRIX Form Source Tracker solves.
The solution has two parts:
Part 1 — Hidden fields: You add two hidden inputs to your Framer form named page_url and page_title. These fields are invisible to users but get included in every submission.
Part 2 — The script: A small script runs on your site that automatically fills those hidden fields with:
The script fills these values on page load, when a user interacts with the form, and again right before submission — ensuring the data is always current even if the user navigated via client-side routing.

Before adding the script, you need the hidden fields that will receive the page context data.
Critical warning: Do not use the Visible toggle to hide these fields. Framer excludes inputs hidden with the Visible toggle from form submissions entirely. You must use the Hidden property — this keeps the field in the submission while making it invisible to users.
If you want to debug the setup first, temporarily leave the fields visible so you can see the values being filled. Once confirmed working, enable Hidden on both.

Now add the script that fills those hidden fields automatically.
<script>
/**
* BRIX Templates — Framer Form Source Tracker
* --------------------------------------------------------------------------
* Automatically captures the current page URL and browser title into hidden
* form fields. Works on static pages and CMS pages. Fills fields on load,
* on form interaction, and before submission to ensure accuracy.
*
* Version: 1.0.0
* Author: BRIX Templates
*/
</script>
<script src="https://apps.brixtemplates.com/framer-form-source-tracker/script.js"></script>
The script's config object at the top lets you customize behavior:
urlFieldNames: Array of field names to fill with the page URL. Default is ["page_url"]. Add more names if you have multiple forms with different naming conventions.
titleFieldNames: Array of field names to fill with the page title. Default is ["page_title"].
stripQueryParams: Set to true if you want the URL without query parameters. Useful if you want clean URLs without UTM strings cluttering your data.
debug: Set to true to see console logs while testing.
The script captures document.title — the browser/SEO title, not necessarily the visible H1 heading on the page. This is intentional and works well with Framer's architecture.
In Framer, you set page titles in Page Settings. For CMS pages, you can make titles dynamic using template syntax like {{Title}} or {{Title}} – Blog. Whatever you configure there becomes the document.title that the script captures.
For example:
This is usually the correct behavior — the SEO title is often more descriptive and consistent than whatever H1 happens to be on the page.
Custom code added through Project Settings does not run in Framer's preview mode. You must publish and test on the live site.

Open your browser's DevTools console. If you set debug: true in the config, you'll see logs like:
[BRIX Form Source] Filled 2 fields with page context [BRIX Form Source] URL: https://yoursite.com/pricing [BRIX Form Source] Title: Pricing – Your Company
Framer doesn't automatically include the page URL in form submissions, but you can capture it using a hidden field and a small script. Add a hidden input named page_url to your Framer form, then use a script that fills it with window.location.href when the form loads or submits. This lets you track exactly which page each lead came from — essential when the same contact form appears across multiple pages on your site.
Yes, but it requires a simple setup since Framer doesn't offer this natively. Add hidden fields named page_url and page_title to your form, then install a script that automatically populates them with the current page's URL and browser title. Once configured, every form submission includes this context — so you can see whether a lead came from your pricing page, a blog post, or your homepage.
No. Framer has native hidden fields and Campaign tracking for UTM parameters, but there's no built-in toggle to automatically capture the current page URL or title in form submissions. For that functionality, you need to add a script that fills hidden fields with window.location.href and document.title. The setup takes about 5 minutes and works across all your Framer forms once implemented.
In Framer, select your Form component, add an Input field, and enable the Hidden property in the right panel. Set the field's Name to something descriptive like page_url or page_title, then remove the label. Critical detail: use the Hidden property, not the Visible toggle — Framer excludes inputs hidden with Visible from form submissions entirely.
UTM tracking captures parameters that came with the user from external sources — like which ad campaign or email they clicked. Page URL tracking captures which page on your site they submitted the form from. They solve different problems: UTMs tell you how someone found your site, page URLs tell you what content they were viewing when they converted. You can use both together for complete attribution.
Yes. Hidden fields work identically on static pages and CMS pages. When capturing page titles on CMS pages, the script captures document.title, which Framer sets from Page Settings. If your CMS page title uses dynamic syntax like {{Title}} – Your Brand, that's exactly what gets captured in the form submission — giving you the specific CMS item name, not just a generic template title.
The most common causes are: using the Visible toggle instead of the Hidden property (Framer excludes Visible-hidden fields from submissions), mismatched field names between your form and script, testing in Framer's preview mode instead of the published site (custom code doesn't run in preview), or forgetting to republish after adding the script. Check each of these in order — the Visible/Hidden distinction trips up most people.
Not for page URL and title. Framer's native Campaign tracking handles UTM parameters without code, but there's no equivalent for capturing the current page's URL or title. You'll need a small script that reads window.location.href and document.title and writes them to hidden fields. The script is straightforward — about 50 lines — and only needs to be added once to work site-wide.
No. A properly written tracking script is under 2KB and executes in milliseconds. It runs once when the page loads and again when users interact with forms — it doesn't continuously poll or make network requests. The performance impact is negligible and won't affect your Core Web Vitals or page speed scores.
Once you're capturing page_url or page_title in your form submissions, you can filter, sort, and analyze leads by source page in your CRM, spreadsheet, or webhook destination. Most tools let you create views or reports based on these fields. You'll quickly identify patterns — like discovering your pricing page generates 3x more inquiries than your features page, or that a specific blog post consistently drives qualified leads.
Framer's native forms are solid, but they don't automatically capture which page a submission came from. When the same form appears across multiple pages, you lose valuable context about where each lead originated.
The BRIX Templates Form Source Tracker fills that gap with a simple setup: two hidden fields (page_url and page_title) plus one script that automatically populates them on every submission. It works on static pages, CMS pages, and handles Framer's SPA navigation correctly.
If you need help implementing form tracking, building custom attribution workflows, or integrating Framer forms with your CRM, our Framer agency can help you get it set up right.

Learn how to track UTM parameters in Framer using native tools and a persistent attribution script for cross-session tracking.

Add IDX MLS listings to Framer: provider options, who supports Framer, widget embedding, and Framer-specific technical details.

Add IDX MLS listings to Webflow: provider setup, widget embeds, wrapper pages, DNS configuration, and troubleshooting.