How Search Works
search_humans is the core tool. Under the hood, it runs a multi-phase pipeline: parallel web searches, candidate scoring, company domain discovery, and optional email verification.
Phase 1: Discover
When you call search_humans({ name: "Sara Blakely", company_name: "Spanx" }), the system fires multiple search queries in parallel across different search engines:
Each query is routed to a single search engine (Google or Brave, alternating). This split-engine strategy means no single engine sees all queries, reducing the chance of rate limiting.
Phase 2: Extract
From the raw search results, HumanConnection extracts candidate profiles by matching URLs against known platform patterns (linkedin.com/in/, instagram.com/, x.com/). Each candidate gets a snippet (the SERP description) which contains bio text, location hints, and company references.
Social handles that aren’t discoverable by name alone — like non-obvious Instagram handles — are found by scanning snippets for @mentions near the person’s name.
Phase 3: Score
Each candidate profile is scored to find the best match:
- Handle matching — Does the LinkedIn slug match the person’s name? (
linkedin.com/in/sarablakelyfor “Sara Blakely” = strong match) - Context matching — Does the snippet mention the company name or location?
- Cross-platform signals — Does the same brand appear across multiple platforms?
The best candidate per platform is selected. A minimum score threshold prevents false positives.
Phase 4: Location
Location is extracted from structured LinkedIn data (the ·-delimited snippet format). When the SERP doesn’t return structured data, the system falls back to title patterns, social bios, subdomain mapping, and residence phrase searches.
When company_name or location is provided as input, it’s used as a strong disambiguation signal.
Phase 5: Company domain
The company domain (e.g. airbnb.com, getcargo.ai) is discovered by searching the company name and picking the first non-noise result that matches. A verification step checks that the person actually appears on the candidate domain, filtering out generic name collisions (e.g. “Cargo” the shipping company vs Cargo the design tool).
If you already know the domain, pass company_domain directly to skip this step.
Phase 6: Email (optional)
When provide_email: true is set:
- Domain — Uses the discovered or provided
company_domain - Format detection — Tries common patterns (first.last@, firstlast@, f.last@, etc.)
- SMTP verification — Checks which pattern is deliverable without sending any mail
This adds 2-5 seconds of latency. Skip it if you don’t need the email.
Confidence scoring
A confidence of 0.85 means three platforms were matched. Below 0.4 means only one platform was found — treat these as low-certainty matches.
People search mode
When you provide location and title_filters instead of name, the system switches to people search mode. It searches for LinkedIn profiles matching the job title criteria in the given location, scores them by relevance, and returns up to 10 results.
Boolean syntax is supported: ((head OR director) AND (customer experience OR cx)) AND NOT (student OR intern).