# People Data Labs

PeopleDataLabs provides B2B data enrichment and identity resolution, empowering organizations to build enriched user profiles and validate customer information

- **Category:** analytics
- **Auth:** API_KEY
- **Composio Managed App Available?** N/A
- **Tools:** 24
- **Triggers:** 0
- **Slug:** `PEOPLEDATALABS`
- **Version:** 20260316_00

## Tools

### Clean company data

**Slug:** `PEOPLEDATALABS_CLEAN_COMPANY_DATA`

Cleans and standardizes company information based on a name, website, or profile URL; providing at least one of these inputs is highly recommended for meaningful results.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | The company's current or known name. At least one of 'name', 'website', or 'profile' must be provided. |
| `pretty` | boolean | No | If true, formats the JSON response with human-readable indentation. |
| `profile` | string | No | The company's social media profile URL (e.g., LinkedIn, Twitter, Facebook). At least one of 'name', 'website', or 'profile' must be provided. |
| `website` | string | No | The company's website URL. At least one of 'name', 'website', or 'profile' must be provided. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Clean company data (POST)

**Slug:** `PEOPLEDATALABS_CLEAN_COMPANY_POST`

Tool to clean and standardize company data using POST method. Use when you need to standardize company information by providing company name, website, or social profile. Returns standardized company information including name, website, LinkedIn profile, and other company identifiers.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | The name of the company. At least one of 'name', 'website', or 'profile' must be provided. |
| `pretty` | boolean | No | Whether the output should have human-readable indentation. |
| `profile` | string | No | A social profile used by the company (e.g. LinkedIn/Facebook/Twitter). At least one of 'name', 'website', or 'profile' must be provided. |
| `website` | string | No | A website the company uses. At least one of 'name', 'website', or 'profile' must be provided. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Clean location data

**Slug:** `PEOPLEDATALABS_CLEAN_LOCATION_DATA`

Cleans and standardizes a raw, unformatted location string into a structured representation, provided the input is a recognizable geographical place.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `location` | string | Yes | The raw, unformatted location string to be cleaned and standardized. This can be a full address, a city/state pair, or just a place name. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Clean location data (POST)

**Slug:** `PEOPLEDATALABS_CLEAN_LOCATION_POST`

Tool to clean and standardize location data using POST method. Use when you need to normalize raw location strings into structured location information including city, region, and country.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `pretty` | boolean | No | Whether the output should have human-readable indentation |
| `location` | string | Yes | The raw location string to clean and standardize. Can be a full address, city/state, or place name. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Clean school data

**Slug:** `PEOPLEDATALABS_CLEAN_SCHOOL_DATA`

Cleans and standardizes school information; provide at least one of the school's name, website, or profile for optimal results.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | The name of the school. |
| `pretty` | boolean | No | If true, the JSON response is pretty-printed with human-readable indentations. |
| `profile` | string | No | The social media profile URL (e.g., LinkedIn, Twitter) of the school. |
| `website` | string | No | The website URL of the school. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Clean school data (POST)

**Slug:** `PEOPLEDATALABS_CLEAN_SCHOOL_DATA_POST`

Tool to clean and standardize school data using POST method. Use when you need to clean school information by providing name, website, or profile.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | The name of the school to clean and standardize. |
| `pretty` | boolean | No | Whether the output should have human-readable indentation. |
| `profile` | string | No | A social profile used by the school (e.g. LinkedIn/Facebook/Twitter). |
| `website` | string | No | A website the school uses. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich Bulk Company Data

**Slug:** `PEOPLEDATALABS_ENRICH_BULK_COMPANY_DATA`

Tool to enrich up to 100 companies in a single request using the Bulk Company Enrichment API. Use when you need to enrich multiple company profiles efficiently. Each request must include at least one company identifier (website, profile, name, ticker, or pdl_id). Results are returned in the same order as the input requests, with individual status codes indicating success (200) or failure (404).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `requests` | array | Yes | Array of 1-100 individual company enrichment requests. Each request must contain a params object with at least one company identifier. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich bulk person data

**Slug:** `PEOPLEDATALABS_ENRICH_BULK_PERSON_DATA`

