Submission source

What it is

Every form submission can carry provenance — a short record of where it came from. It has three parts, stored alongside the submission:

  • source — the channel the submission came from. This is the important one: it's a first-class, indexed value you can filter and report on (e.g. facebook, google-ads:summer, chatbot, hiring).
  • referrer — the page the submitter came from. If your integration doesn't set it explicitly, the platform fills it in from the request's Referer / Origin header.
  • metadata — any extra free-form key/values your integration wants to keep.

The platform never invents a source. If a submission doesn't arrive with one, its source stays empty — there are no false positives in your reporting. Built-in entry points set a source when they genuinely know the channel (the chatbot sends chatbot, the hiring flow sends hiring); website and API submissions forward whatever your integration passes.

For CRM lead-source reporting, a meaningful custom source (an ad campaign, a named referral flow) is what shows up. The bare channels (api, website, chatbot, hiring) fall back to the form's own form:<slug> source so they don't overwrite it.

Source vs. referrer

They sound similar but answer different questions, and it's worth keeping them straight:

  • Source — which channel produced this? A deliberate, human-meaningful label for the marketing channel or campaign behind the submission. You (or a known entry point) choose it: facebook, google-ads:summer, newsletter, qr-flyer. It's what lead-source reporting is built on, it's indexed for filtering, and BusinessDash never guesses it — if you don't set it, it stays empty.
  • Referrer — what web page were they on just before? The technical HTTP referrer: the URL the browser came from. It's captured automatically from the request's Referer / Origin header (or you can pass one), so it's incidental context rather than a label you curate.
SourceReferrer
AnswersWhich channel / campaignWhich web page they came from
Examplegoogle-ads:summerhttps://example.com/pricing
Who sets itYou / a known entry point (deliberate)Captured from the request (automatic)
ShapeA short label you chooseA full URL
Used forLead-source reporting + filtering (first-class, indexed)Supplementary context
If absentStays empty — never guessedFalls back to the Referer / Origin header
Reliable?As reliable as you make itOften missing (direct visits, privacy modes, cross-origin)

The practical upshot:

  • Use source for attribution. It answers "where do our leads come from?", so set it deliberately on every channel — tag your ad links, your newsletter, your QR codes. Pair it with Posted at to keep channel names consistent.
  • Treat referrer as a hint, not a system of record. It's handy extra context ("they were on the pricing page"), but browsers drop it for direct visits, privacy modes, and many cross-origin navigations — so never rely on it for reporting.
  • They're independent. A submission can have a referrer but no source (someone arrived from Google and submitted, but you didn't tag a channel) — which is exactly why Require Submission Source checks the source and ignores the referrer.

Require Submission Source

In Settings → Require Submission Source you decide whether a source is optional or mandatory.

This toggle checks the source specifically — not the referrer. A submission that has a referrer but no source still counts as "sourceless".

Off (default)On
Submission with a sourceStoredStored
Submission without a sourceStored (source left empty)Rejected before it's stored
Where it's enforced—Every entry point: website, API, chatbot
Submitter seesSuccessA "source required" error

When it's on, a sourceless submission is rejected server-side and never written — at all ingest paths, not just one — so you can't accumulate unattributed records.

How to use it

Define your channels

List where the form is shared on the Posted at setting so the sources you expect are written down.

Make sure real traffic carries a source

Built-in channels handle this for you. For your own embeds or SDK calls, pass a source when you submit (e.g. tag a campaign link as google-ads:summer).

Decide whether to enforce it

Leave Require Submission Source off to capture everything; turn it on once you're confident every legitimate submission is tagged.

What to expect — with vs. without

  • Without enforcing it (the default): you capture every submission. Some rows simply have an empty source. This is the safe choice while you're still wiring up attribution.
  • With it enforced: every stored submission is guaranteed to be attributable to a channel, which keeps lead-source reports clean. The trade-off is real — any legitimate submission that arrives with no source (for example, someone opening the raw form URL directly with no referrer and no source parameter) will be turned away. Only enable it when your real traffic always carries a source.

Turning this on without first confirming your channels set a source can silently reject good submissions. Verify your embeds/links pass a source, then enable it.