Theirstack Search
theirstack_searchUse to find companies hiring for a role / tech stack / headcount-band. The
return shape includes company.domain directly — feed that to
record_search_results as identifier without an Apollo round-trip.
For installed-base discovery — companies that already use a technology,
rather than hire around it — use find_companies_by_tech_stack instead.
Costs 0.5 Sliq credits per job posting 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
postings — 12.5 credits; say if you want more, max 100." Price the
postings actually returned: fewer than limit costs less.
On a scheduled scan there is no reply to state it in: pass the
number the user chose at setup, carried in the scan spec as
theirstack_limit.
Provide at least one of job_title_keywords, job_title_exact,
description_keywords, or industry — without some kind of scope filter,
searches return too many results. Empty results are normal; broaden
filters and call again.
Each returned job's job_description is truncated to 250 chars (with an
ellipsis suffix). The full posting body is often 1-3KB; the agent only
needs a short excerpt for the signals[i].summary field, and the full
body would bloat the LLM context across multiple rounds.
When this runs in an agent, every company with a domain is saved to the
workspace Output tab as an agent_search_results company row (deduped by
domain, entity_type='company'), carrying its hiring postings in
data.signals and its firmographics. Re-running updates rows in place.
Pass list_name to name their list; absent, they land in the 'default'
list. To filter the companies, record a verdict on each saved row with
record_search_results, under the domain it was saved with.
A dict with jobs (list), count (int), and created_identifiers
(the domains of the companies this call newly added to the list, not
ones already on it). Each job carries job_title, job_description
(truncated to 250 chars), url, date_posted, and a company dict
(name, domain, industry, employee_count, annual_revenue_usd,
linkedin_url, country, city). On upstream failure (timeout / 5xx /
auth / quota), it returns jobs=[], count=0, and
theirstack_available=False so the agent can degrade to other sources.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Job postings this ONE call returns, 1-100 (values outside are clamped), default 25. On a scan, the spec's `theirstack_limit` is the whole run's budget across every hiring signal — divide it by the number of signals to get this call's number, don't pass it whole to each. There is no pagination on this endpoint, so this is the whole ceiling for a given filter set. | |
| persist | No | Default True — in an agent, the companies are saved as company rows automatically (see above). Pass False only for a read-only lookup the user doesn't want on a list. | |
| agent_id | No | Optional — a specific agent to save the companies into. Omit it to use the running agent, which is the usual case. Only a throwaway lookup outside any agent returns postings without saving. | |
| industry | No | LinkedIn-style industry names the company must match (e.g. ["Real Estate", "Architecture and Planning"]). 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. 'hiring-sdrs'). Absent, companies land in the 'default' list. | |
| 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 `company_country_codes` to keep matches scoped. | |
| lookback_days | No | Days of job-posting history to scan (default 14). A news scan passes the window from its trigger prompt. | |
| job_title_exact | No | Exact-match titles (TheirStack-indexed; use for short terms like "Snowflake" or "Chief" where regex would over-match). | |
| min_revenue_usd | No | Minimum company annual revenue in USD (e.g. 10_000_000 for $10M+). | |
| company_keywords | No | Concepts the company hires around, drawn from TheirStack's keyword catalog (e.g. ["Computer Vision", "Large Language Model (LLM)"]; slugs like "computer-vision" also work). Matches a company when any of its job postings mention the keyword, so it describes what the company does. Use it for verticals the industry taxonomy has no entry for — artificial intelligence, machine learning, computer vision. Values are resolved against the catalog; an unknown one raises ModelRetry with close matches rather than silently matching nothing. | |
| industry_excludes | No | Industry names to exclude. Same canonical-name validation as `industry`. | |
| job_country_codes | No | ISO alpha-2 — where the job is posted (e.g. ["US"]). | |
| job_title_excludes | No | Regex partial-match phrases to filter out of titles. | |
| job_title_keywords | No | Regex partial-match phrases on title (case-insensitive). | |
| max_employee_count | No | Maximum company headcount. | |
| min_employee_count | No | Minimum company headcount. | |
| description_excludes | No | Regex partial-match phrases to filter out of job bodies (e.g. ["intern", "contractor", "1099"]). | |
| description_keywords | No | Regex partial-match phrases on the job body. | |
| company_country_codes | No | ISO alpha-2 — where the company is HQ'd. | |
| company_description_keywords | No | Regex partial-match phrases on the company's own description — what the company says about itself, as opposed to `description_keywords`, which matches the job posting body. Already case-insensitive, so pass the phrase as-is. Pair it with `company_keywords` and an employee band: on its own each of the two admits staffing agencies and job boards, which both self-describe in the vertical's language and post jobs mentioning every technology. |