Tool to enrich up to 100 person profiles in a single API request using the Bulk Person Enrichment API. Use when you need to enrich multiple people efficiently, as this effectively increases the rate limit by up to 100x compared to individual enrichment calls. Each request in the array can use the same parameters as the single person enrichment endpoint.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `requests` | array | Yes | Array of 1-100 individual enrichment requests, each containing a 'params' object with person identifiers. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich Company Data

**Slug:** `PEOPLEDATALABS_ENRICH_COMPANY_DATA`

Enriches company data from People Data Labs with details like firmographics and employee counts. CRITICAL: This action REQUIRES at least one company identifier. DO NOT send empty {} requests. You MUST provide at least one of: pdl_id, name, profile, ticker, or website. Valid request examples: - {"name": "Apple Inc."} - enrich by company name - {"website": "google.com"} - enrich by website URL - {"ticker": "MSFT"} - enrich by stock ticker - {"profile": "linkedin.com/company/microsoft"} - enrich by social profile. Each call consumes API credits; use specific identifiers rather than exploratory requests.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | REQUIRED if no other identifier provided. Company name to search for. At least one of pdl_id/name/profile/ticker/website must be provided. |
| `pdl_id` | string | No | REQUIRED if no other identifier provided. People Data Labs unique ID for a company. At least one of pdl_id/name/profile/ticker/website must be provided. |
| `pretty` | boolean | No | If true, the JSON response will be pretty-printed with human-readable indentation for easier inspection. |
| `region` | string | No | The state, province, or administrative region where the company is located (e.g., 'California' or 'TX'). |
| `ticker` | string | No | REQUIRED if no other identifier provided. Stock market ticker symbol. At least one of pdl_id/name/profile/ticker/website must be provided. |
| `country` | string | No | The country where the company is located. Can be a full name or an ISO country code. |
| `profile` | string | No | REQUIRED if no other identifier provided. Company social media profile URL. At least one of pdl_id/name/profile/ticker/website must be provided. |
| `website` | string | No | REQUIRED if no other identifier provided. Company website URL. At least one of pdl_id/name/profile/ticker/website must be provided. |
| `locality` | string | No | The city or locality where the company is situated (e.g., 'Mountain View'). |
| `location` | string | No | A general text query for the company's location (e.g., 'San Francisco, CA' or 'London'). Can be a partial or complete location string. |
| `titlecase` | boolean | No | If set to true, textual data in the API response will be converted to title case. If omitted, the API's default casing is used. |
| `postal_code` | string | No | The postal or ZIP code for the company's location. |
| `street_address` | string | No | The street address component of the company's location. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich IP Data

**Slug:** `PEOPLEDATALABS_ENRICH_IP_DATA`

Enriches an IP address with company, location, metadata, and person data from People Data Labs.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `ip` | string | Yes | The IP address to enrich. Must be a valid IPv4 or IPv6 address string. |
| `pretty` | boolean | No | If true, the JSON response will be formatted with human-readable indentation for easier manual inspection. |
| `titlecase` | boolean | No | If true, relevant string values in the response data (e.g., names, locations) will be converted to title case. |
| `return_person` | boolean | No | If true, attempts to include person data associated with the IP address, provided a match is found. |
| `min_confidence` | string | No | Specifies the minimum confidence level required for a company match to be returned. Matches below this threshold are excluded. If unspecified, the API's default (often 'very low') is used. Accepted values: `very low`, `low`, `medium`, `high`, `very high`. |
| `return_ip_location` | boolean | No | If true, includes location data specific to the IP address (e.g., city, region, country, GPS coordinates). |
| `return_ip_metadata` | boolean | No | If true, includes metadata specific to the IP address (e.g., connection type, line speed, ISP). |
| `return_if_unmatched` | boolean | No | If true, IP-specific data (like location or metadata if requested) will be returned even if no company profile is matched to the IP. |
| `updated_title_roles` | boolean | No | If true, the API will use an updated taxonomy for job title roles in the response. Refer to People Data Labs documentation for specifics on this taxonomy. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich job title data

**Slug:** `PEOPLEDATALABS_ENRICH_JOB_TITLE_DATA`

Enhances a job title by providing additional contextual information and details.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `job_title` | string | Yes | Job title to be enriched. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich person data

