Company Search by Technology

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

Available on every plan.

Returns companies whose own job postings show they use the technologies you ask for, such as "companies in Germany that use Snowflake and dbt". Every answer carries its evidence: how many postings named the technology, how strongly, over which time windows, and the first and last date found. Requires authentication.

Evidence tiers

Every company-technology pair is graded into one of three tiers from the postings behind it.

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, counts once.

confirmed is not populated yet, so likely is the strongest tier you will see and tier_min: "confirmed" returns no companies. This page will say when that changes.

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. 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.
detailstringfull (default) or compact. Compact leaves out num_technologies, technology_slugs and technology_names and trims each technologies_found entry to the technology, tier, confidence, jobs, jobs_last_30_days, required_jobs, first_date_found and last_date_found: about 500 bytes per company instead of several kilobytes. Use it for lists.
include_sample_jobsbooleanAdd sample_jobs to each technologies_found entry: up to 3 of the newest postings from the last 180 days that named the technology, each with id, title, url (the original posting) and posted_at. Costs no extra credits.

Slugs are lowercase, e.g. snowflake, dbt, apache-kafka. POST /v1/technologies/resolve turns product names into them for free; GET /v1/technologies lists them by category.

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,
    "credits_remaining": 24382,
    "credits_allowance": 25000,
    "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 the company's domain is confirmed; otherwise null.
country_codeThe country with the most postings naming the matched technologies.
employee_count, employee_count_rangeHeadcount where known.
founded_year, annual_revenue_usd, industryWhere known, else null.
num_jobsThe company's postings 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. Absent with detail: "compact".
technologies_foundEvidence for the technologies you filtered on and those in expand_technology_slugs.

Evidence fields (technologies_found[])

With detail: "compact" only the first four rows are present, and technology carries just slug and name.

FieldDescription
confidence, tierSee evidence tiers.
jobs, jobs_last_30_daysPostings naming the technology, overall and in the last 30 days. Counts above about 130 are close estimates.
required_jobsPostings where it was a requirement.
first_date_found, last_date_foundPosting dates of the first and latest posting that named it.
sample_jobsOnly with include_sample_jobs: up to 3 of the newest postings that named it, each { id, title, url, posted_at }. id works with job_id_or on the job search and with the job endpoints; url is the original posting. Samples are not scoped by job_filters; an older technology can answer [].
jobs_last_7_days, jobs_last_180_daysPostings by posting date.
rank_within_category, relative_occurrence_within_categoryRank and share among the company's technologies in the same category.
preferred_jobs, mentioned_jobsPostings where it was 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, whatever detail says and with or without include_sample_jobs. A company you already paid for this calendar month is free when it comes back, in any search and through any key; metadata.companies_already_paid counts those. An empty page costs nothing. metadata.credits_remaining is what the account can still spend, out of metadata.credits_allowance. 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 (Builder and above). 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.
429Per-second rate limit exceeded.
502The search did not finish; retry. Nothing is charged.

On this page