Skip to content

Connect ZoomInfo to ChatGPT: Enrich Contact and Company Intent Data

Learn how to connect ZoomInfo to ChatGPT using a managed MCP server. Enrich contact data, monitor buyer intent, and orchestrate B2B workflows with AI agents.

Roopendra Talekar Roopendra Talekar · · 9 min read

If you want to connect ZoomInfo to ChatGPT so your AI agents can enrich contact records, monitor buyer intent signals, and map corporate hierarchies dynamically, you need a Model Context Protocol (MCP) server. This server acts as a translation layer between ChatGPT's tool calling capabilities and the ZoomInfo REST API. You can either spend weeks building, hosting, and maintaining a custom MCP server to translate LLM JSON arguments into ZoomInfo's complex enrichment payloads, or you can use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.

If your team uses Claude, check out our guide on connecting ZoomInfo to Claude or explore our broader architectural overview on connecting ZoomInfo to AI Agents.

Giving a Large Language Model (LLM) access to an enterprise data intelligence platform is a massive engineering challenge. You have to handle rigid credit - based enrichment logic, strict OAuth scopes tied to specific SKUs, and unpredictable pagination paradigms. Every time ZoomInfo updates an API schema or adds a new intent topic parameter, your custom server code must be updated and redeployed.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for ZoomInfo, connect it natively to ChatGPT, and execute complex B2B prospecting workflows using natural language.

The Engineering Reality of the ZoomInfo API

A custom MCP server is essentially a self-hosted integration middleware. While the open MCP standard provides a predictable way for models to discover tools over JSON-RPC, implementing it against ZoomInfo's highly specific API is exceptionally painful.

If you decide to build a custom MCP server for ZoomInfo, you own the entire API lifecycle. Here are the specific integration challenges that break standard CRUD assumptions when working with ZoomInfo:

The Credit Economy vs Rate Limits

ZoomInfo's API is heavily governed by a dual - limit system: Request Limits (how many HTTP calls you can make) and Record Limits (how many credits you consume). For enrichment endpoints, NO_MATCH results generally incur no credit cost, but every enriched record counts against your Record Limit.

Furthermore, handling HTTP 429 Too Many Requests errors is critical. Factual note on rate limits: Truto does not retry, throttle, or apply backoff on rate limit errors. When an upstream API returns HTTP 429, Truto passes that error directly to the caller. Truto normalizes upstream rate limit info into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. The caller (or your AI agent framework) is fully responsible for implementing retry and backoff logic.

Granular OAuth Scopes and SKUs

ZoomInfo does not grant blanket access to its data. Endpoints are strictly gated by both OAuth scopes and purchased SKUs. For example, querying the intent endpoints requires the api:data:intent scope on the OAuth app and an active Intent SKU on your ZoomInfo account. If either is missing, ZoomInfo returns a 403 error with specific internal codes (ZI0002 or ZI0003). An LLM has no idea how to interpret this unless your MCP server intercepts and translates the error into a helpful context message.

Asymmetric Pagination Paradigms

ZoomInfo uses different pagination strategies depending on the endpoint. Search endpoints typically use standard offset and limit parameters, maxing out at page 100. Enrichment endpoints, however, return raw arrays (up to 25 items per call) and require explicit page.number and page.size parameter manipulation. Truto standardizes this for the LLM by automatically injecting limit and next_cursor properties into list tool schemas, instructing the model to pass cursor values back unchanged to fetch subsequent pages.

Creating the ZoomInfo MCP Server

Truto dynamically generates MCP tools from an integration's underlying API resources and documentation records. Rather than hand-coding endpoints, Truto maps ZoomInfo's OpenAPI-like definitions into JSON-RPC 2.0 tool definitions.

You can create a ZoomInfo MCP server in two ways.

Method 1: Via the Truto UI

For a quick setup without writing code, use the Truto Dashboard:

  1. Navigate to the Integrated Accounts page and select your connected ZoomInfo account.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your desired configuration (e.g., name, allowed methods like read, and specific tags to scope access).
  5. Copy the generated MCP server URL (it will look like https://api.truto.one/mcp/<token>).

Method 2: Via the API

For programmatic provisioning - such as generating a temporary MCP server for a specific user session - you can create the server via Truto's REST API.

Make a POST request to /integrated-account/:id/mcp:

curl -X POST https://api.truto.one/integrated-account/$INTEGRATED_ACCOUNT_ID/mcp \
  -H "Authorization: Bearer $TRUTO_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ZoomInfo Enrichment Agent",
    "config": {
      "methods": ["read", "write", "custom"],
      "tags": ["enrichment", "intent"]
    }
  }'

