Skip to main content
POST
/
api
/
v2
/
tech
/
companies
/
intent-search
Search Companies by Tech Stack with Intent
curl --request POST \
  --url https://api.openfunnel.dev/api/v2/tech/companies/intent-search \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <x-api-key>' \
  --data '
{
  "tech": "<string>",
  "activity": "<string>",
  "variations": [
    "<string>"
  ],
  "lookback_days": 365,
  "limit": 100,
  "exclude_vendor": true,
  "exclude_aggregators": true,
  "exclude_company_slugs": [
    "<string>"
  ],
  "enrich": false,
  "hq_country_code": "<string>",
  "min_employee_count": 1,
  "max_employee_count": 1
}
'
{
  "job_id": "<string>",
  "message": "<string>",
  "requested_limit": 123,
  "status": "pending"
}

Headers

X-API-Key
string
required

Body

application/json

Request body for the async tech + activity-intent search. Same search inputs as Search Companies By Tech Stack, plus the required activity to verify and a limit on qualified companies.

tech
string
required

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

Required string length: 1 - 128
activity
string
required

The activity intent to verify, e.g. 'migrating off Redshift to Snowflake' or 'building a central analytics engineering team that owns dbt models'. Acts as a HARD filter: a company qualifies only when its job posting mentions the tech in a way consistent with this activity.

Required string length: 1 - 500
Examples:

"migrating off Redshift to Snowflake"

"migrating workloads from VMs to Kubernetes"

variations
string[] | null

Optional alternate phrasings of the tech (e.g. 'K8s' for Kubernetes). Each is OR-matched as a phrase.

lookback_days
integer
default:365

Lookback window in days (1–365).

Required range: 1 <= x <= 365
limit
integer
default:100

Maximum number of QUALIFIED companies to return. The scan walks the ranked pool and early-stops once this many companies pass intent verification.

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

When true (default), excludes job posts from the vendor of the technology being searched.

exclude_aggregators
boolean
default:true

Exclude well-known LinkedIn job aggregators and reposters (jobs-via-*, lensa, ziprecruiter, etc.). ON by default.

exclude_company_slugs
string[] | null

Additional LinkedIn company slugs to exclude on top of the default aggregator block-list.

enrich
boolean
default:false

Hydrate qualified companies with firmographics (employee count, website, LinkedIn, HQ, industries, funding, revenue). Auto-enabled when any firmographic filter is set.

hq_country_code
string | null

Filter by company HQ ISO 3166-1 alpha-3 code (e.g. USA, GBR, IND, DEU). Full list of 250 codes via GET /api/v2/tech/country-options (under Agent Helpers). Auto-enables enrich.

Required string length: 3
min_employee_count
integer | null

Inclusive lower bound on company employee count. Auto-enables enrich.

Required range: x >= 0
max_employee_count
integer | null

Inclusive upper bound on company employee count. Auto-enables enrich.

Required range: x >= 0

Response

Job accepted. Returns a job_id to poll for status and results.

Returned immediately when a tech intent-search job is submitted.

job_id
string
required

Async job id. Poll GET /api/v2/tech/companies/intent-search/{job_id} for status and results.

message
string
required

Human-readable next-step hint.

requested_limit
integer
required

The requested maximum number of qualified companies.

status
string
default:pending

Job status at submit time (always pending).