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

# B2B Outbound Operator — ICP Discovery & Scoring at $1 per 1k Records

> How a founder-led B2B team discovers 14,000 companies, scores them, and narrows to 150 hand-picked outbound targets per sprint — on a single db/linkedin/search/companies endpoint.

## Overview

A founder-led B2B SaaS operator (under 10 employees, founded 2024) runs a boutique outbound program — high-quality, manually reviewed touches, \~150 per week — against a custom ICP framework. Instead of buying a sales-tech stack across firmographics, list-building, enrichment, and delivery, the team built a single pipeline on `db/linkedin/search/companies` plus four supporting endpoints.

The database-backed search replaces a multi-vendor stack with one structured payload and a mini-DSL for keyword matching. Output is raw rows the team scores on their side — no inherited vendor schema, no per-record fees on data discovery.

<CardGroup cols={3}>
  <Card title="14,000 companies" icon="building">
    Discovered in a single sprint from one query (\~2s wall-clock)
  </Card>

  <Card title="180 ready-to-send leads" icon="paper-plane">
    Hook + verified email + no role drift, per week
  </Card>

  <Card title="~$15–20 / sprint" icon="dollar-sign">
    Out-of-pocket LLM cost; discovery API calls free under MCP Unlimited
  </Card>
</CardGroup>

## The Challenge

Boutique B2B outbound demands a tight ICP: not "B2B tech" but a specific cross-section of company type, size, geography, funding stage, and product positioning. Off-the-shelf sales-tech stacks force a coarse ICP — industry codes, employee ranges, hard categories. To narrow further, teams stitch four to six vendors with overlapping pricing and partial coverage, then export and re-classify on their own side anyway.

The team needed:

* **Bulk discovery in one call** — pull 1,000–10,000 candidates per sprint, not 50-result pagination loops
* **Soft-signal search** — match phrases across `description`, `short_description`, `specialities`, `hashtags`, and `locations` simultaneously
* **Strict structured filters** — country (ISO2), employee range, founded year, active-status flags — applied at the database layer, not client-side
* **Sub-second iteration** — try ten different keyword sets in an hour, not three over a week
* **Schema ownership** — every row returned in full LinkedIn shape so the team writes its own scoring rubric

## The Solution

The `/db/linkedin/search/companies` endpoint exposes the database directly via a structured payload. Keywords get a mini-DSL (whitespace = AND, `|` = OR, `"phrase"` = exact phrase, `-token` = NOT). Filters are typed: `employee_count_min/max`, `founded_on_min/max`, `country_hq`, `country_any`, `is_active`, `has_description`, `min_description_length`, and more.

### 1. Cross-field keyword search via mini-DSL — 70% of calls

A single `keywords` field searches across `name`, `description`, `short_description`, `specialities`, `hashtags`, and `locations` simultaneously. For 27 ICP categories ranging from autonomous outbound agents to compliance research tools, the team builds one DSL string per sprint:

```json theme={null}
{
  "keywords": "\"AI SDR\"|\"AI BDR\"|\"autonomous outbound\"|\"AI sales agent\"|\"AI research agent\"|\"AI signal\"|\"AI inbound qualification\"|\"AI prospecting\"",
  "country_hq": ["US","GB","DE","NL","FR","CA","AU","IE","SG"],
  "employee_count_min": 11,
  "employee_count_max": 200,
  "is_active": true,
  "has_description": true,
  "min_description_length": 100,
  "count": 1000
}
```

This single call returns 1,000 ICP-candidate companies with full LinkedIn fields in \~2 seconds wall-clock.

### 2. Token-aware structured geo + size filters — 20% of calls

A common pitfall in coarse country filters is substring matching: the `US` token used to false-match against `Austria`, `Australia`, `Austin`, `Houston`. The `country_hq` and `country_any` params parse the ISO2 code directly out of `headquarter_location` and the `locations[]` array, eliminating that class of false positive.

```json theme={null}
{
  "industry_name": "fintech|payments",
  "country_hq": ["US","GB","DE"],
  "employee_count_min": 51,
  "founded_on_min": 2020,
  "page_verification_status": true,
  "count": 500
}
```

### 3. Per-field DSL for surgical narrowing — 10% of calls

When the cross-field `keywords` casts too wide a net, the team narrows by specific fields:

* `specialities: "data engineering|ML"` — match only in declared specialities, ignoring marketing-copy description
* `name: "ai|agent"` — match in company name (catches AI-native startup branding)
* `description: '"sales intelligence" -consultancy'` — boolean exclusion of consulting hits

## The Data Pipeline

Daily ICP refresh runs as a chained pipeline:

