# Finding people at a company with Brave Search: tested query patterns

> Source: <https://gist.github.com/MitchellkellerLG/a3a9f7c9585ff68756d496b68e0fcb0b>
> Published: 2026-09-29 11:15:27+00:00

We tested 10 Brave Search query patterns on 100 real B2B companies to find senior people currently working there (their LinkedIn profiles). 1,000 searches, $0.125 total, 0 errors. Measured 2026-09-28.

- Best single query: `linkedin "at {Company}" (CEO OR founder OR chief OR president OR VP OR "head of" OR "general manager" OR director OR partner OR principal)` . Found 1+ senior person at 67 of 100 companies.
- Best 3-query combo found 1+ senior person at **81 of 100** and 2+ at 56 of 100, for about $0.375 per 1k companies.
- `site:` did nothing for us. Through the RapidAPI Brave endpoint, any query containing`site:` returned zero results. Brave's own site documents the operator ([https://search.brave.com/help/operators](https://search.brave.com/help/operators) ), so the official API may behave differently. We did not test it.
- Expect about 1 in 5 raw matches to be the wrong company (name collisions). Put a cheap LLM review step after the search.

A hit = a `linkedin.com/in/` result whose title has a senior title, names the company in the employer or headline, and is not "ex-" / "former".

| Pattern | Query template | 1+ found | 2+ found | 
|---|---|---|---|
| **G** | `linkedin "at {co}" (CEO OR founder OR chief OR president OR VP OR "head of" OR "general manager" OR director OR partner OR principal)` | **67** | **40** | 
| B | `"{co}" linkedin (VP OR "head of" OR "general manager")` | 59 | 26 | 
| C | `"{co}" linkedin (director OR partner OR principal)` | 52 | 19 | 
| J | `{co} linkedin CEO founder VP director` (no quotes, no OR) | 50 | 22 | 
| D | `linkedin.com/in "{co}" (all titles OR'd)` | 50 | 14 | 
| A | `"{co}" linkedin (CEO OR founder OR chief OR president)` | 49 | 20 | 
| E | `linkedin.com/in "{domain}" (all titles OR'd)` | 49 | 16 | 
| H | `"{co}" linkedin "vice president"` | 45 | 19 | 
| F | `"{co}" linkedin` | 35 | 8 | 
| I | pattern A, page 2 | 0 | 0 | 

| Queries per company | Patterns | 1+ found | 2+ found | Cost per 1k companies | 
|---|---|---|---|---|
| 1 | G | 67 | 40 | $0.125 | 
| 2 | F + G | 76 | 47 | $0.25 | 
| **3** | **F + G + H** | **81** | **56** | **$0.375** | 
| 4 | B + F + G + H | 84 | 63 | $0.50 | 
| 10 | all | 86 | 67 | $1.25 | 

Cost is Brave via RapidAPI at $0.000125 per search.

1. **Write the query the way the headline is written.** LinkedIn titles read "VP Sales at Acme". Quoting`"at Acme"` matches that phrasing directly and beat every other pattern.
2. **Long OR lists underperform.** Splitting titles across separate searches, or one title per search, found more people than one big OR list.
3. **The domain is a weak anchor.** Profiles rarely print`acme.com` , so domain queries found fewer people than name queries.
4. **`site:` and page 2 returned nothing** on the RapidAPI Brave endpoint. Put`linkedin` or`linkedin.com/in` in the query as plain words instead.
5. **Name collisions are the main error.** In a 25-hit sample, about 5 were the wrong company: "Runway" matched Runway Growth Capital, "Mercor" matched Mercor Slovakia, "SHIELD" matched Shield AI. Short or generic company names are the worst. Pass the target domain plus each candidate's headline to a small model and ask "same company? yes/no".

Same shape as pattern G, swapping the title list. **These are templates, not measured.** Only the senior-leadership numbers above were tested.

