Know every lead your website produced, even on the day your tracking breaks.
Each form submission is written to a lead sheet on the server and emailed to your team before the visitor reaches the thank-you page. The Leads view lists that sheet newest first, and where your forms feed it, a watch at 7:20am Eastern checks it every day against what Google Ads and GA4 counted.
Which leads did my website actually produce?
Every one your forms received, in the order they arrived. When someone submits a form on your site, the handler emails your team and appends a row to a lead sheet on the server, then sends the visitor on to the thank-you page where Google's conversion tag fires. The row exists before the tag does. Google Ads conversions and GA4 events are measurement layered on top; the sheet is the record of whether a form was submitted, and it keeps filling on a day when every tag on the site is dead.
Open the Leads view and the sheet is on the screen, newest first, with a Live badge in the corner. Each row shows when it arrived, the name, a phone or email, the project and the town, and your instance can rename those two columns to match what your forms ask, an interest and a company, say. Click a row and it opens with the phone, email, project, address, town, the page the form was on and the full message. Type in the search box to narrow the table by name, phone, email or message; the dropdowns beside it list only the projects and towns actually present. Press Export and the table leaves as a CSV.
The email carries the person's own address as the reply-to, so a reply from your inbox goes straight back to them. If the mail API fails, the handler falls back to the server's own mail so the lead is not lost silently. A hidden honeypot field turns bots away before anything is written, and our own test submissions are filtered out before you see the list. When nothing has arrived yet, the view says so. When it cannot reach the sheet, it tells you the leads are still arriving by email.

Will I know when Google stops counting my leads?
Yes, the next morning. On one account we manage, a tag change silently stopped every conversion from firing for six weeks. Twenty-one real leads landed in the sheet while Google Ads reported zero. The owner read the report, concluded the site produced nothing, paused the campaign that carried every counted lead and cut its budget 90 percent. A reporting bug cost the business its best channel. The only number that stayed right was the sheet.
So where your forms feed the sheet, a job runs every morning at 7:20 Eastern and compares the trailing seven days of ground truth with what the measurement layer counted. Five checks, each named. Loader: Google's tag still serves, and the live pages still carry it and the conversion label. Blind: leads in the sheet, zero GA4 form events. Ads blind: leads from a paid click in the sheet, zero Ads conversions. Stalled: a campaign that had spent at least $50 has sat at zero for four days running. Silent: no leads at all in seven days while Search Console shows more than 20 organic clicks.
A finding reaches the team the morning the run makes it, with the three counts side by side: what the sheet holds, what GA4 says, what Ads says. A stalled campaign is reported with who paused it and when, read from your account's change history, or with a plain statement that the pause predates the 30 days of history Google keeps. An unchanged condition is repeated at most once a week, so a known pause neither shouts daily nor goes quiet. The watch only reads. A person decides what to do with the finding, and a person makes any change to a budget or a bid.
Can I record what happened to each lead?
Yes, from the row itself. With outcomes switched on for your instance, every lead carries a status chosen from a dropdown on the row: New, Contacted, Quoted, Won or Lost. A lead that is not a lead takes a reason instead: existing customer, spam or sales pitch, wrong number, out of area, or other, with an optional note on who it was and what they wanted. The mark is written to the lead's own record and it is yours: whatever your team sets stands until your team clears it.
The screen keeps score without editorialising. A lead that has sat two days with no status wears a badge that reads no contact marked yet, with its age in days, and the counter above the table adds how many are not yet marked contacted and how many are marked not a lead. Both numbers come from your own record. Nothing is assumed about a lead nobody touched: it stays counted as a lead and stays marked New.
Each mark reaches our team as it is saved, with the name, the date and the reason. A not-a-lead flag is a work item: where Google charged for that lead, it is a refund candidate, and the flags are the queue we file disputes from. Won and lost, set from the screen, let you read your lead count against jobs actually won, from your own record rather than our estimate.

Which channel sent this lead?
The one the row says, captured at the moment of submission. The handler writes the page the form was on, the landing page, the referrer and any click identifier in the URL to the same row as the name and the message. A gclid on the row marks a paid click; that is how the 7:20 watch knows a lead came from Google Ads without asking Google. None of it depends on a cookie surviving or a tag firing, because it is written on the server from the submission itself.
A phone lead counts only when your CRM records it. No call-tracking system exists here. A field the submission did not carry stays empty on the row; nothing is inferred to fill it.
On a dashboard with a Leads feed, the Analytics view puts lead actions first: the default tile, the chart and the first table are the GA4 lead events, and traffic is the supporting cast. The two counts sit on the same dashboard on purpose. GA4 lags hours intraday, so its view excludes today; the Leads view is live. When they disagree, the sheet is the one that cannot be wrong about whether a form was submitted.

