TL;DR: To build a lead list with agents in Claude Code, split the job into four board tasks: a free Apollo people search through Firecrawl Alexandria, a qualify pass on the fields that search already returned, a paid People Data Labs enrichment for survivors only, and a human review before any outreach. One Firecrawl key covers every provider, and each task reports what it spent.
You can build a lead list with agents in one long Claude Code session. You ask for “VPs of Engineering at these ten companies, with work emails,” and the agent searches, enriches, and hands back a CSV. The trouble starts on the invoice: the agent paid to enrich people you’d have dropped on title alone.
Firecrawl Alexandria makes the cheap-first order easy to enforce. It puts hundreds of data providers behind one Firecrawl API key, and its own rule is that discovery is free while execution costs the credits listed on each tool. This post lays that pipeline out as tasks on Sharkly, with Claude Code or Codex as the runtime, and shows the credit cost of each stage.
What Firecrawl Alexandria gives a lead-list agent
Firecrawl Alexandria is a library of data providers an agent can call through one Firecrawl key. The Alexandria page lists 430 providers and 2,461 capabilities. An agent discovers a tool for free, reads its inputs and price, then runs it through the same scrape endpoint it uses for web pages.

For lead lists, the People category is the one that matters. It holds 12 providers, including Apollo, People Data Labs, FullEnrich, and Data Legion for enrichment, plus public sources such as sanctions lists and the NPI Registry. This post uses two of them:
| Provider | Capability | Listed price | Job in the pipeline |
|---|---|---|---|
| Apollo | people/search |
0 credits | Find people by title at your target domains |
| People Data Labs | person/enrich |
60 credits per call | Fill in profile fields for qualified people only |
Apollo’s own page on Alexandria lists a built-in skill called “Search-first prospect list.” Its description is the whole strategy in one line: search for free first, reveal only the people worth paying for, then find verified work emails in cost order. The board below turns that line into four tasks with owners.
Why a lead list needs stages, not one prompt
A single session hides the decision that drives cost: who gets dropped before the paid call. Firecrawl prices make the gap concrete.
Say Apollo returns 40 people across your ten domains. Enriching all of them at 60 credits each costs 2,400 credits, more than double the Free plan’s 1,000 monthly credits. If a qualify pass on titles keeps 12, enrichment costs 720 credits and fits inside the Free plan.
That drop rule is a business call. Someone decides whether “Head of Platform” counts as a buyer. When it’s buried in a prompt, nobody reviews it. When it’s a task with an Assignee, it has an owner, a status, and a record of what changed.
How to build a lead list with agents: the four tasks
Here is the pipeline as board tasks. Link them with blocks / is blocked by so each stage waits for the one before it.
| Task | Assignee | Firecrawl cost | Done when |
|---|---|---|---|
| 1. ICP to Apollo filters + people search | Agent | 0 credits | People list saved, row count posted |
| 2. Qualify on returned fields | Agent | 0 credits | Survivors and drop reasons posted |
| 3. Enrich survivors on People Data Labs | Agent | 60 credits per call | Enriched rows posted, credits spent reported |
| 4. Review before outreach | Person | 0 credits | List approved, edited, or sent back |

