People Data Labs JavaScript Library
JavaScript client with TypeScript support for the People Data Labs API.
This is a simple JavaScript client library to access the various API endpoints provided by People Data Labs.
This library bundles up PDL API requests into simple function calls, making it easy to integrate into your projects. You can use the various API endpoints to access up-to-date, real-world data from our massive Person and Company Datasets.
✨ Features
- Supports all People Data Labs API endpoints
- Built-in Typescript support
Table of Contents
🔧 Installation
- Pull the package from the npm repository:
yarn add peopledatalabs
or
npm i peopledatalabs
-
If you get a error while running a typescript project, add "esModuleInterop": true
to your tsconfig
-
Sign up for a free PDL API key
🚀 Usage
First, create the PDLJS client:
import PDLJS from 'peopledatalabs';
const PDLJSClient = new PDLJS({ apiKey: 'YOUR API KEY' })
Then, send requests to any PDL API Endpoint:
Using Person APIs
try {
const response = await PDLJSClient.person.enrichment({ phone: '4155688415' });
console.log(response);
} catch (error) {
console.log(error);
}
try {
const response = await PDLJSClient.person.enrichmentPreview({ phone: '4155688415' });
console.log(response);
} catch (error) {
console.log(error);
}
const bulkEnrichmentRecords = {
requests: [
{
params: {
profile: ['linkedin.com/in/seanthorne'],
},
},
{
params: {
profile: ['linkedin.com/in/randrewn'],
},
},
],
};
try {
const response = await PDLJSClient.person.bulk.enrichment(bulkEnrichmentRecords);
console.log(response.items);
} catch (error) {
console.log(error);
}
const sqlQuery = "SELECT * FROM person WHERE location_country='mexico' AND job_title_role='health'AND phone_numbers IS NOT NULL;"
try {
const response = await PDLJSClient.person.search.sql({ searchQuery: sqlQuery, size: 10 });
console.log(response.total);
} catch (error) {
console.log(error);
}
const esQuery = {
query: {
bool: {
must:[
{ term: { location_country: 'mexico' } },
{ term: { job_title_role: 'health' } },
{ exists: { field: 'phone_numbers' } }
]
}
}
}
try {
const response = await PDLJSClient.person.search.elastic({ searchQuery: esQuery, size: 10 });
console.log(response.total);
} catch (error) {
console.log(error);
}
try {
const response = await PDLJSClient.person.identify({ name: 'sean thorne' });
console.log(response);
} catch (error) {
console.log(error);
}
Using Company APIs
try {
const response = await PDLJSClient.company.enrichment({ website: 'peopledatalabs.com' });
console.log(response);
} catch (error) {
console.log(error);
}
const bulkEnrichmentRecords = {
requests: [
{
params: {
profile: ['linkedin.com/in/peopledatalabs'],
},
},
{
params: {
profile: ['linkedin.com/in/apple'],
},
},
],
};
try {
const response = await PDLJSClient.company.bulk.enrichment(bulkEnrichmentRecords);
console.log(response.items);
} catch (error) {
console.log(error);
}
const sqlQuery = "SELECT * FROM company WHERE tags='big data' AND industry='financial services' AND location.country='united states';"
try {
const response = await PDLJSClient.company.search.sql({ searchQuery: sqlQuery, size: 10 });
console.log(response.total);
} catch (error) {
console.log(error);
}
const esQuery = {
query: {
bool: {
must:[
{ term: { tags: 'big data' } },
{ term: { industry: 'financial services' } },
{ term: { location_country: 'united states' } }
]
}
}
}
try {
const response = await PDLJSClient.company.search.elastic({ searchQuery: esQuery, size: 10 });
console.log(response.total);
} catch (error) {
console.log(error);
}
Using Autocomplete API
try {
const response = await PDLJSClient.autocomplete({ field: 'title', text: 'full', size: 10 });
console.log(response);
} catch (error) {
console.log(error);
}
Using Cleaner APIs
try {
const response = await PDLJSClient.company.cleaner({ name: 'peOple DaTa LabS' });
console.log(response);
} catch (error) {
console.log(error);
}
try {
const response = await PDLJSClient.location.cleaner({ location: '455 Market Street, San Francisco, California 94105, US' });
console.log(response);
} catch (error) {
console.log(error);
}
try {
const response = await PDLJSClient.school.cleaner({ name: 'university of oregon' });
console.log(response);
} catch (error) {
console.log(error);
}
Using Job Title Enrichment API
try {
const response = await PDLJSClient.jobTitle({ jobTitle: 'software engineer' });
console.log(response);
} catch (error) {
console.log(error);
}
Using Skill Enrichment API
try {
const response = await PDLJSClient.skill({ skill: 'c++' });
console.log(response);
} catch (error) {
console.log(error);
}
Using IP Enrichment API
try {
const response = await PDLJSClient.ip({ ip: '72.212.42.169' });
console.log(response);
} catch (error) {
console.log(error);
}
Using Sandbox APIs
try {
const response = await PDLJSClient.person.enrichment({
email: 'reneewillis74@aol.com',
sandbox: true,
});
console.log(response);
} catch (error) {
console.log(error);
}
try {
const response = await PDLJSClient.person.search.sql({
searchQuery: "SELECT * FROM person WHERE location_country='united states';",
size: 10,
sandbox: true,
});
console.log(response.total);
} catch (error) {
console.log(error);
}
const esQuery = {
query: {
bool: {
must:[
{ term: { location_country: 'united states' } }
]
}
}
}
try {
const response = await PDLJSClient.person.search.elastic({ searchQuery: esQuery, size: 10, sandbox: true });
console.log(response.total);
} catch (error) {
console.log(error);
}
try {
const response = PDLJSClient.person.identify({ email: 'reneewillis74@aol.com', sandbox: true });
console.log(response);
} catch (error) {
console.log(error);
}
try {
const response = await PDLJSClient.company.enrichment({ website: 'kohlerinteriors.com', sandbox: true });
console.log(response);
} catch (error) {
console.log(error);
}
const sqlQuery = "SELECT * FROM company WHERE tags='hotel consultant' AND industry='hospitality';"
try {
const response = await PDLJSClient.company.search.sql({ searchQuery: sqlQuery, size: 10, sandbox: true });
console.log(response.total);
} catch (error) {
console.log(error);
}
const esQuery = {
query: {
bool: {
must:[
{ term: { tags: 'hotel consultant' } },
{ term: { industry: 'hospitality' } }
]
}
}
}
try {
const response = await PDLJSClient.company.search.elastic({ searchQuery: esQuery, size: 10, sandbox: true });
console.log(response.total);
} catch (error) {
console.log(error);
}
🌐 Endpoints
Person Endpoints
Company Endpoints
Supporting Endpoints
Sandbox Endpoints
📘 Documentation
All of our API endpoints are documented at: https://docs.peopledatalabs.com/
These docs describe the supported input parameters, output responses and also provide additional technical context.
As illustrated in the Endpoints section above, each of our API endpoints is mapped to a specific method in the PDLJS class. For each of these class methods, all function inputs are mapped as input parameters to the respective API endpoint, meaning that you can use the API documentation linked above to determine the input parameters for each endpoint.
As an example:
The following is valid because name
is a supported input parameter to the Person Identify API:
PDLJS.person.identify({ name: 'sean thorne' })
Conversely, this would be invalid because fake_parameter
is not an input parameter to the Person Identify API:
PDLJS.person.identify({ fake_parameter: 'anything' })
Special Note about Search API Support
Our Person Search API and Company Search API endpoints both support two types of query syntax: you can construct search queries using either SQL
or Elasticsearch
syntax.
In the PDLJS class, the person and company search functions are broken out into two syntax-specific methods as follows:
Data Type | Search Query Syntax | Function |
---|
Person | SQL | PDLJS.person.search.sql({ ...params }) |
Person | Elasticsearch | PDLJS.person.search.elastic({ ...params }) |
Company | SQL | PDLJS.company.search.sql({ ...params }) |
Company | Elasticsearch | PDLJS.company.search.elastic({ ...params }) |
You can pass your query to these methods using the special searchQuery
function argument, as shown in the following example:
const sqlQuery = "SELECT * FROM company WHERE website='peopledatalabs.com';"
try {
const response = await PDLJS.company.search.sql({ searchQuery: sqlQuery, size: 10 });
console.log(response.total)
} catch (error) {
console.log(error)
}
Upgrading to v6.X.X
NOTE: When upgrading to v6.X.X from vX.X.X and below, Retrieve and Bulk Retrieve were both changed to make the pretty
, titlecase
and filter_updated
to be siblings of the requests
parameter.
Upgrading to v5.X.X
NOTE: When upgrading to v5.X.X from v4.X.X and below, Bulk Enrichment was moved from PDLJS.person.bulk({ ...records })
to PDLJS.person.bulk.enrichment({ ...records })