Enrichment

Search for people

Find LinkedIn profiles at target companies with specific job titles or seniority levels—each result includes an AI-verified qualification verdict showing whether the profile actually matches your criteria.

Input: filter criteria—companies (names, LinkedIn URLs, or IDs), jobTitles, excludeJobTitles, locations, geoIds, seniorityLevels, companySize, industryId (LinkedIn industry IDs, resolve via /enrichment/linkedin-industries), companyHeadquarterLocations (where the company is headquartered, as opposed to locations which is where the person is), plus excludeIndustryId and excludeCompanyHeadquarterLocations; page for pagination (1-100, up to 25 results per page). Optional: webhookUrl and deliveryMode for async delivery, qualifiedOnly to exclude disqualified matches, metadata to correlate responses.

Output: (sync: 200 OK, or async: 202 Accepted → webhook POST) Array of up to 25 LinkedIn profiles per page with linkedinUrl, firstName, lastName, location, openProfile, premium, and currentPositions (company name, title, LinkedIn URL, start date). Each profile includes qualificationStatus (QUALIFIED or DISQUALIFIED) and qualificationReason explaining the verdict. Response includes pagination metadata (count, page, totalPages, total, hasMore) and aiValidationStatus (ok or unavailable—if unavailable, all results default to QUALIFIED so the response stays usable).

post/api/v1/enrichment/people-search

Request

  • Base URL: https://api.rodz.io (the document declares no server; this is the origin it was published from)
  • URL: https://api.rodz.io/api/v1/enrichment/people-search
  • Auth: HTTP bearer

Request body

companiesstring[] nullable

Company names, LinkedIn company URLs, or numeric LinkedIn company IDs. Mix freely in the same array. Max 50.

jobTitlesstring[] nullable

Current job titles to include. Max 70.

excludeJobTitlesstring[] nullable

Job titles to exclude. Max 70.

locationsstring[] nullable

Location names (e.g. France, San Francisco). Each entry is one place: a qualified name such as "Lyon, France" is resolved as a whole, and a name that cannot be resolved returns 422 UNRESOLVED_LOCATION. For precise filtering, use geoIds instead.

geoIdsstring[] nullable

LinkedIn geo IDs for precise location filtering. Use /enrichment/linkedin-geo-id to resolve.

seniorityLevelsstring[] nullable

Seniority levels: Entry, Strategic, Senior, VP, CXO, Director, Manager, Partner, Owner

companySizestring[] nullable

Company size: Self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+

industryIdstring[] nullable

LinkedIn industry IDs of the person's current company, e.g. ["4", "96"] (a single comma-separated entry like ["4,96"] also works). Resolve IDs by name with GET /api/v1/enrichment/linkedin-industries. Max 70.

excludeIndustryIdstring[] nullable

LinkedIn industry IDs to exclude. Same format as industryId. Max 70.

companyHeadquarterLocationsstring[] nullable

Filter on where the person's current company is HEADQUARTERED (free-text location names, e.g. ["France"]). Distinct from locations/geoIds, which filter on where the person is. Max 70.

excludeCompanyHeadquarterLocationsstring[] nullable

Company headquarter locations to exclude. Max 70.

pageinteger

Page number (1-100). Default: 1. Each page returns up to 25 results.

qualifiedOnlyboolean

When true, only return profiles with qualificationStatus=QUALIFIED. Disqualified results are dropped from the response (count and results shrink accordingly). Default false: return everything with the verdict flag set so the caller can decide.

webhookUrlstring nullable

Optional. When supplied, the endpoint switches to async mode: it returns 202 Accepted immediately with a requestId, runs the search in the background, and POSTs the full response body to this URL once. Use when your client has a tight HTTP timeout (some serverless platforms, n8n defaults, etc.). When omitted, the endpoint stays synchronous and returns results in the same HTTP response.

deliveryModestring

Webhook delivery shape. Ignored when webhookUrl is omitted. batch (default) POSTs one payload containing every result. per_result POSTs one payload per result, each carrying index / total so the receiver can reassemble. Failed jobs always deliver one error payload regardless of mode; empty result sets emit no per-result POSTs (poll the GET endpoint to confirm completion).

Example request

{
  "companies": [
    "Lemlist",
    "https://www.linkedin.com/company/google/",
    "1441"
  ],
  "companyHeadquarterLocations": [
    "France"
  ],
  "companySize": [
    "51-200",
    "201-500"
  ],
  "deliveryMode": "batch",
  "excludeJobTitles": [
    "intern",
    "assistant"
  ],
  "geoIds": [
    "105015875"
  ],
  "industryId": [
    "4"
  ],
  "jobTitles": [
    "VP of Sales",
    "Head of Marketing"
  ],
  "locations": [
    "France",
    "Belgium"
  ],
  "metadata": [
    {
      "campaign": "q3-france-founders",
      "rowId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    }
  ],
  "page": 1,
  "qualifiedOnly": false,
  "seniorityLevels": [
    "VP",
    "Director"
  ],
  "webhookUrl": "https://your-server.com/webhooks/people-search"
}

Response

Synchronous result (no webhookUrl in the body).

requestIdstring nullable

Unique request identifier

Changes

No recorded changes to this operation across all 1 revision of this API.