Quickstart

Get an API key and call your first GTM Tools tool in under 5 minutes

Two paths, pick the one that matches who’s reading. For Agents if your AI assistant is doing the signup. For Humans if you’re poking around in a terminal.

For Agents

For agents that sign themselves up programmatically — no console or dashboard needed.

1

Sign up

Call get_api_key with the user’s email. A 6-digit verification code is sent to that address.

$curl -X POST https://api.gtm-tools.sh/api/v0/get_api_key \
> -H "Content-Type: application/json" \
> -d '{"email": "user@example.com"}'
2

Verify with the code

Re-call the same endpoint with the code from the inbox. The response returns the bearer token.

$curl -X POST https://api.gtm-tools.sh/api/v0/get_api_key \
> -H "Content-Type: application/json" \
> -d '{"email": "user@example.com", "code": "123456"}'
$# → { "api_key": "sk_..." }
3

Wire MCP and call a tool

With the key in hand, the fastest path is the mcp add CLI — it patches Claude Desktop, Cursor, or Windsurf in place.

$npx gtm-tools@latest mcp add --client cursor --with-api-key sk_...
$# Drop --with-api-key to use OAuth on first connect.

Then ask the agent to call any tool — e.g. get_linkedin_company_url for siena.cx.

New accounts get 100 free tokens (1=100tokens,paidtopupsstartat1 = 100 tokens, paid top-ups start at 5). Live token costs per tool are returned by get_token_balance.

For Humans

For developers who want to try GTM Tools from a terminal.

1

Get an API key

API keys are issued after email verification. New accounts get 100 free tokens.

$curl -X POST https://api.gtm-tools.sh/api/v0/get_api_key \
> -H "Content-Type: application/json" \
> -d '{"email": "you@yourcompany.com"}'

A 6-digit code is sent to the address you provided. Re-call get_api_key with {"email": "...", "code": "123456"} (or gtm-tools admin auth ... --code 123456) and the response returns your bearer token.

2

Store your API key

$export GTM_TOOLS_API_KEY="sk_..."
3

Get your token balance

$curl -X POST https://api.gtm-tools.sh/api/v0/get_token_balance \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{}'
1{
2 "balance": 100,
3 "tools": {
4 "get_linkedin_company_url": { "cost": 2 },
5 "get_linkedin_profile_url": { "cost": 5 },
6 "list_linkedin_company_employees": { "cost": 30 },
7 "get_email": { "cost": 5 },
8 "detect_signal": { "cost": 0 }
9 }
10}

detect_signal is free (0 tokens) but the individual signals it dispatches are 5 tokens each — that’s how the all-in-one runner is metered.

4

Call your first tool

Get a company’s LinkedIn URL from its domain.

$curl -X POST https://api.gtm-tools.sh/api/v0/get_linkedin_company_url \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"domain": "siena.cx"}'
1{
2 "url": "https://www.linkedin.com/company/siena-cx",
3 "domain": "siena.cx"
4}

That call cost 2 tokens — your balance is now 98.

5

Search the company's employees

Use boolean title filters to narrow the result. AND, OR, and NOT are supported, and parentheses group expressions.

$curl -X POST https://api.gtm-tools.sh/api/v0/list_linkedin_company_employees \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "domain": "gorgias.com",
> "title_filters": "(CEO OR CTO OR Founder) NOT intern",
> "limit": 10,
> "page": 1
> }'

This single call costs 30 tokenslist_linkedin_company_employees is the most expensive socials tool because it runs a paginated, filtered crawl. See Token Efficiency for tips on minimizing spend.

6

Try other categories

Verify a professional email:

$curl -X POST https://api.gtm-tools.sh/api/v0/get_email \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"name": "Justin Mares", "domain": "kettleandfire.com"}'

Run every signal detector at once:

$curl -X POST https://api.gtm-tools.sh/api/v0/detect_signal \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{"domain": "gymshark.com"}'

detect_signal runs every detector — hiring, Trustpilot, social spikes, tech stack — and returns the union of fired signals. The dispatch is free; only the individual detectors that ran are charged.

7

Wire MCP into your client

The fastest way to give an AI agent ongoing access is the remote MCP endpoint.

$npx gtm-tools@latest mcp add --client claude-desktop
$# or: --client cursor / --client windsurf
$# Append `--with-api-key $GTM_TOOLS_API_KEY` to skip the OAuth flow.

For other clients (Codex, Goose, OpenClaw, Hermes Agent, NanoClaw, Raycast, VS Code, Cline, …) see the Connect page.

Copy for Cursor / Claude

A drop-in TypeScript helper to give an agent as a starting point:

1const KEY = process.env.GTM_TOOLS_API_KEY!;
2
3async function call<T>(tool: string, body: unknown = {}): Promise<T> {
4 const res = await fetch(`https://api.gtm-tools.sh/api/v0/${tool}`, {
5 method: "POST",
6 headers: {
7 "Authorization": `Bearer ${KEY}`,
8 "Content-Type": "application/json",
9 },
10 body: JSON.stringify(body),
11 });
12 if (!res.ok) throw new Error(`${tool}: ${res.status} ${await res.text()}`);
13 return res.json();
14}
15
16// Domain → LinkedIn URL → decision-makers → verified emails
17const { url } = await call<{ url: string }>("get_linkedin_company_url", { domain: "siena.cx" });
18const employees = await call<any>("list_linkedin_company_employees", {
19 domain: "siena.cx",
20 title_filters: "(CEO OR CTO OR Founder) NOT intern",
21 limit: 5,
22});
23for (const e of employees.results) {
24 const { email } = await call<any>("get_email", { name: e.name, domain: "siena.cx" });
25 console.log(e.name, "", email);
26}

Next steps