Find companies that use a technology

Build a prospect list of companies whose own job postings show they use a product, graded by evidence, and download it as CSV.

Beta, early access. The technology endpoints in this guide are enabled per account. Without access they answer 404 with {"error": "company_technographics_not_enabled"} and charge nothing. Request access.

You sell something that works with Snowflake and want every company in Germany that uses it, with proof. By the end you will have a ranked list, the evidence behind each company, and a CSV for your CRM. The evidence comes from each company's own job postings: one that requires Snowflake is a stronger lead than one that named it once.

Find the technology's slug

Technologies are identified by lowercase slugs such as snowflake or apache-kafka. List a category, counted over postings in your target country, to find yours.

curl "https://api.jobspipe.dev/v1/technologies?category=data-warehouse&country=DE&limit=10" \
  -H "Authorization: Bearer jp_live_your_key_here"
200 OK
{
  "as_of": "2026-09-25 06:00:00",
  "metadata": { "total_results": 14, "limit": 10, "page": 0 },
  "data": [
    {
      "technology": { "slug": "snowflake", "name": "Snowflake", "category": "Data Warehouse", "category_slug": "data-warehouse", "parent_category": "Data", "kind": "product", "logo": null },
      "companies": 2140,
      "jobs": 9800,
      "first_date_found": "2022-02-11",
      "last_date_found": "2026-09-24"
    }
  ]
}

Size the market

One call shows how many companies use it at each evidence tier, where, and who adopted it recently.

curl https://api.jobspipe.dev/v1/technologies/snowflake \
  -H "Authorization: Bearer jp_live_your_key_here"
200 OK
{
  "as_of": "2026-09-25 06:00:00",
  "technology": { "slug": "snowflake", "name": "Snowflake", "category": "Data Warehouse", "category_slug": "data-warehouse", "parent_category": "Data", "kind": "product", "logo": null },
  "companies": 18400,
  "jobs": 96100,
  "companies_by_tier": { "confirmed": 0, "likely": 9200, "mentioned": 9200 },
  "top_countries": ["US", "GB", "DE", "IN", "CA"],
  "recently_adopted": [
    { "id": "2512632719191904832", "name": "Northwind Analytics GmbH", "domain": "northwind.example", "tier": "likely", "confidence": "medium", "jobs": 3, "first_date_found": "2026-09-02", "last_date_found": "2026-09-22" }
  ]
}

recently_adopted lists companies that first named it in the last 30 days: often the warmest leads.

Search for companies

This request finds companies with postings in Germany that name Snowflake, skips those that also name Databricks, keeps 200+ employees, and puts the most active hirers first.

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_or": ["snowflake"],
    "company_technology_slug_not": ["databricks"],
    "company_country_code_or": ["DE"],
    "tier_min": "likely",
    "min_employee_count": 200,
    "order_by": [{ "field": "num_jobs_last_30_days", "desc": true }],
    "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_or": ["snowflake"],
        "company_technology_slug_not": ["databricks"],
        "company_country_code_or": ["DE"],
        "tier_min": "likely",
        "min_employee_count": 200,
        "order_by": [{"field": "num_jobs_last_30_days", "desc": True}],
        "limit": 25,
    },
    timeout=60,
).json()

for c in resp["data"]:
    evidence = c["technologies_found"][0]
    print(c["name"], c["domain"], evidence["tier"], evidence["required_jobs"], "required")
const resp = 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_or: ["snowflake"],
    company_technology_slug_not: ["databricks"],
    company_country_code_or: ["DE"],
    tier_min: "likely",
    min_employee_count: 200,
    order_by: [{ field: "num_jobs_last_30_days", desc: true }],
    limit: 25,
  }),
}).then((r) => r.json());

for (const c of resp.data) {
  const evidence = c.technologies_found[0];
  console.log(c.name, c.domain, evidence.tier, evidence.required_jobs, "required");
}

Each company carries the evidence behind the match. For the next page, send metadata.next_cursor back as cursor.

