Learn / Lead lists

How to identify anonymous website visitors and turn them into booked calls

Over 3,000 sales calls booked in the past twelve months, and the cheapest source in the whole stack was not a lead list. It was the people already on our website. They found us, read something, and left without filling anything in. Learning to identify anonymous website visitors turns that traffic into the warmest outbound list you own.

This page is the written version of the training below: the pixel that names your visitors, the webhook that drops them into Clay, the qualification chain that stops you emailing people you cannot help, the enrichment that finds the address, and the message to send. Watch it, or just build from the steps.

Why your own traffic beats a bought list

The best results never come from doubling down on one channel. They come from stacking, and site traffic is the most overlooked source in the stack. Someone who landed on your pricing page has already checked you out, which makes them far more likely to answer than a random name pulled off a filter.

A following, ad spend, and an open job listing are all guesses about a buying window, which is what intent-signal targeting is built on. A visit is not a guess. It is a person standing in your shop.

Step 1: name the visitor

Start with a free account on Vector. They will push you toward the paid plan, and you can ignore all of it. The build only needs the three steps on the main dashboard.

  1. Add the pixel to your site. They hand you the snippet. On Framer it goes in the custom code section under the head tag, and every other platform has the same slot under a different name.
  2. Publish the site. Nothing resolves until the pixel is live.
  3. Connect Slack. Authorize it, then pick the channel you own.

Notifications start arriving in real time: first name, LinkedIn profile, company name, job title, the page they visited, and their location. That is where most people stop, which is why most people never get a call out of it. A Slack alert is a notification, not a system.

Step 2: webhook the visits into Clay

To act on it, the data has to sit in a table where conditions can run against it. That is a webhook, the only technical part of the build.

In Clay, open a blank table and go to actions, import, webhook. Add a webhook source and it gives you an endpoint URL. In Vector, go to integrations, then settings, then add an endpoint, and paste that URL in. Choose which fields get pushed and rows start landing.

Pull the page URL, the name, the job title, the company name, and the LinkedIn profile. LinkedIn matters most, because it is what the enrichment keys off later. If you have never built a table like this, the column order in the Clay cold email workflow is the same shape, fed by a list instead of a pixel.

Step 3: qualify before you spend a credit

This is the step people skip and it is the MOST important one in the build. Not every visitor is a qualified lead, and some of them you genuinely cannot help. Spending money on those people is the worst thing you can do here.

So instead of emailing everybody, every row runs through a chain of checks. The one doing the heavy lifting for us is B2B versus B2C, written as a short prompt with Clay's AI, because we can only service B2B.

The actual trick is that every other check is conditional on that first one. In Clay, each column gets an "only run if" condition, and ours reads customer type contains B2B, so a company marked as both still passes. A B2C company never reaches the industry lookup, never reaches enrichment, and never burns a credit.

CheckWhat it asksWhat happens when it fails
LocationIs the company based in the market you sell toStops the row before anything else runs
Customer typeB2B, B2C, or bothB2C ends the chain immediately
IndustryWhat the company actually doesNot a cut, it routes the message
Who they sell toThe market this company targetsSome markets are far easier to reach
SeniorityExecutive or decision makerUsually stops here, occasionally worth an exception

Your list of checks will look different. The structure should not: one cheap disqualifying question first, everything expensive hanging off it.

Step 4: find the address

Only the rows that survive qualification get enriched, and they get enriched twice. Lead Magic runs on the front end, Try Kit on the back end for everything the first pass missed. Plenty come back not found on the first tool, which is the entire reason for the second. What lands in the table is the email, the domain, the full name, and the email service provider on the other side.

The chain, in numbers
3,000+
Sales calls booked in the 12 months behind this training
5
Conditional checks a visitor clears before enrichment runs
2
Enrichment tools stacked to find one email address

The pixel finds them. The qualification decides whether they are worth an email.

Step 5: the message, and the mistake in it

These are not typical cold leads. They are people actively looking for a solution to the problem you fix. Send them the same email you would send a stranger off a scraped list and you waste that.

Here is where intent-based outbound goes wrong: taking the intent too far. Somebody writes "hey, noticed you were visiting my website" and then pitches. It reads like surveillance, and it is the same instinct behind every fake personalization line in your inbox. The fix is the one I use in every script. Open with a question you already know the answer to.

{{first_name}}, curious if you've been looking into outbound systems lately. If so, I have a tool you can run to compare the ROI against a few other revenue-generating alternatives, happy to send it over.

You know the answer is yes. They were on the page. The line reads as a guess and lands as a fact, and nobody feels followed.

Then the second half: a bottom-of-funnel offer, not a discovery call. Something that helps them decide, because deciding is exactly what they were doing when they hit your site. Ours is an ROI calculator comparing what cold outreach costs against what ads cost for the same pipeline. One or two things held them back, or they got distracted. The email is a way to be useful and get back to top of mind. What you do after they answer is the follow-up system, and it matters more than this email does.

Automating the push, and why we only half do it

To run it hands off, write the copy into a Clay column with variables for first name and signature, then push qualified rows into a campaign in whatever you send with, Instantly, Smart Lead, or EmailBison. The trigger is the criteria you already built: B2B, industry fits, buyer profile fits, email found. We do a lot of this manually because we want more control over who gets the message, but it is a solid asset either way.

Where this falls apart

It only works if people are already coming to your site. On a trickle of traffic you get a trickle of rows, most of them fail qualification, and you have built a very elaborate way to email a handful of people. Traffic first, then this.

Same honest caveat that applies to intent targeting generally: it starves when the market is too small to hit volume. I would rather you know that before you install anything.

tl;dr: pixel the site, webhook the visitors into Clay, kill the unqualified rows before enrichment ever runs, and open with a question you already know the answer to instead of telling them you saw them browsing.

FAQ

How do you identify anonymous website visitors?

You put a tracking pixel in your site's head tag, and a visitor identification tool matches the visit to a person and a company. What comes back is a first name, a LinkedIn profile, a company name, a job title, the page they landed on, and their location. On its own that is a notification, not a lead.

Is website visitor identification legal?

It depends on where your visitors are, what your provider actually resolves, and what your privacy policy says. Rules differ between the US, the UK, and the EU, and they keep moving. Read your provider's compliance documentation before you install the pixel, keep your privacy policy current, and run it past your own counsel.

How much of my website traffic can actually be identified?

Never all of it. Identification resolves a share of your traffic, and that share depends on the provider and on the mix of company networks versus personal devices. Treat it as one more source stacked on top of your outbound, not as a replacement for a lead list.

Do I need Clay to turn site visitors into leads?

You need somewhere the visit data lands and the conditions run. A Slack notification tells you someone showed up. It cannot check whether they are B2B, find their email, or write the message. Clay does the qualification, the conditional logic, and the enrichment in one table, which is why the webhook points there.

What should the first email to a website visitor say?

Open with a question you already know the answer to, such as whether they have been looking into outbound systems lately. You know they have, because they were on the page. Then hand them something that helps them decide, like an ROI calculator. Do not tell them you watched them browse your site.

Should I email every visitor the pixel identifies?

No. Most of the people who land on your site are not buyers you can help, and emailing them costs enrichment credits, sending reputation, and time. Run every identified visitor through a short qualification chain first, and let a failed check stop the row before a single credit gets spent on it.

If you would rather have the whole machine built for you (offer, lists, copy, infrastructure, and a setter working the replies), that is what we do. Or keep learning free: every training, grouped by topic, sits on the trainings hub, and the full video for this one is on YouTube.

PS - the reason this one feels like cheating is that you already paid for the traffic. Everything above is just refusing to let it leave without a name.