| Department | Query | 
|---|---|
| Sales | `linkedin "at {co}" ("VP Sales" OR "Head of Sales" OR "Sales Director" OR CRO OR "Chief Revenue Officer")` | 
| Marketing | `linkedin "at {co}" (CMO OR "VP Marketing" OR "Head of Marketing" OR "Marketing Director" OR "Head of Growth" OR "Demand Generation")` | 
| RevOps / Sales Ops | `linkedin "at {co}" ("Revenue Operations" OR RevOps OR "Sales Operations" OR "GTM Operations")` | 
| Engineering | `linkedin "at {co}" (CTO OR "VP Engineering" OR "Head of Engineering" OR "Engineering Director")` | 
| Product | `linkedin "at {co}" (CPO OR "VP Product" OR "Head of Product" OR "Director of Product")` | 
| Data / AI | `linkedin "at {co}" ("Head of Data" OR "Chief Data Officer" OR "VP Data" OR "Head of AI" OR "Director of Analytics")` | 
| Security / IT | `linkedin "at {co}" (CISO OR CIO OR "Head of Security" OR "VP IT" OR "IT Director")` | 
| Finance | `linkedin "at {co}" (CFO OR "VP Finance" OR "Head of Finance" OR Controller OR "Finance Director")` | 
| People / HR | `linkedin "at {co}" (CHRO OR "Chief People Officer" OR "VP People" OR "Head of People" OR "HR Director")` | 
| Talent / Recruiting | `linkedin "at {co}" ("Head of Talent" OR "Talent Acquisition" OR "Recruiting Manager" OR "Head of Recruiting")` | 
| Customer Success | `linkedin "at {co}" ("VP Customer Success" OR "Head of Customer Success" OR "Customer Success Director" OR CCO)` | 
| Partnerships | `linkedin "at {co}" ("Head of Partnerships" OR "VP Partnerships" OR "Partnerships Director" OR "Business Development")` | 
| Operations | `linkedin "at {co}" (COO OR "VP Operations" OR "Head of Operations" OR "Operations Director")` | 
| Legal | `linkedin "at {co}" ("General Counsel" OR "Chief Legal Officer" OR "Head of Legal" OR "Legal Counsel")` | 
| Procurement | `linkedin "at {co}" (Procurement OR "Head of Purchasing" OR "Sourcing Manager" OR "Vendor Management")` | 

Tips for departments:

- If a department comes back thin, run a second query with fewer titles, or just one (`linkedin "at {co}" "Head of Marketing"` ). Short OR lists did better in our test.
- Add a plain `"{co}" linkedin` query as a catch-all. On its own it is weak, but it adds people the titled queries miss.
- `@` works too: many headlines read "Head of Data @ Acme". Try`linkedin "@ {co}"` as a variant.

``` python
import html, re

SENIOR = re.compile(r"\b(owner|founder|co-founder|chief|ceo|cto|cfo|coo|cmo|cro|cpo|president|vp|vice president|head of|director|general manager|partner|principal)\b", re.I)
FORMER = re.compile(r"\b(ex|former|formerly|prev|previously|past)\b[-\s@:]", re.I)

def norm(s):
    return re.sub(r"[^a-z0-9]", "", str(s).lower())

def parse(result, company):
    """One Brave web result -> {name, title, url} if it is a current senior person at company, else None."""
    url = str(result.get("url") or "")
    if "linkedin.com/in/" not in url:
        return None
    title = html.unescape(str(result.get("title") or "")).replace(" | LinkedIn", "")
    desc = html.unescape(str(result.get("description") or ""))
    parts = [p.strip() for p in re.split(r"\s[-–|]\s", title) if p.strip()]
    if len(parts) < 2:
        return None
    name, headline = parts[0], " - ".join(parts[1:])
    m = re.search(r"Experience:\s*([^·]+?)\s*(?:·|$)", desc)
    employer = m.group(1).strip() if m else ""
    c = norm(company)
    if not (c and (c in norm(employer) or c in norm(headline))):
        return None
    if not SENIOR.search(headline) or FORMER.search(headline):
        return None
    return {"name": name, "title": headline, "url": url.split("?")[0]}
```

Swap `SENIOR` for a department regex to score department queries. Dedupe on the `/in/<slug>` part of the URL across queries.
