Tools
Twenty tools across resolution, firmographic search, buyer signals, people search, semantic search, and research. Unsure of exact vocabulary (industries, size buckets, seniorities)? Call plan_targeting first — it turns a plain-language ICP into canonical filters the other tools accept. Verified email and phone finding are next; the catalog at GET /v1/tools is always the source of truth.
resolve_company
0.1 credits / callResolve a free-text company/brand name (or LinkedIn company URL, or bare domain) to its canonical LinkedIn company identity: org_id, canonical name, domain and confidence. Returns ranked candidates when the match is ambiguous. Call this first to get an org_id for the other tools.
| param | type | description |
|---|
| query required | string | Company name, brand, LinkedIn company URL, or domain to resolve (e.g. "Stripe", "stripe.com"). |
curl -X POST https://api.gtm.dev/v1/tools/resolve_company \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"stripe"}'
enrich_company
1 credit / callFetch firmographics for a company: name, domain, industry, employee size range, HQ location, description, follower count and logo. Address the company by org_id (from resolve_company), domain, or name.
| param | type | description |
|---|
| domain | string | Company website domain, e.g. "stripe.com". |
| name | string | Company name (exact-ish; use resolve_company first for fuzzy input). |
| org_id | string | LinkedIn organization id (from resolve_company). Preferred. |
curl -X POST https://api.gtm.dev/v1/tools/enrich_company \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"stripe.com"}'
who_is_advertising
1 credit / callFind companies running ads in a country (LinkedIn Ads + Meta Ad Library), ranked by impressions then ad count. Optional keyword narrows to ads whose copy or landing pages mention it. Returns advertiser company identity, ad counts and platforms, paginated with limit/offset.
| param | type | description |
|---|
| country required | string | ISO-2 country code where the ads ran (e.g. "US", "IN"). |
| keyword | string | Keyword to match in ad copy / advertiser name / landing URLs (e.g. "crm", "hubspot"). Empty = all advertisers in the country. |
| limit | integer | Advertisers per page (default 25, max 100). |
| offset | integer | Rows to skip for pagination (default 0; offset+limit must not exceed 5000). |
| platform | string: linkedin | meta | Restrict to one ad library. |
curl -X POST https://api.gtm.dev/v1/tools/who_is_advertising \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"crm","country":"US"}'
who_is_hiring
1 credit / callFind companies actively hiring for a role (e.g. "sales development", "machine learning engineer"), ranked by open-role count. Optionally filter by country and minimum number of openings, and paginate with limit/offset. Data is a weekly-refreshed index of LinkedIn + Indeed job postings.
| param | type | description |
|---|
| role required | string | Role or function keyword to match against the hiring index (e.g. "sdr", "data engineer", "marketing"). |
| geo_country | string | Country where the roles are located (e.g. "United States", "India"). Optional. |
| limit | integer | Companies per page (default 25, max 100). |
| min_openings | integer | Only return companies with at least this many matching openings. Optional. |
| offset | integer | Rows to skip for pagination (default 0; offset+limit must not exceed 5000). |
curl -X POST https://api.gtm.dev/v1/tools/who_is_hiring \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"role":"sdr","geo_country":"United States","min_openings":5}'
find_funded
1 credit / callFind recently funded companies, newest round first. Filter by funding stage (e.g. "series_a", "seed"), lookback window in months (default 12), and minimum total funding in USD. Paginate with limit/offset.
| param | type | description |
|---|
| limit | integer | Companies per page (default 25, max 100). |
| min_amount | number | Minimum total funding raised (USD). Optional. |
| months | integer | Lookback window: only rounds within the last N months (default 12). |
| offset | integer | Rows to skip for pagination (default 0; offset+limit must not exceed 5000). |
| stage | string | Funding stage of the LAST round, e.g. "seed", "series_a", "series_b". Optional. |
curl -X POST https://api.gtm.dev/v1/tools/find_funded \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"stage":"series_a","months":6}'
company_tech
1 credit / callList the technologies detected on a company's website (CRM, analytics, marketing automation, infrastructure, ...), grouped by category. Address the company by org_id (from resolve_company) or domain.
| param | type | description |
|---|
| domain | string | Company website domain, e.g. "stripe.com". |
| org_id | string | LinkedIn organization id (from resolve_company). Preferred. |
curl -X POST https://api.gtm.dev/v1/tools/company_tech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"rippling.com"}'
build_list
2 credits / callDescribe the list you want in plain language and get the executed company list back in ONE call — we extract the criteria, choose between taxonomy filters and semantic search, canonicalize every value against the graph's real vocabularies, run the search, and return the rows plus the exact plan applied (in the same shapes search_companies / concept_search accept, so you can iterate deterministically). Supports excludes ("...but not staffing agencies"). When the description names people (titles/roles), the response includes a ready-made find_people follow-up. Companies only — chain find_people for the humans.
| param | type | description |
|---|
| description required | string | What you want, in plain language, e.g. "US payroll and HR software companies, 200+ employees, not staffing agencies" or "companies that feel like Stripe but for logistics". |
| limit | integer | Rows to return (default 25, max 50 in semantic mode / 100 in filter mode). |
| offset | integer | Rows to skip for pagination. Mode-specific caps apply (semantic ~200 deep, filter 5000). |
curl -X POST https://api.gtm.dev/v1/tools/build_list \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"description":"US payroll and HR software companies, 200+ employees, not staffing agencies","limit":25}'
company_ad_activity
1 credit / callOne company's advertising footprint across the public LinkedIn and Meta ad libraries: per-platform ad counts, impression floors where available, first/last seen dates, and up to 10 recent ads with copy snippets and landing domains. Address the company by org_id (from resolve_company), domain, or name.
| param | type | description |
|---|
| domain | string | Company website domain, e.g. "stripe.com". |
| name | string | Company name (exact-ish; use resolve_company first for fuzzy input). |
| org_id | string | LinkedIn organization id (from resolve_company). Preferred. |
curl -X POST https://api.gtm.dev/v1/tools/company_ad_activity \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"hubspot.com"}'
company_funding
1 credit / callFetch one company's funding profile from the funding index: total raised, number of rounds, last round type and date, investor names, IPO / operating status, stock symbol and founded date. Address the company by org_id (from resolve_company), domain, or name. has_funding_data is false when the company has no profile in the funding index (~40% coverage of the company index).
| param | type | description |
|---|
| domain | string | Company website domain, e.g. "stripe.com". |
| name | string | Company name (exact-ish; use resolve_company first for fuzzy input). |
| org_id | string | LinkedIn organization id (from resolve_company). Preferred. |
curl -X POST https://api.gtm.dev/v1/tools/company_funding \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"hubspot.com"}'
company_hiring
1 credit / callOne company's active hiring breakdown from the hiring index (weekly-refreshed LinkedIn + Indeed job postings, last 60 days): open-role counts per role/function and country, plus totals. Address the company by org_id (from resolve_company) or domain. Empty roles means no recent postings on record.
| param | type | description |
|---|
| domain | string | Company website domain, e.g. "stripe.com". |
| org_id | string | LinkedIn organization id (from resolve_company). Preferred. |
curl -X POST https://api.gtm.dev/v1/tools/company_hiring \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"hubspot.com"}'
concept_search
1 credit / callDescribe your ideal customer in plain language (e.g. "API-first payroll for global teams") and get semantically ranked companies from the company graph — meaning-based matching over millions of company embeddings, not keyword search. Optionally narrow by country or employee size range, and paginate with limit/offset (the semantic neighborhood is bounded: match quality degrades past the first ~200 rows, so offset+limit is capped at 200).
| param | type | description |
|---|
| query required | string | Natural-language description of the kind of company you want (a niche, product, or vertical). |
| country | string | Only companies headquartered in this country (e.g. "United States", "US"). Optional. |
| limit | integer | Companies per page (default 25, max 50). |
| offset | integer | Rows to skip for pagination (default 0). offset+limit is capped at 200 — semantic match quality degrades deep in the neighborhood, so page depth is deliberately bounded. |
| size_range | string | Employee size bucket, e.g. "11-50", "51-200", "201-500", "1001-5000", "10001+". Optional. |
curl -X POST https://api.gtm.dev/v1/tools/concept_search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"API-first payroll for global teams","country":"US","limit":25}'
find_people
1 credit / callFind people at a company from the people graph. Anchor on one company (org_id, domain, or name), then filter by titles, seniority, function, or location. Returns names, titles, locations and LinkedIn profile URLs — no contact details. Pagination: limit only (no offset yet — the people graph pages by internal cursor, not row offset); total_matching and page.has_more tell you when a company has more matching people than one call returns.
| param | type | description |
|---|
| company required | string | The company to search at: org_id (from resolve_company), domain, or company name. |
| function | string | Business function (e.g. "sales", "marketing", "engineering", "finance", "product"). Optional. |
| geo | string | Location filter — city, region, or country (e.g. "California", "Bengaluru", "United States"). Optional. |
| limit | integer | Max people to return (default 25, max 100). No offset yet — narrow with titles/seniority/function instead of paging. |
| seniority | string | Seniority level: "c-level", "vp", "director", "manager", or "ic". Optional. |
| titles | array | Job titles to match (e.g. ["VP Sales", "Head of Growth"]). Optional. |
curl -X POST https://api.gtm.dev/v1/tools/find_people \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"company":"rippling.com","function":"sales","seniority":"vp"}'
lookalikes
1 credit / callFind the companies most similar to a seed company by embedding similarity over the company graph. Give one seed (org_id, domain, or name) and get its nearest neighbors — ideal for expanding a target list from your best accounts. Paginate with limit/offset (the similarity neighborhood is bounded: match quality degrades past the first ~200 rows, so offset+limit is capped at 200).
| param | type | description |
|---|
| seed required | string | The seed company: org_id (from resolve_company), domain (e.g. "rippling.com"), or company name. |
| limit | integer | Neighbors per page (default 25, max 50). |
| offset | integer | Rows to skip for pagination (default 0). offset+limit is capped at 200 — similarity quality degrades deep in the neighborhood, so page depth is deliberately bounded. |
curl -X POST https://api.gtm.dev/v1/tools/lookalikes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"seed":"rippling.com"}'
normalize_title
0.1 credits / callNormalize a free-text job title ("sdr", "head of eng", "vp sales") into canonical title strings plus a seniority and function guess. Titles resolve against the live title vocabulary (abbreviation-aware, typo-tolerant) layered over a curated shorthand map. Seniority values: owner, cxo, vp, director, manager, senior, entry, training. Functions follow LinkedIn's function vocabulary (sales, marketing, engineering, ...).
| param | type | description |
|---|
| title required | string | Job title text to normalize, e.g. "sdr", "head of eng", "growth marketer". |
curl -X POST https://api.gtm.dev/v1/tools/normalize_title \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"head of eng"}'
plan_targeting
1 credit / callTurn a plain-language targeting description (ICP, persona, market) into canonical, ready-to-use filters — the recommended FIRST call when you are unsure of exact vocabulary. Returns company filters (for search_companies / size_tam), people filters (for find_people), a concept_query (for concept_search when meaning matters more than filters), a filters-vs-semantic strategy recommendation, and suggested next tool calls. Resolution runs against the graph's real vocabularies, so returned values always match what the search tools accept.
| param | type | description |
|---|
| description required | string | Plain-language targeting, e.g. "VP+ finance leaders at mid-market US SaaS companies that feel API-first". |
| target | string: companies | people | both | What the plan is for. Default "both". |
curl -X POST https://api.gtm.dev/v1/tools/plan_targeting \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"description":"VP+ finance leaders at mid-market US SaaS companies that feel API-first"}'
research_company
5 credits / callBuild a structured research brief for one company: what they do, recent signals (funding, launches, hiring, expansion), concrete outreach hooks, and sources. Combines the company graph with live web research. Optionally steer it with a focus (e.g. "why would they buy sales tooling").
| param | type | description |
|---|
| company required | string | The company to research: org_id (from resolve_company), domain, or company name. |
| focus | string | Optional angle for the brief, e.g. "why would they buy sales tooling". |
curl -X POST https://api.gtm.dev/v1/tools/research_company \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"company":"rippling.com","focus":"why would they buy sales tooling"}'
resolve_geo
0.1 credits / callCanonicalize a free-text place — a country code or name ("US", "United Kingdom"), a city ("Bengaluru"), or a state/region ("Karnataka") — to the canonical geo labels used across the company and hiring indexes. Returns the country (with ISO-2 code), a [city, region, country] hierarchy when uniquely resolvable, and candidates[] when the name is ambiguous (e.g. "Springfield").
| param | type | description |
|---|
| query required | string | Place to resolve, e.g. "Bengaluru", "US", "United Kingdom", "Karnataka". |
curl -X POST https://api.gtm.dev/v1/tools/resolve_geo \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"Bengaluru"}'
search_companies
1 credit / callFirmographic company search over the company index (~9M companies), ranked by LinkedIn follower count. Supports complex targeting: combine multiple industries/categories to INCLUDE (they OR together — a company matching any of them qualifies) with industries_exclude/categories_exclude to SUBTRACT, plus employee size range, HQ country/region/city, a name substring, or has_domain. At least one filter is required. Paginate with limit/offset (default 25 per page); the filters echo shows the canonical labels actually applied and the page object tells you if more rows exist. Use size_tam with the same filters to count the full matching universe.
| param | type | description |
|---|
| categories | array | Category keywords to INCLUDE — fuzzy-resolved against the granular category vocabulary and OR-combined with any industries. Categories cover the subset of companies carrying category tags. Optional. |
| categories_exclude | array | Category keywords to EXCLUDE — fuzzy-resolved against the category vocabulary; companies tagged with a matching category are always subtracted (companies without category tags are dropped too, matching product semantics). Optional. |
| city | string | HQ city (e.g. "Bengaluru", "Austin"). Optional. |
| country | string | HQ country — name or ISO-2 code (e.g. "India", "US"). Optional. |
| has_domain | boolean | Only companies with a known website domain. Optional. |
| industries | array | Industry keywords to INCLUDE. Each entry fuzzy-resolves against BOTH the broad industry vocabulary and the granular category vocabulary; all matches OR together into one include group (a company matching any qualifies). Example: ["payroll", "hr software"]. Optional. |
| industries_exclude | array | Industry keywords to EXCLUDE. Each entry fuzzy-resolves against the industry vocabulary; matching companies are always subtracted from the results (companies with no industry on file are kept). Optional. |
| industry | string | Single industry keyword — shorthand for industries: [..]. Matched against BOTH the broad industry vocabulary and the more granular category vocabulary (e.g. "software", "payroll", "warehouse automation") — companies match on either. Optional. |
| limit | integer | Companies per page (default 25, max 100). |
| name_contains | string | Substring of the company name (e.g. "labs"). Optional. |
| offset | integer | Rows to skip for pagination (default 0; offset+limit must not exceed 5000). |
| region | string | HQ state/region as stored on the company index (e.g. "California", "Karnataka"). Optional. |
| size_range | string | Employee size bucket, exact values: "1 employee", "2-10 employees", "11-50 employees", "51-200 employees", "201-500 employees", "501-1,000 employees", "1,001-5,000 employees", "5,001-10,000 employees", "10,001+ employees". Compact forms like "51-200" or "1001-5000" are normalized. Optional. |
curl -X POST https://api.gtm.dev/v1/tools/search_companies \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"industries":["payroll","hr software"],"industries_exclude":["staffing"],"country":"US","limit":50}'
size_tam
1 credit / callCount how many companies in the company index (~9M companies) match a firmographic filter set — the TAM behind a search_companies page. Takes the same filters as search_companies (at least one required), including the multi include/exclude industry and category lists (includes OR together, excludes always subtract), and returns {count, filters} with the canonical filters actually applied.
| param | type | description |
|---|
| categories | array | Category keywords to INCLUDE — fuzzy-resolved against the granular category vocabulary and OR-combined with any industries. Categories cover the subset of companies carrying category tags. Optional. |
| categories_exclude | array | Category keywords to EXCLUDE — fuzzy-resolved against the category vocabulary; companies tagged with a matching category are always subtracted (companies without category tags are dropped too, matching product semantics). Optional. |
| city | string | HQ city (e.g. "Bengaluru", "Austin"). Optional. |
| country | string | HQ country — name or ISO-2 code (e.g. "India", "US"). Optional. |
| has_domain | boolean | Only companies with a known website domain. Optional. |
| industries | array | Industry keywords to INCLUDE. Each entry fuzzy-resolves against BOTH the broad industry vocabulary and the granular category vocabulary; all matches OR together into one include group (a company matching any qualifies). Example: ["payroll", "hr software"]. Optional. |
| industries_exclude | array | Industry keywords to EXCLUDE. Each entry fuzzy-resolves against the industry vocabulary; matching companies are always subtracted from the count (companies with no industry on file are kept). Optional. |
| industry | string | Single industry keyword — shorthand for industries: [..]. Matched against BOTH the broad industry vocabulary and the more granular category vocabulary (e.g. "software", "payroll", "warehouse automation") — companies match on either. Optional. |
| name_contains | string | Substring of the company name (e.g. "labs"). Optional. |
| region | string | HQ state/region as stored on the company index (e.g. "California", "Karnataka"). Optional. |
| size_range | string | Employee size bucket, exact values: "1 employee", "2-10 employees", "11-50 employees", "51-200 employees", "201-500 employees", "501-1,000 employees", "1,001-5,000 employees", "5,001-10,000 employees", "10,001+ employees". Compact forms like "51-200" or "1001-5000" are normalized. Optional. |
curl -X POST https://api.gtm.dev/v1/tools/size_tam \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"industry":"software","country":"IN","size_range":"51-200"}'
who_uses_tech
1 credit / callFind companies detected running a technology (e.g. "hubspot", "salesforce", "segment") via website tech-stack scans, ranked by detection confidence. Optionally filter by HQ country and employee size range, and paginate with limit/offset. The tool input is matched against the scanner's tool vocabulary (exact name preferred, fuzzy fallback); matched_tools echoes what was searched.
| param | type | description |
|---|
| tool required | string | Technology name to look for, e.g. "hubspot", "salesforce", "google-analytics". Required. |
| country | string | HQ country — name or ISO-2 code (e.g. "India", "US"). Optional. |
| limit | integer | Companies per page (default 25, max 100). |
| offset | integer | Rows to skip for pagination (default 0; offset+limit must not exceed 5000). |
| size_range | string | Employee size bucket, exact values: "1 employee", "2-10 employees", "11-50 employees", "51-200 employees", "201-500 employees", "501-1,000 employees", "1,001-5,000 employees", "5,001-10,000 employees", "10,001+ employees". Compact forms like "51-200" or "1001-5000" are normalized. Optional. |
curl -X POST https://api.gtm.dev/v1/tools/who_uses_tech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tool":"hubspot","country":"IN","size_range":"51-200"}'