> ## Documentation Index
> Fetch the complete documentation index at: https://docs.guhan.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# The prospect pipeline

> From "Guhan searched LinkedIn" to "prospect in your List" — what happens.

When your Watchlist Agent runs, each candidate goes through a **pipeline** of checks before landing in your List. Understanding this pipeline helps you debug when things don't match your expectations.

## The 5 stages

<Steps>
  <Step title="Search">
    Guhan queries LinkedIn (or a signal-specific data source) for people matching your ICP + signal. May return 5-500 candidates per run.
  </Step>

  <Step title="Enrich">
    For each candidate, Guhan reads their full LinkedIn profile — current company, headline, recent activity. This is the raw material for scoring + message-writing.
  </Step>

  <Step title="Score">
    Apply your must-match filters (title, location) + weighted filters (industry, headcount, signal). Anything below threshold is rejected here.
  </Step>

  <Step title="Deduplicate">
    Check whether this prospect already exists in your workspace (from a prior sweep or a different Watchlist Agent). If yes, skip — no double-messaging.
  </Step>

  <Step title="Land">
    Add the prospect to your List. From here, your Outreach Agent picks them up.
  </Step>
</Steps>

## Where prospects get filtered out

Not every candidate lands. Each stage can reject:

* **Search** — LinkedIn returns nobody / search quota exhausted for the day
* **Enrich** — LinkedIn profile is private, blocked, or a company page (not a person)
* **Score** — filters didn't match (wrong title, wrong location, wrong industry, etc.)
* **Deduplicate** — already in your workspace from a prior sweep
* **Channel check** — no reachable identity (no LinkedIn URL AND no email AND no phone)

The Watchlist Agent detail page shows every rejection with a reason under the **Filtered** accordion.

## What "landed" means

A prospect that **lands** has:

* ✓ Passed all must-match filters
* ✓ Been enriched with LinkedIn data
* ✓ Been added to your target List
* ✓ Cost you 1 credit (that's what "landed" means for billing)

From there, your Outreach Agent may or may not enroll them into a sequence — depends on whether there's an active Outreach Agent bound to that List.

## Sender enforcement

Guhan used to reject prospects at Stage 5 if you had no matching sender account connected. That check moved to **send time** — a prospect lands regardless, and the send-time gate catches any missing sender + tells you what to connect.

Meaning: you can start finding prospects before you've connected all your sender accounts. Guhan will build up a List of qualified prospects and start messaging as soon as senders are wired.

## Debugging: why didn't X land?

Common cases:

<AccordionGroup>
  <Accordion title="Prospect shows in Filtered, reason: 'wrong location'">
    Your location filter didn't match their LinkedIn location. Check if the person's LinkedIn city is spelled differently or if they're in a different country than you targeted.
  </Accordion>

  <Accordion title="Prospect shows in Filtered, reason: 'already in workspace'">
    You already found this person via a prior sweep. Guhan won't add duplicates — they exist elsewhere in your workspace. Search the Prospects page to find them.
  </Accordion>

  <Accordion title="Prospect shows in Filtered, reason: 'rejected_company_profile'">
    LinkedIn returned a Page or Company ID instead of a real person. This happens when engagement signals pick up company-branded reactions. Auto-handled.
  </Accordion>

  <Accordion title="Prospect shows in Filtered, reason: 'no reachable identity'">
    Guhan couldn't find any way to reach this person — no LinkedIn URL, no email, no phone. Typically happens with private profiles or profiles blocked in your region.
  </Accordion>

  <Accordion title="Zero prospects found">
    Your filters are too tight. Loosen a signal, expand the location, or add more title variants. Check the Watchlist Agent detail page — the "Today's sweep" strip shows what searched.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="ICP scoring" icon="chart-simple" href="/agents/watchlist-agents/icp-scoring">
    How the score gets calculated + how to loosen or tighten it.
  </Card>

  <Card title="Signals" icon="bolt" href="/agents/watchlist-agents/signals">
    The triggers that drive the search stage.
  </Card>
</CardGroup>
