Visitor Miner - the journey, A to Z

One identified website visitor → a reviewed lead in the right Instantly campaign.

● Review mode (DRY_RUN) - everything below runs, nothing sends yet
continue / staged set aside (logged, no outreach) skip (already handled) decision gate
A

Visitor is identified

A real person browses any page. RB2B de-anonymizes them and sends a record.

Personname · title · LinkedIn
Companyname · domain · industry
Emailbusiness email (sometimes blank)
Intentthe pages they viewed · location · time
B

Receiver: authenticate + buffer

Check the secret token, normalize the record, drop it in a holding queue, reply instantly.

⊘ wrong token → ignored (401)✓ valid → queued
C · D

Every 30 min: batch + collapse repeats

Pick up new visitors, and fold one person's many pageviews into a single lead (pages merged).

E

Already in one of our campaigns?

Check memory. Once someone is in the flow they're never re-added, even months later.

↩ already handled → skip forever✓ new → continue
F

Is this a real business?

⊘ personal / no company → set aside✓ business domain → continue
G

Get a reachable email

No email on record → Hunter finds it. Email List Verify confirms it's deliverable.

⊘ invalid / none → set aside✓ deliverable → continue
H

Do we already know them?

Cross-check Instantly and HubSpot so nobody gets a duplicate cold intro.

⊘ in Instantly → skip⊘ in HubSpot → skip✓ unknown → continue
I

Research the company

Firecrawl scans their homepage · Exa pulls live web context.

J

Classify + write the opener

Claude Sonnet 5 reads the person, company, research, and the pages they browsed, then returns a bucket, a confidence score, and one personalized opening line.

K

The fork - where does the lead go?

⊘ not a fit / competitor / low confidence → set aside
ICP sales · slot A
CAMP_ICP_A
→ David
ICP sales · slot B
CAMP_ICP_B
→ Julia
Partner
CAMP_IPP
→ David

ICP leads alternate evenly between David and Julia, but sticky by company so everyone from the same account reaches the same rep. Partners always go to David.

L · M

Stage, remember, recap

Add the lead to its Instantly campaign with the angle + pages as custom fields, remember the person, log the outcome, and send a one-line Telegram recap.

In review mode: we log the exact campaign it would enter but don't push it. Flip the switch and it stages for real.

Every place a visitor can end up

Skipped - handled in the last 24h
Set aside - personal / no company
Set aside - no deliverable email
Duplicate - already in Instantly
Duplicate - already in HubSpot
Set aside - not a fit / low confidence
Staged - ICP sales → David
Staged - ICP sales → Julia
Staged - Partner → David

Design decisions: locked

  1. Same company, several visitors → pitch each person, but route them all to the same rep (company-sticky lanes).
  2. A current customer / open deal revisits → silently skip as a duplicate.
  3. Re-pitch → never; once someone is in a campaign they're suppressed permanently.
  4. Hot pages → keep it simple; pages personalize the opener, no separate alert.