@zoominfo/gtm-ai-cli 1.1.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +121 -27
  2. package/dist/index.js +98 -98
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # GTM AI CLI
2
2
 
3
3
  A command-line interface for searching [ZoomInfo](https://www.zoominfo.com/) go-to-market (GTM) data.
4
- Search and enrich companies and contacts, surface intent signals and news, manage GTM context, and pipe results
5
- through your shell as JSON, JSONL, CSV, YAML, or a table.
4
+ Search and enrich companies and contacts, surface intent / news / scoop signals, browse engagement history,
5
+ manage GTM context, and pipe results through your shell as JSON, JSONL, CSV, YAML, or a table.
6
6
 
7
7
  ## Installation
8
8
 
@@ -141,7 +141,7 @@ gtm lookup --field tech-products --vendor "HubSpot, Inc"
141
141
  gtm lookup --field metro-regions --fuzzy "san francisco"
142
142
  ```
143
143
 
144
- Valid `--field` names: `industries`, `metro-regions`, `states`, `countries`, `continents`, `management-levels`, `departments`, `job-functions`, `employee-count`, `revenue-ranges`, `company-types`, `company-rankings`, `intent-topics`, `scoop-topics`, `scoop-types`, `scoop-departments`, `news-categories`, `naics-codes`, `sic-codes`, `tech-vendors`, `tech-products`, `tech-categories`, `tech-skills`, `hashtags`, `buying-groups`, `board-members`, `years-of-experience`, `sub-unit-types`, `job-titles`.
144
+ Valid `--field` names: `industries`, `metro-regions`, `states`, `countries`, `continents`, `management-levels`, `departments`, `job-functions`, `employee-count`, `revenue-ranges`, `funding-round-types`, `company-types`, `company-rankings`, `intent-topics`, `scoop-topics`, `scoop-types`, `scoop-departments`, `news-categories`, `naics-codes`, `sic-codes`, `tech-vendors`, `tech-products`, `tech-categories`, `tech-skills`, `hashtags`, `buying-groups`, `board-members`, `years-of-experience`, `sub-unit-types`, `job-titles`.
145
145
 
146
146
  ---
147
147
 
@@ -162,8 +162,9 @@ gtm companies search --type public --country "United States" --revenue-min 10000
162
162
  # Companies using a specific tech product (lookup product IDs first)
163
163
  gtm companies search --tech "5f1d1d5c123" --metro "MA - Boston" --employees "250to499,500to999"
164
164
 
165
- # Series A-B funded ($1M-$20M) software companies in the US
166
- gtm companies search --industry software --country "United States" --funding-min 1000 --funding-max 20000
165
+ # US software companies whose most recent round was Series A or B
166
+ # (use --any-funding-round to match any round in their history instead)
167
+ gtm companies search --industry software --country "United States" --recent-funding-round "Series A,Series B"
167
168
 
168
169
  # By NAICS / SIC codes
169
170
  gtm companies search --naics "541511,541512"
@@ -183,6 +184,9 @@ gtm companies enrich --domain stripe.com --fields name description website reven
183
184
 
184
185
  # Bulk: up to 10 companies via JSON file
185
186
  # companies.json: [{ "domain": "stripe.com" }, { "companyId": "344589814" }]
187
+ # Each entry takes the MCP keys (companyId, companyName, companyWebsite, domain, companyTicker,
188
+ # ipAddress, companyCity, ...) or the flag names (id, name, website, ticker, ip).
189
+ # Unsupported keys are rejected.
186
190
  gtm companies enrich --file companies.json
187
191
  ```
188
192
 
@@ -191,6 +195,9 @@ gtm companies enrich --file companies.json
191
195
  ```shell
192
196
  gtm companies similar --id 344589814
193
197
  gtm companies similar --name "Stripe"
198
+
199
+ # Narrow to look-alikes that share attributes with the reference company
200
+ gtm companies similar --id 344589814 --same-industry --same-country --page-size 50
194
201
  ```
195
202
 
196
203
  ---
@@ -215,8 +222,17 @@ gtm contacts search --management-level Manager --department "Engineering & Techn
215
222
 
216
223
  # Sales leaders with accuracy score ≥ 90
217
224
  gtm contacts search --management-level "VP Level Exec" --department Sales --accuracy-min 90
225
+
226
+ # People who WORK in metro Boston (not just companies headquartered there) — --location-type
227
+ # scopes the location filters to the person, the company HQ, or both
228
+ gtm contacts search --job-title "CFO" --metro "MA - Boston" --location-type Person
229
+
230
+ # Within 25 miles of a zip code
231
+ gtm contacts search --management-level "C Level Exec" --zip 02110 --zip-radius 25
218
232
  ```
219
233
 
234
+ `--location-type` accepts `Person`, `HQ`, `PersonOrHQ`, `PersonAndHQ`, or `PersonThenHQ` and requires at least one location filter (`--metro`, `--state`, `--country`, `--zip`). It's also available on `gtm intent search` and `gtm scoops search`.
235
+
220
236
  **Enrich.** Provide any valid identifier combination — `personId` (most accurate), `email`, `phone`, or `firstName + lastName + (company OR companyId)`:
221
237
 
222
238
  ```shell
@@ -231,6 +247,9 @@ gtm contacts enrich --email jane@acme.com --fields phone jobTitle managementLeve
231
247
 
232
248
  # Bulk: up to 10 contacts via JSON file
233
249
  # contacts.json: [{ "email": "a@b.com" }, { "personId": "1260398587" }]
250
+ # Each entry takes the MCP keys (personId, email, phone, firstName, lastName, fullName,
251
+ # companyName, companyId, jobTitle, ...) or the flag names (id, company).
252
+ # Unsupported keys are rejected.
234
253
  gtm contacts enrich --file contacts.json
235
254
  ```
236
255
 
@@ -270,13 +289,7 @@ gtm intent search --topics "Mobile Apps" --signal-score-min 80 \
270
289
  gtm intent search --topics "AI Agents" --audience-strength-min B --audience-strength-max A
271
290
  ```
272
291
 
273
- **Enrich** — pull intent signals for a specific company:
274
-
275
- ```shell
276
- gtm intent enrich --company-id 344589814 --topics "Cloud Applications" "Java"
277
- gtm intent enrich --name "ZoomInfo" --topics "AI Agents" --signal-score-min 70
278
- gtm intent enrich --website https://www.stripe.com --topics "Payments"
279
- ```
292
+ For intent signals on a *specific* company, use [`gtm signals`](#gtm-signals--per-company-intent--news--scoops) with `--types INTENT`.
280
293
 
281
294
  ---
282
295
 
@@ -299,31 +312,31 @@ gtm scoops search --scoop-types Layoffs --employees "10000plus" --published-star
299
312
  gtm scoops search --scoop-types "Product Launch" --description "artificial intelligence" --published-start 2026-04-01
300
313
  ```
301
314
 
302
- **Enrich** — get scoops for a specific company:
303
-
304
- ```shell
305
- gtm scoops enrich --company-id 344589814 --scoop-types "New Hire" Promotion
306
- gtm scoops enrich --name "Stripe" --published-start 2026-01-01
307
- ```
315
+ For scoops on a *specific* company, use [`gtm signals`](#gtm-signals--per-company-intent--news--scoops) with `--types SCOOP`.
308
316
 
309
317
  ---
310
318
 
311
- ### `gtm news` — news articles
319
+ ### `gtm signals` — per-company intent + news + scoops
312
320
 
313
- `enrich_news` is currently the only news tool. Requires `--company-id`.
321
+ One call returns the latest signals across all three categories for up to 10 companies — ideal for
322
+ a quick "what's happening at these accounts" sweep. Replaces the former `gtm intent enrich`,
323
+ `gtm scoops enrich`, and `gtm news enrich` commands (the MCP consolidated those tools into
324
+ `enrich_company_signals`).
314
325
 
315
326
  ```shell
316
- # Recent funding/financial news for ZoomInfo
317
- gtm news enrich --company-id 344589814 --categories FINANCIAL_RESULTS FUNDING
327
+ # Everything recent for one company (intent + news + scoops, sorted by latest date)
328
+ gtm signals --company-ids 344589814
318
329
 
319
- # Product news in the last quarter
320
- gtm news enrich --company-id 344589814 --categories PRODUCT --publishing-start 2026-03-01 --publishing-end 2026-05-31
330
+ # Just the news
331
+ gtm signals --company-ids 344589814 --types NEWS
321
332
 
322
- # Leadership news (appointments, departures)
323
- gtm news enrich --company-id 344589814 --categories PERSON
333
+ # Intent + scoops across a batch of target accounts
334
+ gtm signals --company-ids 344589814 239305146 5237537 --types INTENT SCOOP
324
335
  ```
325
336
 
326
- Valid `--categories`: `FINANCIAL_RESULTS`, `FUNDING`, `GENERAL_NEWS`, `GENERAL_PRESS_RELEASE`, `MERGER_OR_ACQUISITION`, `PERSON`, `PRODUCT`.
337
+ The response is `{ results: [{ company, signals: [...] }] }` — each signal has `signalType`,
338
+ `date`, `summary`, and type-specific `details`. Charges data credits for companies not under
339
+ management (companies enriched within the prior 12 months don't incur additional charges).
327
340
 
328
341
  ---
329
342
 
@@ -376,6 +389,87 @@ gtm research contact --contact-id 1260398587 \
376
389
 
377
390
  ---
378
391
 
392
+ ### `gtm engagements` — meetings, emails, and conversation intelligence
393
+
394
+ Requires your ZoomInfo org to have a calendar / email / meeting provider integration configured.
395
+ `list` is free (no data credits).
396
+
397
+ ```shell
398
+ # Recent engagements (default window: last 7 days → 7 days ahead)
399
+ gtm engagements list --limit 10
400
+
401
+ # Meetings with a specific account, newest first
402
+ gtm engagements list --company-id 344589814 --type MEETINGS --sort -chronological
403
+
404
+ # A specific date window (ISO 8601, max 90 days)
405
+ gtm engagements list --start 2026-06-01T00:00:00Z --end 2026-08-01T00:00:00Z
406
+ ```
407
+
408
+ **Ask** — natural-language questions over calls, meetings, and emails. Scope to exactly one of an
409
+ engagement, an account, or a contact:
410
+
411
+ ```shell
412
+ # Account scope: synthesize across recent engagements
413
+ gtm engagements ask --company-id 344589814 --query "What concerns has this account raised recently? What did we promise them?"
414
+
415
+ # Contact scope
416
+ gtm engagements ask --contact-id 1260398587 --query "What has this person told us they care about?"
417
+
418
+ # Engagement scope: drill into one call/meeting/email (IDs come from `gtm engagements list` — quote them, some contain angle brackets)
419
+ gtm engagements ask --engagement-id "<abc123@mail.example.com>" --query "What were the main objections?"
420
+
421
+ # Include the raw transcript / email body (engagement scope only — can be very large)
422
+ gtm engagements ask --engagement-id "abc123" --query "Summarize this call" --include-content
423
+ ```
424
+
425
+ ---
426
+
427
+ ### `gtm audiences` — GTM Studio audiences
428
+
429
+ Audiences are GTM Studio's list-building workbooks (rows of contacts or companies, plus custom
430
+ and AI-populated columns). The write subcommands drive a downstream AI agent, so they require
431
+ `--instruction` — a complete, self-contained description of what to do (the agent sees nothing
432
+ else from your session).
433
+
434
+ ```shell
435
+ # Find an audience (the returned id is the audienceId for every other subcommand)
436
+ gtm audiences list --search "Q3 outbound" --type COMPANY
437
+
438
+ # Columns + a 10-row preview
439
+ gtm audiences get --id <audienceId> --preview 10
440
+
441
+ # Create — plain named audience
442
+ gtm audiences create --name "Q3 outbound targets" --type COMPANY \
443
+ --instruction "Create an audience for Q3 outbound targets: enterprise SaaS companies in North America."
444
+
445
+ # Create from ZoomInfo search criteria (pass the exact search params as JSON)
446
+ gtm audiences create --name "Boston CFOs" --type CONTACT \
447
+ --instruction "Build a lead list of CFOs at Boston-area companies." \
448
+ --search-query '{"jobTitleList":["CFO"],"metroRegion":"MA - Boston"}'
449
+
450
+ # Rename / annotate
451
+ gtm audiences update --id <audienceId> --name "Q4 outbound targets" \
452
+ --instruction "Rename the audience to Q4 outbound targets."
453
+
454
+ # Add columns / load rows from JSON files
455
+ gtm audiences columns --id <audienceId> --file ./columns.json
456
+ gtm audiences rows --id <audienceId> --file ./rows.json \
457
+ --instruction "Load these trade-show leads into the audience."
458
+
459
+ # Ask the analysis agent
460
+ gtm audiences analyze --id <audienceId> --query "Summarize this audience and show the top industries"
461
+ ```
462
+
463
+ `--search-query` takes the exact params of the matching search (`search_companies` for `COMPANY`,
464
+ `search_contacts` for `CONTACT`) as a JSON object — run the search with `--debug` to see them.
465
+ `page`, `pageSize`, and `sort` are dropped, since they don't apply to audience creation.
466
+
467
+ `columns.json` is an array of `{ name, dataType, agentInstruction }` (add `columnId` to update);
468
+ `rows.json` is an array of `{ values: [{ columnId, value }] }` (add `rowId` to update, max 50 per
469
+ call). Column and row IDs come from `gtm audiences get`.
470
+
471
+ ---
472
+
379
473
  ### `gtm raw` — universal escape hatch
380
474
 
381
475
  Use this when you need a tool that doesn't have a curated wrapper yet.