The response returns a secure url payload. This single URL encapsulates both routing and authentication for the specific ZoomInfo integrated account.

Connecting the MCP Server to ChatGPT

Once you have your Truto MCP URL, you need to register it with your ChatGPT environment.

Method A: Via the ChatGPT UI (Custom Connectors)

If you have a ChatGPT Pro, Plus, Business, Enterprise, or Education account with Developer mode enabled:

  1. In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
  2. Ensure Developer mode is toggled on.
  3. Under MCP servers / Custom connectors, click to add a new server.
  4. Name: Enter a descriptive label (e.g., "ZoomInfo (Truto)").
  5. Server URL: Paste the URL generated in the previous step.
  6. Click Save.

ChatGPT will immediately perform an MCP handshake (initialize), request the available tool list (tools/list), and expose them to your current session.

Method B: Via Manual Config File (SSE Transport)

If you are running a local agentic setup, using an MCP-compatible framework like Cursor, or using an open-source ChatGPT UI clone, you can connect via a JSON configuration file using the Server-Sent Events (SSE) transport adapter.

{
  "mcpServers": {
    "zoominfo_truto": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "--url",
        "https://api.truto.one/mcp/<your_secure_token>"
      ]
    }
  }
}

This configuration instructs the client to wrap the HTTP POST based Truto endpoint in a persistent SSE connection if required by your specific client architecture.

ZoomInfo Hero Tools for AI Agents

Truto exposes ZoomInfo's API as highly structured MCP tools. Here are 6 high-leverage "hero tools" to power automated prospecting and enrichment workflows.

zoom_info_companies_enrich

This tool allows the LLM to enrich up to 25 ZoomInfo company records per call. It matches based on companyId, companyWebsite, or other company attributes. It returns firmographic attributes such as revenue, employee count, and social media URLs based on the requested output fields.

Usage Note: A single credit is charged for every enriched company unless the record is already under management. NO_MATCH results do not cost credits.

"Enrich the company with the website 'acme.com' and return their exact employee count, annual revenue, and HQ location."

zoom_info_contacts_enrich

Allows the agent to enrich ZoomInfo contacts using a specific personId or a combination of name and company details. It returns detailed profile data, including job titles and accuracy scores.

Usage Note: Every enriched record counts against the organization's Record Limit.

"I have a prospect named Jane Doe who works at Acme Corp. Use the contacts enrich tool to pull her verified title and contact accuracy score."

list_all_zoom_info_intents

Searches ZoomInfo Intent Signals across all companies that match given search criteria. You must pass 1-50 intent topics in the data.attributes.topics array.

Usage Note: This tool requires the api:data:intent OAuth scope and an active Intent SKU. It does not consume credits, but each signal counts as a Record.

"Search for companies showing high intent signals for the topic 'Cloud Infrastructure Security' over the past 7 days."

zoom_info_intents_enrich

Fetches deeply detailed Intent Signals for a single company, enriching it with buyer intent data including signalScore, audienceStrength, and recommendedContacts.

Usage Note: You must pass the topics array and at least one company identifier (like companyWebsite).

"Enrich intent data for acme.com on the topics 'Zero Trust' and 'Endpoint Security' and list the recommended contacts to reach out to."

zoom_info_org_charts_enrich

Enriches a ZoomInfo company's organizational chart, returning contacts organized by specific departments and seniority tiers.

Usage Note: You must pass the companyId and at least one department. A credit is counted for the enriched company, but you get all the contacts in that department for that single record charge.

"Pull the org chart for Acme Corp's IT and Engineering departments, filtering for Director-level and above."

zoom_info_company_technologies_enrich

Enriches technologies for a matched ZoomInfo company, returning the list of software and hardware solutions that the company uses, identified from job postings, websites, and data partnerships.

Usage Note: Requires the api:data:company OAuth scope. Takes a single companyId as input.

"Find out if Acme Corp currently uses AWS, Datadog, or Snowflake in their technology stack."

To view the complete JSON schema definitions, required parameters, and the rest of the available endpoints, visit the full ZoomInfo integration page.

Workflows in Action

When connected via Truto, ChatGPT can orchestrate multi-step data pipelines autonomously. Here is how specific personas leverage the ZoomInfo MCP server.

Scenario 1: ABM Intent & Tech Stack Profiling

Persona: Enterprise SDR or Growth Marketer

"Find companies currently surging on the intent topic 'Data Loss Prevention'. Pick the highest scoring company, check their technology stack to see if they use our competitor (Symantec), and if so, give me a summary of their profile."

