Your chatbot records where each visitor came from before they opened the chat, then reports it in the Traffic sources table at the bottom of the Insights page. This article explains how a source is worked out, what each column and each special row means, and how the source travels with a lead to your own systems.
What a traffic source is
A traffic source is the answer to “how did this person reach the page where my chatbot lives?”. Your chatbot works it out from two signals that the browser makes available when the widget loads.
The first signal is the referrer. When someone clicks a link on another website and lands on yours, the browser tells your page which site the link came from. Your chatbot keeps the website address of that site, for example google.com or facebook.com, and uses it as the source name.
The second signal is UTM parameters, which take priority over the referrer. UTM parameters are extra pieces of text you add to the end of a link so that you can label the campaign that link belongs to. A link such as https://yoursite.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale carries three of them. Your chatbot reads utm_source, utm_medium, and utm_campaign, and the value of utm_source becomes the source name for that visitor. UTM parameters matter because a paid ad, an email, and a social post can all send people to the same page, and only the label you put in the link tells them apart.
Where to find the Traffic sources table
Open your chatbot in the NoForm AI dashboard, click ‘Insights’ in the left sidebar, and scroll to the bottom of the page. The section is titled ‘Traffic sources’ and sits below the ‘Countries’ section.
The table covers the date range chosen in the picker at the top of the Insights page, so changing the range changes every row. For how the date range picker works and how the conversion ratios are calculated, see “Understanding Your Dashboard Analytics”.
Before your first conversation, the table shows “No data to show” with the line “This table will be updated once the first chat is initiated” beneath it.
The columns in the table
On a computer the table has five columns. On a phone it narrows to Source and Leads.
Column | What it shows |
Source | The name of the source, such as |
Visitors | People from that source who loaded a page carrying your chatbot during the selected range. |
Chats | Conversations from that source that started during the selected range. |
Leads | Conversations from that source that became leads during the selected range. |
Visitor to Lead | Leads from that source divided by visitors from that source, shown as a percentage with two decimals. |
The table sorts rows by Leads, highest first. Every column heading is a sort button, so click a heading to sort by that column and click again to flip between ascending and descending.
An information icon sits next to the ‘Source’ heading. Hovering over it explains the three special rows in the same words used in this article.
How your chatbot picks the source name
Your chatbot checks the following in order and stops at the first match.
The visit happened on this chatbot’s Share page or in one of the previews inside the dashboard, so the source is recorded as
Test Chat.The link carried a
utm_sourcevalue, so that value becomes the source. Values are lowercased first, which meansNewsletterandnewsletterland in the same row.A referring website was reported and its address differs from the address of the page the visitor landed on, so that website becomes the source. The leading
www.is removed and the name is lowercased, sowww.Google.comis recorded asgoogle.com.Nothing above applied but the widget did report source data, so the source is recorded as
Direct.No source data reached NoForm AI at all, so the row is grouped under
Unknown.
Direct, Unknown, and Test Chat appear in gray in the table so that you do not read them as real websites.
What Direct, Unknown, and Test Chat mean
Direct means no referring website was captured. That covers people who typed your address, used a bookmark, or arrived from a browser or app that hides the referrer. Links inside your own site also land here, because a referrer that matches the address of the landing page is treated as no referrer. Treat Direct as an over-count rather than a precise measure of people who came to you unprompted.
Unknown covers visits recorded before source tracking existed and installations that do not send source data. Older conversations in your history stay in this row for good, so expect it to shrink as newer traffic builds up.
Test Chat covers chats on your chatbot’s Share page and the previews you use inside the dashboard while setting the assistant up. Your own testing therefore lands in its own row instead of inflating a real source.
When a visitor’s source is recorded
Your chatbot records the source once, when a person first loads a page carrying the widget. It reads the referrer and any UTM parameters from that page at the moment the chat widget starts.
That first value stays with the visitor. When the same person comes back later, or moves to another page on your site, the chatbot adds the new page to their visit history and leaves the source as it was. This is first-touch attribution: the row credits the source that brought someone to you first, not the last route they took.
Two consequences follow. A returning visitor who arrives through a new campaign still counts under the original source. And a person who reaches your site through a search engine and only opens the chat three pages later still counts under that search engine.
How the source reaches your leads
When a conversation starts, the chatbot copies the visitor’s source onto that conversation, and the value stays fixed for the life of the lead. Conversations that started before source tracking, or where no source was captured, carry no source and count under Unknown.
If you have set a webhook for your chatbot, every lead delivered to your endpoint includes a source field alongside chatId, botId, originUrl, channel, the location fields, the chat summary, and the collected attributes. The value is the source name shown in the table, such as google.com or newsletter, or null when no source was captured. Send that field into your CRM to see which campaigns produce revenue rather than only which produce conversations. For the full setup and the rest of the payload, see “Webhook Integration: Push New Leads to Your Own Systems”.
To set this up, open your organization settings from the button at the bottom of the left sidebar, select the ‘Integrations’ tab, and fill in the ‘Webhook URL’ field on the Webhook card. The ‘Send test event’ button posts a sample lead to your endpoint so you can confirm the payload shape, including the source field, before real leads arrive.
If you connect Google Analytics 4, the same source value reaches your GA4 property as the lead_source parameter on the lead event. See “Connecting Google Analytics 4 to Your Chatbot” for setup steps.
Known limits worth planning around
The table lists up to 100 sources, ranked by leads, and has no pages to click through. The long tail of one-off referrers falls outside that list, and those sources have close to zero leads.
Visitor counts and conversation counts are gathered separately and then matched by source name, so a source can appear with chats but no visitors, or with visitors but no chats. The missing columns read 0 in that case, and Visitor to Lead reads 0.00% whenever the source has no recorded visitors.
The table groups by utm_source only. Your chatbot reads utm_medium and utm_campaign from the link as well, but they do not become separate rows or columns. If you need campaign-level detail in the table, put the distinguishing label in utm_source.
On a site built as a single-page application, where moving between views does not reload the page, the widget keeps the referrer and UTM values from the load that started the session. Attribution stays tied to the entry page, which is the intended first-touch behavior, and later in-app navigation does not change it.
The source is not shown on the details panel of an individual lead, and there is no Source column on the Chats and Leads lists. Within your NoForm AI dashboard, the Traffic sources table and the lead webhook are the two places the value appears; if you connect Google Analytics 4, it also reaches your GA4 property as the lead_source parameter.
Frequently Asked Questions
Why is my Direct row so large?
Direct collects every visit where no referring website was captured, which includes typed addresses, bookmarks, links inside your own site, and browsers or apps that hide the referrer. Tagging your outbound links with utm_source moves that traffic into named rows and shrinks Direct.
Do I need to install anything to start tracking sources?
You do not need to install anything extra. The chat widget you already have on your site captures the referrer and UTM parameters when it loads, and the Traffic sources table fills in as new visits arrive.
Why does my own testing not show up as a real source?
Chats started from your chatbot’s Share page or from a preview inside the dashboard are recorded as Test Chat, which keeps your own trials out of the rows for real websites and campaigns.
Will old conversations get a source now that tracking exists?
Conversations recorded before source tracking cannot be given a source after the fact, so they stay in the Unknown row. Only traffic that arrives from now on carries a source.
Which UTM parameters does the chatbot read?
The chatbot reads utm_source, utm_medium, and utm_campaign from the link. The value of utm_source becomes the source name in the table.
Benefits
You see which websites, ads, and campaigns bring visitors, and which of them bring leads, without adding a separate analytics tool.
The Visitor to Lead column shows the quality of each source, so you can spot high-traffic sources that convert poorly and small sources that convert well.
Tagging your own links with
utm_sourcegives every campaign its own row, down to a single email or ad.The
sourcefield in the lead webhook carries attribution into your CRM, so your sales records show where each lead came from.Your own testing is separated into the
Test Chatrow and never mixes with real traffic.



