JobsPipe
API Reference

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/search

Beta. 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.

TierconfidenceRule
confirmedhighTwo independent checks agree on the technology in at least one posting.
likelymediumThe technology is a stated requirement in a posting, or appears in two separate postings.
mentionedlowA 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.

FieldTypeDescription
company_technology_slug_orstring[]Companies using ANY of these technologies. At most 10.
company_technology_slug_andstring[]Companies using ALL of these technologies. At most 10.
company_technology_slug_notstring[]Leave out companies with any evidence, at any tier, for these technologies. At most 10.
expand_technology_slugsstring[]Technologies to report in technologies_found beside the ones you filtered on. On its own, returns companies using any of them.
tier_minstringconfirmed, likely (default) or mentioned.
min_num_jobs_foundintegerOnly companies with at least this many postings matching the technology filters.
company_country_code_orstring[]ISO 3166-1 alpha-2 codes. Matches the country of the postings that name the technology, not the headquarters country.
company_domain_orstring[]Only these companies, by domain.
company_name_orstring[]Only these companies, by name (case, punctuation and a trailing legal suffix are ignored).
min_employee_countintegerOnly companies with at least this many employees.
max_employee_countintegerOnly companies with at most this many employees.
job_filtersobjectScopes 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_resultsbooleanAlso count every matching company in metadata.total_results (slower).
order_byobject[]Up to three { "field", "desc" }. Fields: num_jobs_found (the default), num_jobs, num_jobs_last_30_days, employee_count. desc defaults to true.
limitintegerCompanies per page, default 25, capped by your plan's max results per call.
page / offset / cursorPage 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

FieldDescription
idStable company id (a string).
nameThe name the company posts under most often.
domain, url, logoReturned only when two independent sources agree on the company's domain; otherwise null. A company is never given another company's domain.
country_codeThe country with the most postings naming the matched technologies.
employee_count, employee_count_rangeHeadcount where known.
founded_year, annual_revenue_usd, industryFrom company records where we hold them, else null.
num_jobsPostings from the company that we read for technologies.
num_jobs_foundPostings that match your technology filters.
num_jobs_last_30_daysPostings from the last 30 days that name at least one technology.
num_technologies, technology_slugs, technology_namesThe company's technologies at tier_min or stronger, most-named first.
technologies_foundEvidence for the technologies you filtered on and those in expand_technology_slugs.

Evidence fields (technologies_found[])

FieldDescription
confidence, tierSee evidence tiers.
jobs, jobs_last_7_days, jobs_last_30_days, jobs_last_180_daysPostings naming the technology, overall and by posting date. Counts above about 130 are close estimates.
first_date_found, last_date_foundPosting dates of the first and latest posting that named it.
rank_within_category, relative_occurrence_within_categoryRank and share among the company's technologies in the same category.
required_jobs, preferred_jobs, mentioned_jobsPostings where it was a requirement, a nice-to-have, or mentioned.
recencyactive (named in the last 180 days), fading (last 540 days) or historical. A label, not an expiry.
shareShare of the company's postings that name the technology.
occupations, countriesISCO-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

StatusMeaning
400Invalid filters, more than 10 slugs in one filter, or no technology filter.
401Missing or invalid API key.
402Monthly credit quota exceeded.
404The beta is not enabled for this account.
429Per-second rate limit exceeded.
502The search did not finish; retry. Nothing is charged.

On this page