Connect People Data Labs to ChatGPT: Enrich and Clean Global Data
Learn how to connect People Data Labs to ChatGPT using an auto-generated MCP server. Automate data enrichment, clean records, and build AI workflows without writing custom integration code.
If you need to connect People Data Labs to ChatGPT to automate global data enrichment, clean CRM records, or build intelligent prospecting agents, you need a Model Context Protocol (MCP) server. This server translates natural language requests from ChatGPT into structured JSON-RPC tool calls that execute against the People Data Labs API. You can either spend weeks building, hosting, and securing this proxy layer yourself, or use a managed integration platform like Truto to dynamically generate an authenticated MCP endpoint in seconds.
If your team uses Claude, check out our guide on connecting People Data Labs to Claude or explore our broader architectural overview on connecting People Data Labs to AI Agents.
Giving a Large Language Model (LLM) access to a data-dense, query-heavy API like People Data Labs is a unique engineering challenge. You have to handle complex Elasticsearch syntaxes, deal with stateful scroll tokens for pagination, and map highly polymorphic input schemas. Every time PDL updates an endpoint or adds a new enrichment field, custom-coded servers require manual updates.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for People Data Labs, connect it natively to ChatGPT, and execute complex enrichment workflows using natural language.
The Engineering Reality of the People Data Labs API
A custom MCP server is essentially a self-hosted integration middleware. While the open MCP standard provides a predictable way for models to discover tools, implementing it against the People Data Labs API requires handling several vendor-specific quirks. If you build this yourself, you own the complexity of translating AI intent into PDL's strict execution rules.
Here are the specific integration challenges you face when working with the People Data Labs API:
Stateful Scroll Tokens vs LLM Context
People Data Labs uses a scroll-based pagination mechanism for its search endpoints (people_search, companies_search). Instead of standard offset/limit pagination, the API returns a scroll_token that must be passed back exactly as received to fetch the next page of results. LLMs are notoriously bad at handling long, opaque string tokens. If an LLM slightly modifies, decodes, or truncates a scroll token, the subsequent request fails. Your MCP server must explicitly inject schema instructions dictating that the LLM treat the scroll_token as an immutable string, or you must build stateful session management into your proxy layer.
Polymorphic Inputs and Likelihood Scoring
Unlike standard CRUD APIs where a resource has a fixed primary key, PDL's enrichment and identity endpoints are highly polymorphic. For example, to enrich a person, you can pass an email, a phone number, a LinkedIn profile URL, a PDL ID, or a combination of first_name, last_name, and company. Your MCP tool schemas must define all these as optional but enforce cross-field validation rules (e.g., "If name is provided, a location or company must also be provided"). Furthermore, the API returns a likelihood score. LLMs need explicit schema context to understand that a low likelihood score might mean the returned data shouldn't be trusted for critical automation.
Credit-Based Billing and 404 Nuances
People Data Labs operates on a credit-based billing model, and its HTTP status codes directly dictate your invoice. For standard enrichment tools, a successful match returns a 200 OK (and deducts a credit), while a no-match returns a 404 Not Found (and is unbilled). However, for the people_identify endpoint, credits are billed on both 200 and 404 responses if a search was executed. If your custom MCP server doesn't clearly parse and return these 404s as empty-but-valid tool execution results, the LLM will interpret the 404 as a critical system crash rather than a simple "no data found" state.
Generating a People Data Labs MCP Server
Truto abstracts away the complexity of the PDL API by dynamically generating an MCP server derived directly from the API's documentation and resource schemas. This server exposes normalized, LLM-ready tools. You can generate this server via the Truto dashboard or programmatically via the API.
Method 1: Generating via the Truto UI
For ad-hoc agent development or quick testing, the UI is the fastest path.
- Log into your Truto dashboard and navigate to the Integrated Accounts section.
- Select your connected People Data Labs account (if you haven't connected it yet, follow the OAuth or API key flow to establish the connection).
- Click the MCP Servers tab.
- Click Create MCP Server.
- Configure your server:
- Name: e.g., "PDL Enrichment Agent".
- Allowed Methods: Leave blank for all, or restrict to specific types.
- Tags: Optionally restrict tools to tags like
enrichmentorsearch.
- Click Create and copy the generated MCP server URL (e.g.,
https://api.truto.one/mcp/a1b2c3d4...).
Method 2: Generating via the API
For production workflows where you deploy AI agents dynamically, you can generate MCP servers programmatically. This scopes a secure, tokenized endpoint to a specific integrated account.
Make a POST request to the Truto API:
curl -X POST https://api.truto.one/integrated-account/YOUR_INTEGRATED_ACCOUNT_ID/mcp \
-H "Authorization: Bearer $TRUTO_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "PDL Sales Ops Agent",
"config": {
"tags": ["enrichment", "cleaning"]
}
}'The response contains the secure URL required to authenticate your agent:
{
"id": "mcp_srv_8f7e6d5c",
"name": "PDL Sales Ops Agent",
"config": {
"tags": ["enrichment", "cleaning"]
},
"expires_at": null,
"url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}Keep this URL secure. The token in the path handles authentication and routing to the underlying People Data Labs account.
Connecting the MCP Server to ChatGPT
Once you have your Truto MCP URL, you need to register it with ChatGPT so the underlying model can discover and execute the People Data Labs tools.
Method A: Via the ChatGPT UI
If you are using the ChatGPT web interface (available on Pro, Plus, Business, Enterprise, and Education plans):
- In ChatGPT, click your profile picture and go to Settings.
- Navigate to Apps and click on Advanced settings.
- Toggle on Developer mode (MCP features require this flag).
- Under MCP servers / Custom connectors, click to add a new server.
- Enter a recognizable name (e.g., "People Data Labs").
- Paste your Truto MCP URL into the Server URL field.
- Click Save.
ChatGPT will immediately ping the server, execute the MCP handshake, and register the available PDL tools for use in your chat sessions.
Method B: Via Manual Config File
If you are running a local agent environment, an open-source ChatGPT UI clone, or using the Claude Desktop app as an interim testing ground, you can connect using a standard JSON configuration file utilizing the MCP Server Sent Events (SSE) transport.
{
"mcpServers": {
"people-data-labs": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f67890"
]
}
}
}People Data Labs Hero Tools
Truto automatically translates People Data Labs endpoints into fully documented MCP tools. Here are the highest-leverage operations for AI agents.
people_data_labs_people_search
Search the global PDL database for individuals using complex Elasticsearch queries or SQL. This is the primary tool for automated prospecting. The LLM must pass exactly one of query or sql. If no results match, it returns an empty data array rather than failing.
"Find software engineers in San Francisco who currently work at Stripe or Plaid. Return the first page of results, and if there is a scroll_token, hold onto it so I can ask for the next page."
people_data_labs_people_enrich
Perform a 1-to-1 enrichment on a single person based on known fragments of data. This requires passing specific combinations of identifiers (e.g., an email, or a name plus a company). Unmatched queries return a 404 (handled gracefully by the server) and do not consume PDL credits.
"Enrich this contact profile. The email is 'j.doe@example.com'. If you find a match, summarize their current job title and previous work history."
people_data_labs_companies_enrich
Fetch deep firmographic data on a company using a domain, ticker, or name. Useful for account research and territory mapping. It returns headcount, funding data, industry tags, and location data.
"I need full firmographic data for 'Acme Corp'. Try enriching it using the website 'acme.com'. Give me their total employee count and primary industry."
people_data_labs_people_identify
Resolve an identity based on fragmented data. Unlike standard enrichment which looks for a strict 1-to-1 match, identify returns up to 20 candidate profiles sorted by a match score. Note that this endpoint consumes a credit even if no match is found (404).
"I met someone named 'Sarah Jenkins' at a conference in Austin, TX who works in marketing. Use the identity tool to find potential matches and list the top 3 results based on match score."
people_data_labs_job_titles_enrich
Clean and standardize messy, raw job title strings into structured data. It returns the cleaned title along with similar job titles and relevant skills, making it perfect for data normalization pipelines.
"I have a messy CRM record with the job title 'VP of Marketing & Growth Strategies (North America)'. Use the job titles tool to clean this into a standardized title and list the associated skills."
people_data_labs_ips_enrich
Map an IPv4 or IPv6 address to a company profile. This is highly effective for deanonymizing website traffic or building automated intent-scoring agents.
"Analyze this IP address: '192.0.2.146'. Map it to a company profile and tell me which organization owns the network block."
For the complete inventory of People Data Labs tools, input schemas, and required properties, visit the People Data Labs integration page.
Workflows in Action
AI agents excel at orchestrating multi-step API calls. Here is how ChatGPT utilizes the Truto MCP server to execute complex People Data Labs workflows.
Scenario 1: Automated Lead Enrichment for Sales Ops
A sales operations manager wants to enrich a raw list of conference leads that only contains names and company domains.
"I have a lead named 'Marcus Halberstram' who works at 'pierce-and-pierce.com'. First, enrich the company to get its full name and location. Then, use that company data combined with his name to enrich his personal profile. Give me a summary of his recent job history."
Execution Steps:
- ChatGPT calls
people_data_labs_companies_enrichpassing{"website": "pierce-and-pierce.com"}. - The MCP server returns the firmographic data, confirming the company name is "Pierce & Pierce".
- ChatGPT calls
people_data_labs_people_enrichpassing{"first_name": "Marcus", "last_name": "Halberstram", "company": "Pierce & Pierce"}. - The server returns the enriched person profile. ChatGPT synthesizes the JSON response into a natural language summary of Marcus's work history.
sequenceDiagram participant User as User participant ChatGPT as ChatGPT participant Truto as Truto MCP participant PDL as People Data Labs User->>ChatGPT: "Enrich Marcus at pierce-and-pierce.com" ChatGPT->>Truto: Call tools/call (people_data_labs_companies_enrich) Truto->>PDL: GET /v5/company/enrich?website=... PDL-->>Truto: 200 OK (Company Data) Truto-->>ChatGPT: JSON-RPC Result ChatGPT->>Truto: Call tools/call (people_data_labs_people_enrich) Truto->>PDL: GET /v5/person/enrich?first_name=... PDL-->>Truto: 200 OK (Person Data) Truto-->>ChatGPT: JSON-RPC Result ChatGPT-->>User: Provides combined summary
Scenario 2: Data Cleaning and Standardization for Data Engineers
A data engineer needs to clean unstructured inputs before importing them into a central data warehouse.
"I have a raw location string 'SF Bay Area, Cali' and a raw job title 'Snr Dev Ops Eng'. Use the PDL tools to standardize both of these. Tell me the cleaned location components and the standardized job title."
Execution Steps:
- ChatGPT calls
people_data_labs_locations_cleanpassing{"location": "SF Bay Area, Cali"}. - The MCP server returns the structured location object (locality, region, country, geo).
- ChatGPT calls
people_data_labs_job_titles_enrichpassing{"job_title": "Snr Dev Ops Eng"}. - The MCP server returns the parsed title ("Senior DevOps Engineer").
- ChatGPT presents the finalized, structured data to the user.
Security and Access Control
Exposing a powerful enrichment API like People Data Labs to an LLM requires strict governance, especially considering PDL's credit-based billing model. Truto's MCP architecture enforces security at the server configuration level:
- Method Filtering: You can restrict an MCP server using
config.methods. For example, settingmethods: ["read"]ensures the agent can only perform GET requests, preventing accidental state changes if you connect systems with write capabilities. - Tag Filtering: Scope the server using
config.tags. You can configure a server to only expose tools tagged withcompaniesto prevent the AI from accessingpeopleenrichment endpoints, thereby controlling credit spend. - Secondary Authentication: By setting
require_api_token_auth: true, the MCP server will reject requests unless the client also passes a valid Truto API token in the Authorization header. This prevents unauthorized execution if the URL leaks. - Time-to-Live (TTL): The
expires_atproperty allows you to create ephemeral MCP servers. Once the timestamp passes, the server automatically invalidates, cutting off AI access.
Handling Rate Limits and API Errors
When orchestrating high-volume data operations, you will eventually hit People Data Labs' rate limits (e.g., 10 requests/minute for Identify, or specific plan limits).
It is important to note that Truto does not retry, throttle, or absorb rate limit errors. If the upstream PDL API returns an HTTP 429 Too Many Requests, Truto immediately passes that 429 error back to the caller (ChatGPT). Truto normalizes the upstream rate limit data into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset).
The calling agent or framework is entirely responsible for reading these headers, pausing execution, and implementing the appropriate exponential backoff strategy.
Moving Past Integration Boilerplate
Connecting ChatGPT to People Data Labs shouldn't require weeks of reading documentation, writing custom Elasticsearch schema parsers, or hosting middleware. Truto's dynamic tool generation flips the model: you provide the API credentials, and Truto provides a production-ready, standardized MCP endpoint.
By leveraging auto-generated schemas, your AI agents gain immediate, accurate access to global enrichment data, allowing you to focus on building intelligent workflows rather than maintaining API boilerplate.
FAQ
- How do I connect People Data Labs to ChatGPT?
- You can connect People Data Labs to ChatGPT by generating a secure Model Context Protocol (MCP) server URL via Truto. You then add this URL to ChatGPT's custom connector settings, granting the AI read and write access to PDL's enrichment and search endpoints.
- Does Truto automatically retry rate-limited People Data Labs requests?
- No. When the People Data Labs API returns a 429 Too Many Requests error, Truto passes this HTTP 429 directly back to the caller (e.g., ChatGPT) along with standardized IETF rate limit headers. The client is responsible for implementing retry and backoff logic.
- How are People Data Labs billing credits handled through MCP?
- The MCP server maps directly to the underlying People Data Labs API. Standard PDL billing applies. For example, enrichment tools deduct credits on 200 HTTP responses and are free on 404s, while identity tools may deduct credits on every call. Ensure your MCP server is scoped with the right method filters to prevent accidental AI spend.