Tool Flow:

  1. list_all_zoom_info_intents: ChatGPT queries the intent topic "Data Loss Prevention" and receives a list of surging companies.
  2. zoom_info_companies_enrich: The LLM extracts the companyId of the top-scoring result and fetches its full firmographic profile.
  3. zoom_info_company_technologies_enrich: The agent uses the companyId to pull the tech stack, scanning the results for "Symantec".

Result: The user receives a curated target account briefing: "Acme Corp is surging on DLP with a signal score of 95. They have 5,000 employees, $1B in revenue, and currently use Symantec in their tech stack. They are a prime target for a displacement campaign."

sequenceDiagram
    participant User as User Prompt
    participant LLM as ChatGPT
    participant MCP as Truto MCP Server
    participant ZI as ZoomInfo API

    User->>LLM: "Find DLP intent, check tech stack for Symantec"
    LLM->>MCP: Call list_all_zoom_info_intents(topic="DLP")
    MCP->>ZI: GET /intent/search
    ZI-->>MCP: Returns companies (Acme Corp)
    MCP-->>LLM: MCP Tool Response
    LLM->>MCP: Call zoom_info_company_technologies_enrich(companyId)
    MCP->>ZI: POST /enrich/techtags
    ZI-->>MCP: Returns tech stack array
    MCP-->>LLM: MCP Tool Response
    LLM-->>User: Generated ABM Briefing

Scenario 2: Strategic Account Org Chart Mapping

Persona: Account Executive

"I'm trying to break into Globex Corporation. Get their ZoomInfo ID, pull the org chart for their Information Technology department, and identify the top 3 senior decision makers."

Tool Flow:

  1. zoom_info_companies_enrich: The LLM searches by domain (globex.com) to reliably acquire the ZoomInfo companyId.
  2. zoom_info_org_charts_enrich: The agent passes the companyId and department: ["Information Technology"] to pull the org structure.
  3. LLM Synthesis: ChatGPT parses the orgChartTier fields in the response to filter out individual contributors and bubble up the CIO, VP of IT, and Director of Infrastructure.

Result: The AE gets exactly what they asked for - a targeted hit list of verified IT decision makers at Globex, bypassing the need to click through multiple pages of standard contact searches in the ZoomInfo web app.

Security and Access Control

Giving an LLM access to your ZoomInfo credit pool requires strict governance. Truto MCP servers provide multiple layers of access control:

  • Method Filtering: Configure the server config with "methods": ["read"] to allow the LLM to search for data, but prevent it from executing write/update operations on integrated systems.
  • Tag Filtering: Group specific integration resources (like companies, contacts, intents) under tags. You can scope an MCP server to only allow access to "tags": ["enrichment"], hiding all other endpoints from the LLM.
  • API Token Authentication: By setting require_api_token_auth: true, the bare MCP URL is no longer sufficient. The client must also pass a valid Truto API token in the Authorization header, preventing unauthorized usage if the URL is leaked.
  • Time-to-Live (TTL): Set an expires_at ISO datetime when creating the server. Truto's edge storage automatically purges the authentication token and schedules a cleanup alarm for the database record once the time expires, perfect for temporary agent sessions.

Conclusion

Connecting ZoomInfo to ChatGPT via a custom MCP server requires parsing deeply nested schemas, managing rate limits without native backoff, and translating complex pagination parameters.

By using Truto, you offload the entire infrastructure burden. Your AI agents get dynamic, documentation-driven access to ZoomInfo's enrichment and intent endpoints instantly, while you maintain strict control over credit usage, security, and authentication lifecycles.

FAQ

How does Truto handle ZoomInfo rate limits?
Truto does not retry, throttle, or apply backoff on rate limit errors. When ZoomInfo returns an HTTP 429, Truto passes that error to the caller and normalizes upstream rate limit info into standardized IETF headers (`ratelimit-limit`, `ratelimit-remaining`, `ratelimit-reset`). The caller is responsible for implementing retry/backoff logic.
Do failed ZoomInfo enrichments cost credits through Truto?
No. When using Truto's MCP tools for ZoomInfo enrichment endpoints, `NO_MATCH` results generally do not incur credit costs, though every successfully enriched record counts against your Record Limit.
Can I limit which ZoomInfo tools ChatGPT can use?
Yes. When creating the Truto MCP server, you can configure method filtering (e.g., allow only 'read' operations) and tag filtering to restrict the LLM to specific functional areas like 'enrichment' or 'intent'.
Do I need a specific ZoomInfo SKU to use the intent tools?
Yes. To successfully execute tools like `list_all_zoom_info_intents` and `zoom_info_intents_enrich`, your ZoomInfo OAuth app must have the `api:data:intent` scope enabled, and your account must have an active Intent SKU.

More from our Blog