**Slug:** `PEOPLEDATALABS_ENRICH_PERSON_DATA`

Enriches person data using various identifiers; requires a primary ID (profile, email, phone, email_hash, lid, pdl_id) OR a name (full, or first and last) combined with another demographic detail (e.g., company, school, location).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `lid` | string | No | LinkedIn ID. |
| `name` | string | No | Full name. |
| `email` | string | No | Email address. |
| `phone` | string | No | Phone number; E.164 format recommended. |
| `pdl_id` | string | No | People Data Labs unique record ID. |
| `pretty` | boolean | No | Format JSON response with indentation for readability. |
| `region` | string | No | State, province, or region of residence. |
| `school` | string | No | School name attended. |
| `company` | string | No | Company name where person has worked. |
| `country` | string | No | Country of residence (ISO 3166-1 alpha-2 code or full name). |
| `profile` | string | No | Social profile URL (e.g., LinkedIn, Facebook). |
| `locality` | string | No | City or locality of residence. |
| `location` | string | No | General location (e.g., city, state, country). |
| `required` | string | No | Boolean expression of top-level fields required in enriched profile for match. Use AND/OR operators and parentheses for logic (e.g., 'emails AND phone_numbers', 'education AND (emails OR phone_numbers)'). Valid fields: emails, phone_numbers, experience, education, job_title, job_company_name, full_name, location_country, work_email, personal_emails, mobile_phone, linkedin_url, profiles, skills, etc. |
| `last_name` | string | No | Last name. |
| `birth_date` | string | No | Birth date (YYYY-MM-DD format). |
| `email_hash` | string | No | SHA-256 or MD5 hash of an email, for matching without exposing the raw email. |
| `first_name` | string | No | First name. |
| `postal_code` | string | No | Postal or ZIP code of residence. |
| `data_include` | string | No | Comma-separated data fields to include in response (e.g., 'emails,phones'). Refer to People Data Labs docs for all fields. |
| `min_likelihood` | integer | No | Minimum confidence score (0-10) for a match to be returned; higher is stricter. |
| `street_address` | string | No | Street address. |
| `include_if_matched` | boolean | No | Include input parameters used for matching in the response if true. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Enrich skill data

**Slug:** `PEOPLEDATALABS_ENRICH_SKILL_DATA`

Retrieves detailed, standardized information for a given skill by querying the People Data Labs Skill Enrichment API; for best results, provide a recognized professional skill or area of expertise.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `skill` | string | Yes | The specific skill term to be enriched. This skill will be matched against a skill dataset to retrieve detailed information. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Generate Search Query

**Slug:** `PEOPLEDATALABS_GENERATE_SEARCH_QUERY`

Converts natural language queries into structured PDL Elasticsearch queries for people or company searches; generates optimized query structure without executing the search.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | A natural language query to search for information about people or companies, interpreted to fetch relevant data from the PeopleDataLabs dataset. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Autocomplete field suggestions

**Slug:** `PEOPLEDATALABS_GET_AUTOCOMPLETE_SUGGESTIONS`

Provides autocompletion suggestions for a specific field (e.g., company, skill, title) based on partial text input.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | No | Maximum number of autocomplete suggestions to return. |
| `text` | string | No | Initial text to autocomplete (e.g., 'goo' for 'google'). |
| `field` | string | Yes | Field for which to request autocompletion suggestions. Supported values: all_location, class, company, country, industry, location, location_name, major, region, role, school, skill, sub_role, title, website. |
| `pretty` | boolean | No | If true, formats the JSON output for human readability. |
| `titlecase` | boolean | No | If true, returns suggestions in title case. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get autocomplete suggestions (POST)

**Slug:** `PEOPLEDATALABS_GET_AUTOCOMPLETE_SUGGESTIONS_POST`

