Company Search by Technology (Beta)
Find companies by the technologies their own job postings name, with graded evidence per technology, via POST /v1/companies/search.
POST https://api.jobspipe.dev/v1/companies/searchBeta. This endpoint is enabled per account while we finish measuring it. If it is not enabled for your key it answers 404 with {"error": "company_technographics_not_enabled"} and charges nothing. Ask support to join the beta.
Returns companies whose own job postings show they use the technologies you ask for - "which companies in Germany use Snowflake and dbt" - with the evidence behind every answer: how many postings named the technology, how strongly, over which time windows, and the first and last date we saw it. Requires authentication.
The filter and field names follow the TheirStack company search, so an integration written for it can switch by changing the base URL and key. Where we hold more evidence than TheirStack does, it is added beside their fields, never in place of them.
Evidence tiers
Every company-technology pair is graded into one of three tiers from the postings behind it. Single mentions are kept and labelled, never dropped.
| Tier | confidence | Rule |
|---|---|---|
confirmed | high | Two independent checks agree on the technology in at least one posting. |
likely | medium | The technology is a stated requirement in a posting, or appears in two separate postings. |
mentioned | low | A single mention. |
A posting re-published on a second board, or under a new id, is still one posting. Before a technology release is served, we judge a sample of 300 company-technology pairs and require at least 95% precision on confirmed and 85% on likely. The measured precision per tier will be published here with the first release.
Early beta: the second of the two checks is still being rolled out, so confirmed is empty for now and the strongest evidence you will see is likely. A tier_min of confirmed returns no companies until it lands; this page will say when it has.
tier_min sets the weakest tier that counts for filtering and for technologies_found. The default is likely.
Request
All filters are optional except that at least one of company_technology_slug_or, company_technology_slug_and or expand_technology_slugs is required. Filters combine with AND. An unknown field is a 400, never silently ignored.
| Field | Type | Description |
|---|---|---|
company_technology_slug_or | string[] | Companies using ANY of these technologies. At most 10. |
company_technology_slug_and | string[] | Companies using ALL of these technologies. At most 10. |
company_technology_slug_not | string[] | Leave out companies with any evidence, at any tier, for these technologies. At most 10. |
expand_technology_slugs | string[] | Technologies to report in technologies_found beside the ones you filtered on. On its own, returns companies using any of them. |
tier_min | string | confirmed, likely (default) or mentioned. |
min_num_jobs_found | integer | Only companies with at least this many postings matching the technology filters. |
company_country_code_or | string[] | ISO 3166-1 alpha-2 codes. Matches the country of the postings that name the technology, not the headquarters country. |
company_domain_or | string[] | Only these companies, by domain. |
company_name_or | string[] | Only these companies, by name (case, punctuation and a trailing legal suffix are ignored). |
min_employee_count | integer | Only companies with at least this many employees. |
max_employee_count | integer | Only companies with at most this many employees. |
job_filters | object | Scopes the evidence to postings. In the beta only job_country_code_or and posted_at_max_age_days are applied; other job filters are accepted and ignored. |
include_total_results | boolean | Also count every matching company in metadata.total_results (slower). |
order_by | object[] | Up to three { "field", "desc" }. Fields: num_jobs_found (the default), num_jobs, num_jobs_last_30_days, employee_count. desc defaults to true. |
limit | integer | Companies per page, default 25, capped by your plan's max results per call. |
page / offset / cursor | Page by page (0-based), offset, or the metadata.next_cursor of the previous page. Paging stops at 10,000 companies deep. |
Slugs are lowercase, e.g. snowflake, dbt, apache-kafka. GET /v1/technologies lists them.
curl https://api.jobspipe.dev/v1/companies/search \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"company_technology_slug_and": ["snowflake", "dbt"], "company_country_code_or": ["DE"], "limit": 25}'import requests
resp = requests.post(
"https://api.jobspipe.dev/v1/companies/search",
headers={"Authorization": "Bearer jp_live_your_key_here"},
json={"company_technology_slug_and": ["snowflake", "dbt"], "company_country_code_or": ["DE"], "limit": 25},
timeout=60,
)
companies = resp.json()["data"]const res = await fetch("https://api.jobspipe.dev/v1/companies/search", {
method: "POST",
headers: { Authorization: "Bearer jp_live_your_key_here", "Content-Type": "application/json" },
body: JSON.stringify({ company_technology_slug_and: ["snowflake", "dbt"], company_country_code_or: ["DE"], limit: 25 }),
});
const { data: companies } = await res.json();Response
{
"metadata": {
"truncated_results": 0,
"truncated_companies": 0,
"credits_charged": 1,
"companies_already_paid": 0,
"next_cursor": null,
"as_of": "2026-09-25 06:00:00"
},
"data": [
{
"id": "2512632719191904832",
"name": "Northwind Analytics GmbH",
"domain": "northwind.example",
"url": "https://northwind.example",
"logo": null,
"country_code": "DE",
"employee_count": 1800,
"employee_count_range": "1001-5000",
"founded_year": 2009,
"annual_revenue_usd": null,
"industry": null,
"linkedin_url": "https://www.linkedin.com/company/northwind-example",
"num_jobs": 214,
"num_jobs_found": 31,
"num_jobs_last_30_days": 12,
"num_technologies": 3,
"technology_slugs": ["snowflake", "dbt", "apache-airflow"],
"technology_names": ["Snowflake", "dbt", "Apache Airflow"],
"technologies_found": [
{
"technology": {
"slug": "snowflake",
"name": "Snowflake",
"category": "Data Warehouse",
"category_slug": "data-warehouse",
"parent_category": "Data",
"kind": "product",
"logo": null
},
"confidence": "high",
"tier": "confirmed",
"jobs": 27,
"jobs_last_7_days": 2,
"jobs_last_30_days": 9,
"jobs_last_180_days": 22,
"first_date_found": "2024-11-04",
"last_date_found": "2026-09-22",
"rank_within_category": 1,
"relative_occurrence_within_category": 1,
"required_jobs": 19,
"preferred_jobs": 5,
"mentioned_jobs": 3,
"recency": "active",
"share": 0.1262,
"occupations": ["2511", "2521"],
"countries": ["DE", "AT"]
}
]
}
]
}Company fields
| Field | Description |
|---|---|
id | Stable company id (a string). |
name | The name the company posts under most often. |
domain, url, logo | Returned only when two independent sources agree on the company's domain; otherwise null. A company is never given another company's domain. |
country_code | The country with the most postings naming the matched technologies. |
employee_count, employee_count_range | Headcount where known. |
founded_year, annual_revenue_usd, industry | From company records where we hold them, else null. |
num_jobs | Postings from the company that we read for technologies. |
num_jobs_found | Postings that match your technology filters. |
num_jobs_last_30_days | Postings from the last 30 days that name at least one technology. |
num_technologies, technology_slugs, technology_names | The company's technologies at tier_min or stronger, most-named first. |
technologies_found | Evidence for the technologies you filtered on and those in expand_technology_slugs. |
Evidence fields (technologies_found[])
| Field | Description |
|---|---|
confidence, tier | See evidence tiers. |
jobs, jobs_last_7_days, jobs_last_30_days, jobs_last_180_days | Postings naming the technology, overall and by posting date. Counts above about 130 are close estimates. |
first_date_found, last_date_found | Posting dates of the first and latest posting that named it. |
rank_within_category, relative_occurrence_within_category | Rank and share among the company's technologies in the same category. |
required_jobs, preferred_jobs, mentioned_jobs | Postings where it was a requirement, a nice-to-have, or mentioned. |
recency | active (named in the last 180 days), fading (last 540 days) or historical. A label, not an expiry. |
share | Share of the company's postings that name the technology. |
occupations, countries | ISCO-08 codes of the roles, and countries of the postings, that name it (up to 12 each). |
metadata.as_of is when the current technology release was published. Placeholder employers such as "Confidential" are never returned.
Cost
One credit per company returned. A company you already paid for this calendar month is free every time it comes back, in any search and through any key; metadata.companies_already_paid counts those. An empty page costs nothing. Free accounts get at most 25 companies per call.
To download every matching company as one CSV or JSON Lines file instead of paging, use the technology export (paid plans). Companies paid for in either are free in the other for the rest of the month.
Errors
| Status | Meaning |
|---|---|
400 | Invalid filters, more than 10 slugs in one filter, or no technology filter. |
401 | Missing or invalid API key. |
402 | Monthly credit quota exceeded. |
404 | The beta is not enabled for this account. |
429 | Per-second rate limit exceeded. |
502 | The search did not finish; retry. Nothing is charged. |