Skip to main content
GET
/
api
/
v2
/
tech
/
companies
Search Companies By Tech Stack
curl --request GET \
  --url https://api.openfunnel.dev/api/v2/tech/companies \
  --header 'X-API-Key: <x-api-key>' \
  --header 'X-User-ID: <x-user-id>'
{
  "tech": "<string>",
  "lookback_days": 123,
  "page": 123,
  "page_size": 123,
  "total_results": 123,
  "has_more": true,
  "total_companies_matched": 123,
  "companies": [
    {
      "company_slug": "<string>",
      "post_count": 123,
      "company_name": "<string>",
      "first_posted_at": "<string>",
      "last_posted_at": "<string>",
      "evidence": {
        "title": "<string>",
        "url": "<string>",
        "created": "<string>",
        "snippet": "<string>"
      },
      "enriched": false,
      "website": "<string>",
      "linkedin_url": "<string>",
      "linkedin_org_id": "<string>",
      "linkedin_follower_count": 123,
      "employee_count": 123,
      "industries": [
        "<string>"
      ],
      "description": "<string>",
      "hq_city": "<string>",
      "hq_region": "<string>",
      "hq_country": "<string>",
      "hq_country_code": "<string>",
      "funding_stage": "<string>",
      "total_funding_usd": 123,
      "latest_funding_usd": 123,
      "revenue_usd": 123
    }
  ],
  "variations": [],
  "filters_applied": {
    "hq_country_code": "<string>",
    "min_employee_count": 123,
    "max_employee_count": 123
  },
  "credits_consumed": 0,
  "cached": false,
  "search_took_ms": 0,
  "enrich_took_ms": 0,
  "latency_ms": 0
}

Documentation Index

Fetch the complete documentation index at: https://docs.openfunnel.dev/llms.txt

Use this file to discover all available pages before exploring further.

Headers

X-API-Key
string
required
X-User-ID
string
required

Query Parameters

tech
string
required

Technology to search for in job descriptions (e.g. 'Snowflake', 'Kubernetes').

Required string length: 1 - 128
variations
string[]

Optional alternate phrasings (e.g. 'Snowflake Data Cloud'). Each is OR-matched as a phrase.

lookback_days
integer
default:365

Lookback window in days (1–365). Defaults to a full year so coverage estimates aren't artificially clipped; narrow this for recency-sensitive queries.

Required range: 1 <= x <= 365
page
integer
default:1

1-indexed page number. Page size is fixed at 50. Walk pages with has_more. Sanity-bounded at 1,000 pages (50,000 results) — the long tail is rarely useful for ICP discovery. When firmographic filters are set, the addressable pool reflects the filtered set.

Required range: 1 <= x <= 1000
exclude_vendor
boolean
default:true

When true (default), excludes job posts from the vendor of the technology being searched (e.g. searching Snowflake won't return Snowflake's own job posts). Set false to include the vendor.

exclude_aggregators
boolean
default:true

Exclude well-known LinkedIn job aggregators and reposters (jobs-via-*, get-it-recruit-*, lensa, jobot, ziprecruiter, clearancejobs, cybercoders, etc.) which otherwise dominate raw counts without representing actual tech adopters. ON by default.

exclude_company_slugs
string[]

Additional LinkedIn company slugs to exclude on top of the default aggregator block-list. Useful for blocking consultancies (deloitte, pwc, accenture), the caller's own company, or known competitors.

include_evidence
boolean
default:true

Include one top-hit job per company with a highlighted snippet showing the tech phrase in context. Set false for the leanest payload (~6× faster).

enrich
boolean
default:false

When true, hydrates each company on this page with firmographics: employee count, website, LinkedIn URL, HQ, industries, funding, and revenue. Adds ~150–200ms per page. Auto-enabled when any of hq_country_code, min_employee_count, or max_employee_count is set.

hq_country_code
string | null

Filter by company HQ ISO 3166-1 alpha-3 code (e.g. USA, GBR, IND, DEU). Top 30 by company volume: USA, GBR, CHN, FRA, IND, DEU, BRA, BEL, ESP, CAN, AUS, NLD, ITA, NOR, ZAF, MEX, TUR, CHE, ARE, POL, SWE, IDN, ARG, PAK, COL, PRT, JPN, CHL, NGA, AUT. Full list of 250 codes via GET /api/v2/tech/country-options. Auto-enables enrich. Companies missing a country code are dropped from the page when this filter is active.

Required string length: 3
min_employee_count
integer | null

Inclusive lower bound on company employee count. Auto-enables enrich. Companies with no employee count are dropped when this filter is active.

Required range: x >= 0
max_employee_count
integer | null

Inclusive upper bound on company employee count. Auto-enables enrich. Companies with no employee count are dropped when this filter is active.

Required range: x >= 0

Response

Successful Response

One page of companies that mention a tech in recent job postings. Companies are ranked by post_count descending; firmographics are populated when enrich=true or when any firmographic filter is set.

tech
string
required

The technology phrase searched.

lookback_days
integer
required

Lookback window applied to the search, in days.

page
integer
required

1-indexed page number returned.

page_size
integer
required

Items per page. Fixed at 50.

total_results
integer
required

Size of the addressable result set this page slices from. Without firmographic filters: bounded by the 50,000-result sanity cap (1,000 pages × 50). With filters: equals the size of the filtered set after firmographic hydration, which is what has_more and page indexing are computed against.

has_more
boolean
required

True when at least one more page is available (page * page_size < total_results). Loop while this is true to walk the full result set.

total_companies_matched
integer
required

Approximate total distinct companies whose recent job postings match the search, BEFORE firmographic filters are applied. Compare with total_results to see how aggressively your filters narrowed the result.

companies
CompanyHit · object[]
required

The ranked companies on this page.

variations
string[]

Alternate phrasings that were OR-matched alongside tech.

filters_applied
FiltersApplied · object

Echo of the firmographic filters that produced this page.

credits_consumed
integer
default:0

Credits charged for this response. Computed as companies_returned × per-company-cost: 5 credits per company without enrichment, 10 credits per company with enrichment (or any firmographic filter set). The charge is recorded in the background after the response is sent, so it never adds to your request latency.

cached
boolean
default:false

True if this exact page was served from the response cache.

search_took_ms
integer
default:0

Server-side time spent ranking companies for this query, in ms. 0 if the response was served from cache.

enrich_took_ms
integer
default:0

Server-side time spent hydrating firmographics for this page, in ms. 0 when enrich=false or the response was served from cache.

latency_ms
integer
default:0

End-to-end request latency including cache lookup, OS, CH, and serialization.