
This workflow scrapes company websites, news sources, and public profiles using Firecrawl, then assembles a structured brief with talking points, pain points, and outreach angles. It's built for pre-meeting prep when you need to quickly research a lead before a sales call or partnership conversation. The workflow spins up parallel researchers for company profile, recent news, people, and industry context, then synthesizes everything into a markdown brief with sources. The quality bar is reasonable: it separates facts from inferences and won't fabricate personal details. Useful if you're doing outbound and need more than a LinkedIn skim but less than an hour of manual research.
$ npx -y skills add firecrawl/firecrawl-workflows --skill firecrawl-lead-research --agent claude-codeInstalls into .claude/skills of the current project.
Enrich the people and companies the user supplies with Alexandria's people and company providers. The web can add context the request needs, such as recent news, but fields come from the providers.
For a meeting brief, follow meeting brief. For everything else (a person, a company, a list or CSV, a role check), follow the workflow below.
firecrawl find-tools --options '{"categories":["people"],"level":"providers","limit":20}' --json, or company providers with "categories":["companies"]. Pick the provider whose capabilities accept the identifiers the user gave (name and company, profile URL, email, domain) and return the fields they asked for.firecrawl list <provider> --json lists its capabilities; firecrawl list <provider> <capability> --pretty shows the inputs and response for one.firecrawl scrape <provider>/<capability> --options '<JSON matching the contract>' --json, with no URL. For a list, use the provider's bulk capability when it has one. Read every item in data.alexandria[]; an item can fail while the request succeeds.firecrawl search "<query>" --sources web --json and firecrawl scrape "<url>" --json; a URL scrape returns the page itself, not a data.alexandria envelope. Do not use the web to fill fields the providers did not return.One person: full_name, job_title, company_name, company_domain, linkedin_url, location, work_email (only when asked for), and the source of each field.
One company: company_name, domain, industry, employee_count, founded, hq_location, total_funding with its latest round, linkedin_url, and the source of each field.
A list or CSV: keep every input column, row and row order, then add the requested fields plus match_status (matched, not_found or error) and sources. Write CSV files with a CSV writer.
Leave a field empty when no provider returned it, and say which fields are missing.
When the user asks to refresh a list they enriched before, re-run the workflow on that file and report only what changed since the last run: new titles or employers, headcount or funding changes. If nothing changed, say so.
2>&1; status lines go to stderr and break the JSON.THIRD_PARTY_DATA_TERMS_REQUIRED, show the user the dashboard link in the error and name the provider whose terms an organization admin accepts there (firecrawl alexandria terms show <provider> returns them). Once the user confirms they are accepted, rerun the call and continue.Sponsors