# ZoomInfo

> B2B contact and company database. Search contacts by job, department, or LinkedIn URL; enrich companies by domain; pull verified emails, direct phones, and firmographic data.

Source: https://cotera.co/docs/reference/tools/individual-tools/zoominfo

---

**Authentication Type:** API Key\
**Description:** B2B contact and company database with search and enrichment for sales prospecting. Look up contacts by name, job, or LinkedIn URL and enrich companies by domain.

***

## Authentication

To authenticate, you'll need a ZoomInfo Bearer access token (JWT) for the GTM Data API. Generate one using your ZoomInfo OAuth2 client credentials or PKI auth — see the [ZoomInfo Authentication docs](https://docs.zoominfo.com/reference/authentication-1).

Provide the Bearer token as the `apiKey` field. Tokens have a short lifetime (typically 1 hour); rotate as needed.

***

## Search

Search the ZoomInfo database for contacts and companies using firmographic and demographic filters.

### Search People

Find contacts using filters like job title, management level, department, company, location, and minimum contact accuracy score. Returns contact IDs and identifiers — pass them to People Enrichment to pull email and phone.

**Operation Type:** Query (Read)

**Parameters:**

* **personTitles** `array of strings` (nullable): Job titles (e.g., \["VP of Sales", "Marketing Manager"])
* **personFirstName** `string` (nullable): First name filter
* **personLastName** `string` (nullable): Last name filter
* **managementLevels** `array of strings` (nullable): C\_Level, VP\_Level, Director, Manager, Non\_Manager
* **departments** `array of strings` (nullable): Department names (use the ZoomInfo Lookup endpoint for canonical values)
* **jobFunctions** `array of strings` (nullable): Job functions (e.g., "Sales Operations")
* **companyName** `string` (nullable): Scope to a specific employer
* **companyDomain** `string` (nullable): Employer domain (no "[www](http://www)." or "@")
* **companyIndustry** `string` (nullable): Industry keyword
* **companyEmployeeCountMin** `number` (nullable): Minimum employees at the company
* **companyEmployeeCountMax** `number` (nullable): Maximum employees at the company
* **companyRevenueMin** `number` (nullable): Minimum annual revenue in USD
* **companyRevenueMax** `number` (nullable): Maximum annual revenue in USD
* **locationPerson** `array of strings` (nullable): Where the contact lives
* **locationCompany** `array of strings` (nullable): Where the employer is HQ'd
* **contactAccuracyScoreMin** `number` (nullable): 0–100 minimum match-confidence threshold
* **requiredFields** `array of strings` (nullable): Fields that must be present (e.g., \["email", "directPhone"])
* **page** `number` (default: 1): Page number (starting from 1)
* **perPage** `number` (default: 25): Records per page (max 100)

**Returns:**

* ZoomInfo's contact search response, including matching contacts (id, name, job title, employer summary) and result metadata.

**Example Usage:**

```json
{
  "personTitles": ["VP of Sales", "Head of Sales"],
  "managementLevels": ["C_Level", "VP_Level"],
  "companyIndustry": "Software",
  "companyEmployeeCountMin": 100,
  "companyEmployeeCountMax": 1000,
  "locationPerson": ["United States"],
  "contactAccuracyScoreMin": 85,
  "requiredFields": ["email"],
  "page": 1,
  "perPage": 25
}
```

### Search Organizations

Find companies using firmographic filters like name, domain, industry, employee count, revenue, location, and the tech stack they use.

**Operation Type:** Query (Read)

**Parameters:**

* **companyNames** `array of strings` (nullable): Company names
* **companyDomains** `array of strings` (nullable): Company domains
* **companyIds** `array of strings` (nullable): ZoomInfo company IDs
* **industryKeywords** `array of strings` (nullable): Industry keywords (e.g., \["SaaS", "Fintech"])
* **industryCodes** `array of strings` (nullable): NAICS or SIC codes
* **employeeCountMin** `number` (nullable): Minimum employee count
* **employeeCountMax** `number` (nullable): Maximum employee count
* **revenueMin** `number` (nullable): Minimum annual revenue in USD
* **revenueMax** `number` (nullable): Maximum annual revenue in USD
* **foundedYearMin** `number` (nullable): Earliest founding year
* **foundedYearMax** `number` (nullable): Latest founding year
* **locations** `array of strings` (nullable): HQ locations
* **companyType** `string` (nullable): "Public", "Private", "Subsidiary", etc.
* **companyRanking** `string` (nullable): "Fortune500", "Forbes2000", etc.
* **techCategories** `array of strings` (nullable): Tech categories used (e.g., \["CRM"])
* **techProducts** `array of strings` (nullable): Specific products used (e.g., \["Salesforce"])
* **techVendors** `array of strings` (nullable): Tech vendors used
* **requiredFields** `array of strings` (nullable): Fields that must be present
* **page** `number` (default: 1): Page number
* **perPage** `number` (default: 25): Records per page (max 100)

