Playbook
Use People Data Labs when you need explicit, auditable structured filters.- Normalize noisy input first with clean helpers before running expensive search/enrich operations.
- Use autocomplete and narrow incrementally to avoid over-constraining initial queries.
- Treat Person Search
sizeas a spend cap: every returned profile is billed. Start withsize: 1, inspecttotaland field coverage, then request only the number of profiles the user can use. - For surgical gap-fill, prefer
size: 3-5. Do not default to pages of 30, 40, or 100 after earlier providers have already returned candidates; post-response deduplication cannot recover the PDL spend. - Put must-have fields into the search itself, for example
work_email IS NOT NULL,personal_emails IS NOT NULL,mobile_phone IS NOT NULL, or an Elasticsearchexistsclause. Use the matchingdatasetslice where appropriate. - For
peopledatalabs_person_search/peopledatalabs_company_searchSQL: useSELECT *only and DO NOT include aLIMITclause — PDL rejects any SQL withLIMITas HTTP 400. Pass thesizeinput parameter (1–100) to control how many records come back. requiredandmin_likelihoodare Person Enrichment controls, not Person Search inputs. Usepeopledatalabs_enrich_contactwhen you already know the approximate person and need one strict match.- Enrichment also accepts
data_include: comma-separated fields include data and a leading-excludes data. Suppressing the data payload requires the literal two-character value""(a quote pair) — passing a bare empty value is silently ignored and returns the full record. Projection does not lower credits either way; userequiredandmin_likelihoodto control which matches are billable. - Bulk person and company enrichment preserve these controls. Person bulk details may override shared controls per request. Company bulk controls apply to every domain in the batch.
- De-duplicate and normalize the input list before any bulk enrichment.
peopledatalabs_bulk_people_enrichmentandpeopledatalabs_bulk_organization_enrichmentbill per matched row, and PDL does not collapse repeats: two rows for the same person cost 2 credits, andstripe.com,www.stripe.com, andname: stripewere each billed even though all three resolved to the same PDL company id. Exact-string de-duplication is not enough — strip URL schemes,www., and trailing slashes, and reconcile name-vs-domain rows to one identifier per entity first. Deepline’s batch item keys do not collapse these variants for you, and rows are matched to responses by position, so the batch cannot de-duplicate them safely on your behalf. - For personal-email-only use cases, require
personal_emailsbefore billing by passing PDL’srequired=personal_emailsparameter. The default Person Enrichment API bills per matched person profile, even if no personal email is present. - PDL documents
x-call-credits-spentas the per-call charge response header. Deepline parses that header intometa.creditsSpentand prefers it for billing before any fallback estimate. - In changed-company email recovery, treat PDL as the fallback after LeadMagic and Crust.
- If earlier, cheaper steps already returned a usable email, skip PDL for that row.