← all tools
Prospecting

ZoomInfo

Enterprise-grade contact data, plus a signal that a company is already shopping.

ZoomInfo is a prospecting tool, and one of the 52 tools hyreflow connects to Claude, ChatGPT and other AI assistants. Through hyreflow, an AI agent can run 19 actions, all of which look something up. ZoomInfo runs on your own ZoomInfo account: hyreflow charges no credits for it, and ZoomInfo bills you as before.

Cost per callBYOK · vendor billed
Your own keyrequired
CategoryProspecting

Your agent searches ZoomInfo for people and companies, resolves emails and direct dials, and pulls intent signals on which accounts are in market. It costs more than the alternatives, and it covers more.

ZoomInfo can start a pipeline or rescue one. Use it to discover accounts, or to fill the gaps a cheaper enricher left behind.

What can you ask Claude or ChatGPT to do with ZoomInfo?

With hyreflow connected, you ask for the outcome in plain language and the assistant runs ZoomInfo for you. For example:

  • “Enrich these 300 contacts with direct dials and write the result into Bullhorn”
  • “Which target accounts are showing buying intent, and which of those are hiring per TheirStack?”
  • “Give me twenty companies that look like this one and check what they run with BuiltWith”
  • “Take this account list csv and fill in every missing direct dial”

Which tools work well with ZoomInfo?

In a hyreflow run, ZoomInfo is most often paired with TheirStack, BuiltWith, Apollo and Bullhorn.

  • TheirStack

    confirm an intent signal against live job postings

  • BuiltWith

    qualify an account by the stack it actually runs

  • Apollo

    a cheaper first pass before you spend ZoomInfo credits

  • Bullhorn

    enterprise data belongs on the enterprise record

Which ZoomInfo actions can an AI agent run through hyreflow?

Through hyreflow, an AI agent can run 19 ZoomInfo actions, all of which look something up. ZoomInfo runs on your own ZoomInfo account: hyreflow charges no credits for it, and ZoomInfo bills you as before.

ZoomInfo actionWhat it doesCost through hyreflow
Enrich companiesLooks something upno hyreflow credits
Enrich contactsLooks something upno hyreflow credits
Enrich corporate hierarchyLooks something upno hyreflow credits
Enrich hashtagsLooks something upno hyreflow credits
Enrich intentLooks something upno hyreflow credits
Enrich newsLooks something upno hyreflow credits
Enrich org chartsLooks something upno hyreflow credits
Enrich scoopsLooks something upno hyreflow credits
Enrich technologiesLooks something upno hyreflow credits
LookupLooks something upno hyreflow credits
Show all 19 ZoomInfo actions →
ZoomInfo actionWhat it doesCost through hyreflow
Search companiesLooks something upno hyreflow credits
Search contactsLooks something upno hyreflow credits
Search intentLooks something upno hyreflow credits
Search newsLooks something upno hyreflow credits
Search scoopsLooks something upno hyreflow credits
Company insightsLooks something upno hyreflow credits
Company lookalikesLooks something upno hyreflow credits
Contact lookalikesLooks something upno hyreflow credits
Contact recommendationsLooks something upno hyreflow credits

One credit is priced on the pricing page. The full price list for every tool is in the pricing tables.

How does an AI agent know how to use ZoomInfo?

hyreflow ships a written playbook for ZoomInfo, and the agent loads it before the first call. Auth, rate limits, what each call costs, which actions need your approval, and the mistakes worth avoiding. It is the difference between an agent that knows the tool and one that guesses at it.

Read the ZoomInfo docs →
Show the raw playbookwritten for the agent

HOW in lib/zoominfo.py. Paths CONFIRMED from the live docs at docs.gtm.ai (2026-09); index: reference/docs/zoominfo/raw/endpoints.md.

