Find Companies By Tech Stack
find_companies_by_tech_stackUse ONLY when the user explicitly wants to discover companies BY THEIR
INSTALLED TECHNOLOGY — e.g. "find DTC brands using Shopify and Klaviyo",
"who runs Snowflake AND Looker", "US e-commerce companies using HubSpot".
For hiring-signal discovery (companies posting jobs that mention a tech),
use theirstack_search instead — that surfaces investment intent,
whereas this surfaces installed base.
That installed base is what TheirStack DETECTS from job-posting text, not from crawling storefronts, so it only sees companies that hire and name the tool in their JDs — treat a company's absence as "not detected here," not "not using it" (a storefront-sniffing method like BuiltWith/Wappalyzer would surface more).
For ecommerce-platform tools, results may include the platform's SERVICE PROVIDERS (agencies, ISVs) alongside actual merchants — job mentions don't distinguish "we run on Shopify" from "we sell to Shopify merchants," so inspect domains/industries to filter. Recruiting agencies are always excluded (company_type = direct_employer), matching theirstack_search.
Costs 1.5 Sliq credits per company returned; a failed search is free.
In chat, STATE THE COUNT AND THE COST in the same reply as the
results — every time, without stopping to ask first. Use the user's
number when they gave one, otherwise the default: "pulled 25
companies — 37.5 credits; say if you want more, max 100." Price the
companies actually returned: fewer than limit costs less. Because
this endpoint pages, prefer one page at the user's number over
silently walking offset past it — every extra page is more credits.
When this runs in an agent, every company with a domain is saved to the
Output tab as a company row (deduped by domain) carrying its
firmographics and matched technologies. To filter them, record a
verdict on each saved row with record_search_results, under the
domain it was saved with.
The tool resolves each technology name to a TheirStack catalog slug
(calling /v0/catalog/technologies per name; popularity tiebreak; exact
name match wins), then queries /v1/companies/search with
company_technology_slug_and so EVERY supplied technology must be
present on the returned company.
{
"companies": [
{
"id": str, "name": str, "domain": str | None,
"industry": str | None, "employee_count": int | None,
"country_code": str | None, "linkedin_url": str | None,
"technologies_found": [
{"slug": str, "name": str, "confidence": str,
"jobs": int, "last_date_found": str},
...
],
},
...
],
"count": int, # number of companies in this page
"total_matches": int, # universe size for this query (or None)
"created_identifiers": [str], # domains this call newly added to the list
}
On upstream failure (timeout / 5xx / connection error), returns
{"companies": [], "count": 0, "theirstack_available": False}
so the agent can read the flag and degrade gracefully.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Companies this ONE call returns, 1-100 (values outside are clamped), default 25. Pass the user's number when they named one. | |
| offset | No | Number of results to skip for pagination. Pass `limit`, 2*`limit`, ... to fetch subsequent pages. Re-run with the same filters to get a stable order. Each page is billed like a fresh pull, so page only when the user asked for more. | |
| agent_id | No | Optional — a specific agent to save the companies into. Omit it to use the running agent, which is the usual case. | |
| industry | No | LinkedIn-style industry names the company must match (e.g. ["Retail", "Higher Education"]). Values are validated against TheirStack's canonical catalog (431 industries) — wrong variants like "Architecture & Planning" raise ModelRetry with close-match suggestions. | |
| list_name | No | Short kebab slug naming the Output-tab list bucket (e.g. 'shopify-brands'). Absent, companies land in the 'default' list. | |
| confidence | No | TheirStack tech-detection confidence band. Pass ["high", "medium"] to drop one-off / stale mentions. Defaults to None (all confidence levels). Valid values: "high", "medium", "low". If a confidence-filtered search returns zero matches for a technology that plausibly has users, retry without `confidence` and judge per-company strength from `technologies_found[].confidence` instead — TheirStack's confidence aggregates are intermittently incomplete for some technologies. | |
| company_city | No | City/state substrings the company HQ must match (e.g. ["Atlanta", "Chicago", "Washington"]). Case-insensitive substring match, OR-combined across the list. Do NOT include the `(?i)` flag — TheirStack rejects it on this field. Pair with `country_codes` to keep matches scoped. | |
| technologies | Yes | Human product names — e.g. ["Shopify", "Klaviyo"]. Use canonical product names; names with no catalog match raise ModelRetry, and ambiguous names resolve to the most popular match. AND semantics: the company must use ALL supplied technologies. Max 10 per call. | |
| country_codes | No | ISO alpha-2 HQ country filter. Pass ["US"] to scope to US companies — usually the right default. | |
| min_revenue_usd | No | Minimum company annual revenue in USD (e.g. 10_000_000 for $10M+). | |
| industry_excludes | No | Industry names to exclude. Same canonical-name validation as `industry`. | |
| max_employee_count | No | Maximum company headcount. Defaults to None; consider passing e.g. 5000 if "uses Shopify" alone returns 10K+ matches dominated by enterprise outliers. | |
| min_employee_count | No | Minimum company headcount. |