CrawlCheck

Forms

A quote form that knows where the lead came from.

In one sentence

The CrawlCheck form is a quote form served by one script tag that stores the visitor's first landing URL and referrer in their own browser, sends them with the submission, names the source in plain words with AI sources marked, writes the lead to the domain's outcome series, and delivers it by email, webhook and dashboard.

One script tag. It renders the form, records the first page the visitor landed on and the page they submitted from, reads the source an answer engine or a campaign left in the URL, and files the lead beside your site’s record as an outcome point — dated, sourced, and sitting next to the day something changed.

First touch and last touch

The landing URL and referrer are kept in the visitor’s own browser on their first visit and sent with the form, so a lead that read about you in ChatGPT on Monday and came back direct on Thursday is credited to Monday.

Engines named, not guessed

utm_source=chatgpt.com, a Perplexity or Copilot referrer, Google, Bing, a social app, a campaign tag, or direct. The source is stored as a word you can read, and AI sources are marked.

Written beside the record

Each lead adds one to that day’s outcome series on the domain. The report’s Changes view shows leads on the same axis as fixes, which is the only way to see whether the work moved the number.

Delivered three ways

Email, your webhook (Slack, Zapier, your CRM), and the dashboard. Nothing about the visitor is inferred; the fields they typed, the URL they were on, the referrer their browser sent.

What one submitted lead carries back, beyond the fields the visitor typedone submitted leadPOST /api/leadThe fields they typedname, phone, email, zip, messageLanding pagethe first URL they arrived onReferrerthe site or app that sent themCampaign / source tagutm_source, utm_medium, utm_campaignTime on pageseconds before submittingTime zonethe browser's IANA zone
The visitor fills in a few fields. The script adds where they came from, read from their own browser — no cookies, no third-party tracker, no IP lookup.

What it recognises

Tested in this order, first touch before last. The full table is at /api/lead/sources.

AI assistants and AI search

ChatGPT · Perplexity · Copilot · Gemini · Google AI Mode · Claude · Grok · Meta AI · Mistral Le Chat · DeepSeek · DuckDuckGo AI · You.com · Kagi Assistant · Brave Leo · Poe · Phind · Character.ai · Pi · HuggingChat · Qwen · Arc Search · AI search (other)

Paid

Facebook Ads · Microsoft Ads · Google Ads · Paid (other)

Maps and business profiles

Google Maps / Business Profile · Apple Maps · Bing Maps · Waze

Directories

Yelp · Angi / HomeAdvisor · Thumbtack · Houzz · Nextdoor · BBB · Directory (other)

Social

Facebook · Instagram · TikTok · LinkedIn · X · YouTube · Reddit · Pinterest · Threads · Messaging app

Email

Email

Search engines

Google · Bing · DuckDuckGo · Yahoo · Brave Search · Ecosia · Yandex · Baidu · Kagi · Search (other)

What cannot be attributed, and is not guessed: Siri, Spotlight and Safari suggestions send no referrer and no tag, so an Apple-sourced lead arrives as Direct; Google AI Overviews carry nothing that separates them from a plain Google click. A lead that says Direct is a lead whose source chose not to say.

The source most leads arrive with is none

Where 116 form submissions on this site came from, by source — measured over 30 days from its own lead record
Direct / no referrer93 · the source chose not to say
Google9
Stripe checkout return5
Facebook3
ChatGPT2 · tagged utm_source=chatgpt.com
Reddit1

Eighty percent of submissions arrived with no referrer at all — which is the normal shape of web traffic and the reason attribution is worth capturing at the moment of submission rather than reconstructing later. The two ChatGPT rows are the ones a referrer-blind form would have filed as Direct. This is one small site's own data; your split will differ, and the form records yours the same way.

Why it has to be first-party

A form inside a third-party widget cannot see the page it sits on, so it cannot read the referrer or the campaign tag — the very things that name the source. That is not a limitation of one vendor; an embedded iframe is walled off from the host page by design, which is why a site whose only form is a hosted widget correctly shows zero attributed submissions. This form is a script that runs on your page, in your visitor’s browser, on your domain, so the landing URL and referrer are readable at the moment of submission. Nothing is inferred from an IP address and nothing is reconstructed after the fact.

Try it

This one posts to this site’s own record. Submit it and the row appears on the dashboard with its source.

Install it

Paste this where the quote form goes, on any domain on your licence. Free for 30 days with the trial; a site on no licence gets a polite refusal, never a silent drop.

<script src="https://crawlcheck.io/f.js"></script>

One line. Words, fields, colours and layout are set on the Customize page and served to the tag; data-attributes on the tag are the fallback when nothing is saved.

Fields: name, phone, email, zip, address, company, message. Attributes: data-fields, data-required, data-heading, data-button, data-thanks, data-redirect, data-color, data-width. About 4 KB, no cookies, no reCAPTCHA — a hidden field and a timing check stop the bots that matter.

Start the free trial · Your dashboard

Questions about this page

QWhere does the source come from?
From the URL the visitor landed on and the referrer the browser sent, on first visit and at submission. ChatGPT appends utm_source=chatgpt.com to links in its answers; other engines are read from the referrer host; a campaign tag is kept as written; anything else is direct.
QDoes it track the visitor?
No. It keeps the first landing URL in the visitor's own browser and sends it with the form. No cookie, no identifier, nothing sent before they submit.
QWhat if the site is not on a licence?
The form renders but the submission is refused with a message that says so; nothing is dropped silently. Any domain on a licence or trial delivers.
QHow is the lead delivered?
Email to the licence holder, a POST to the webhook set on the dashboard, and a row on the dashboard under the domain. Each lead also adds one to that day's outcome series on the domain's record.