> Reverse Contact API documentation. This is the Markdown copy of https://docs.reversecontact.com/sdk/python/search
> Every page is listed at https://docs.reversecontact.com/llms.txt, every endpoint with its credit cost and status at https://docs.reversecontact.com/catalog.json

# client.search

> Search and count people or companies with the Python SDK, inspect filter fields, and use budgeted iterators with documented parameters and costs.

- Last verified: 2026-11-04

Search people and companies, count matches, inspect filters, and iterate within a result budget.

| Method | Endpoint | Cost |
| ------ | -------- | ---- |
| [`people()`](#people) | [POST /v2/search/people](https://docs.reversecontact.com/endpoints/search-people) | 1 credit per profile delivered. A page with no profile is free. |
| [`iter_people()`](#iter_people) | [POST /v2/search/people](https://docs.reversecontact.com/endpoints/search-people) | 1 credit per profile delivered. A page with no profile is free. |
| [`people_by_prompt()`](#people_by_prompt) | [POST /v2/search/people/prompt](https://docs.reversecontact.com/endpoints/search-people-prompt) | 1 credit per page for the search, plus 1 credit per profile delivered. |
| [`iter_people_by_prompt()`](#iter_people_by_prompt) | [POST /v2/search/people/prompt](https://docs.reversecontact.com/endpoints/search-people-prompt) | 1 credit per page for the search, plus 1 credit per profile delivered. |
| [`people_lookalike()`](#people_lookalike) | [POST /v2/search/people/lookalike](https://docs.reversecontact.com/endpoints/search-people-lookalike) | 1 credit per profile delivered. A page with no profile is free. |
| [`iter_people_lookalike()`](#iter_people_lookalike) | [POST /v2/search/people/lookalike](https://docs.reversecontact.com/endpoints/search-people-lookalike) | 1 credit per profile delivered. A page with no profile is free. |
| [`count_people()`](#count_people) | [POST /v2/search/people/count](https://docs.reversecontact.com/endpoints/search-people-count) | Free. |
| [`people_auto_suggestion()`](#people_auto_suggestion) | [POST /v2/search/people/auto-suggestion](https://docs.reversecontact.com/endpoints/search-people-auto-suggestion) | Free. |
| [`organizations()`](#organizations) | [POST /v2/search/organizations](https://docs.reversecontact.com/endpoints/search-companies) | 1 credit per company delivered. A page with no company is free. |
| [`iter_organizations()`](#iter_organizations) | [POST /v2/search/organizations](https://docs.reversecontact.com/endpoints/search-companies) | 1 credit per company delivered. A page with no company is free. |
| [`organizations_by_prompt()`](#organizations_by_prompt) | [POST /v2/search/organizations/prompt](https://docs.reversecontact.com/endpoints/search-companies-prompt) | 1 credit per page for the search, plus 1 credit per company delivered. |
| [`iter_organizations_by_prompt()`](#iter_organizations_by_prompt) | [POST /v2/search/organizations/prompt](https://docs.reversecontact.com/endpoints/search-companies-prompt) | 1 credit per page for the search, plus 1 credit per company delivered. |
| [`count_organizations()`](#count_organizations) | [POST /v2/search/organizations/count](https://docs.reversecontact.com/endpoints/search-companies-count) | Free. |
| [`people_fields()`](#people_fields) | [GET /v2/search/people/available-fields](https://docs.reversecontact.com/endpoints/search-people-available-fields) | Free. |
| [`organizations_fields()`](#organizations_fields) | [GET /v2/search/organizations/available-fields](https://docs.reversecontact.com/endpoints/search-companies-available-fields) | Free. |

## Calling conventions

Examples assume `RC_API_KEY` is set. Replace example ids with ids returned by your own requests. Signatures show the published 0.3.0 synchronous methods. Use the same arguments with the [Python async client](https://docs.reversecontact.com/sdk/python/async-client).

`models` refers to `reversecontact.types`. `NOT_GIVEN` and `NotGiven` are the SDK's internal markers for omitted arguments. Leave these arguments out of your calls. For API body parameters, passing `None` sends an explicit null. Transport options use `None` to inherit their defaults. `Timeout` means a number of seconds or `httpx.Timeout`. Supply parameters marked **Required** to Python or to the API, even when the generated signature permits omission.

JSON response objects expose `data`, `quotas`, `metadata` and `http_response`. Check optional fields for `None`. See [First call](https://docs.reversecontact.com/sdk/python/first-call) for the response envelope. CSV methods return text and iterators yield items.

HTTP failures raise an `APIError` subclass based on the response: `BadRequestError`, `AuthenticationError`, `InsufficientCreditsError`, `PermissionDeniedError`, `NotFoundError`, `ConflictError`, `GoneError`, `UnprocessableEntityError`, `RateLimitError`, `DailyLimitError`, `KeyCreditLimitError`, `UnavailableForLegalReasonsError` or `InternalServerError`. See the [error mapping and retry rules](https://docs.reversecontact.com/sdk/python/errors-and-retries).

Set `max_results` when you use a search iterator. The iterator reduces the final page to the remaining budget and makes no request for `0`. A `Page` has `data`, `next_cursor`, `count`, `quotas`, `has_next_page()` and `get_next_page()`. Prompt searches also expose `interpretation`. See [Search within a budget](https://docs.reversecontact.com/sdk/python/search-budget).

## people

Call [People search](https://docs.reversecontact.com/endpoints/search-people) with `client.search.people()`.

**Python SDK**

```python [Python SDK]
def people(
    *,
    first_name: str | NotGiven | None = NOT_GIVEN,
    last_name: str | NotGiven | None = NOT_GIVEN,
    headline: str | NotGiven | None = NOT_GIVEN,
    is_open_to_work: bool | NotGiven | None = NOT_GIVEN,
    is_currently_employed: bool | NotGiven | None = NOT_GIVEN,
    is_premium: bool | NotGiven | None = NOT_GIVEN,
    is_verified: bool | NotGiven | None = NOT_GIVEN,
    followers_count: models.SearchPeopleParamsFollowersCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    connections_count: models.SearchPeopleParamsConnectionsCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_name: str | NotGiven | None = NOT_GIVEN,
    exclude_current_company_name: str | NotGiven | None = NOT_GIVEN,
    current_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_employee_count_range: models.SearchPeopleParamsCurrentCompanyEmployeeCountRange | dict[str, object] | NotGiven | None = NOT_GIVEN,
    current_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_sub_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_sub_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_seniority: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_seniority: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    total_experience_months: models.SearchPeopleParamsTotalExperienceMonths | dict[str, object] | NotGiven | None = NOT_GIVEN,
    experience: list[models.SearchPeopleParamsExperienceItem | dict[str, object]] | NotGiven | None = NOT_GIVEN,
    skills: str | list[str] | NotGiven | None = NOT_GIVEN,
    languages: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_languages: str | list[str] | NotGiven | None = NOT_GIVEN,
    keywords: str | NotGiven | None = NOT_GIVEN,
    changed_jobs_within_days: int | NotGiven | None = NOT_GIVEN,
    location: models.SearchPeopleParamsLocation | dict[str, object] | NotGiven | None = NOT_GIVEN,
    max_data_age_date: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Page[models.PersonFull]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `first_name` | `str \| NotGiven \| None` | Optional. Filter by first name |
| `last_name` | `str \| NotGiven \| None` | Optional. Filter by last name |
| `headline` | `str \| NotGiven \| None` | Optional. Match keywords found in the profile headline |
| `is_open_to_work` | `bool \| NotGiven \| None` | Optional. Restrict to profiles flagged open-to-work |
| `is_currently_employed` | `bool \| NotGiven \| None` | Optional. Restrict to profiles that have a current employer |
| `is_premium` | `bool \| NotGiven \| None` | Optional. Restrict to Social Premium members |
| `is_verified` | `bool \| NotGiven \| None` | Optional. Restrict to profiles with a verification badge |
| `followers_count` | `models.SearchPeopleParamsFollowersCount \| dict[str, object] \| NotGiven \| None` | Optional. Follower count range, with inclusive `min` and `max` bounds. |
| `connections_count` | `models.SearchPeopleParamsConnectionsCount \| dict[str, object] \| NotGiven \| None` | Optional. Connection count range, bounds inclusive. One bound is enough: { "min": 501 } keeps profiles with more than 500 connections |
| `position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past position title, or array of titles (OR-matched) |
| `exclude_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past position title, or array of titles, to exclude |
| `company_name` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company name, or array of names (OR-matched) |
| `exclude_company_name` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company name, or array of names, to exclude |
| `company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company industry, from the same industry list |
| `exclude_company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company industry, or array, to exclude |
| `company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company `com_...` id, or array of ids |
| `exclude_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company `com_...` id, or array of ids, to exclude |
| `company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company Social identifier, or array of identifiers |
| `exclude_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company Social identifier, or array, to exclude |
| `company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company public ID or slug, or array |
| `exclude_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company public ID or slug, or array, to exclude |
| `current_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current position title, or array of titles: a person matches if their current title matches any of them |
| `exclude_current_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current position title, or array of titles, to exclude from results |
| `current_company_name` | `str \| NotGiven \| None` | Optional. Match the current employer name |
| `exclude_current_company_name` | `str \| NotGiven \| None` | Optional. Exclude the current employer name |
| `current_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Reverse Contact internal id (`com_...`) of the current employer |
| `exclude_current_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer `com_...` id, or array of ids, to exclude |
| `current_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer Social identifier, or array of identifiers |
| `exclude_current_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer Social identifier, or array, to exclude |
| `current_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer public ID or slug, or array |
| `exclude_current_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer public ID or slug, or array, to exclude |
| `current_company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer industry. See [Industry values](https://docs.reversecontact.com/reference/industries) for the full list |
| `current_company_employee_count_range` | `models.SearchPeopleParamsCurrentCompanyEmployeeCountRange \| dict[str, object] \| NotGiven \| None` | Optional. Current employer size range, with inclusive `min` and `max` bounds. |
| `current_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current function from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current function, or array of functions, to exclude |
| `current_sub_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current sub-function from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_sub_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current sub-function, or array of sub-functions, to exclude |
| `current_seniority` | `str \| list[str] \| NotGiven \| None` | Optional. Current seniority from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_seniority` | `str \| list[str] \| NotGiven \| None` | Optional. Current seniority, or array of seniorities, to exclude |
| `current_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of the current position, or array (OR-matched). See [Contract types](https://docs.reversecontact.com/endpoints/search-people#contract-types) |
| `exclude_current_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of the current position, or array, to exclude. Requires a positive filter alongside it |
| `contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of any position, current or past, or array (OR-matched) |
| `exclude_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of any position, current or past, or array, to exclude. Requires a positive filter alongside it |
| `school_name` | `str \| list[str] \| NotGiven \| None` | Optional. School name, or array of names: a person matches if they attended any of them. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `school_id` | `str \| list[str] \| NotGiven \| None` | Optional. Reverse Contact school id (`sch_...`), or array. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `school_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. School Social identifier, or array. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `total_experience_months` | `models.SearchPeopleParamsTotalExperienceMonths \| dict[str, object] \| NotGiven \| None` | Optional. Total work experience in months, with inclusive `min` and `max` bounds. |
| `experience` | `list[models.SearchPeopleParamsExperienceItem \| dict[str, object]] \| NotGiven \| None` | Optional. Past-experience requirements. All entries are AND-combined |
| `skills` | `str \| list[str] \| NotGiven \| None` | Optional. Skill name, or array of skill names: a person matches if they list any of them. See [Skills](https://docs.reversecontact.com/endpoints/search-people#skills) |
| `languages` | `str \| list[str] \| NotGiven \| None` | Optional. Language name in English, or array: a person matches if they speak any of them. See [Languages](https://docs.reversecontact.com/endpoints/search-people#languages) |
| `exclude_languages` | `str \| list[str] \| NotGiven \| None` | Optional. Language name in English, or array, to exclude. Requires a positive filter alongside it |
| `keywords` | `str \| NotGiven \| None` | Optional. Words searched across the whole profile: every word must appear, in any field. See [Keywords](https://docs.reversecontact.com/endpoints/search-people#keywords) |
| `changed_jobs_within_days` | `int \| NotGiven \| None` | Optional. `30`, `60`, `90` or `120`: the current position started within that many days. See [Recent job change](https://docs.reversecontact.com/endpoints/search-people#recent-job-change) |
| `location` | `models.SearchPeopleParamsLocation \| dict[str, object] \| NotGiven \| None` | Optional. Location filters such as `countryCode`, `area`, `region` and `city`. |
| `max_data_age_date` | `str \| NotGiven \| None` | Optional. ISO 8601 datetime. Only returns profiles refreshed after this date |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page |
| `per_page` | `int \| NotGiven \| None` | Optional. Profiles per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Page[models.PersonFull]`. A page with records in `data`, a `next_cursor`, `has_next_page()` and `get_next_page()`. The next-page method reuses the filters and returns `None` after the last page.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    page = client.search.people(current_function="Marketing", per_page=10)
    for item in page.data:
        if item is not None:
            print(item.to_dict())
```
## iter_people

Call [People search](https://docs.reversecontact.com/endpoints/search-people) with `client.search.iter_people()`.

**Python SDK**

```python [Python SDK]
def iter_people(
    *,
    first_name: str | NotGiven | None = NOT_GIVEN,
    last_name: str | NotGiven | None = NOT_GIVEN,
    headline: str | NotGiven | None = NOT_GIVEN,
    is_open_to_work: bool | NotGiven | None = NOT_GIVEN,
    is_currently_employed: bool | NotGiven | None = NOT_GIVEN,
    is_premium: bool | NotGiven | None = NOT_GIVEN,
    is_verified: bool | NotGiven | None = NOT_GIVEN,
    followers_count: models.SearchPeopleParamsFollowersCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    connections_count: models.SearchPeopleParamsConnectionsCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_name: str | NotGiven | None = NOT_GIVEN,
    exclude_current_company_name: str | NotGiven | None = NOT_GIVEN,
    current_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_employee_count_range: models.SearchPeopleParamsCurrentCompanyEmployeeCountRange | dict[str, object] | NotGiven | None = NOT_GIVEN,
    current_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_sub_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_sub_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_seniority: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_seniority: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    total_experience_months: models.SearchPeopleParamsTotalExperienceMonths | dict[str, object] | NotGiven | None = NOT_GIVEN,
    experience: list[models.SearchPeopleParamsExperienceItem | dict[str, object]] | NotGiven | None = NOT_GIVEN,
    skills: str | list[str] | NotGiven | None = NOT_GIVEN,
    languages: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_languages: str | list[str] | NotGiven | None = NOT_GIVEN,
    keywords: str | NotGiven | None = NOT_GIVEN,
    changed_jobs_within_days: int | NotGiven | None = NOT_GIVEN,
    location: models.SearchPeopleParamsLocation | dict[str, object] | NotGiven | None = NOT_GIVEN,
    max_data_age_date: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    max_results: int,
    **extra: object,
) -> Iterator[models.PersonFull | None]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `first_name` | `str \| NotGiven \| None` | Optional. Filter by first name |
| `last_name` | `str \| NotGiven \| None` | Optional. Filter by last name |
| `headline` | `str \| NotGiven \| None` | Optional. Match keywords found in the profile headline |
| `is_open_to_work` | `bool \| NotGiven \| None` | Optional. Restrict to profiles flagged open-to-work |
| `is_currently_employed` | `bool \| NotGiven \| None` | Optional. Restrict to profiles that have a current employer |
| `is_premium` | `bool \| NotGiven \| None` | Optional. Restrict to Social Premium members |
| `is_verified` | `bool \| NotGiven \| None` | Optional. Restrict to profiles with a verification badge |
| `followers_count` | `models.SearchPeopleParamsFollowersCount \| dict[str, object] \| NotGiven \| None` | Optional. Follower count range, with inclusive `min` and `max` bounds. |
| `connections_count` | `models.SearchPeopleParamsConnectionsCount \| dict[str, object] \| NotGiven \| None` | Optional. Connection count range, bounds inclusive. One bound is enough: { "min": 501 } keeps profiles with more than 500 connections |
| `position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past position title, or array of titles (OR-matched) |
| `exclude_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past position title, or array of titles, to exclude |
| `company_name` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company name, or array of names (OR-matched) |
| `exclude_company_name` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company name, or array of names, to exclude |
| `company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company industry, from the same industry list |
| `exclude_company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company industry, or array, to exclude |
| `company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company `com_...` id, or array of ids |
| `exclude_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company `com_...` id, or array of ids, to exclude |
| `company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company Social identifier, or array of identifiers |
| `exclude_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company Social identifier, or array, to exclude |
| `company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company public ID or slug, or array |
| `exclude_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company public ID or slug, or array, to exclude |
| `current_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current position title, or array of titles: a person matches if their current title matches any of them |
| `exclude_current_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current position title, or array of titles, to exclude from results |
| `current_company_name` | `str \| NotGiven \| None` | Optional. Match the current employer name |
| `exclude_current_company_name` | `str \| NotGiven \| None` | Optional. Exclude the current employer name |
| `current_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Reverse Contact internal id (`com_...`) of the current employer |
| `exclude_current_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer `com_...` id, or array of ids, to exclude |
| `current_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer Social identifier, or array of identifiers |
| `exclude_current_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer Social identifier, or array, to exclude |
| `current_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer public ID or slug, or array |
| `exclude_current_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer public ID or slug, or array, to exclude |
| `current_company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer industry. See [Industry values](https://docs.reversecontact.com/reference/industries) for the full list |
| `current_company_employee_count_range` | `models.SearchPeopleParamsCurrentCompanyEmployeeCountRange \| dict[str, object] \| NotGiven \| None` | Optional. Current employer size range, with inclusive `min` and `max` bounds. |
| `current_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current function from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current function, or array of functions, to exclude |
| `current_sub_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current sub-function from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_sub_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current sub-function, or array of sub-functions, to exclude |
| `current_seniority` | `str \| list[str] \| NotGiven \| None` | Optional. Current seniority from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_seniority` | `str \| list[str] \| NotGiven \| None` | Optional. Current seniority, or array of seniorities, to exclude |
| `current_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of the current position, or array (OR-matched). See [Contract types](https://docs.reversecontact.com/endpoints/search-people#contract-types) |
| `exclude_current_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of the current position, or array, to exclude. Requires a positive filter alongside it |
| `contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of any position, current or past, or array (OR-matched) |
| `exclude_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of any position, current or past, or array, to exclude. Requires a positive filter alongside it |
| `school_name` | `str \| list[str] \| NotGiven \| None` | Optional. School name, or array of names: a person matches if they attended any of them. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `school_id` | `str \| list[str] \| NotGiven \| None` | Optional. Reverse Contact school id (`sch_...`), or array. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `school_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. School Social identifier, or array. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `total_experience_months` | `models.SearchPeopleParamsTotalExperienceMonths \| dict[str, object] \| NotGiven \| None` | Optional. Total work experience in months, with inclusive `min` and `max` bounds. |
| `experience` | `list[models.SearchPeopleParamsExperienceItem \| dict[str, object]] \| NotGiven \| None` | Optional. Past-experience requirements. All entries are AND-combined |
| `skills` | `str \| list[str] \| NotGiven \| None` | Optional. Skill name, or array of skill names: a person matches if they list any of them. See [Skills](https://docs.reversecontact.com/endpoints/search-people#skills) |
| `languages` | `str \| list[str] \| NotGiven \| None` | Optional. Language name in English, or array: a person matches if they speak any of them. See [Languages](https://docs.reversecontact.com/endpoints/search-people#languages) |
| `exclude_languages` | `str \| list[str] \| NotGiven \| None` | Optional. Language name in English, or array, to exclude. Requires a positive filter alongside it |
| `keywords` | `str \| NotGiven \| None` | Optional. Words searched across the whole profile: every word must appear, in any field. See [Keywords](https://docs.reversecontact.com/endpoints/search-people#keywords) |
| `changed_jobs_within_days` | `int \| NotGiven \| None` | Optional. `30`, `60`, `90` or `120`: the current position started within that many days. See [Recent job change](https://docs.reversecontact.com/endpoints/search-people#recent-job-change) |
| `location` | `models.SearchPeopleParamsLocation \| dict[str, object] \| NotGiven \| None` | Optional. Location filters such as `countryCode`, `area`, `region` and `city`. |
| `max_data_age_date` | `str \| NotGiven \| None` | Optional. ISO 8601 datetime. Only returns profiles refreshed after this date |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page |
| `per_page` | `int \| NotGiven \| None` | Optional. Profiles per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `max_results` | `int` | **Required.** Maximum number of paid results to request. Must be a non-negative integer. `0` makes no request. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Iterator[models.PersonFull | None]`. An iterator of typed records. Entries can be `None`. The iterator fetches pages only as you advance. `max_results` caps paid results, not prompt page fees.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options, invalid `max_results` or `per_page`, or a repeated pagination cursor. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    for item in client.search.iter_people(current_function="Marketing", max_results=10):
        if item is not None:
            print(item.to_dict())
```
## people_by_prompt

Call [Agentic Search](https://docs.reversecontact.com/endpoints/search-people-prompt) with `client.search.people_by_prompt()`.

**Python SDK**

```python [Python SDK]
def people_by_prompt(
    *,
    prompt: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Page[models.PersonFull]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `prompt` | `str \| NotGiven \| None` | **Required.** Plain-language description of the people to find, in any language. At least 3 characters and at most 1000 tokens |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page with the same `prompt` |
| `per_page` | `int \| NotGiven \| None` | Optional. Profiles per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Page[models.PersonFull]`. A page with records in `data`, a `next_cursor`, `has_next_page()` and `get_next_page()`. The next-page method reuses the filters and returns `None` after the last page. `interpretation` contains the filters inferred from the prompt.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    page = client.search.people_by_prompt(prompt="Marketing leaders in France", per_page=10)
    for item in page.data:
        if item is not None:
            print(item.to_dict())
```
## iter_people_by_prompt

Call [Agentic Search](https://docs.reversecontact.com/endpoints/search-people-prompt) with `client.search.iter_people_by_prompt()`.

**Python SDK**

```python [Python SDK]
def iter_people_by_prompt(
    *,
    prompt: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    max_results: int,
    **extra: object,
) -> Iterator[models.PersonFull | None]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `prompt` | `str \| NotGiven \| None` | **Required.** Plain-language description of the people to find, in any language. At least 3 characters and at most 1000 tokens |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page with the same `prompt` |
| `per_page` | `int \| NotGiven \| None` | Optional. Profiles per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `max_results` | `int` | **Required.** Maximum number of paid results to request. Must be a non-negative integer. `0` makes no request. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Iterator[models.PersonFull | None]`. An iterator of typed records. Entries can be `None`. The iterator fetches pages only as you advance. `max_results` caps paid results, not prompt page fees.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options, invalid `max_results` or `per_page`, or a repeated pagination cursor. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    for item in client.search.iter_people_by_prompt(prompt="Marketing leaders in France", max_results=10):
        if item is not None:
            print(item.to_dict())
```
## people_lookalike

Provide exactly one seed, `url` or `id`, to `client.search.people_lookalike()`. Sending both returns an HTTP 422 response. See [People lookalike](https://docs.reversecontact.com/endpoints/search-people-lookalike).

**Python SDK**

```python [Python SDK]
def people_lookalike(
    *,
    url: str | NotGiven | None = NOT_GIVEN,
    id: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Page[models.PersonFull]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `url` | `str \| NotGiven \| None` | **Required for the selected strategy.** Public Social profile URL of the seed (e.g. `https://social.com/in/janedoe`). Required unless `id` is given. |
| `id` | `str \| NotGiven \| None` | **Required for the selected strategy.** Reverse Contact person id of the seed (e.g. `prs_01jbd5vewyenebxgaz869ffe5t`), as returned in the `id` field of any person response. Required unless `url` is given. |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page |
| `per_page` | `int \| NotGiven \| None` | Optional. Profiles per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Page[models.PersonFull]`. A page with records in `data`, a `next_cursor`, `has_next_page()` and `get_next_page()`. The next-page method reuses the filters and returns `None` after the last page.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    page = client.search.people_lookalike(url="https://social.com/in/janedoe", per_page=10)
    for item in page.data:
        if item is not None:
            print(item.to_dict())
```
## iter_people_lookalike

Provide exactly one seed, `url` or `id`, to `client.search.iter_people_lookalike()`. Sending both returns an HTTP 422 response. See [People lookalike](https://docs.reversecontact.com/endpoints/search-people-lookalike).

**Python SDK**

```python [Python SDK]
def iter_people_lookalike(
    *,
    url: str | NotGiven | None = NOT_GIVEN,
    id: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    max_results: int,
    **extra: object,
) -> Iterator[models.PersonFull | None]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `url` | `str \| NotGiven \| None` | **Required for the selected strategy.** Public Social profile URL of the seed (e.g. `https://social.com/in/janedoe`). Required unless `id` is given. |
| `id` | `str \| NotGiven \| None` | **Required for the selected strategy.** Reverse Contact person id of the seed (e.g. `prs_01jbd5vewyenebxgaz869ffe5t`), as returned in the `id` field of any person response. Required unless `url` is given. |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page |
| `per_page` | `int \| NotGiven \| None` | Optional. Profiles per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `max_results` | `int` | **Required.** Maximum number of paid results to request. Must be a non-negative integer. `0` makes no request. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Iterator[models.PersonFull | None]`. An iterator of typed records. Entries can be `None`. The iterator fetches pages only as you advance. `max_results` caps paid results, not prompt page fees.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options, invalid `max_results` or `per_page`, or a repeated pagination cursor. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    for item in client.search.iter_people_lookalike(url="https://social.com/in/janedoe", max_results=10):
        if item is not None:
            print(item.to_dict())
```
## count_people

Call [People search count](https://docs.reversecontact.com/endpoints/search-people-count) with `client.search.count_people()`.

**Python SDK**

```python [Python SDK]
def count_people(
    *,
    first_name: str | NotGiven | None = NOT_GIVEN,
    last_name: str | NotGiven | None = NOT_GIVEN,
    headline: str | NotGiven | None = NOT_GIVEN,
    is_open_to_work: bool | NotGiven | None = NOT_GIVEN,
    is_currently_employed: bool | NotGiven | None = NOT_GIVEN,
    is_premium: bool | NotGiven | None = NOT_GIVEN,
    is_verified: bool | NotGiven | None = NOT_GIVEN,
    followers_count: models.CountPeopleParamsFollowersCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    connections_count: models.CountPeopleParamsConnectionsCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_position_title: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_name: str | NotGiven | None = NOT_GIVEN,
    exclude_current_company_name: str | NotGiven | None = NOT_GIVEN,
    current_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_company_public_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_company_employee_count_range: models.CountPeopleParamsCurrentCompanyEmployeeCountRange | dict[str, object] | NotGiven | None = NOT_GIVEN,
    current_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_sub_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_sub_function: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_seniority: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_seniority: str | list[str] | NotGiven | None = NOT_GIVEN,
    current_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_current_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_contract_type: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_name: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    school_linkedin_id: str | list[str] | NotGiven | None = NOT_GIVEN,
    total_experience_months: models.CountPeopleParamsTotalExperienceMonths | dict[str, object] | NotGiven | None = NOT_GIVEN,
    experience: list[models.CountPeopleParamsExperienceItem | dict[str, object]] | NotGiven | None = NOT_GIVEN,
    skills: str | list[str] | NotGiven | None = NOT_GIVEN,
    languages: str | list[str] | NotGiven | None = NOT_GIVEN,
    exclude_languages: str | list[str] | NotGiven | None = NOT_GIVEN,
    keywords: str | NotGiven | None = NOT_GIVEN,
    changed_jobs_within_days: int | NotGiven | None = NOT_GIVEN,
    location: models.CountPeopleParamsLocation | dict[str, object] | NotGiven | None = NOT_GIVEN,
    max_data_age_date: str | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Result[models.SearchPeopleCountData]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `first_name` | `str \| NotGiven \| None` | Optional. Filter by first name |
| `last_name` | `str \| NotGiven \| None` | Optional. Filter by last name |
| `headline` | `str \| NotGiven \| None` | Optional. Match keywords found in the profile headline |
| `is_open_to_work` | `bool \| NotGiven \| None` | Optional. Restrict to profiles flagged open-to-work |
| `is_currently_employed` | `bool \| NotGiven \| None` | Optional. Restrict to profiles that have a current employer |
| `is_premium` | `bool \| NotGiven \| None` | Optional. Restrict to Social Premium members |
| `is_verified` | `bool \| NotGiven \| None` | Optional. Restrict to profiles with a verification badge |
| `followers_count` | `models.CountPeopleParamsFollowersCount \| dict[str, object] \| NotGiven \| None` | Optional. Follower count range, with inclusive `min` and `max` bounds. |
| `connections_count` | `models.CountPeopleParamsConnectionsCount \| dict[str, object] \| NotGiven \| None` | Optional. Connection count range, bounds inclusive. One bound is enough: { "min": 501 } keeps profiles with more than 500 connections |
| `position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past position title, or array of titles (OR-matched) |
| `exclude_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past position title, or array of titles, to exclude |
| `company_name` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company name, or array of names (OR-matched) |
| `exclude_company_name` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company name, or array of names, to exclude |
| `company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company industry, from the same industry list |
| `exclude_company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company industry, or array, to exclude |
| `company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company `com_...` id, or array of ids |
| `exclude_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company `com_...` id, or array of ids, to exclude |
| `company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company Social identifier, or array of identifiers |
| `exclude_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company Social identifier, or array, to exclude |
| `company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company public ID or slug, or array |
| `exclude_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current or past company public ID or slug, or array, to exclude |
| `current_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current position title, or array of titles: a person matches if their current title matches any of them |
| `exclude_current_position_title` | `str \| list[str] \| NotGiven \| None` | Optional. Current position title, or array of titles, to exclude from results |
| `current_company_name` | `str \| NotGiven \| None` | Optional. Match the current employer name |
| `exclude_current_company_name` | `str \| NotGiven \| None` | Optional. Exclude the current employer name |
| `current_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Reverse Contact internal id (`com_...`) of the current employer |
| `exclude_current_company_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer `com_...` id, or array of ids, to exclude |
| `current_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer Social identifier, or array of identifiers |
| `exclude_current_company_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer Social identifier, or array, to exclude |
| `current_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer public ID or slug, or array |
| `exclude_current_company_public_id` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer public ID or slug, or array, to exclude |
| `current_company_industry` | `str \| list[str] \| NotGiven \| None` | Optional. Current employer industry. See [Industry values](https://docs.reversecontact.com/reference/industries) for the full list |
| `current_company_employee_count_range` | `models.CountPeopleParamsCurrentCompanyEmployeeCountRange \| dict[str, object] \| NotGiven \| None` | Optional. Current employer size range, with inclusive `min` and `max` bounds. |
| `current_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current function from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current function, or array of functions, to exclude |
| `current_sub_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current sub-function from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_sub_function` | `str \| list[str] \| NotGiven \| None` | Optional. Current sub-function, or array of sub-functions, to exclude |
| `current_seniority` | `str \| list[str] \| NotGiven \| None` | Optional. Current seniority from the [position taxonomy](https://docs.reversecontact.com/endpoints/search-people#position-taxonomy) |
| `exclude_current_seniority` | `str \| list[str] \| NotGiven \| None` | Optional. Current seniority, or array of seniorities, to exclude |
| `current_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of the current position, or array (OR-matched). See [Contract types](https://docs.reversecontact.com/endpoints/search-people#contract-types) |
| `exclude_current_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of the current position, or array, to exclude. Requires a positive filter alongside it |
| `contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of any position, current or past, or array (OR-matched) |
| `exclude_contract_type` | `str \| list[str] \| NotGiven \| None` | Optional. Contract type of any position, current or past, or array, to exclude. Requires a positive filter alongside it |
| `school_name` | `str \| list[str] \| NotGiven \| None` | Optional. School name, or array of names: a person matches if they attended any of them. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `school_id` | `str \| list[str] \| NotGiven \| None` | Optional. Reverse Contact school id (`sch_...`), or array. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `school_linkedin_id` | `str \| list[str] \| NotGiven \| None` | Optional. School Social identifier, or array. See [Schools](https://docs.reversecontact.com/endpoints/search-people#schools) |
| `total_experience_months` | `models.CountPeopleParamsTotalExperienceMonths \| dict[str, object] \| NotGiven \| None` | Optional. Total work experience in months, with inclusive `min` and `max` bounds. |
| `experience` | `list[models.CountPeopleParamsExperienceItem \| dict[str, object]] \| NotGiven \| None` | Optional. Past-experience requirements. All entries are AND-combined |
| `skills` | `str \| list[str] \| NotGiven \| None` | Optional. Skill name, or array of skill names: a person matches if they list any of them. See [Skills](https://docs.reversecontact.com/endpoints/search-people#skills) |
| `languages` | `str \| list[str] \| NotGiven \| None` | Optional. Language name in English, or array: a person matches if they speak any of them. See [Languages](https://docs.reversecontact.com/endpoints/search-people#languages) |
| `exclude_languages` | `str \| list[str] \| NotGiven \| None` | Optional. Language name in English, or array, to exclude. Requires a positive filter alongside it |
| `keywords` | `str \| NotGiven \| None` | Optional. Words searched across the whole profile: every word must appear, in any field. See [Keywords](https://docs.reversecontact.com/endpoints/search-people#keywords) |
| `changed_jobs_within_days` | `int \| NotGiven \| None` | Optional. `30`, `60`, `90` or `120`: the current position started within that many days. See [Recent job change](https://docs.reversecontact.com/endpoints/search-people#recent-job-change) |
| `location` | `models.CountPeopleParamsLocation \| dict[str, object] \| NotGiven \| None` | Optional. Location filters such as `countryCode`, `area`, `region` and `city`. |
| `max_data_age_date` | `str \| NotGiven \| None` | Optional. ISO 8601 datetime. Only returns profiles refreshed after this date |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Result[models.SearchPeopleCountData]`. `data.count` is the number of matching people. The call does not extract profiles.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    result = client.search.count_people(current_function="Marketing")
    print(result.data if result is not None else None)
```
## people_auto_suggestion

Call [People auto-suggestion](https://docs.reversecontact.com/endpoints/search-people-auto-suggestion) with `client.search.people_auto_suggestion()`.

**Python SDK**

```python [Python SDK]
def people_auto_suggestion(
    *,
    field: str | NotGiven | None = NOT_GIVEN,
    query: str | NotGiven | None = NOT_GIVEN,
    limit: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Result[models.SearchPeopleAutoSuggestionData]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `field` | `str \| NotGiven \| None` | **Required.** The filter to complete. `skills` is the only value today |
| `query` | `str \| NotGiven \| None` | **Required.** What has been typed so far, 1 to 100 characters. Case and accents are ignored |
| `limit` | `int \| NotGiven \| None` | Optional. Maximum values returned, from 1 to 25. Defaults to 10 |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Result[models.SearchPeopleAutoSuggestionData]`. `data` contains the selected `field` and its `suggestions`.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    result = client.search.people_auto_suggestion(field="currentPositionTitle", query="market", limit=5)
    print(result.data if result is not None else None)
```
## organizations

Provide at least one company filter. Use `max_data_age_date` with another filter. When `followers_count` is the only filter, supply both `min` and `max`.

Call [Company search](https://docs.reversecontact.com/endpoints/search-companies) with `client.search.organizations()`.

**Python SDK**

```python [Python SDK]
def organizations(
    *,
    company_name: str | NotGiven | None = NOT_GIVEN,
    company_domain: str | NotGiven | None = NOT_GIVEN,
    industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    specialities: str | list[str] | NotGiven | None = NOT_GIVEN,
    employee_count_range: models.SearchOrganizationsParamsEmployeeCountRange | dict[str, object] | NotGiven | None = NOT_GIVEN,
    founded_year: models.SearchOrganizationsParamsFoundedYear | dict[str, object] | NotGiven | None = NOT_GIVEN,
    followers_count: models.SearchOrganizationsParamsFollowersCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    location: models.SearchOrganizationsParamsLocation | dict[str, object] | NotGiven | None = NOT_GIVEN,
    max_data_age_date: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Page[models.CompanyFull]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `company_name` | `str \| NotGiven \| None` | Optional. Filter by company name |
| `company_domain` | `str \| NotGiven \| None` | Optional. Filter by website domain (e.g. `acme.com`). Disposable domains are rejected with `422` |
| `industry` | `str \| list[str] \| NotGiven \| None` | Optional. Industry, or array of industries: a company matches if its industry is any of them. See [Industry values](https://docs.reversecontact.com/reference/industries) for the full list |
| `specialities` | `str \| list[str] \| NotGiven \| None` | Optional. Speciality, or array of specialities: a company matches if it lists any of them. See [Specialities](https://docs.reversecontact.com/endpoints/search-companies#specialities) |
| `employee_count_range` | `models.SearchOrganizationsParamsEmployeeCountRange \| dict[str, object] \| NotGiven \| None` | Optional. Company size range, with inclusive `min` and `max` bounds. |
| `founded_year` | `models.SearchOrganizationsParamsFoundedYear \| dict[str, object] \| NotGiven \| None` | Optional. Founding year range, with inclusive `min` and `max` bounds. |
| `followers_count` | `models.SearchOrganizationsParamsFollowersCount \| dict[str, object] \| NotGiven \| None` | Optional. Follower count range, with inclusive `min` and `max` bounds. |
| `location` | `models.SearchOrganizationsParamsLocation \| dict[str, object] \| NotGiven \| None` | Optional. Headquarters location. Each property accepts one value or an OR-matched list |
| `max_data_age_date` | `str \| NotGiven \| None` | Optional. ISO 8601 datetime. Only returns companies refreshed after this date. Needs at least one other filter |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page |
| `per_page` | `int \| NotGiven \| None` | Optional. Companies per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Page[models.CompanyFull]`. A page with records in `data`, a `next_cursor`, `has_next_page()` and `get_next_page()`. The next-page method reuses the filters and returns `None` after the last page.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    page = client.search.organizations(industry="Software Development", per_page=10)
    for item in page.data:
        if item is not None:
            print(item.to_dict())
```
## iter_organizations

Provide at least one company filter. Use `max_data_age_date` with another filter. When `followers_count` is the only filter, supply both `min` and `max`.

Call [Company search](https://docs.reversecontact.com/endpoints/search-companies) with `client.search.iter_organizations()`.

**Python SDK**

```python [Python SDK]
def iter_organizations(
    *,
    company_name: str | NotGiven | None = NOT_GIVEN,
    company_domain: str | NotGiven | None = NOT_GIVEN,
    industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    specialities: str | list[str] | NotGiven | None = NOT_GIVEN,
    employee_count_range: models.SearchOrganizationsParamsEmployeeCountRange | dict[str, object] | NotGiven | None = NOT_GIVEN,
    founded_year: models.SearchOrganizationsParamsFoundedYear | dict[str, object] | NotGiven | None = NOT_GIVEN,
    followers_count: models.SearchOrganizationsParamsFollowersCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    location: models.SearchOrganizationsParamsLocation | dict[str, object] | NotGiven | None = NOT_GIVEN,
    max_data_age_date: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    max_results: int,
    **extra: object,
) -> Iterator[models.CompanyFull | None]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `company_name` | `str \| NotGiven \| None` | Optional. Filter by company name |
| `company_domain` | `str \| NotGiven \| None` | Optional. Filter by website domain (e.g. `acme.com`). Disposable domains are rejected with `422` |
| `industry` | `str \| list[str] \| NotGiven \| None` | Optional. Industry, or array of industries: a company matches if its industry is any of them. See [Industry values](https://docs.reversecontact.com/reference/industries) for the full list |
| `specialities` | `str \| list[str] \| NotGiven \| None` | Optional. Speciality, or array of specialities: a company matches if it lists any of them. See [Specialities](https://docs.reversecontact.com/endpoints/search-companies#specialities) |
| `employee_count_range` | `models.SearchOrganizationsParamsEmployeeCountRange \| dict[str, object] \| NotGiven \| None` | Optional. Company size range, with inclusive `min` and `max` bounds. |
| `founded_year` | `models.SearchOrganizationsParamsFoundedYear \| dict[str, object] \| NotGiven \| None` | Optional. Founding year range, with inclusive `min` and `max` bounds. |
| `followers_count` | `models.SearchOrganizationsParamsFollowersCount \| dict[str, object] \| NotGiven \| None` | Optional. Follower count range, with inclusive `min` and `max` bounds. |
| `location` | `models.SearchOrganizationsParamsLocation \| dict[str, object] \| NotGiven \| None` | Optional. Headquarters location. Each property accepts one value or an OR-matched list |
| `max_data_age_date` | `str \| NotGiven \| None` | Optional. ISO 8601 datetime. Only returns companies refreshed after this date. Needs at least one other filter |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page |
| `per_page` | `int \| NotGiven \| None` | Optional. Companies per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `max_results` | `int` | **Required.** Maximum number of paid results to request. Must be a non-negative integer. `0` makes no request. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Iterator[models.CompanyFull | None]`. An iterator of typed records. Entries can be `None`. The iterator fetches pages only as you advance. `max_results` caps paid results, not prompt page fees.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options, invalid `max_results` or `per_page`, or a repeated pagination cursor. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    for item in client.search.iter_organizations(industry="Software Development", max_results=10):
        if item is not None:
            print(item.to_dict())
```
## organizations_by_prompt

Call [Agentic Company Search](https://docs.reversecontact.com/endpoints/search-companies-prompt) with `client.search.organizations_by_prompt()`.

**Python SDK**

```python [Python SDK]
def organizations_by_prompt(
    *,
    prompt: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Page[models.CompanyFull]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `prompt` | `str \| NotGiven \| None` | **Required.** Plain-language description of the companies to find, in any language. At least 3 characters and at most 1000 tokens |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page with the same `prompt` |
| `per_page` | `int \| NotGiven \| None` | Optional. Companies per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Page[models.CompanyFull]`. A page with records in `data`, a `next_cursor`, `has_next_page()` and `get_next_page()`. The next-page method reuses the filters and returns `None` after the last page. `interpretation` contains the filters inferred from the prompt.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    page = client.search.organizations_by_prompt(prompt="Software companies in France", per_page=10)
    for item in page.data:
        if item is not None:
            print(item.to_dict())
```
## iter_organizations_by_prompt

Call [Agentic Company Search](https://docs.reversecontact.com/endpoints/search-companies-prompt) with `client.search.iter_organizations_by_prompt()`.

**Python SDK**

```python [Python SDK]
def iter_organizations_by_prompt(
    *,
    prompt: str | NotGiven | None = NOT_GIVEN,
    cursor: str | NotGiven | None = NOT_GIVEN,
    per_page: int | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    max_results: int,
    **extra: object,
) -> Iterator[models.CompanyFull | None]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `prompt` | `str \| NotGiven \| None` | **Required.** Plain-language description of the companies to find, in any language. At least 3 characters and at most 1000 tokens |
| `cursor` | `str \| NotGiven \| None` | Optional. Opaque cursor returned as `metadata.nextCursor`. Use this cursor to request the next page with the same `prompt` |
| `per_page` | `int \| NotGiven \| None` | Optional. Companies per page (1 to 100, default `25`) |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `max_results` | `int` | **Required.** Maximum number of paid results to request. Must be a non-negative integer. `0` makes no request. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Iterator[models.CompanyFull | None]`. An iterator of typed records. Entries can be `None`. The iterator fetches pages only as you advance. `max_results` caps paid results, not prompt page fees.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options, invalid `max_results` or `per_page`, or a repeated pagination cursor. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    for item in client.search.iter_organizations_by_prompt(prompt="Software companies in France", max_results=10):
        if item is not None:
            print(item.to_dict())
```
## count_organizations

Provide at least one company filter. Use `max_data_age_date` with another filter. When `followers_count` is the only filter, supply both `min` and `max`.

Call [Company search count](https://docs.reversecontact.com/endpoints/search-companies-count) with `client.search.count_organizations()`.

**Python SDK**

```python [Python SDK]
def count_organizations(
    *,
    company_name: str | NotGiven | None = NOT_GIVEN,
    company_domain: str | NotGiven | None = NOT_GIVEN,
    industry: str | list[str] | NotGiven | None = NOT_GIVEN,
    specialities: str | list[str] | NotGiven | None = NOT_GIVEN,
    employee_count_range: models.CountOrganizationsParamsEmployeeCountRange | dict[str, object] | NotGiven | None = NOT_GIVEN,
    founded_year: models.CountOrganizationsParamsFoundedYear | dict[str, object] | NotGiven | None = NOT_GIVEN,
    followers_count: models.CountOrganizationsParamsFollowersCount | dict[str, object] | NotGiven | None = NOT_GIVEN,
    location: models.CountOrganizationsParamsLocation | dict[str, object] | NotGiven | None = NOT_GIVEN,
    max_data_age_date: str | NotGiven | None = NOT_GIVEN,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Result[models.SearchOrganizationsCountData]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `company_name` | `str \| NotGiven \| None` | Optional. Filter by company name |
| `company_domain` | `str \| NotGiven \| None` | Optional. Filter by website domain (e.g. `acme.com`). Disposable domains are rejected with `422` |
| `industry` | `str \| list[str] \| NotGiven \| None` | Optional. Industry, or array of industries: a company matches if its industry is any of them. See [Industry values](https://docs.reversecontact.com/reference/industries) for the full list |
| `specialities` | `str \| list[str] \| NotGiven \| None` | Optional. Speciality, or array of specialities: a company matches if it lists any of them. See [Specialities](https://docs.reversecontact.com/endpoints/search-companies#specialities) |
| `employee_count_range` | `models.CountOrganizationsParamsEmployeeCountRange \| dict[str, object] \| NotGiven \| None` | Optional. Company size range, with inclusive `min` and `max` bounds. |
| `founded_year` | `models.CountOrganizationsParamsFoundedYear \| dict[str, object] \| NotGiven \| None` | Optional. Founding year range, with inclusive `min` and `max` bounds. |
| `followers_count` | `models.CountOrganizationsParamsFollowersCount \| dict[str, object] \| NotGiven \| None` | Optional. Follower count range, with inclusive `min` and `max` bounds. |
| `location` | `models.CountOrganizationsParamsLocation \| dict[str, object] \| NotGiven \| None` | Optional. Headquarters location. Each property accepts one value or an OR-matched list |
| `max_data_age_date` | `str \| NotGiven \| None` | Optional. ISO 8601 datetime. Only returns companies refreshed after this date. Needs at least one other filter |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Result[models.SearchOrganizationsCountData]`. `data.count` is the number of matching companies. The call does not extract companies.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    result = client.search.count_organizations(industry="Software Development")
    print(result.data if result is not None else None)
```
## people_fields

Call [People search available fields](https://docs.reversecontact.com/endpoints/search-people-available-fields) with `client.search.people_fields()`.

**Python SDK**

```python [Python SDK]
def people_fields(
    *,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Result[models.SearchFieldsData]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Result[models.SearchFieldsData]`. `data.fields` describes supported people filters and allowed values.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    result = client.search.people_fields()
    print(result.data if result is not None else None)
```
## organizations_fields

Call [Company search available fields](https://docs.reversecontact.com/endpoints/search-companies-available-fields) with `client.search.organizations_fields()`.

**Python SDK**

```python [Python SDK]
def organizations_fields(
    *,
    timeout: Timeout | None = None,
    max_retries: int | None = None,
    headers: Mapping[str, str] | None = None,
    **extra: object,
) -> Result[models.SearchFieldsData]: ...
```

**Parameters**

| Name | Type | Description |
| ---- | ---- | ----------- |
| `timeout` | `Timeout \| None` | Optional. Seconds per HTTP attempt, or `httpx.Timeout`. Uses the client setting when `None`. |
| `max_retries` | `int \| None` | Optional. Retries after the first HTTP attempt. Uses the client setting when `None`. |
| `headers` | `Mapping[str, str] \| None` | Optional. Additional HTTP headers for this call. |
| `**extra` | `object` | Optional. Additional API keyword arguments, including camelCase aliases, passed through to the API. |

**Returns**

`Result[models.SearchFieldsData]`. `data.fields` describes supported company filters and allowed values.

**Errors**

`APIError` subclasses follow the HTTP mapping above. `APIConnectionError` reports transport failures. `APITimeoutError` reports timed-out attempts. `ReverseContactError` covers invalid SDK options. Malformed typed response data can raise Pydantic `ValidationError`.

**Example**

**Python SDK**

```python [Python SDK]
from reversecontact import ReverseContact

with ReverseContact() as client:
    result = client.search.organizations_fields()
    print(result.data if result is not None else None)
```
## Related guides

See the [Python SDK overview](https://docs.reversecontact.com/sdk/python), [Search budget](https://docs.reversecontact.com/sdk/python/search-budget) and [Filter constants](https://docs.reversecontact.com/sdk/python/filter-constants).

## FAQ

### Which Python search methods require max_results?

`iter_people`, `iter_people_by_prompt`, `iter_people_lookalike`, `iter_organizations` and `iter_organizations_by_prompt` require a non-negative `max_results`.

### How do I count people without paying for results?

Call `client.search.count_people()` with the search filters. The count is in `result.data.count`, and the call is free.

### What does a Python search page return?

A search `Page` exposes `data`, `next_cursor`, `count`, `quotas`, `has_next_page()` and `get_next_page()`. Prompt pages also expose `interpretation`.

### How do I list Python SDK search filters?

Call the free `client.search.people_fields()` or `client.search.organizations_fields()` methods and inspect `result.data.fields`.