Auth & config — OAuth 2.0 Client Credentials

  • Host: https://api.zoominfo.com/gtm (families: oauth/v1, data/v1, copilot/v1).
  • Token: POST /gtm/oauth/v1/token — HTTP Basic client_id:client_secret, body grant_type=client_credentials (no scope, no refresh token), x-www-form-urlencoded → Bearer (expires_in ~1h). The adapter caches the token, refreshes before expiry, and re-auths once on a 401.
  • Env: ZOOMINFO_CLIENT_ID, ZOOMINFO_CLIENT_SECRET (DevPortal app — self-serve BYOK, pasted on the Integrations card as Client ID + Client Secret; connecting it needs the Essential plan or above). Never hardcode. Per-endpoint scopes (api:data:contact, api:data:company, api:insights:read, …) are granted to the app in DevPortal — the token request sends no scope. Data calls send Content-Type/Accept: application/vnd.api+json with JSON:API {"data":{"type":…,"attributes":{…}}} bodies.

Operations

Enrich: enrich_contacts, enrich_companies (≤25 records), enrich_scoops, enrich_intent, enrich_news, enrich_technologies, enrich_org_charts, enrich_corporate_hierarchy, enrich_hashtags. Search: search_contacts, search_companies, search_intent, search_news, search_scoops (filters in data.attributes; page[number]/page[size] 1-100 + sort as query). Copilot: company_lookalikes, contact_lookalikes (filter[referencePersonId]), contact_recommendations (filter[useCaseType] + filter[ziCompanyId]), company_insights, account_summary. lookup(field_name) resolves valid field values; user_usage reports credits. Everything else (agent-teams, ICP/persona/competitor config, audiences, GTM-Studio columns/folders/rows, workflows, engagements) → generic request("POST"|"GET", "data/v1/…"|"copilot/v1/…", json=…).

⚠️ Credits + guardrail

  • user_usage, lookup and search_* calls are free on the ZoomInfo side; enrich_* charges per matched record (failed/no-match lookups are NOT charged). user_usage() to check balance. Pilot a 1-record enrich first; gate bulk behind approval. Enrich is capped at 25 records/call.

Handoff

Net-new sourcing + enrichment layer: search_companies/search_contacts (discover) → enrich_* (resolve emails/phones/firmographics) → signals (enrich_intent/enrich_scoops) for prioritization → hand to sequencers / ATS. Premium alternative/complement to [[apollo]] and the waterfall enrichers.

Callable surface — lib/zoominfo.py

