An SDR at a company I was talking to last month sent this email:
Hi Morgan, I noticed you visited our pricing page twice this week and spent 4 minutes on the Enterprise plan. I also saw you came back yesterday at 2:47pm. Do you want to hop on a call?
Morgan replied. She asked how the SDR knew.
The SDR explained that the company used visitor identification software. Morgan unsubscribed from the mailing list, posted a screenshot on LinkedIn, and booked a demo with a competitor instead.
This is the creepy email problem. The data that visitor identification makes available to you is incredibly rich. 100+ data points per person, every page they viewed, exactly how long they spent, their return-visit count. You can see all of it. The question is how much of it you can reference in the email without putting the prospect on the defensive.
The answer is narrower than most reps assume.
The rule, in one sentence
Reference what is public (role, company, industry, general category interest). Never reference what is private (specific URLs, timestamps, return-visit counts, visit duration).
If the prospect could have learned it from a rep’s LinkedIn search, it is fair game. If the prospect could only know you know it because you have their browsing session on record, you have crossed a line.
The do-and-don’t table
| Do reference | Don’t reference |
|---|---|
| Their role / title | The specific page URL they visited |
| Their company | The exact time of visit |
| Their industry context | How long they stayed on a page |
| General category interest (“teams in RevOps”) | Their return-visit count |
| Company events (funding, hiring, product launch) | Their session or scroll depth |
| LinkedIn-public facts | Anything that implies real-time tracking |
The reader’s instinct should be “this email is relevant to my job.” Not “this company can see me right now.” Same signal, different phrasing.
Why the creepy version backfires
Three reasons.
-
It feels like surveillance. Even if legally your visitor-ID vendor is CCPA compliant and your privacy policy covers it, the subjective experience is still “you were watching me.” Prospects do not parse the legal structure of data collection. They parse the feeling.
-
It signals desperation. A rep who opens with “I saw you visit our site three times” is saying “we are so hungry for pipeline we are going to perform for you how closely we were watching.” That is the opposite of the confident, helpful posture that converts.
-
It damages your brand on LinkedIn. Prospects screenshot creepy emails. The screenshots go viral in buyer communities. The damage to pipeline is larger than any short-term lift in reply rate on a single creepy message.
The companies running visitor identification well all share the same discipline: they know the data, they use it to prioritize, they reference it implicitly, they never reference it explicitly.
The playbook
Step 1: Understand what the prospect expects
The prospect is used to receiving warm outbound that starts with:
- “Saw your profile on LinkedIn”
- “Noticed [Company] recently announced [X]”
- “Your team posted about [topic] last week”
These are all references to public facts. The prospect accepts them because they know they put the information in public.
What the prospect is NOT used to is:
- “Saw you on our site”
- “You came back yesterday”
- “You spent 4 minutes on our pricing page”
None of those are on LinkedIn. None of them are public. The only way to know them is to be running tracking. The prospect’s instinct fires immediately.
Step 2: Translate private data into public-feeling framing
For every private data point, there is a public-feeling framing:
| Private signal | Public-feeling framing |
|---|---|
| Visited /pricing twice this week | ”If you are evaluating [category]“ |
| Spent 3 min on /compare page | ”Comparing vendors in [category]“ |
| Came back 3 times in 10 days | No mention of count. Reply urgency only. |
| Visited /integrations/salesforce | ”Teams integrating with Salesforce” |
| Hit /roi-calculator | ”Building the ROI case for [category]“ |
| Visited late at night | No mention of time. |
The translation is mechanical. You take the private signal, ask “what would this person say publicly about their own behavior,” and use that phrasing.
Step 3: Pressure-test the email against the “screenshot test”
Before sending any warm-outbound email, ask: if the recipient screenshots this and posts it on LinkedIn, will I be embarrassed?
If yes, rewrite.
If no, send.
This is the only consistent heuristic I have found for separating warm from creepy. It works because it externalizes the test. Reps do not have to guess whether a phrase is too much. They imagine the screenshot.
Four template snippets
Snippet 1: Category interest (good)
Hi Morgan,
Reaching out because I work with teams in [category] and noticed
that [Company Name] might be close to evaluating. If that is the
case, happy to share how three similar-sized teams are thinking
about it.
- [Rep]
Why this works: “noticed that [Company] might be close to evaluating” is a soft frame that could come from any category signal (press, Orbit, intent data, an anonymous tip). The prospect has no way to tell this email is triggered by their visit, because the phrasing does not require it to be.
Snippet 2: Role-specific (good)
Hi Morgan,
Heads of Growth at [Company Size] [Industry] companies usually
hit the same three walls when evaluating [category]:
1. [Wall #1]
2. [Wall #2]
3. [Wall #3]
If any of those resonate for [Company Name], happy to share how
our customers solved for them.
- [Rep]
Why this works: the entire message is about a cohort, not about the individual. The role and company are the only personal references. Both are on LinkedIn.
Snippet 3: Competitor comparison (good, use sparingly)
Hi Morgan,
I work with a handful of teams that moved from [Competitor] to
us over the past year. If [Company Name] is anywhere near that
comparison, two things usually drive the decision:
• [Concrete difference #1]
• [Concrete difference #2]
Happy to share a comparison built for your size and industry.
- [Rep]
Why this works: “anywhere near that comparison” is a permission frame. You are not asserting they are comparing. You are offering a resource if they happen to be. This template works especially well when triggered by a visit to a /vs/competitor page, because the prospect expects a relevant email after reading a vendor’s comparison.
Snippet 4: Direct but not creepy (good)
Hi Morgan,
Quick question. [Company Name] in a spot to evaluate [category]
this quarter, or is this a 2027 conversation?
Either way is fine - just want to know whether to send a one-pager
now or circle back in six months.
- [Rep]
Why this works: no reference to any visit data. Just a direct, time-boxed question. Works best for later touches in a sequence, once the soft-frame openers have not produced a response.
Snippets that cross the line
Bad snippet 1: Explicit page reference
Hi Morgan,
I saw you visited our pricing page. Would you like to schedule
a demo?
Why this fails: direct reference to the page. Direct implication of watching. The recipient knows you are tracking them.
Bad snippet 2: Timestamp reference
Hi Morgan,
Noticed you came back to our site yesterday around 3pm. What
questions can I help answer?
Why this fails: timestamp. Nothing else matters. “Yesterday around 3pm” is the creepy flag.
Bad snippet 3: Return-visit count
Hi Morgan,
This is your third visit to our pricing page this month. Seems
like you are close to making a decision. Can we jump on a call?
Why this fails: counting the visits. Quantified surveillance. Nothing kills a conversation faster.
Bad snippet 4: “Fake” openness that still references tracking
Hi Morgan,
I don't want to be creepy but our system flagged that you have
been active on our site. Can we chat?
Why this fails: acknowledging the tracking does not fix it. The lampshade makes it worse because it proves the writer knows the frame is invasive and sent it anyway.
Common failure modes
Reps assuming “referencing the page” is more personal. It is not more personal, it is more invasive. Specificity about private data is not personalization. Personalization is relevance to their job.
Auto-populated fields that leak the private signal. A template with {{last_page_visited}} or {{visit_count}} is a sequence tool making the creepy call for the rep. Remove those fields from templates entirely.
Using visit data to pressure-test urgency. “Your pricing page visits suggest urgency” is a worse version of “are you evaluating this quarter.” Ask the direct question instead.
Referencing “our system” or “our tool.” The prospect does not want to know your system flagged them. They want to hear from a human who has something useful to say.
Forgetting that the rep is the safeguard. Automation can pre-fill the template. The rep is the one who decides whether to send. Train reps to catch creepy phrasings before they ship.
Over-correcting into vagueness. “Reaching out because reasons” is not warm, it is uninformative. The goal is relevance without surveillance. That still requires specificity about the prospect’s world (role, company, industry), just not their behavior on your site.
Assuming EU/UK rules are the same as US rules. For EU and UK prospects, even company-level visit data comes with additional care requirements. Leadpipe defaults to company-level for EU/UK visitors, and your outreach should address the company (not a named individual) unless you have consent. See GDPR-compliant visitor identification.
Measurement: how to know it is working
Three indicators:
- Unsubscribe / opt-out rate under 2%. If it’s above 3%, you are crossing the line somewhere. Audit the actual messages being sent.
- Negative replies (“stop,” “how did you get this,” “unsubscribe me”) under 1%. Any of these signals the framing is off.
- Positive reply rate 15 to 25% on warm-outbound sequences. Relevance is the floor. Creepy has a short-term bump but a long-term decay.
The leading indicator to watch is the language in negative replies. When a prospect says “how did you get this information,” your template has crossed a line. When a prospect says “this is not a priority right now,” the framing was fine.
The principle
Visitor identification gives you a lot of data. You do not have to use all of it in the message. Use it to prioritize (who gets the alert, who the rep reaches out to first). Use it to inform the copy (pick a template that matches their role / industry). Do not use it as the hook of the email.
The prospect should feel that your email is relevant. They should not feel that your email is the output of surveillance. Keep those two apart and reply rates go up, not down.
On US B2B traffic Leadpipe identifies 30-40%+ of visitors deterministically with full contact data. The independent accuracy test scored us at 8.7/10 against RB2B at 5.2 and Warmly at 4.0. The accuracy matters, but the discipline in how your team uses the data matters at least as much.
Leadpipe identifies 30-40%+ of your US B2B visitors with full contact data on the Pro plan at $147/mo. No credit card to start the 500-lead trial. Start identifying visitors →