200 OK
{
  "metadata": {
    "credits_charged": 25,
    "companies_already_paid": 0,
    "credits_remaining": 24357,
    "credits_allowance": 25000,
    "next_cursor": "eyJvIjoyNX0",
    "as_of": "2026-09-25 06:00:00"
  },
  "data": [
    {
      "id": "2512632719191904832",
      "name": "Northwind Analytics GmbH",
      "domain": "northwind.example",
      "country_code": "DE",
      "employee_count": 1800,
      "num_jobs": 214,
      "num_jobs_found": 31,
      "num_jobs_last_30_days": 12,
      "technology_slugs": ["snowflake", "dbt", "apache-airflow"],
      "technologies_found": [
        {
          "technology": { "slug": "snowflake", "name": "Snowflake", "kind": "product" },
          "confidence": "medium",
          "tier": "likely",
          "jobs": 27,
          "jobs_last_30_days": 9,
          "required_jobs": 19,
          "preferred_jobs": 5,
          "mentioned_jobs": 3,
          "first_date_found": "2024-11-04",
          "last_date_found": "2026-09-22",
          "recency": "active",
          "share": 0.1262
        }
      ]
    }
  ]
}

Download the full list

For the whole list, the export returns every matching company in one CSV or JSON Lines file. It takes the same filters as query parameters and needs a paid plan.

curl -o snowflake-de.csv -D headers.txt \
  "https://api.jobspipe.dev/v1/technologies/export?company_technology_slug_or=snowflake&company_technology_slug_not=databricks&company_country_code_or=DE&tier_min=likely&format=csv" \
  -H "Authorization: Bearer jp_live_your_key_here"

grep -i "^x-" headers.txt
import requests

resp = requests.get(
    "https://api.jobspipe.dev/v1/technologies/export",
    headers={"Authorization": "Bearer jp_live_your_key_here"},
    params={
        "company_technology_slug_or": "snowflake",
        "company_technology_slug_not": "databricks",
        "company_country_code_or": "DE",
        "tier_min": "likely",
        "format": "csv",
    },
    stream=True,
    timeout=300,
)
resp.raise_for_status()

with open("snowflake-de.csv", "wb") as f:
    for chunk in resp.iter_content(chunk_size=65536):
        f.write(chunk)

print("companies:", resp.headers["X-Total-Companies"], "credits:", resp.headers["X-Credits-Charged"])
import { writeFile } from "node:fs/promises";

const params = new URLSearchParams({
  company_technology_slug_or: "snowflake",
  company_technology_slug_not: "databricks",
  company_country_code_or: "DE",
  tier_min: "likely",
  format: "csv",
});

const resp = await fetch(`https://api.jobspipe.dev/v1/technologies/export?${params}`, {
  headers: { Authorization: "Bearer jp_live_your_key_here" },
});
if (!resp.ok) throw new Error(`${resp.status}: ${await resp.text()}`);

await writeFile("snowflake-de.csv", Buffer.from(await resp.arrayBuffer()));
console.log("companies:", resp.headers.get("X-Total-Companies"), "credits:", resp.headers.get("X-Credits-Charged"));

The file has one line per company and technology, with columns such as company_name, company_domain, company_employee_count, technology_slug, tier, required_jobs, jobs_last_30_days, recency and share. A search larger than your plan's cap answers 400 with export_too_large; narrow it or pass limit. See technology export for every column.

Read the evidence

Every company-technology pair has a tier:

TierconfidenceWhat it means for a sales list
confirmedhighTwo independent checks agree. Not yet populated in the beta.
likelymediumA stated requirement, or named in two separate postings. The default for tier_min, and a good default for outreach.
mentionedlowNamed once. Use tier_min: "mentioned" to cast a wide net, then qualify by hand.

Rank with required_jobs (it runs in production), recency (active means named in the last 180 days) and jobs_last_30_days (current momentum). domain is set only when two independent sources agree on it, otherwise null.

Credits

  • GET /v1/technologies and GET /v1/technologies/{slug}: 1 credit per call.
  • Company search: 1 credit per company returned. A company you already paid for this month is free every time it comes back; metadata.companies_already_paid counts those.
  • Export: 1 credit per call plus 1 per company you have not paid for this month. Companies paid for in a search are free in the export for the rest of the month, and the other way round.

Next: enrich each company with Enrich a lead from a domain.

On this page