https://github.com/peopledatalabs/peopledatalabs-rust
A Rust client for the People Data Labs API
https://github.com/peopledatalabs/peopledatalabs-rust
api companies company-enrichment company-search contact-data data-enrichment enrichment people peopledatalabs person-data person-enrichment person-search rust rust-sdk search
Last synced: 3 months ago
JSON representation
A Rust client for the People Data Labs API
- Host: GitHub
- URL: https://github.com/peopledatalabs/peopledatalabs-rust
- Owner: peopledatalabs
- License: mit
- Created: 2023-08-29T00:43:13.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-02-21T04:23:14.000Z (over 1 year ago)
- Last Synced: 2025-03-28T12:51:17.725Z (about 1 year ago)
- Topics: api, companies, company-enrichment, company-search, contact-data, data-enrichment, enrichment, people, peopledatalabs, person-data, person-enrichment, person-search, rust, rust-sdk, search
- Language: Rust
- Homepage: https://docs.peopledatalabs.com/docs/rust-sdk
- Size: 90.8 KB
- Stars: 2
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
People Data Labs Rust Client
Official Rust client for the People Data Labs API.
## Table of Contents
- [🔧 Installation](#installation)
- [🚀 Usage](#usage)
- [🏝 Sandbox Usage](#sandbox)
- [🌐 Endpoints](#endpoints)
- [📘 Documentation](#documentation)
1. To use peopledatalabs SDK in your project initialize your Rust crate then run:
```bash
cargo add peopledatalabs
```
2. Sign up for a [free PDL API key](https://www.peopledatalabs.com/signup).
3. Set your API key as a environment variable.
First, create the PeopleDataLabs client:
```rust
let api_key = std::env::var("PDL_API_KEY").unwrap();
let client = PDL::new(&api_key);
```
Then, send requests to any PDL API Endpoint.
### Person Data
#### Enrichment
```rust
let mut person_params = PersonParams::default();
person_params.name = Some(vec!["josh finnie".to_string()]);
person_params.location = Some(vec!["washington, dc".to_string()]);
let mut enrich_params = EnrichPersonParams::default();
enrich_params.person_params = person_params.clone();
let results = client.person.enrich(enrich_params);
```
#### Bulk Enrichment
```rust
let mut person_params = PersonParams::default();
person_params.name = Some(vec!["josh finnie".to_string()]);
person_params.location = Some(vec!["washington, dc".to_string()]);
let request = BulkEnrichSinglePersonParams {
params: person_params.clone(),
metadata: None,
};
let bulk_enrich_params = BulkEnrichPersonParams {
requests: vec![request],
};
let results = client.person.bulk_enrich(bulk_enrich_params);
```
#### Search (Elasticsearch)
```rust
let mut search_base_params = SearchBaseParams::default();
search_base_params.query = Some(serde_json::value::Value::String(
"{'bool':{'must': [{'term': {'job_title_role': 'health'}},]}}".to_string(),
));
let mut search_params = SearchParams::default();
search_params.search_base_params = search_base_params;
let search_results = client.person.search(search_params);
```
#### Search (SQL)
```rust
let query = r#"
SELECT * FROM person
WHERE location_country='mexico'
AND job_title_role='health'
AND phone_numbers IS NOT NULL;
"#.to_string();
let mut search_base_params = SeachBaseParams::default();
search_base_params.sql = query;
let mut seach_params = SearchParams::default();
search_params.search_base_params = search_base_params;
let search_results = client.person.searach(seach_params);
```
#### `PDL_ID` (Retrieve API)
```rust
let retrieve_person_params = RetrievePersonParams {
base_params: None,
person_id: "82MYIGZzMttzdyKiQBv4ZQ_0000".to_string(),
};
let retrieve_results = client.person.retrieve(retrieve_person_params);
```
#### Bulk Retrieve API
```rust
let retrieve_request = BulkRetrieveSinglePersonParams {
id: "82MYIGZzMttzdyKiQBv4ZQ_0000".to_string(),
metadata: None,
};
let mut bulk_retrieve_params = BulkRetrievePersonParams::default();
bulk_retrieve_params.requests = vec![retrieve_request];
let bulk_retrieve_results = client.person.bulk_retrieve(bulk_retrieve_params);
```
#### Fuzzy Enrichment (Identify API)
```rust
let mut person_params = PersonParams::default();
person_params.name = Some(vec!["josh finnie".to_string()]);
person_params.location = Some(vec!["washington, dc".to_string()]);
let mut identify_params = IdentifyPersonParams::default();
identify_params.person_params = person_params.clone();
let identify_results = client.person.identify(identify_params);
```
### Company Data
#### Enrichment
```rust
let mut company_params = CompanyParams::default();
company_params.name = Some("google".to_string());
let enrich_params = EnrichCompanyParams {
base_params: None,
company_params,
additional_params: None,
};
let enrich_request = client.company.enrich(enrich_params);
```
#### Search (Elasticsearch)
```rust
let mut search_base_params = SearchBaseParams::default();
search_base_params.query = Some(serde_json::value::Value::String(
r#"{'query': {'bool': {'must': {
{"term": {"tags": "bigdata"}},
{"term": {"industry": "financial services"}},
{"term": {"location.country": "united states"}},
},},},
}"#.to_string(),
));
let mut search_params = SearchParams::default();
search_params.search_base_params = search_base_params;
let search_results = client.company.search(search_params);
```
#### Search (SQL)
```rust
let mut search_base_params = SearchBaseParams::default();
search_base_params.sql = Some("SELECT * FROM company WHERE website='google.com';".to_string());
let search_params = SearchParams {
base_params: None,
search_base_params,
additional_params: None,
};
let search_results = client.company.search(search_params);
```
### Supporting APIs
#### Get Autocomplete Suggestions
```rust
let autocomplete_base_params = AutocompleteBaseParams{
field: "text".to_string(),
text: Some("full".to_string())
};
let autocomplete_params = AutocompleteParams {
base_params: None,
autocomplete_base_params,
};
let request = client.autocomplete.autocomplete(autocomplete_params);
```
#### Clean Raw Company Strings
```rust
let mut clean_params = CleanCompanyParams::default();
clean_params.name = Some("google".to_string());
let clean_results = client.company.clean(clean_params);
```
#### Clean Raw Location Strings
```rust
let base_params = BaseParams::default();
let location_params = LocationParams {
location: Some("New York, NY".to_string()),
};
let params = CleanLocationParams {
base_params: None,
location_params,
additional_params: None,
};
let results = client.location.clean(params);
```
#### Clean Raw School Strings
```rust
let mut school_params = SchoolParams::default();
school_params.name = Some("UConn".to_string());
let params = CleanSchoolParams {
base_params: None,
school_params,
additional_params: None,
};
let results = client.school.clean(params);
```
#### Enrich Job Title
```rust
let job_title_base_params = JobTitleBaseParams {
job_title: Some("software engineer".to_string()),
};
let params = JobTitleParams {
base_params: None,
job_title_base_params,
};
let results = client.job_title.get(params);
```
#### Enrich IP
```rust
let mut ip_base_params = IPBaseParams::default();
ip_base_params.ip = Some("72.212.42.228".to_string());
let params = IPParams {
base_params: None,
ip_base_params,
};
let results = client.ip.get(params);
```
## 🏝 Sandbox Usage
```rust
// To enable sandbox usage, pass in the following options to the PDLClient before building
let api_key = std::env::var("PDL_API_KEY").unwrap();
let mut client_options = PDLCLientOptions::default();
client_options.sandbox = true;
let client = PDLClient::new(&api_key).options(client_options).build();
```
**Person Endpoints**
| API Endpoint | SDK Function |
|----------------------------------------------------------------------------------------|--------------------------------------|
| [Person Enrichment API](https://docs.peopledatalabs.com/docs/enrichment-api) | `client.person.enrich(params)` |
| [Person Bulk Enrichment API](https://docs.peopledatalabs.com/docs/bulk-enrichment-api) | `client.person.bulk_enrich(params)` |
| [Person Search API](https://docs.peopledatalabs.com/docs/search-api) | `client.person.search(params)` |
| [Person Retrieve API](https://docs.peopledatalabs.com/docs/person-retrieve-api) | `client.person.retrieve(params)` |
| [Person Bulk Retrieve API](https://docs.peopledatalabs.com/docs/bulk-person-retrieve) | `client.person.bulk_retrieve(params)` |
| [Person Identify API](https://docs.peopledatalabs.com/docs/identify-api) | `client.person.identify(params)` |
**Company Endpoints**
| API Endpoint | SDK Function |
| ------------------------------------------------------------------------------------- |---------------------------------|
| [Company Enrichment API](https://docs.peopledatalabs.com/docs/company-enrichment-api) | `client.company.enrich(params)` |
| [Company Search API](https://docs.peopledatalabs.com/docs/company-search-api) | `client.company.search(params)` |
**Supporting Endpoints**
| API Endpoint | SDK Function |
| --------------------------------------------------------------------------------------- |---------------------------------|
| [Autocomplete API](https://docs.peopledatalabs.com/docs/autocomplete-api) | `client.autocomplete.autocomplete(params)` |
| [Company Cleaner API](https://docs.peopledatalabs.com/docs/cleaner-apis#companyclean) | `client.company.clean(params)` |
| [Location Cleaner API](https://docs.peopledatalabs.com/docs/cleaner-apis#locationclean) | `client.location.clean(params)` |
| [School Cleaner API](https://docs.peopledatalabs.com/docs/cleaner-apis#schoolclean) | `client.school.clean(params)` |
| [Job Title Enrichment API](https://docs.peopledatalabs.com/docs/job-title-enrichment-api) | `client.job_title.enrich(params)` |
| [IP Enrichment API](https://docs.peopledatalabs.com/docs/ip-enrichment-api) | `client.ip.enrich(params)` |
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](#endpoints) section above, each of our API endpoints is mapped to a specific method in the API Client. 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.