ZoomInfo
Enrich and search company and contact data via the ZoomInfo Enterprise API
(the data intelligence API at https://api.zoominfo.com).
The tool authenticates with your ZoomInfo API username + password to obtain a
JSON Web Token (JWT, valid for one hour), then calls the chosen Enrich or Search
endpoint with Authorization: Bearer <jwt>. Standard library only — no
third-party Python packages.
Grounded in the official ZoomInfo API docs (https://api-docs.zoominfo.com/) and the ZoomInfo Enterprise API Getting Started guide.
Operations
| operation | endpoint | purpose |
|---|---|---|
enrich_company |
POST /enrich/company |
Return the full ZoomInfo profile for a known company. Match on companyId, companyName, and/or companyWebsiteUrl. Costs one credit per matched record. |
enrich_person |
POST /enrich/person |
Return the full ZoomInfo profile for a known person. Match on personId, emailAddress, or firstName+lastName+companyName. Costs one credit per matched record. |
company_search |
POST /search/company |
Criteria-based company search (does not consume credits — it shows which records exist). Filter on companyName / companyWebsiteUrl. |
contact_search |
POST /search/person |
Criteria-based contact search. Filter on emailAddress / companyName. |
Typical flow: search first to confirm a record exists and grab its id, then enrich that id to redeem the full record.
Inputs
| name | required | notes |
|---|---|---|
apiKey |
yes | ZoomInfo API username (the user granted API Access). |
password |
yes | ZoomInfo API password for that username. |
operation |
yes | One of the four operations above. |
companyId |
enrich_company | Strongest company match key. |
companyName |
varies | Company name (enrich/search, both company and person enrich). |
companyWebsiteUrl |
varies | Company domain, e.g. zoominfo.com. |
personId |
enrich_person | Strongest person match key. |
emailAddress |
varies | Person email (enrich_person / contact_search). |
firstName, lastName |
enrich_person | Used with companyName when no id/email. |
outputFields |
optional | Comma-separated profile fields to return on enrich (e.g. id,firstName,lastName,email,jobTitle). |
rpp, page |
optional | Search paging — records per page (max 25) and page number. |
apiKey / credential setup
- A ZoomInfo admin enables API access for the user: Admin Portal > User Management > Users > (select user) > enable API Access > Save.
- Use that user's username as
apiKeyand their password aspassword. - The tool POSTs them to
/authenticate; ZoomInfo returns ajwtvalid for one hour, which the tool uses for the data call. The authenticate endpoint is limited to 1 request/second; other endpoints allow ~1500 requests/minute.
ZoomInfo also offers PKI (Client ID + private key) authentication for long-running, library-based JWT generation. This tool uses the simpler username/password flow so it works with a single credential pair and no private-key file.
Examples
Enrich a company by domain, asking for specific fields:
operation = enrich_company
companyWebsiteUrl = zoominfo.com
outputFields = id,name,website,employeeCount,revenue
Enrich a person by email:
operation = enrich_person
emailAddress = [email protected]
Search for contacts at a company:
operation = contact_search
companyName = Acme Corporation
rpp = 25
page = 1
Output
result— the raw ZoomInfo JSON response body (as a JSON string).status— the HTTP status code of the data call (e.g.200).
On an authentication failure or transport error the tool prints
{"error": "..."} and exits non-zero so the calling job step is marked FAILED.
Non-2xx responses from the data endpoints are returned (not raised) so you can
inspect ZoomInfo's error body in result / status.