---
ref: workflow:icp-account-qualification
title: Qualify accounts against your ICP before buying contacts
author: thedogwiththedataonit
tools: [tool:hunter/search-companies, tool:firecrawl/scrape-url, tool:typesafe/answer-typed-questions, tool:apollo/search-people]
tags: [capability:classify-signals, capability:find-prospects, capability:scrape-web, has:api, motion:outbound]
updated: 2026-09-29
---

# Qualify accounts against your ICP before buying contacts

Lists companies with Hunter, reads each homepage with Firecrawl, checks fit and business model with Jev, and finds buyers at the fits only.

Set up the tools below, then run the steps in order for the user, carrying each step's results into the next. The run is done when the user has the outcome below.

## Outcome

- A table of every company checked, with its fit level, business model, sales motion and Jev's confidence.
- The companies that fit, and for each one that didn't, the answer that ruled it out.
- The buyers at each company that fits, from a search that spends no credits, ready to enrich.

## Inputs

Ask the user for these before you start.

- `target_segment`: the companies to start from, in plain words, e.g. B2B software companies in the US with 50 to 500 employees
- `ideal_customer`: what a company that fits looks like, in a sentence or two, e.g. sells software to other businesses, has a sales team and a self-serve free trial
- `max_companies`: the most companies to check in one run, e.g. 100; Hunter returns up to 100 per search, and paging past them needs a Premium plan
- `min_fit`: the lowest fit level worth finding buyers at, e.g. good
- `min_confidence`: how sure Jev must be before its answer is used without you, e.g. 0.8; a yes-or-no answer counts as yes at or above it and as no at or below 1 minus it
- `buyer_titles`: the people to find at each company that fits, e.g. VP Marketing, Head of Growth

## Set up

### Search companies (Hunter, tool:hunter/search-companies)

Use the first option your agent supports.

Note: Returns no contacts: list each company's people with a domain search. `technology`, `year_founded`, `similar_to` and paging with `offset` need a Premium plan.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "hunter": { "url": "https://mcp.hunter.io/mcp" } } }
```

Call the MCP tool `Find-Companies`.

#### API (official)

- Base URL: https://api.hunter.io/v2
- Endpoint: `POST /discover`
- Auth: send the header `X-API-Key: $HUNTER_API_KEY`
- Get a key: https://hunter.io/api-keys

### Scrape a URL (Firecrawl, tool:firecrawl/scrape-url)

Use the first option your agent supports.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "firecrawl": { "url": "https://mcp.firecrawl.dev/v2/mcp-oauth" } } }
```

Call the MCP tool `firecrawl_scrape`.

#### CLI (official)

Install the command, then confirm it runs.

```sh
npm install -g firecrawl-cli
firecrawl --version
```

Run `firecrawl scrape`.

Set `$FIRECRAWL_API_KEY` in your environment first (get a key: https://www.firecrawl.dev/app/api-keys).

### Answer typed questions (TypeSafe AI, tool:typesafe/answer-typed-questions)

Use the API.

- Base URL: https://api.typesafe.ai
- Endpoint: `POST /v1/systemone`
- Auth: send the header `Authorization: Bearer $TYPESAFE_API_KEY`
- Get a key: https://console.typesafe.ai

Note: Put every question about one record in one request. `GET /v1/models` lists the models and is the cheapest check of a key; a request over the rate limit gets a 429 with a Retry-After header.

Note: Send `state`, `model` (`jev-latest`) and named `questions`, each with `type`, `instructions` and `criteria`: a choice maps labels to descriptions, a score lists its levels in order, a noul's is optional. Read a score by its most likely level; send unsure answers to a person.

### Search people (Apollo, tool:apollo/search-people)

Use the first option your agent supports.

Note: Costs no credits and finds only net-new people, not contacts already saved in Apollo. Returns no emails: enrich the matches to get them. Up to 100 people per page and 50,000 in total.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "apollo": { "url": "https://mcp.apollo.io/mcp" } } }
```

Call the MCP tool `apollo_mixed_people_api_search`.

#### CLI (official)

Install the command and sign in with it, then confirm it runs.

```sh
brew install apolloio/apollo-io-cli/apollo-io-cli
apollo --version
```

Run `apollo people search`.

Before step 1, confirm access to each service with its cheapest read-only call, like a list or a search. Never send or change anything to test access.

## Steps

1. **List candidates** with Search companies (Hunter). Search for `target_segment` and keep up to `max_companies` companies, with each one's name and domain.
2. **Read each homepage** with Scrape a URL (Firecrawl). Scrape each domain's homepage as markdown. Keep the page text, and note the domains that fail to load or redirect elsewhere.
3. **Qualify** with Answer typed questions (TypeSafe AI). Send each homepage's text as the state, with a score `fit` whose levels describe the match with `ideal_customer`: no fit (matches none of it), weak (matches some), good (matches most) and ideal (matches all); a choice `business_model` of b2b_software, b2b_services, b2c, marketplace, agency and other; a choice `sales_motion` of self_serve (sign-up and prices on the site), sales_led (demo or contact sales only) and hybrid; and a noul `active_business` (a live product, not a parked, acquired or shut-down site). Keep every answer with its confidence or probability.
4. **Check the unsure ones with the user** yourself. Show the user every company whose fit confidence is below `min_confidence` or whose `active_business` is unsure, with its homepage's first lines, and keep what the user decides. Keep the active businesses with a fit of `min_fit` or better.
5. **Find the buyers** with Search people (Apollo). Search each company that fits for `buyer_titles`. Keep each person's Apollo ID, first name, title and company.

## Notes

Qualifying before enriching saves credits: an email lookup costs one whether or not the company fits, while Jev is billed only for the tokens it reads. A data provider's industry code can miss what a company actually sells, which is why the fit is read from what the company says about itself.

Read the fit by its most likely level, not its expected score, and rank companies within a level by the summed probability of good and ideal. Apollo's search spends no credits and returns no emails, so enrich only the buyers you keep.

## Rules

- Use only the services set up above. The read-only calls they need, like listing ids or polling for results, are fine.
- Ask the user before anything that sends messages, costs money, or changes data, and say how many records it touches. One approval covers a batch the user has seen.
- Never print API keys.