Step 1: Turn the ICP into a free Apollo search
The first task turns your ideal customer profile into Apollo’s search inputs. The capability takes person_titles, q_keywords, q_organization_domains_list, page, and per_page, with a maximum of 100 results per page. Apollo’s playground shows this call at 0 credits.
Discovery is free too. If the agent doesn’t know which tool to use, it asks Alexandria with sources: ["alexandria"]. Firecrawl’s docs note that adding "web" to the sources also returns paid web results, so keep discovery tools-only.
# Free tool discovery: tools only, no paid web results
curl https://api.firecrawl.dev/v2/search \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "find people by job title at a company", "sources": ["alexandria"], "limit": 3}'
# Apollo people search at the target domains (listed at 0 credits)
curl https://api.firecrawl.dev/v2/scrape \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"alexandria": {
"provider": "apollo",
"capability": "people/search",
"options": {
"person_titles": ["VP of Engineering", "Head of Platform"],
"q_organization_domains_list": ["example-one.com", "example-two.com"],
"page": 1,
"per_page": 100
}
}
}'
The result lands under alexandria[0].data. Firecrawl’s docs say to check each tool result for errors before using it, so make that part of the acceptance criteria: the task isn’t done until the agent posts the row count and any error it hit.
Step 2: Qualify on fields the search already returned
The qualify task costs nothing. It reads the search output and drops rows on the data already in hand: wrong title, wrong company, duplicate person. No new calls.
Put the drop rules where every agent reads them. A Sharkly Skill packages reusable instructions for Agent work, so the rules become one Skill bound to every lead-list agent, as described in Skills in Sharkly.
# lead-rules.md (owner: the person who approves the send)
keep_titles: ["VP of Engineering", "Head of Platform", "Director of Engineering"]
drop_if: [title_not_in_keep_titles, company_domain_not_in_list, duplicate_person]
max_enrich_calls_per_run: 15
pdl_min_likelihood: 6
every_task_reports: [rows_in, rows_out, credits_spent, errors]
Step 3: Enrich only the survivors
This is the paid stage. People Data Labs person/enrich is listed at 60 credits per call. It accepts a pdl_id, an email, or an email_hash as sufficient inputs, plus 18 more optional fields. Have the agent read the full input contract with findTools before it maps search fields to enrich inputs.
The cheapest setting is min_likelihood. It runs from 1 to 10 and defaults to 2, where Firecrawl says a match is only 10 to 30% likely to be the right person. Raising it turns a weak match into a 404, and the provider page is direct about why that helps: “a 404 is free here and a wrong record is not.”
// One enrich call per qualified person; client set up with $FIRECRAWL_API_KEY
const result = await firecrawl.scrape({
alexandria: {
provider: "people-data-labs",
capability: "person/enrich",
options: {
email: person.email, // or pdl_id / email_hash
min_likelihood: 6, // weak matches 404 instead of billing a wrong record
titlecase: true,
},
},
});
const record = result.alexandria[0];
if (record.error) report.errors.push(record.error);
People Data Labs also carries a quota through Alexandria: 50,000 API calls per year per customer organization, shared across person and company endpoints. Retries count, and it resets on 1 January UTC. That’s one more reason to cap enrich calls per run in the rules file.
If a call fails with THIRD_PARTY_DATA_TERMS_REQUIRED, the response includes a requiresAction.url. An org admin has to accept the provider’s terms there, and Firecrawl’s docs say agents need explicit user authorization before accepting terms. Treat it as a hand-off: the agent leaves the task waiting for a human reply.
Step 4: A person reviews before outreach
The last task belongs to a person. The agent attaches the enriched list and leaves the task waiting for human review. The reviewer checks a sample against public profiles, removes anyone who shouldn’t be contacted, and approves.
This is the same gate we describe in human-in-the-loop coding agents. The list is data; contacting someone is a decision a person signs.
The credit receipt per stage
With 10 target domains, 40 people found, and 12 qualified, the listed prices give this receipt.
| Stage | Calls | Credits |
|---|---|---|
| Tool discovery | 1 | 0 |
Apollo people/search |
1 | 0 |
| Qualify | 0 | 0 |
People Data Labs person/enrich |
12 | 720 |
| Total | 14 | 720 |
Converting credits to dollars depends on the plan, so do the math instead of rounding it away. On Firecrawl pricing, billed monthly, Hobby is $19 for 5,000 credits, which is $0.0038 a credit, so 720 credits is about $2.74 of plan credit. Standard is $99 for 100,000 credits, or $0.00099 a credit, so the same run is about $0.71. The Free plan’s 1,000 credits a month covers it at $0.
Without the qualify task, the same run is 2,400 credits: about $9.12 on Hobby, and more than the Free plan holds. The qualify task is the cheapest line on the receipt and saves the most.
How Sharkly keeps the pipeline honest
Claude Code or Codex does the calling. Sharkly holds the work around it.
- Tasks with Assignees. Each stage has a status and an owner, whether that’s an Agent, a Crew, or a person.
- The key stays out of task text. Set
FIRECRAWL_API_KEYin the Agent’s Environment Variables, under Computer & Runtime, and it’s injected when the agent process starts. Sharkly labels these values plaintext settings visible to Agent managers, not secret storage, so use a key scoped to this job. - Review states. An Agent can leave a task waiting for a human reply or human review, and that lands in the responsible person’s Inbox.
- The run record. Each run shows start and end, tool calls, and failure details, so the credit report has a trail behind it.

If you’d rather not create four tasks by hand, a Crew leader can split a parent task into the stages, as covered in Sharkly Crews. Sharkly is free to start, and model usage runs on the Claude Code or Codex plan attached to your Runtime.
Run it on a schedule, keep the review manual
Once the four tasks run clean for a week, put tasks 1 to 3 on an Automation so a new domain list triggers the free search and the capped enrichment. Task 4 stays manual. To watch several of these runs at once, see how to monitor coding agents running in parallel.
Start with the free stages
Build a lead list with agents the way the Apollo skill describes it: search free, qualify on what you already have, pay only for survivors, and put a person on the list before anyone is contacted. Start with tasks 1 and 2 in Sharkly. They cost 0 credits and tell you what the paid stage would spend.
FAQ
What is Firecrawl Alexandria?
A library of data providers that agents call through one Firecrawl API key. Discovery is free, and each tool lists its own credit price for execution. Firecrawl launched it on 22 September 2026.
Is Apollo people search free through Firecrawl?
Apollo’s people/search capability shows 0 credits in Firecrawl’s playground. Revealing contact details is a separate, paid step, so check that capability’s listed price before you run it.
How much does People Data Labs enrichment cost on Firecrawl?
person/enrich is listed at 60 credits per call. That’s about $0.23 on the Hobby plan and $0.06 on Standard, billed monthly. A 404 from a raised min_likelihood costs nothing.
Does this work with Codex instead of Claude Code?
Yes. Firecrawl ships a CLI, SDKs, and an MCP server with firecrawl_search, firecrawl_find_tools, and firecrawl_scrape, and a Sharkly Agent can run on either Runtime. The general setup is in AI task manager: assign, track, and review agent work.
Should an agent send outreach from the list on its own?
No. Keep the send behind a human review task. The agent’s job ends at a verified list and a credit report.