**Returns:**

* ZoomInfo's company search response, including matching companies and result metadata.

**Example Usage:**

```json
{
  "industryKeywords": ["B2B SaaS"],
  "employeeCountMin": 50,
  "employeeCountMax": 500,
  "revenueMin": 10000000,
  "locations": ["United States"],
  "techProducts": ["Salesforce"],
  "page": 1,
  "perPage": 25
}
```

***

## Enrichment

Append verified contact and firmographic data to records you already have.

### People Enrichment

Match one or more contacts using any combination of identifiers (name, email, LinkedIn URL, phone, ZoomInfo person ID) and return work email, direct phone, job title, employer, and other profile fields. Up to 25 contacts per call.

**Operation Type:** Query (Read)

**Parameters:**

* **matchPersonInput** `array of objects` (required): One match candidate per contact; provide as many identifiers as possible for accuracy.
  * **personId** `string` (nullable): ZoomInfo person ID (preferred, most accurate)
  * **firstName** `string` (nullable): First name
  * **lastName** `string` (nullable): Last name
  * **fullName** `string` (nullable): Full name (alternative to first + last)
  * **emailAddress** `string` (nullable): Work or personal email
  * **hashedEmail** `string` (nullable): MD5 or SHA-256 hashed email
  * **phone** `string` (nullable): Phone number
  * **jobTitle** `string` (nullable): Job title
  * **companyId** `string` (nullable): ZoomInfo company ID
  * **companyName** `string` (nullable): Employer name
  * **companyDomain** `string` (nullable): Employer domain
  * **linkedInUrl** `string` (nullable): LinkedIn profile URL
* **outputFields** `array of strings` (nullable): Which fields to include in the response (e.g., \["email", "directPhoneDoNotCall", "managementLevel"])
* **requiredFields** `array of strings` (nullable): Fields that must be populated for a match to be returned

**Returns:**

* ZoomInfo's contact enrichment response with one match record per submitted contact.

**Example Usage:**

```json
{
  "matchPersonInput": [
    {
      "firstName": "Jane",
      "lastName": "Doe",
      "companyDomain": "acme.com"
    },
    {
      "linkedInUrl": "https://linkedin.com/in/janedoe"
    }
  ],
  "outputFields": ["email", "directPhoneDoNotCall", "jobTitle", "companyName"],
  "requiredFields": ["email"]
}
```

### Organization Enrichment

Match one or more companies using identifiers (name, domain, ticker, ZoomInfo company ID) and return industry, employee count, revenue, tech stack, and other firmographic data. Up to 25 companies per call.

**Operation Type:** Query (Read)

**Parameters:**

* **matchCompanyInput** `array of objects` (required): One match candidate per company.
  * **companyId** `string` (nullable): ZoomInfo company ID (preferred)
  * **companyName** `string` (nullable): Company name
  * **companyWebsite** `string` (nullable): Website or domain
  * **companyTicker** `string` (nullable): Stock ticker symbol
  * **companyPhone** `string` (nullable): Main phone number
  * **companyFax** `string` (nullable): Fax number
* **outputFields** `array of strings` (nullable): Which fields to return (e.g., \["industry", "employeeCount", "revenue", "techStack"])
* **requiredFields** `array of strings` (nullable): Fields that must be populated

**Returns:**

* ZoomInfo's company enrichment response with one match record per submitted company.

**Example Usage:**

```json
{
  "matchCompanyInput": [
    { "companyWebsite": "acme.com" },
    { "companyName": "Globex", "companyTicker": "GLBX" }
  ],
  "outputFields": ["industry", "employeeCount", "revenue", "techStack", "linkedInUrl"],
  "requiredFields": ["website"]
}
```

***

## Common Use Cases

**Lead Generation:**

* Build target prospect lists by job function, management level, and employer industry
* Filter contacts by minimum accuracy score for outbound campaigns
* Discover decision-makers at companies on a target account list

**Account Research:**

* Pull firmographic snapshots (employee count, revenue, tech stack) for accounts before a sales call
* Identify subsidiaries, parents, and competitors by industry code
* Surface technographic signals to time outreach

**CRM Enrichment:**

* Append work emails and direct phones to CRM records that have name + company only
* Refresh stale company fields (employee count, revenue) on a recurring schedule
* Standardize industry codes across a contact list before segmentation

**Workflow Automation:**

* Trigger a ZoomInfo search after a new account is added to your CRM
* Enrich newly created contacts the moment they land
* Score and route inbound leads using ZoomInfo accuracy and firmographic data

