---
name: prospect
description: Find people who match an audience, get and verify their work emails, find a recent reason to write to each one, and draft a short email sequence that opens with it. Stops before anything sends. Use when asked to prospect, build a lead list, or draft outreach for an audience.
---

# Prospect

You run one prospecting job end to end with the Layrcake tools, then stop and show the user what you found and drafted. You never send email and never launch a campaign.

## Before you start

Make sure you know three things. Ask once if any is missing:
1. **Who:** the role, the location, the industry and the company size.
2. **What we sell:** one or two sentences, so the emails are about something real.
3. **How many people, and the credit budget.** Default to 10 people and 100 credits.

Keep a running total of `layrcake.credits_charged` from every response. Before each paid step, work out its cost from the prices below. If the budget can't cover everyone, carry fewer people through every step; never skip a step to save credits. Give every paid call a unique `idempotency_key`.

| Step | Price (Layrcake, October 2026) |
|---|---|
| `find_leads` | 0.2 credits per person returned, at least 3 when anyone is returned |
| `enrich` | 5 credits per email found (cached or fresh); a miss is free |
| `verify_email` | 1 credit per check |
| `find_posts` with `leads` | 3 credits per person with recent activity, reactions included; nothing found is free |
| `create_campaign` | free |

## The job

1. **Find people.** Call `find_leads` with the role as `titles`, plus `locations`, `industries` and `company_headcount`. Ask for twice the number of people you need (`limit`): the fit check and email misses always drop some. Industry filters use LinkedIn's industry names, which are broad ("Financial Services" covers banks, brokers and fintechs alike). Search results have no email addresses.
2. **Check fit before you spend.** Read each result's title, company and location. Drop anyone clearly outside the brief (wrong country, wrong kind of company, a role that isn't the one asked for, a domain that isn't a company website), and say who and why. If you can't tell from the name whether a company fits (is it really fintech?), keep it and flag it. This step is free.
3. **Get work emails, best fit first.** Call `enrich` with `person: { full_name, company_domain, linkedin_url }` and `want: ["work_email"]`, one person at a time, and stop once you have the number of people asked for. A miss is free. Use only the work email; ignore any other fields that come back.
4. **Check fit again.** Enrich often corrects the search: a fuller name, a newer title, a different location or email domain. From here on, use what enrich returned, and drop anyone who no longer fits before paying for anything else. If that leaves you short, enrich the next person from step 2.
5. **Verify every email.** Call `verify_email` once per address. Keep `valid` and `catch_all_valid` (a catch-all domain accepts any address, so the mailbox can't be confirmed; flag these). Drop everything else, say how many and why, and enrich the next person if you're short.
6. **Find a reason to write.** Call `find_posts` once with `leads` set to the people you kept (enrich's `full_name`, `company_domain`, `linkedin_url`) and `budget_credits` set to 3 × the number of people. For more than 10 people it returns an `operation_id`; poll `get_operation` until it finishes. Each person comes back with their best recent activity: their own post, a comment, a reaction, or a post from their company.
7. **Write one opening line per person.** One sentence, specific, no flattery.
   - Their own post or comment: refer to what they said.
   - A reaction to someone else's post: say "saw you liked" and stop there. Liking a post says less than writing one.
   - Personal posts (anniversaries, family, health) or anything unrelated to work are not a reason to write. Don't use them.
   - When there's no usable activity, write a plain line about their company instead. Never leave the opener empty: the email would start with a blank line.
8. **Draft the sequence.** Three short emails. Email 1's subject names the problem in a few words; emails 2 and 3 reply in the same thread ("Re:" plus the same subject). Email 1 opens with `{{opener}}`, then one problem the user's product solves, then one low-pressure question. Use `{{first_name}}` and `{{company_name}}`. Plain text, under 100 words each, no links. Don't invent numbers or claims about the product; use only what the user told you.
9. **Check the campaign without creating it.** Call `create_campaign` with a `name`, an `idempotency_key`, the leads (email, first_name, last_name, company_name, `custom: { opener }`), the three steps, and `dry_run: true`. `wait_days` counts from the previous email: 0, 3, 4 sends on day 0, day 3 and day 7. `would_exceed: ["sending_capacity"]` means the workspace has no connected mailbox with room to send; the user connects one before creating the campaign for real.

## What you show the user

- A table of each tool call: what you asked for, what came back, credits charged.
- How many people made it through each step, and why the others dropped out. If you end up short of the number asked for, say so; don't widen the brief on your own.
- The three emails and each person's opener.
- The total credits used against the budget.
- What needs a human before sending: read the openers, decide on catch-all addresses and flagged companies, connect a mailbox if the dry run asked for one, then create and launch the campaign. Launching asks a signed-in person to approve before anything sends.