Does it work with my CRM?
Today the CRM we connect is GoHighLevel: your own sub-account, read for pipeline stages and sources. Where your website form also feeds your CRM or booking platform, the same submission lands there too, and the pipeline funnel on the Overview reads its stages, so a lead that becomes an estimate and then a job is visible moving through stages while its origin stays on this page.
The Jobs view appears only once your CRM or booking platform is connected, and it shows a coming-soon card rather than a number until its data is trustworthy. Nothing on this page reads your email inbox or your calendar, and nothing on the dashboard writes to your CRM: an outcome you set is written to the lead record here, and a change you request from the screen goes to the team and is logged.

How do I connect it, and what should I check in the demo?
Grant access, never a password. Our team connects your forms, your CRM and your booking platform from the inside, with access you grant during setup, and every Google connection is a manager invitation you can revoke from your own console. There is no wizard and no sign-in button on our site. Access is granted in week one of setup and the first pull and baselines land in week two. Setup takes two to four weeks and is not billed. The Leads view is included on all tiers.
Open demo.trulata.com and click Leads. It is the same engine code every client runs, on a fictional company, and every number is illustrative. Check four things. Type a name into the search box and watch the table narrow as you type. Pick an entry from a dropdown and confirm it lists only what is present. Click a row and confirm it opens with the contact details, the page the form was on and the full message. Press Export and confirm the table leaves as a CSV.
Then ask about what the demo cannot show. The outcome column is switched on per instance and is not in the demo. Ask which of your numbers are live and which lag: website leads, your CRM, Stripe, your booking platform and email statistics are live; Google Ads and GA4 lag hours; Search Console runs two to three days behind. Ask what the 7:20 watch raises, and ask to read one alert.
What the Leads view reads.
| What | Where it comes from | How fresh |
|---|---|---|
| Lead rows | Your website's form handler, appended to a lead sheet on the server | Live, the moment a form is submitted |
| Page, landing page, referrer, click id | Written to the same row at submission | Live |
| Outcome and not-a-lead flags | Set from the row, written to the lead record | Live, and the team is notified |
| Ads conversions and GA4 events | Google APIs, for comparison only | Hours behind, set by Google |
| Divergence watch | Lead sheet vs Ads vs GA4, trailing seven days | Daily at 7:20am Eastern, where forms feed the sheet |
| Pipeline stages | Your CRM or booking platform | Live |
There is no call-tracking system, no reading of your inbox or calendar, and no lead counted that your forms or your CRM did not record.
Questions, answered.
What counts as a lead?
A form submission on your website, written to the lead sheet on the server as it arrives, plus any lead your CRM records. Nothing else is counted. A row your team marks not a lead is dimmed and counted separately.
Why would my leads and Google Ads disagree?
Because a tag broke, was merged or stopped loading after a site change, and Ads then reports zero while real leads keep landing. That happened on an account we manage: 21 leads in six weeks against a reported zero, and the owner cut the campaign that carried every counted lead. The 7:20am watch exists so it is found the next morning.
Can I mark a lead as won?
Yes. With outcomes switched on for your instance, each row carries a dropdown with Contacted, Quoted, Won, Lost and Not a lead. The mark is written to the lead record, reaches our team as it is saved, and stands until your team changes it.
Do you track phone calls?
No. A phone lead is counted only if your CRM records it. No call-tracking system exists.
Does the lead list work if my site's tracking is broken?
Yes. The row is written by the form handler on the server, not by a browser tag, so it keeps counting on the day every tag on the site is dead. The daily watch then reports the broken tag, with leads in the sheet against zero GA4 events as the evidence.
Which CRM do you connect?
GoHighLevel today, read from your own sub-account for pipeline stages and sources. Jobs come from your CRM or booking platform where the business runs on it, and the Jobs view appears only once that is connected.
How fresh is the Leads view?
Live. It reads the sheet when you open it, and each lead was also emailed to your team as it arrived. Ads and GA4 on the same dashboard lag hours; the watch compares them with the sheet once a day at 7:20am Eastern.
See it running
before you decide.
The demo is the real product on a fictional company, with no form in front of it. Pricing is three published tiers. Setup on your own accounts takes two to four weeks.
Open the live demo See pricing
New here? See what the Command Center is. Prefer to write? Send us the one thing you want to know.
- Refreshed when you open itLive data on page load, never a monthly PDF
- Counted from your own formsLeads recorded server-side, compared daily with Ads and GA4
- Four answer engines, measuredChatGPT, Gemini, Claude and Grok, with a published denominator
- A review-first queue on every sendEvery draft waits in a review-first queue and every send is logged.