CrawlCheck

Findings · 2026-09-02 · By

A tree-service lead arrived with utm_source=chatgpt.com. Here is what that does and does not prove.

A quote request on a Denver tree-service site carried the tag ChatGPT appends to links it hands out. One lead is not a rate, but it is the first outcome point on a record that had only measured inputs until today.

At 15:32 Mountain time on 2 September 2026 a quote form on treeservicedenverllc.com, the Denver tree-service site whose report is this scanner's public demo, recorded a request for tree trimming and removal from a Denver zip code. The form's submission-source field, which stores the URL the visitor was on, read https://treeservicedenverllc.com/?utm_source=chatgpt.com.

The person is not named here and nothing about them is stored by this scanner. What is recorded is the event: a lead, dated, with the source tag it arrived with, on a domain whose machine layer has been measured twice a day for the last three weeks. That record is the only reason this post can be written with any precision at all.

Where the tag comes from

ChatGPT appends utm_source=chatgpt.com to the links it places in answers. It is not something the site owner adds and not something a crawler leaves behind; it is written into the destination URL by the assistant at the moment it hands a user a link. When the user follows it, the tag rides along in the address bar and into any form that captures the current page URL.

That matters because the usual attribution is gone by then. Ninety-three percent of arrivals on this site send no referrer, and an answer engine's app is exactly the kind of origin that strips it. A query-string tag survives where a Referer header does not. It is the one piece of evidence the engine chooses to leave, and it is the reason this lead can be attributed and the previous ones could not.

What the record shows for the week before

The site's report is public and regenerates when opened. On the day of the lead it graded A at 97 of 100, with one finding open and every quotable-content row passing: a lead sentence that defines the business, a phone, an address and a service area an engine can repeat with attribution. The verified crawler traffic for the seven days ending 1 September, read from the zone's own edge logs rather than from a script on the page, was 1,090 requests from AI crawlers, 422 from AI search agents and 50 from AI assistants fetching on a user's behalf, with ClaudeBot the single largest AI crawler at 387.

None of those numbers is an outcome. They are inputs: the site could be reached, could be read, and had been read. The lead is the first outcome the record holds, and it has been entered as one point in the site's outcome series, dated, with its source tag, so that it sits beside the change dates rather than in a screenshot.

What it proves

That an answer engine reached this site, read enough of it to recommend it for a specific local service, and that a user acted on the recommendation. That the machine layer was in a state an engine could use on the day it was used. That the attribution path (engine tag to landing URL to form field) works end to end without any analytics script, which this site does not run.

What it does not prove

It does not prove a rate. One lead in one afternoon is one lead; the record will say what the rate is after it has held enough of them, and until then any figure would be invented. It does not prove which fix caused it: the site's findings were closed over several weeks and the engine does not say which page or which fact it used. It does not prove that ChatGPT is the largest source of leads for this business, only that it is now a measurable one.

The honest statement is narrower than the exciting one, and it is the one that will still be true in a month: a site with a clean, measured machine layer received a lead that an answer engine tagged as its own. That is the kind of sentence this scanner exists to make possible, and the kind a rank tracker cannot produce.

If you want the same evidence on your site

Three things, in order. Capture the landing URL in your quote form; most form builders store it, and it is where the tag lands. Keep the site's machine layer in a state an engine can use, and measure it rather than assume it: the free scan is the measurement. Record the outcome next to the record: a licence lets you post leads, calls or sales to the domain's outcome series through the API, so the day a lead arrives is written beside the day something changed.

Every figure above came out of this scanner.

Point it at your own domain and see the same measurements, free.

Scan a domain — free

Questions this post answers

What is utm_source=chatgpt.com?

A query-string tag ChatGPT appends to links it places in its answers. It is added by the assistant, not the site, and survives into the landing URL where a Referer header usually does not.

Does one lead mean the site ranks in ChatGPT?

No. It means an answer engine recommended the site once for a specific local request and a user acted on it. A rate needs more points; the record is set up to hold them.

Which fix produced the lead?

The engine does not say, and the post does not guess. The site's findings were closed over several weeks; the lead is recorded as an outcome beside those change dates so the relationship can be read later, not asserted now.

Was the visitor tracked?

No. The site runs no analytics script; the form stored the page URL it was submitted from, which carried the tag. The person is not named and nothing about them is held by this scanner.

Related findings

All findings · The dataset · How the dataset works