GTM CLI
Query ZoomInfo's go-to-market data from your terminal. Install the GTM CLI, authenticate over OAuth, and pipe companies, contacts, intent, and research into your shell as JSON, CSV, or a table.
What is the GTM CLI?
The GTM CLI is a command-line client for ZoomInfo's go-to-market data. A single binary, gtm, searches and enriches companies and contacts, pulls intent signals, scoops, and news, runs agentic research, and reads your GTM context. Results stream out as JSON, JSONL, CSV, YAML, or a table.
Under the hood, each data command calls a tool on the hosted ZoomInfo MCP server. That is why the data, the credits, and the sign-in match what your AI tools already use. It also means a new MCP tool is callable from the terminal as soon as it ships, through gtm raw, before it gets a dedicated command.
$ gtm auth login
✓browser sign-in complete · token saved to ~/.config/gtm-ai/
$ gtm companies search --industry software --metro "CA - San Francisco" -f table
→ 42 companies · id, name, revenue, employeeCount
search is free · no credits consumed
$ gtm contacts search --management-level "C Level Exec" --required email -f jsonl > leads.jsonl
→ 118 contacts written to leads.jsonl
$ gtm contacts enrich --email henry@zoominfo.com --fields phone jobTitle email
→ 1 record enriched · 1 bulk credit
already under management? no credit charged
$ gtm companies search --industry software -f json | jq '.data[].attributes.name'
→ piped straight into jq, a CSV, or a cron job
Who is this for?
Two groups get the most out of it.
The first is people who already work in a terminal. RevOps and data teams script against ZoomInfo with it, and GTM engineers use it for deterministic, repeatable pulls with no model in the loop and no application to maintain.
The second is anyone running a coding agent such as Claude Code or Codex. Agents are fluent in command-line tools, so you describe the list you want in plain English and the agent writes and runs the gtm commands for you. See Use it with an AI agent.
A quick test for fit: if you don't use any other command-line tools today, start with ZoomInfo in Claude or ChatGPT instead. You get the same data, credits, and research agents with nothing to install.
CLI, MCP, or API?
ZoomInfo exposes the same data three ways, through one backend. Reach for the CLI in the terminal: scripts, cron jobs, and one-off pulls. Reach for MCP when an AI agent should hold the data and decide what to fetch. Reach for the API when you are building an application with its own retry and caching logic. The CLI, MCP, or API guide works that decision through in full.
One difference is worth knowing up front. On GTM Bench v1, which ran one agent over ten B2B research tasks, the CLI arm did the work on roughly a third of MCP's tokens and 4% of what open web research burned.
Work tokens per retrieval path
10 GTM research tasks · Claude Opus 4.8 · GTM Bench v1
Lower is better. The CLI ran the same tasks on roughly a third of MCP’s tokens and 4% of the web baseline’s. MCP finished fastest on the clock and posted the highest verified-email coverage, at 94% against the CLI’s 91%.
That gap decides things when an agent runs a task on a schedule, or works a long list inside a single context window. MCP still finished fastest on the clock. Pick by the constraint you actually have.
Install
Homebrew is the shortest path on macOS and Linux.
brew install zoominfo/gtm-ai/gtm-ai-cliUse the full tap-qualified name above. An unrelated project also publishes a gtm formula, so a bare brew install gtm installs the wrong tool.
On Windows, or anywhere you run Node, install the global npm package instead.
npm install -g @zoominfo/gtm-ai-cliPrebuilt binaries for every platform are on the releases page↗. Homebrew or npm is the more reliable route, since both put gtm on your PATH and handle upgrades. Confirm the install:
gtm --versionHomebrew and npm installs also add zoominfo as an alias, so zoominfo companies search works identically. A downloaded binary installs as gtm only. These docs use gtm throughout.
Authenticate
Sign-in is OAuth in your browser, with no client ID or secret to paste.
gtm auth login # opens your browser, saves the token
gtm auth whoami # show login status
gtm auth logout # revoke and remove saved credentialsgtm auth login opens a browser window. Sign in to ZoomInfo (SSO included), wait for the authorization-complete page, and return to the terminal. The token is written to ~/.config/gtm-ai/ at mode 0600. The browser step needs you, so sign in once yourself before handing the CLI to an agent.
Once you're authenticated, drop this prompt into any AI client with terminal access. It starts from your saved GTM context, shows you what you're spending, and asks before it spends credits:
(Use the ZoomInfo MCP tools if available; otherwise use the GTM CLI. Use the tool schema or CLI help for supported commands.) I just connected ZoomInfo. Help me complete the job below. 1. Read my saved business context with get_gtm_context, or the CLI equivalent. This read is free. Use the returned offerings, ICP, and role to frame the work. If context is missing, continue with the information we have. Save changes only if I explicitly ask; a first briefing does not require updating shared business context. 2. Prepare a connected account briefing. Ask me only which company or domain to brief if I haven't named one. Use the account and decision already in this conversation when available. Connect the account's available CRM history, including stage and status, with recent customer conversations and external buying signals. Use Account Research, and add Browse Engagements, Conversation Intelligence, or company signals when the briefing needs more evidence. Return a short briefing: where things stand, what changed, what remains unresolved, and one recommended next action. Cite the source and date for each material fact when returned. Distinguish the recommendation from the evidence. 3. Before calling a tool, check its schema or documented inputs rather than guessing at parameters. Ask only for missing inputs, in a single message, then name the tools and give a credit estimate if supported by their documentation. Label it as an estimate: actual charges depend on records and work done. Ask for approval once before paid research, then complete the selected job. If a tool call comes back "No approval received" or a similar permission response, say so plainly, name the tool, and continue with the remaining steps. Don't retry the same call hoping for a different result, and don't invent an approval that didn't happen. Include a source-coverage note of no more than 3 lines. Separate an unavailable or unauthorized source from a successful search with no matching records. If connection status is unknown, say so. Never infer "no customer history" from an empty result. Continue with available evidence and identify what is missing; use https://gtm.ai/guides/connect-customer-context for source setup. Recommend CRM changes as drafts. Applying them requires an available, separately connected CRM workflow and my authorization. Do not claim a CRM update was made by ZoomInfo research tools.
New to ZoomInfo?
Explore the commands
Commands follow one shape: gtm <object> <action> --filters. Add --help at any level to see what's available, which is also how an agent learns the CLI.
gtm --help # every command group
gtm companies --help # search, enrich, similar
gtm companies search --help # every filter search acceptsSearch filters take canonical values (industry codes, metro names, intent topics), so run gtm lookup first when you're unsure what a filter expects. The command reference has examples for every group.
Use it with an AI agent
Most people who use the CLI never type a search themselves. Once you've signed in, ask a coding agent in plain English:
Use the gtm CLI to find VPs of Sales at software companies in Boston
with more than 500 employees. Save the results as a CSV.The agent reads gtm --help, looks up the canonical filter values, runs the search, and writes the output to a file. Then it reads the first few lines back to check the result rather than pulling every record into the conversation. Calls return fast. That lets an agent run several exploratory queries, often in parallel, before settling on the final one.
None of this needs extra setup. The repo also ships a Claude Code skill↗ that documents every command up front, which saves the agent its discovery step at the start of each session.
Credits apply exactly as they would if you ran the commands yourself. Searches are free; ask the agent to show you the plan before it runs enrichment or research across a long list.
Updating
Keep the CLI current with whichever package manager you installed it from.
brew upgrade gtm-ai-cli # Homebrew
npm update -g @zoominfo/gtm-ai-cli # npmScripting and CI
The CLI runs unattended. Every command emits structured output and returns a proper exit code, so it drops into a cron job or a CI step with no interactive prompts.
# Fail a CI job if the search comes back empty
gtm companies search --industry software -f json | jq -e '.data | length > 0'Requirements and access
Account and credits
The data commands need a ZoomInfo account with data credits: a free account (1,000 data and 1,000 AI credits) or a subscription with bulk data credits enabled. Search, lookup, and find-similar are free. Enrichment uses data credits and research uses AI credits. The command reference maps each command to its credit type, and Credits & Billing covers how consumption works.
The CLI signs in as you, with your ZoomInfo login, and draws on the same credit pool as your MCP connection.
AI client settings govern only that client's connectors. A restriction on the ZoomInfo connector in Claude or ChatGPT won't carry over to the CLI. If your organization limits how ZoomInfo data is used with AI tools, confirm the CLI is approved before you connect an agent to it.
Troubleshooting
"Not logged in" or "Session expired"▼
Run gtm auth login and complete the browser sign-in. If login keeps failing, clear the saved client and credentials, then sign in again:
rm ~/.config/gtm-ai/client_id ~/.config/gtm-ai/credentials
gtm auth loginA search fails with a 422 or an invalid-value error▼
The filter received free text where it expects a canonical value. The error names the field and suggests the matching gtm lookup --field command to run, so run it and pass the value it returns.
gtm --version prints something unexpected▼
Another tool named gtm is installed, usually from a bare brew install gtm. Uninstall it and install with the tap-qualified name, zoominfo/gtm-ai/gtm-ai-cli.
A certificate warning on a corporate network▼
Some corporate networks inspect encrypted traffic through a security proxy, and the CLI's runtime reports the proxy's certificate as a warning. If commands fail, ask your IT team to allow mcp.zoominfo.com or supply the proxy's root certificate.
Seeing exactly what a command sent▼
Add --debug (or -d) to any command to log the underlying MCP tool call and response to stderr. The log holds your query and the records it returned, so review it before you share it in a support request or through gtm feedback submit.
Commands and guides
Command reference→
Every command, flag, output format, and credit note, with copy-paste examples for each.
Getting started guide→
Install, authenticate, and run your first query.
ZoomInfo MCP→
The same data and sign-in, inside Claude, Codex, Cursor, ChatGPT, and other AI agents.
Start building→
Compare the three paths.