# Candidate Sourcing Research

Find, qualify, and profile candidates and companies for an open role using only public web sources, then hand off a structured shortlist for human review.

## When to use

- A recruiter opens a new requisition and needs an initial slate of candidates or target companies.
- A hiring manager wants a competitive landscape of who else works in a given role or industry.
- An existing shortlist needs to be enriched with public profile details before outreach.
- A search needs to be refreshed periodically as new candidates appear online.

## Tools

- `browser-search`
- `browser-navigate`
- `browser-extract`
- `write-file`
- `update-memory`

## Playbook

1. Read the role brief (title, must-have skills, seniority, location, target companies or industries) from the task description.
2. Run `browser-search` with targeted queries combining the job title, key skills, and location (e.g. "senior backend engineer Ruby on Rails Sao Paulo site:linkedin.com/in") to surface candidate profiles and relevant company pages.
3. For each promising result, use `browser-navigate` to open the public profile or company page (e.g. a LinkedIn public profile, a company "About" or "Team" page, or a conference speaker bio).
4. Use `browser-extract` on each opened page to pull structured fields: name, current title, current company, tenure, listed skills, location, and any public contact or portfolio link.
5. Cross-check ambiguous or thin profiles with a second `browser-search` query (e.g. the person's name plus former employer) and another `browser-extract` pass to confirm identity before including them.
6. Deduplicate results and score each candidate against the role's must-have criteria, noting gaps explicitly rather than guessing.
7. Write the consolidated shortlist — candidate name, source URL, extracted profile fields, fit notes, and open questions — to a file with `write-file` in a clear, reviewable format (e.g. Markdown table or CSV).
8. Call `update-memory` to log the search queries used, sources checked, and any candidates excluded with reasons, so a future refresh of this search doesn't repeat wasted effort.
9. If the brief asks for anything beyond sourcing and profiling — such as sending outreach, scheduling interviews, or making a hire/reject call — stop and message a human via send-message rather than acting on it yourself.

## Failure modes

- A public profile is stale or ambiguous (common name, outdated title): flag the uncertainty in the output instead of asserting facts you could not confirm.
- Search results return mostly paywalled or login-gated pages: note the gap in the shortlist rather than fabricating details you cannot extract.
- Two people share very similar names or titles: keep both as separate rows with source links so a human can disambiguate, never merge them.
- The role brief is missing key criteria (location, seniority, must-have skills): pause and escalate to a human for clarification before running broad searches that will produce noise.

## Done when

- A written shortlist file exists with candidate names, source links, extracted profile details, and fit notes against the role's criteria.
- Every included candidate has at least one verifiable public source URL attached.
- Search queries, sources checked, and exclusions are logged via `update-memory` for reuse in the next sourcing pass, and any decision beyond sourcing (screening stage, hire/reject) is left explicitly as a draft for human sign-off.