Tool to get autocompletion suggestions using POST method for complex query parameters. Use when building type-ahead interfaces or needing to suggest values for Search API queries. Supports company, location, skill, title, and other fields with configurable result size.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | No | Maximum number of autocomplete suggestions to return. Must be between 1 and 100. |
| `text` | string | No | Initial text to autocomplete (e.g., 'goo' for 'google'). Empty string returns all available values for the field. |
| `field` | string ("company" | "country" | "industry" | "location" | "major" | "region" | "role" | "school" | "sub_role" | "skill" | "title") | Yes | Field for which to request autocompletion suggestions. Determines the type of suggestions returned. |
| `pretty` | boolean | No | If true, formats the JSON output for human readability. |
| `titlecase` | boolean | No | If true, returns suggestions in title case. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get column details

**Slug:** `PEOPLEDATALABS_GET_COLUMN_DETAILS`

Retrieves predefined enum values for a column name from `enum_mappings.json`; `is_enum` in the response will be false if the column is not found or is not an enum type.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `column` | string | Yes | Name of the column to fetch enum values for; must be a key in `enum_mappings.json`. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get schema

**Slug:** `PEOPLEDATALABS_GET_SCHEMA`

Retrieves the schema, including field names, descriptions, and data types, for 'person' or 'company' entity types.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `entity_type` | string | Yes | The type of entity for which to retrieve the schema. Must be either 'person' or 'company'. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get subject requests

**Slug:** `PEOPLEDATALABS_GET_SUBJECT_REQUESTS`

Tool to retrieve subject access requests for data privacy compliance. Use when you need to manage or review data subject requests related to person data in your PeopleDataLabs account.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Identify person data

**Slug:** `PEOPLEDATALABS_IDENTIFY_PERSON_DATA`

Retrieves detailed profile information for an individual from People Data Labs (PDL), requiring at least one identifier such as email, phone, or profile URL. If using name alone, it must be paired with at least one additional attribute (company, location, school, etc.) — name-only queries return no match.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `lid` | string | No | The person's LinkedIn ID. This is a numerical ID found in some LinkedIn URLs. |
| `name` | string | No | The full name of the person. |
| `email` | string | No | An email address associated with the person. |
| `phone` | string | No | A phone number associated with the person. |
| `pretty` | boolean | No | If true, the JSON response is pretty-printed for easier human readability. |
| `region` | string | No | The state, province, or region where the person resides or has resided. |
| `school` | string | No | The name of an educational institution the person attended. |
| `company` | string | No | The name of a company where the person is or was employed. |
| `profile` | string | No | A social media profile URL associated with the person, e.g., a LinkedIn or Twitter profile URL. |
| `locality` | string | No | The city or locality where the person resides or has resided. |
| `location` | string | No | A general location query (e.g., 'San Francisco, CA', 'London, UK') associated with the person. |
| `last_name` | string | No | The last name of the person. |
| `titlecase` | boolean | No | If true, returns all text values in title case (e.g., 'John Doe'). Otherwise, text is returned as is. |
| `email_hash` | string | No | An MD5 or SHA-256 hash of the person's email address. |
| `first_name` | string | No | The first name of the person. |
| `postal_code` | string | No | The postal or ZIP code where the person resides or has resided. |
| `street_address` | string | No | The street address where the person resides or has resided. |
| `include_if_matched` | boolean | No | If true, the response will include a 'matched_on' attribute, an array of strings indicating which input parameters led to the match. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### People Search with Elasticsearch

**Slug:** `PEOPLEDATALABS_PEOPLE_SEARCH_ELASTIC`

