GTM workflow commands.
Contract:
- Success data is always JSON on stdout.
- Errors are always printed to stderr.
- Mutating commands require —apply; default is preview/no-op.
Every command follows the CLI contract: JSON on stdout, errors on stderr, and command-specific mutation safety controls. Keys resolve as described in Secrets and API keys.
Examples
Research an objective, then preview a batch CRM load:
uv run gtm accounts research "Find competitors to Acme Corp"
uv run gtm accounts find-people "VP of Engineering at Series B startups"
# Preview (default): prints the planned writes, mutates nothing.
uv run gtm accounts batch-add-people \
--records '[{"email": "jane@acme.dev", "first_name": "Jane", "last_name": "Doe"}]'
{
"mode": "preview",
"requested": 1,
"created": 0,
"skipped": 1,
"conflicts": 0,
"errors": 0,
"results": [{ "status": "would_create", "email": "jane@acme.dev" }],
"source": "elvis.gtm.batch_add_people",
"applied_at": null
}
Add --apply to the same command to perform the writes.
Commands
gtm accounts research
Run non-mutating research.
uv run gtm accounts research [OPTIONS] [OBJECTIVE]
| Argument | Type | Required |
|---|
OBJECTIVE | text | no |
| Option | Type | Default | Description |
|---|
--json | text | — | JSON payload (overrides flags) |
--parallel-api-key | text | — | Override the Parallel API key for this invocation |
gtm accounts enrich
Run non-mutating enrichment.
uv run gtm accounts enrich [OPTIONS] [URL] [OBJECTIVE]
| Argument | Type | Required |
|---|
URL | text | no |
OBJECTIVE | text | no |
| Option | Type | Default | Description |
|---|
--json | text | — | JSON payload (overrides flags) |
--parallel-api-key | text | — | Override the Parallel API key for this invocation |
gtm accounts find-people
Run non-mutating people discovery.
uv run gtm accounts find-people [OPTIONS] [QUERY]
| Argument | Type | Required |
|---|
QUERY | text | no |
| Option | Type | Default | Description |
|---|
--json | text | — | JSON payload (overrides flags) |
--parallel-api-key | text | — | Override the Parallel API key for this invocation |
gtm accounts map-account-hierarchy
Run non-mutating account hierarchy mapping.
uv run gtm accounts map-account-hierarchy [OPTIONS] [ACCOUNT]
| Argument | Type | Required |
|---|
ACCOUNT | text | no |
| Option | Type | Default | Description |
|---|
--json | text | — | JSON payload (overrides flags) |
--parallel-api-key | text | — | Override the Parallel API key for this invocation |
gtm accounts batch-add-people
Batch add people with explicit preview/apply behavior.
uv run gtm accounts batch-add-people [OPTIONS]
| Option | Type | Default | Description |
|---|
--records | text | "" | JSON array of person records |
--apply | boolean | false | Perform writes to Attio |
--json | text | — | JSON payload (overrides flags) |
--attio-api-key | text | — | Override the Attio API key for this invocation |
Preview by default: without --apply this command prints the planned mutation and writes nothing. See the CLI contract.
gtm accounts batch-add-companies
Batch add companies with explicit preview/apply behavior.
uv run gtm accounts batch-add-companies [OPTIONS]
| Option | Type | Default | Description |
|---|
--records | text | "" | JSON array of company records |
--apply | boolean | false | Perform writes to Attio |
--json | text | — | JSON payload (overrides flags) |
--attio-api-key | text | — | Override the Attio API key for this invocation |
Preview by default: without --apply this command prints the planned mutation and writes nothing. See the CLI contract. Last modified on July 14, 2026