> ## Documentation Index
> Fetch the complete documentation index at: https://developers.investorlift.com/llms.txt
> Use this file to discover all available pages before exploring further.

# I know the name, find the investor

> Search every deed name an investor buys under and read the match quality.

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/investors/search?q=Dana%20Rivera" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({ q: "Dana Rivera" });
  const res = await fetch(`https://api.investorlift.com/v1/investors/search?${params}`, {
    headers: { Authorization: `Bearer ${process.env.GM_API_KEY}` },
  });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os

  import requests

  r = requests.get(
      "https://api.investorlift.com/v1/investors/search",
      params={"q": "Dana Rivera"},
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

```json theme={null}
{
  "data": [
    { "id": "inv_0a20a550f33b", "market": "phx", "name": "ZAK VENTURES LLC", "state": "AZ",
      "kind": "FLIPPER", "scale": "large", "n_deals": 775,
      "matched_name": "RIVERA DANA", "matched_is_person": true, "match": "tokens", "similarity": null,
      "contact_redacted": false }
  ],
  "page": { "next_cursor": null, "limit": 10, "returned": 1, "capped": false }
}
```

The search reads **every** member name, not just the registry `name`, so a person's name finds the LLCs they buy
through.

<ResponseField name="match" type="string">
  How confident to be: `exact`, `tokens` (every word, any order), `contains`, or `trigram`. The last one is fuzzy.
  The API shows it only when the better methods matched fewer than 10 names, and then sets `similarity`.
</ResponseField>

<ResponseField name="matched_name" type="string | null">
  The deed name that matched, which is often not the display `name`. When it is a **person's** name, this host does
  not serve it: you get it null with `contact_redacted: true`. You can still open the profile by `id`.
</ResponseField>

<ResponseField name="page.next_cursor" type="null">
  Always null here. This is a ranked lookup, not a list: at most 50 hits, `limit` defaults to 10.
</ResponseField>

<ResponseField name="page.capped" type="boolean">
  True when more names matched than `limit` allowed, and the API cut the page there. A page of exactly `limit` hits
  with `capped: false` is the whole set. When it is true, narrow with `market=` or a longer query.
</ResponseField>

Use it to map a name you already have to an id, then open
[the profile](/api-reference/endpoints/investors-get). Store the id, not the name. After a data refresh, a merged id
still answers, as `200` with `meta.resolved_from` naming the old id. A retired one answers
[`410 gone`](/guides/concepts/errors#gone), which sends you back to this search.
[After a data refresh](/guides/walkthroughs/investor-profile#after-a-data-refresh) has both rows.


## Related topics

- [Find an investor by name](/api-reference/endpoints/investors-search.md)
- [Find an investor by any name it buys under](/api-reference/investors/find-an-investor-by-any-name-it-buys-under.md)
- [Find an Investorlift listing company by name, brand or entity](/api-reference/wholesale/find-an-investorlift-listing-company-by-name-brand-or-entity.md)
- [Find a lender](/api-reference/endpoints/lenders-search.md)
- [Find an Investorlift listing company](/api-reference/endpoints/wholesalers-search.md)
