# Target List Builder
Assemble an ICP-filtered (ideal customer profile-filtered) list of target accounts and contacts from open-web sources, and save it as a CSV (comma-separated values) file ready for outreach.

## When to use
- A campaign needs a fresh list of accounts and contacts matching a defined ICP.
- An existing target list is stale or has run out of un-contacted accounts.
- Sales or marketing asks for prospects in a new vertical, region, or company-size band.

## Tools
- `browser-search`: run search queries to discover candidate companies and contacts matching the ICP criteria.
- `browser-navigate`: open company sites, "About"/"Team" pages, directories, and search result links.
- `browser-extract`: pull structured data (company name, domain, industry, size, contact name, title, location) off each page.
- `write-file`: save the compiled, deduplicated list as a CSV file.

## Playbook
1. Confirm the ICP criteria for this run (industry, company size, region, job titles) from the task brief.
2. Use `browser-search` to find candidate companies matching the ICP (e.g. industry + size + region queries, directory listings, "companies like X").
3. For each promising result, use `browser-navigate` to open the company's website or a relevant directory/profile page.
4. Use `browser-extract` on each page to capture company name, domain, industry, employee size signal, and location.
5. Use `browser-search` again, scoped to the target company (e.g. "site:company.com team" or "company name + title"), to find likely contacts matching the target job titles.
6. Use `browser-navigate` to open team/leadership/about pages or public contact directories for the company.
7. Use `browser-extract` to pull contact name, title, and any publicly listed email or profile link from those pages.
8. Deduplicate accounts and contacts by domain and name as you go, discarding entries that fail the ICP filter.
9. Compile the final rows (account + contact fields) and use `write-file` to save them as a CSV file with a clear header row.

## Failure modes
- Search returns no relevant results for a query -> broaden or rephrase the query via `browser-search`, or relax one ICP filter and note the change.
- A page fails to load or `browser-navigate` errors -> skip the page, log it, and continue with the next candidate.
- No public contact or team page exists for a company -> keep the account row with contact fields blank rather than fabricating data.
- Rate limiting or repeated blocked searches -> back off, slow down the request pace, and note the limitation via `update-memory` for future runs.

## Done when
- A CSV file has been written via `write-file` containing deduplicated account and contact rows that meet the stated ICP criteria.
- Every row traces back to a real page seen via `browser-navigate`/`browser-extract` — no invented companies or contacts.
- The task is closed out with a summary of row count and any ICP relaxations or gaps encountered.