| Step | Action                                                                                     | Powered by                           |
| ---- | ------------------------------------------------------------------------------------------ | ------------------------------------ |
| 1    | Pull 1,000–10,000 ICP candidates by keyword DSL                                            | `db/linkedin/search/companies`       |
| 2    | Enrich with funding stage + total + growth score                                           | `crunchbase/company` (cached lookup) |
| 3    | Score each company against a 27-category ICP framework (HOT/WARM/MAYBE/EXCLUDE/COMPETITOR) | LLM with prompt-cached system prompt |
| 4    | Filter to HOT tier (top \~2-5% of pool)                                                    | `query_cache` on the cache\_key      |
| 5    | Find 5–15 senior decision-makers per company                                               | `linkedin/sn_search/users`           |
| 6    | Fetch last-90-day posts for buying-intent scoring                                          | `linkedin/user/posts`                |
| 7    | Find email via vanity-resolved profile URL                                                 | `linkedin/user/find_email_by_url`    |
| 8    | Generate personalized 24–30 word hook anchored to a real post or homepage                  | LLM (higher-tier model for quality)  |
| 9    | Export ready-to-send leads to CSV for the outreach platform                                | `export_data`                        |

End-to-end run time: \~1.5 hours for 14,000 companies. Cost out-of-pocket: \~\$15–20 in LLM calls. Discovery API calls: free under MCP Unlimited.

## Results & Scale

| Pipeline metric                                          | Value                                        |
| -------------------------------------------------------- | -------------------------------------------- |
| Companies discovered (single sprint)                     | 14,000                                       |
| Wall-clock for the discovery query                       | \~2 sec                                      |
| Companies scored as HOT (focus narrowing)                | 319 (2.3% — 20x narrower than naïve filter)  |
| HOT companies in the primary spearhead segment           | 211 (66% of HOT)                             |
| Decision-makers found across HOT-linked companies        | 16,000                                       |
| Emails resolved via Tier 2 finder                        | 8,100 (62% hit rate after vanity resolution) |
| Personalized hooks generated with verifiable source URLs | 245 (0 errors)                               |
| Ready-to-send leads (hook + email + no role drift)       | 180                                          |

| Validation metric                                            | Value                                             |
| ------------------------------------------------------------ | ------------------------------------------------- |
| Crossover with an externally-sourced 279-company target list | 84% (234 of 279 already in pipeline)              |
| Of crossover, classified as HOT by the team's scoring        | 99% (231 of 234) — independent confirmation       |
| Crunchbase enrichment match rate                             | 25% (3,298 of 13,972 companies have funding info) |

The team operates the entire outbound funnel — discovery, enrichment, scoring, intent detection, personalization, delivery prep — without subscribing to a separate firmographics, list-building, enrichment, or delivery vendor.

## Key Anysite Endpoints Used

| Endpoint                          | Purpose                                        | Volume share |
| --------------------------------- | ---------------------------------------------- | ------------ |
| `db/linkedin/search/companies`    | Bulk ICP discovery via SQL-style mini-DSL      | 35%          |
| `linkedin/sn_search/users`        | Senior decision-maker enrichment in batch      | 25%          |
| `linkedin/user/posts`             | Buying-intent signal harvest from recent posts | 20%          |
| `linkedin/user/find_email_by_url` | Email resolution for outreach delivery         | 15%          |
| `crunchbase/company`              | Funding/stage signal for tier scoring bumps    | 5%           |

## Why Anysite

The combination of LinkedIn-depth firmographic queries + flexible mini-DSL + structured filters is unique to the platform. Recreating it elsewhere requires stitching four to six vendors — firmographics, sales-nav search, list-building, enrichment, funding intelligence — into a pipeline with per-record pricing at every layer.

For sales teams that want to **own their ICP definition** instead of inheriting one from a vendor, the SQL-style discovery endpoint is the unlock: write your own scoring rubric, run it against the underlying database in seconds, and pay only for the rows that survive your filter.

## Key Takeaways

* **Own your ICP, don't inherit it.** A structured, SQL-style discovery endpoint lets the team write its own scoring rubric instead of accepting a vendor's coarse categories.
* **One endpoint replaces a four-to-six-vendor stack.** Firmographics, sales-nav search, list-building, enrichment, and funding intelligence collapse into a single pipeline.
* **Discovery is cheap; precision is the value.** 14,000 companies narrow to 180 hand-picked touches — a 2.3% HOT rate, independently confirmed at 99% against an external target list.
* **Boutique scale without sales-ops headcount.** A sub-10-person team ships 150 hand-picked outbound touches per week — work that would otherwise need a full sales-ops function and a five-figure annual tooling budget.
