TemidireOpen for projects
All work

Case 01 / 02Koya Talent cohort, week 5, 2026

Lead research agent

Type who you want to reach. It finds real companies, decides which fit, and drafts the outreach for a person to approve.

Client
Koya Talent cohort, week 5
Year
2026
Role
Solo build, design to deploy
Timeline
1 week
Result
10 qualified leads with drafts, nothing sent without approval
About 6 minutes for 10 leads
Confirm the briefDiscover with ApifyRead their sitesQualify with evidenceDraft, then a person decides
10qualified leads with drafts in the main test run
7/7required test scenarios passed
14¢search cost for a full 35-company run

01The problem

Outbound was fully manual: someone defined the persona, searched for companies, checked fit, read every website for context and wrote cold emails from scratch. Slow, repetitive, and different every time someone else did it.

02The approach

An agent built on the Claude Agent SDK with six narrow tools. It confirms the brief with the operator, discovers companies through Apify, reads their sites with Firecrawl, qualifies each one with reasons and sources, and drafts a three-email sequence plus a LinkedIn message. Budgets live in the app, not the agent, and nothing is ever sent.

Claude Agent SDKAApifyFFirecrawlSupabaseNext.jsRailway

03How it works

Step 01

Confirm the brief

The objective is checked by code and Claude Haiku first, so junk never reaches a paid tool. The operator then confirms the ideal customer and marks each criterion as a must-have, a nice-to-have or skipped.

Step 02

Discover with Apify

LinkedIn company search, worded around the product a company sells. The app sets the budget per run (35 companies, 8 searches) and every call is logged with its cost.

Step 03

Read their sites

Firecrawl reads up to 3 pages per company, same domain only. Website text is treated as untrusted data: it is labelled, scanned for injection phrases and can never change limits or trigger anything.

Step 04

Qualify with evidence

Every company gets a status, a confidence score, reasons, concerns and the pages it was judged on. Anything uncertain goes to needs review instead of padding the list.

Step 05

Draft, then a person decides

Qualified leads get three emails and a LinkedIn message, each line tied to a page the agent read. The operator edits, approves or rejects, then exports to Excel, CSV or JSON.

04Before and after

Before

  • Personas rewritten by hand for every campaign
  • Companies found one search at a time
  • Every website read manually for context
  • Cold emails written from scratch, different per person

After

  • Criteria confirmed once, in a checklist
  • Discovery runs on a fixed, logged budget
  • Each lead arrives with reasons, concerns and sources
  • Grounded drafts ready to edit, approve and export

05See it run

Outreach drafts for one lead: a LinkedIn message and the first of three emails, with the source page
Drafts tied to sources
The runs list with statuses from several operators
Every run, every operator

06Proof it holds up

  • A planted company page tried to make the agent leak API keys and mark itself qualified. It was flagged, ignored and saved as not qualified.
  • Junk objectives are rejected before any paid tool runs.
  • A run that falls short has to explain why, and the operator can search again or use what was found.
  • Admins get overview, spend and team pages; every step is in a plain-language run log.
10 qualified leads with drafts, nothing sent without approval

07What I learned

Test end to end with awkward input in week one. Two bugs hid for days because the small checks passed: the agent could not open its own guidance, and a search that found nothing never forced a run to stop. Now I ask what stops something if nothing works, for anything that repeats.

Next caseContent research agent