Searches for person profiles in the People Data Labs (PDL) database using an Elasticsearch Domain Specific Language (DSL) query. This action allows for highly targeted searches based on criteria such as job titles, skills, company details, location, experience, and more. Preconditions: - The provided Elasticsearch query (in the `query` field) must be a syntactically correct JSON object representing a valid Elasticsearch query. - The query must utilize fields that are defined in the People Data Labs person schema. - The `dataset` parameter must specify one of the allowed dataset categories.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | No | The number of matched person records to return. Must be an integer between 1 and 100, inclusive. |
| `query` | string | Yes | An Elasticsearch Domain Specific Language (DSL) query string, formatted as a JSON object, for searching People Data Labs (PDL) person profiles. This allows for complex searches using boolean logic, term matching, wildcards, and filters.   QUERY FORMAT: - Provide just the DSL body (e.g., '{"bool": {...}}') without an outer 'query' wrapper. - If you include an outer 'query' key (e.g., '{"query": {"bool": {...}}}'), it will be automatically unwrapped.   SUPPORTED QUERY TYPES: - term, terms, match, match_phrase, prefix, wildcard, range, exists, bool - UNSUPPORTED: multi_match, query_string, fuzzy, combined_fields (will be auto-converted) - To search multiple fields, use bool/should with multiple match clauses instead of multi_match - Example: {"bool": {"should": [{"match": {"full_name": "john"}}, {"match": {"first_name": "john"}}]}}   CRITICAL - FIELD NAME FORMAT: - ALL field names MUST use snake_case (lowercase with underscores), NOT camelCase. - CORRECT: full_name, first_name, last_name, job_title, job_company_name, location_country - WRONG: fullName, firstName, lastName, jobTitle, jobCompanyName, locationCountry   IMPORTANT - Valid queryable fields include (but are not limited to): - Name fields: full_name, first_name, last_name, middle_name - Job fields: job_title, job_title_role, job_title_class, job_company_name, job_company_industry, job_company_size, job_company_website, job_company_location_* - Location fields (use these EXACT field names, NOT 'location' alone): location_country, location_region, location_locality, location_metro, location_geo - Education fields: school names via nested education queries - Profile/Social fields: linkedin_url, linkedin_username, linkedin_id, facebook_url, facebook_username, twitter_url, twitter_username, github_url, github_username - Professional/Personal attributes: industry, skills, interests - Other fields: countries, sex  COMMON MISTAKES - These fields/parameters are NOT supported: - camelCase field names - NOT valid; use snake_case (e.g., 'full_name' not 'fullName', 'job_title' not 'jobTitle') - Plural name fields - NOT valid; use singular forms: 'full_name' not 'full_names', 'first_name' not 'first_names', 'last_name' not 'last_names', 'middle_name' not 'middle_names' - 'person_name' - NOT a valid field; use 'full_name', 'first_name', or 'last_name' instead - 'location' - NOT a valid field; use specific location fields: 'location_country', 'location_region', 'location_locality', 'location_metro', or 'location_geo' instead - 'names' - NOT a valid field; use specific name fields instead: 'full_name', 'first_name', 'last_name', or 'middle_name' - 'url' - NOT a valid field; use platform-specific URL fields like 'linkedin_url', 'facebook_url', 'twitter_url', or 'github_url' instead - 'username' - NOT a valid standalone field; use platform-specific fields like 'linkedin_username', 'facebook_username', 'twitter_username', 'github_username', or query nested profiles with 'profiles.username' - 'email' - Use the 'dataset' parameter (set to 'email') to filter by email availability instead of querying email as a field - 'email_address' - NOT a valid field name; use 'work_email', 'personal_emails', 'recommended_personal_email', or 'emails.address' for email queries, or set 'dataset' parameter to 'email' - 'contact_email' - NOT a valid field; use 'work_email', 'personal_emails', 'recommended_personal_email', or 'emails.address' for email queries - 'primary_email' - NOT a valid field; use 'work_email', 'personal_emails', 'recommended_personal_email', or 'emails.address' for email queries - 'experience_years' - Not a valid field name; query nested experience objects with date ranges instead - 'experience_level' - Not a valid field name; use 'job_title_levels' for seniority filtering (entry, senior, manager, director, vp, cxo, owner, partner) or query nested experience objects with date ranges - 'minimum_should_match' - This standard Elasticsearch parameter is not supported by PDL's API; use must/should without it - 'phone' - Use the 'dataset' parameter to filter by phone availability instead - 'lead_id' - NOT a valid field; PDL uses 'id' as the primary person identifier field; use {"term": {"id": "your_pdl_id"}} to search by PDL ID - 'job_type' - NOT a valid field; PDL does not have a job type or remote work indicator field; use 'job_title', 'job_title_role', or 'job_company_industry' for employment filtering - 'job_company_domain' - NOT a valid field; use 'job_company_website' instead to filter by company domain/website - 'profile' - NOT a valid field; use platform-specific fields like 'linkedin_url', 'linkedin_id', 'facebook_url', etc., or nested 'profiles.*' fields like 'profiles.url', 'profiles.username', 'profiles.id', 'profiles.network' - 'profile_*' fields (e.g., 'profile_email', 'profile_phone', 'profile_username') - NOT valid fields; these profile-prefixed field names do not exist in the PDL search API; use the appropriate specific fields or dataset parameter instead - 'profile.*' fields (dot notation like 'profile.full_name', 'profile.first_name', 'profile.location_country') - NOT valid fields; do not use 'profile.' prefix; use direct field names instead (e.g., 'full_name', 'first_name', 'location_country') - Empty string values - Queries with empty string values (e.g., {"term":{"name":""}}) are not allowed; remove such fields or provide a non-empty value   CRITICAL - 'profiles' FIELD USAGE: - Do NOT use 'profiles' as a parent for social platform fields like linkedin/facebook/twitter/github. - WRONG: {"term": {"profiles": {"linkedin": "<url>"}}} - This will fail with 'linkedin not allowed or invalid field name' - CORRECT: {"term": {"linkedin_url": "<url>"}} - Use top-level platform-specific fields directly - Valid 'profiles.*' nested queries: 'profiles.network', 'profiles.url', 'profiles.username', 'profiles.id' (for cross-platform searches) - For platform-specific searches, use: linkedin_url, linkedin_username, linkedin_id, facebook_url, facebook_username, facebook_id, twitter_url, twitter_username, github_url, github_username  For the complete list of queryable fields, refer to the PDL Person Fields documentation at: https://docs.peopledatalabs.com/docs/fields-person |
| `pretty` | boolean | No | If true, formats the JSON response with human-readable indentation. Defaults to false. |
| `dataset` | string | No | Specifies the dataset category to search against, filtering results to profiles that have the specified type of data available. Allowed values are: 'resume', 'email', 'phone', 'mobile_phone', 'street_address', 'consumer_social', 'developer', 'all'. Note: Use 'email' here to filter for profiles with email addresses available, rather than querying 'email' as a field in the query parameter. |
| `titlecase` | boolean | No | If true, titlecases the person records in the response. Defaults to false. |
| `scroll_token` | string | No | A token returned in a previous search response. Provide this token to retrieve the next page of results. Omit or pass an empty string for the first request. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Query person changelog