Import: from lib.zoominfo import ZoomInfo → instantiate ZoomInfo() (reads key from env). Base: https://api.zoominfo.com/gtm. Generic passthrough: request(method, path, *, params, json).

  • account_summary(company_id) -> Any — GET /copilot/v1/companies/{companyId}/account-summary — Copilot account summary for one ZoomInfo company ID.
  • company_insights(payload: dict) -> Any — POST /copilot/v1/companies/insights — type CompanyInsightsSearch, attributes {ziCompanyIds: [≤50], signalTypes?}. Sales-intelligence signals filtered by type; scope api:insights:read.
  • company_lookalikes(**params) -> Any — GET /copilot/v1/companies/lookalikes — ranked similar companies (≤100, page[size]).
  • contact_lookalikes(**params) -> Any — GET /copilot/v1/contacts/lookalikes — ranked contacts similar to a reference person.
  • contact_recommendations(**params) -> Any — GET /copilot/v1/contacts/recommendations — ranked contacts at a target company for a sales motion. Requires filter[useCaseType] (e.g. PROSPECTING, DEAL_ACCELERATION) and filter[ziCompanyId].
  • enrich_companies(payload: dict) -> Any — POST /data/v1/companies/enrich — type CompanyEnrich, attributes matchCompanyInput ≤25 (companyId|companyName|companyWebsite|…), outputFields, requiredFields.
  • enrich_contacts(payload: dict) -> Any — POST /data/v1/contacts/enrich — type ContactEnrich, attributes matchPersonInput ≤25 (personId|emailAddress|phone|fullName|firstName+lastName+companyName|companyId|…), outputFields, requiredFields. 1 ZoomInfo credit per matched record; scope api:data:contact.
  • enrich_corporate_hierarchy(payload: dict) -> Any — POST /data/v1/companies/corporate-hierarchy/enrich — type CorporateHierarchyEnrich; full corporate tree for the matched company.
  • enrich_hashtags(payload: dict) -> Any — POST /data/v1/companies/hashtags/enrich — type HashtagEnrich; predefined categorical labels for the matched company.
  • enrich_intent(payload: dict) -> Any — POST /data/v1/intent/enrich — type IntentEnrich; intent signals for a company.
  • enrich_news(payload: dict) -> Any — POST /data/v1/news/enrich — type NewsEnrich; company identifier (companyId|companyName|companyWebsite) required. Charges per returned article.
  • enrich_org_charts(payload: dict) -> Any — POST /data/v1/companies/org-chart/enrich — type OrgChartEnrich; a ZoomInfo company identifier + at least one ZoomInfo department identifier are required.
  • enrich_scoops(payload: dict) -> Any — POST /data/v1/scoops/enrich — type ScoopEnrich; company identifier (companyId|companyName| companyWebsite) required. Charges per returned scoop.
  • enrich_technologies(payload: dict) -> Any — POST /data/v1/companies/technologies/enrich — type TechnologyEnrich; technologies ZoomInfo has identified for the matched company.
  • lookup(field_name: str, **filters) -> Any — GET /data/v1/lookup/{fieldName} — valid values for a search/enrich field (e.g. 'management-levels', 'company-rankings'); optional filter[category] for hashtag lookups.
  • search_companies(payload: dict, *, page_number: int | None = None, page_size: int | None = None, sort: str | None = None) -> Any — POST /data/v1/companies/search — type CompanySearch, attributes are the filters (companyName, companyWebsite, industryCodes/Keywords, employeeRangeMin/Max, …).
  • search_contacts(payload: dict, *, page_number: int | None = None, page_size: int | None = None, sort: str | None = None) -> Any — POST /data/v1/contacts/search — type ContactSearch, attributes are the filters (jobTitle, managementLevel, department, jobFunction, companyName, companyWebsite, state, country, industryKeywords, employeeRangeMin/Max, revenueMin/Max, …; valid values via lookup()). page[number]/page[size] (1-100, default 25) + sort are query params.
  • search_intent(payload: dict, *, page_number: int | None = None, page_size: int | None = None) -> Any — POST /data/v1/intent/search — type IntentSearch; intent signals. Requires the Intent SKU.
  • search_news(payload: dict, *, page_number: int | None = None, page_size: int | None = None) -> Any — POST /data/v1/news/search — type NewsSearch; at least one input required.
  • search_scoops(payload: dict, *, page_number: int | None = None, page_size: int | None = None) -> Any — POST /data/v1/scoops/search — type ScoopSearch; real-time business intelligence signals.
  • user_usage(**params) -> Any — GET /data/v1/users/usage — API usage/credits on the caller's own ZoomInfo account (ZoomInfo is BYOK-only). Free call.

Questions about ZoomInfo and hyreflow

Can I use ZoomInfo inside Claude or ChatGPT?

Yes. hyreflow is a connector for Claude, ChatGPT and other AI assistants. Once hyreflow is connected, you ask for the outcome in plain language and the assistant calls ZoomInfo for you. hyreflow exposes 19 ZoomInfo actions this way.

Do I need my own ZoomInfo account to use it with hyreflow?

Yes. ZoomInfo runs on your own ZoomInfo account. You connect it to hyreflow once, hyreflow charges no credits for the calls, and ZoomInfo bills you as before.

What does ZoomInfo cost through hyreflow?

ZoomInfo runs on your own ZoomInfo account: hyreflow charges no credits for it, and ZoomInfo bills you as before.

How do I connect ZoomInfo to an AI agent over MCP?

Add the hyreflow MCP server to your assistant and sign in. hyreflow calls the ZoomInfo API directly and exposes its actions as tools the assistant can run, so there is no separate ZoomInfo server to install.

Connect hyreflow to your assistant →

Put ZoomInfo to work from one prompt

Connect hyreflow to Claude or ChatGPT and ask for the outcome. It reads the playbook above before it makes a single call.