---
title: "Search People Endpoint"
method: POST
path: "/search/people"
tags: ["search"]
---

# Search People Endpoint

`POST /search/people`

## Request

- Base URL: `https://api.dataforb2b.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.dataforb2b.ai/search/people`
- Auth: none declared

Recherche avancée de profils avec système de filtres conditionnels

**Authentification requise:** Header `api_key: <your_api_key>`

**Tarification:** 1 crédit par profil retourné (basic info LinkedIn)

Format similaire aux concurrents avec opérateurs de comparaison.

**Exemple de requête:**
```json
{
  "filters": {
    "op": "and",
    "conditions": [
      {"column": "company_headcount", "type": ">=", "value": 50},
      {"column": "linkedin_followers", "type": ">=", "value": 1000},
      {"column": "is_open_to_work", "type": "=", "value": true},
      {"column": "current_company", "type": "like", "value": "Google"}
    ]
  },
  "offset": 0,
  "count": 100,
  "order_by": "linkedin_followers",
  "order_direction": "desc"
}
```

**Opérateurs supportés:**
- `=`, `!=` : Égalité/Inégalité
- `>`, `>=`, `<`, `<=` : Comparaison numérique
- `in`, `not_in` : Dans/Pas dans une liste
- `like`, `not_like` : Recherche textuelle (case-insensitive)
- `is_null`, `is_not_null` : Null/Non-null
- `between` : Entre deux valeurs (nécessite value et value2)

**Colonnes disponibles:**

**Basic:** first_name, last_name, full_name, headline, country, city, region, profile_language

**Professional:** current_company, current_title, seniority_level, job_function, years_in_position, years_at_company

**Company:** company_hq_country, company_hq_city, company_headcount, company_headcount_range, company_type, company_industry

**Experience:** total_experience_years, companies_count, avg_tenure_months

**Education:** highest_degree, top_school, certification_count

**Influence:** linkedin_followers, linkedin_connections, follower_growth_30d, follower_growth_90d, is_creator, is_influencer

**Signals:** recently_changed_job, days_in_current_job, is_open_to_work

**Contact:** has_email, has_phone, email_verified

**Tarification:** 0.25 crédit par profil retourné (données de la base)

## Headers

- `X-Debug-SQL` string, nullable
- `X-Debug-Verify` string, nullable
- `x-internal-secret` string, nullable
- `api-key` string, nullable

## Request body

- AdvancedPeopleSearchRequest: Advanced people search request - returns only profile_urns Example: { "filters": { "op": "and", "conditions": [ {"column": "current_title", "type": "like", "value": "Engineer"}, {"column": "follower_count", "type": ">=", "value": 1000} ] }, "offset": 0, "count": 100, "order_by": "follower_count", "order_direction": "desc" }
  - `filters` FilterGroup: Group of filters with AND/OR logic Can contain FilterCondition or nested FilterGroup
    - `op` 'and' | 'or': Logical operator
    - `conditions` union[]
      - union
        - FilterCondition: Single filter condition Operators: - "=", "!=" : Equality - ">", ">=", "<", "<=" : Numeric comparison - "in", "not_in" : List membership - "like", "not_like" : Text search (case-insensitive) - "is_null", "is_not_null" : Null checks - "between" : Range (requires value and value2)
          - `column` string, required: Column name to filter on
          - `type` '=' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'not_in' | 'like' | 'not_like' | 'is_null' | 'is_not_null' | 'between' | 'regex', required
          - `value` unknown
          - `value2` unknown
        - FilterGroup (recursive)
  - `lookalike_profile` string, nullable: LinkedIn profile identifier (URL, public_id, or member_identity) to find similar people. Mutually exclusive with filters.
  - `lookalike_use_case` 'sales' | 'recruiter': Lookalike use case: 'sales' to find similar prospects (title, industry, company size) or 'recruiter' to find similar candidates (school, skills, field of study)
  - `offset` integer: Number of results to skip
  - `count` integer: Number of results to return
  - `exclude_billing_ids` string[], nullable: Internal (backend_app only, requires x-internal-secret): result ids already billed in a previous page of the same search, not billed again.
  - `order_by` string, nullable: Column to sort by (e.g., follower_count)
  - `order_direction` 'asc' | 'desc': Sort direction
  - `rank_query` string, nullable: Free text describing the ideal profile (a sentence or a whole job description). Filters still define the result set; matches are returned by relevance to this text and each result carries relevance_score (0-1). Ranks on role, domain and vocabulary, in any language. Structural constraints (seniority, years of experience, employment type, exclusions) are not ranked: express them as filters. Takes precedence over order_by. Pure relevance order by default; set prioritize to put profiles holding a contact type first (each group stays in relevance order).
  - `prioritize` 'personal_email' | 'work_email' | 'phone', nullable: Optional sort: profiles with this contact data come first in results (no filtering, just ordering). Default null = no contact-first ordering.
  - `max_per_company` integer, nullable: Diversity cap, only applied with rank_query: at most N profiles of the same current employer in the relevance-ranked head; the overflow is moved after it (nothing is filtered out, total is unchanged). Prevents one large company whose name matches the query from filling the first pages. Null (default) disables.
  - `reveal_personal_email` boolean: When true, include the actual personal_emails array on each result. Use during pagination to expose contact data once you've narrowed the page.
  - `verify_live` boolean: Verify that live data still matches filter conditions (excludes outdated profiles)
  - `show_private_fields` boolean: Show private fields (flags, badges, publications, projects, courses, patents, honors, volunteer, media)
  - `exclude_no_picture` boolean: Exclude profiles without a profile picture (filters out fake/incomplete profiles)
  - `fallback_db` boolean: Fallback to DB data if live enrichment fails. Set to False to return error instead of stale data.

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/dataforb2b/apis/dataforb2b-api.md) · [All operations](https://skmtc.dev/dataforb2b/apis/dataforb2b-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dataforb2b/apis/dataforb2b-api/revisions/24ea79caa1a1?raw)