**Slug:** `PEOPLEDATALABS_QUERY_PERSON_CHANGELOG`

Tool to query the changelog of person records between two consecutive dataset versions. Returns information about updates, additions, deletions, merges, and opt-outs for individuals. Use when you need to track changes to person profiles across PDL dataset versions or monitor specific person IDs for updates.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `ids` | array | No | List of person IDs to query changes for. Minimum: 1, Maximum: 60000. When provided, type parameter is optional. |
| `type` | string ("added" | "deleted" | "updated" | "merged" | "opted_out") | No | Type of changelog entry. |
| `scroll_token` | string | No | Token for pagination through large result sets. Use the scroll_token returned from a previous request to get the next page of results. |
| `fields_updated` | array | No | Specifies which fields were updated between versions. Only allowed when type is 'updated'. Use to filter for specific field changes (e.g., ['email', 'phone_numbers', 'job_title']). |
| `origin_version` | string | Yes | The older version for comparison (must be valid and consecutive with current_version). Format: 'major.minor' (e.g., '32.1'). |
| `current_version` | string | Yes | The newer version for comparison (must be valid and consecutive to origin_version). Format: 'major.minor' (e.g., '32.2'). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Company Search with Elasticsearch

**Slug:** `PEOPLEDATALABS_SEARCH_COMPANY_ELASTIC`

Performs a search for company profiles within People Data Labs using a custom Elasticsearch Domain Specific Language (DSL) query. This action allows for detailed and complex filtering based on various attributes of a company, such as name, industry, employee_count, founded year, location, and more. Results can be paginated using the `size` and `scroll_token` parameters. Preconditions: - The `query` parameter must contain a valid Elasticsearch DSL query string, structured as a JSON object. - This action queries the People Data Labs company search endpoint (`/v5/company/search`) and returns company records.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | No | The number of matched company records to return. Must be an integer between 1 and 100, inclusive. |
| `query` | string | Yes | Elasticsearch DSL query string used to search for company profiles from People Data Labs. This field requires a well-formed JSON object as a string, representing the Elasticsearch query.  **Key Guidelines for Query Construction:** 1.  **Valid Fields:** Queries must use fields corresponding to the PDL company schema (e.g., `name`, `website`, `industry`, `employee_count`, `founded`, `location.country`, `size`, `tags`). 2.  **Query Types:** Employ appropriate Elasticsearch query types based on the field type and desired logic:     *   `term`: For exact matches on keyword fields (e.g., specific IDs, industry names, tags).     *   `terms`: For matching any of multiple exact terms in keyword fields.     *   `match`: For full-text searches on analyzed text fields (e.g., company name, summary).     *   `match_phrase`: For exact phrase matching within text fields.     *   `range`: For filtering by numeric or date ranges (e.g., `employee_count: {"gte": 5000}`, `founded: {"gte": 2010}`).     *   `exists`: To find documents where a specific field has a value (is not null).     *   `bool`: To combine multiple query clauses using:         *   `must`: Clauses that *must* match (AND logic).         *   `should`: Clauses where at least one *should* match (OR logic).         *   `filter`: Clauses that *must* match, but are executed in a non-scoring context (often for performance).         *   `must_not`: Clauses that *must not* match (NOT logic).     *   `wildcard`: For pattern matching using `*` (multiple characters) or `?` (single character). Useful for name or location fields.     *   `prefix`: For matching terms that start with a given prefix. 3.  **Contextual Queries:** Use `query` context (e.g., within `must` or `should` of a `bool` query) for conditions that should affect the relevance score. Use `filter` context for exact criteria that do not need to influence scoring, which can be more performant. 4.  **Best Practices & Important Notes:**     *   **Field Specifics:** This action searches *company* data. Ensure query fields are relevant to company attributes.     *   **Common Company Fields:** name, display_name, website, industry, employee_count, founded, size, location.country, location.region, location.locality, tags, linkedin_url, type, summary.     *   **Location Searches:** Use nested location fields like `location.country`, `location.region`, `location.locality`, `location.name`. For example: `{"term": {"location.country": "united states"}}`.     *   **Boolean Logic:** When using `bool` queries, ensure that conditions in `must` or `filter` clauses are not logically mutually exclusive, as this would yield no results.     *   **Exclusions:** Do NOT include `size` or `scroll_token` parameters within this DSL query string; use the dedicated request fields for these pagination parameters.     *   **`minimum_should_match`:** Do NOT use the `minimum_should_match` parameter in `bool` queries. This summary provides key guidelines. For comprehensive DSL syntax and specific field mappings for PDL company data, consult the official People Data Labs API documentation at https://docs.peopledatalabs.com/docs/company-search-api. |
| `pretty` | boolean | No | If true, the JSON response will be pretty-printed with human-readable indentation. Defaults to false. |
| `titlecase` | boolean | No | If true, an attempt will be made to title-case relevant text fields in the returned company records. Defaults to false. |
| `scroll_token` | string | No | A token returned from a previous search response, used for paginating through large result sets. Provide this token to retrieve the next batch of `size` records. Leave empty or omit for the first request. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Search Company Records (POST)

**Slug:** `PEOPLEDATALABS_SEARCH_COMPANY_POST`

Tool to search and filter company records from the full Company Dataset using Elasticsearch or SQL queries via POST method. Use when you need to find multiple companies matching specific criteria with complex filtering.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sql` | string | No | SQL query format: SELECT * FROM company WHERE [condition]. Either 'query' or 'sql' is required, but not both. |
| `size` | integer | No | Batch size/max records returned. Must be between 1 and 100. Default: 1 |
| `query` | string | No | An Elasticsearch (v7.7) DSL query for searching company data. Must be a valid JSON object as a string. Either 'query' or 'sql' is required, but not both. |
| `pretty` | boolean | No | Human-readable JSON formatting. Default: false |
| `titlecase` | boolean | No | Titlecase response text. Default: false |
| `from_offset` | integer | No | Legacy offset for pagination (0-9999), max 10000 records total. Use scroll_token for unlimited pagination. |
| `scroll_token` | string | No | Pagination token from previous response for unlimited record retrieval. Use this for paginating beyond 10000 records. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |
