Job post searches
Find the companies and people behind job postings and import them.
Preview the companies hiring for the job filters
/v1/job-post-searches/companiesjob-post-searches.companiesBody { jobFilters }. Returns one ken-jobs hiring-companies page verbatim (the client pages with jobFilters.cursor and jobFilters.limit) plus hiringSet: { total, truncated } for the whole set. ken-jobs 422 codes (filter_required, invalid_cursor) pass through. Free.
Parameters
400 workspace_required).Request body
application/json, optional: object.
Response 200
data is a object.
curl -X POST "https://api.ken.so/v1/job-post-searches/companies" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{}'{
"success": true,
"data": null
}Search people at the hiring companies
/v1/job-post-searches/peoplejob-post-searches.peopleBody { jobFilters, peopleFilters }. Forwards { ...peopleFilters, accountIds } to ken-search for the backend user and returns its page plus hiringSet: { count, truncated } and, on every person, jobPost: { title, url, location, postedAt, openRoles, moreRoles }. An empty hiring set is an empty page without a ken-search call. Each person on the page counts one row of the workspace's searchBrowseRows quota; past it, 429 quota_exceeded.
Parameters
400 workspace_required).Request body
application/json, optional: object.
Response 200
data is a object.
curl -X POST "https://api.ken.so/v1/job-post-searches/people" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{}'{
"success": true,
"data": null
}Count people at the hiring companies
/v1/job-post-searches/people/countjob-post-searches.countSame body as people, sent with the smallest page. Returns { totalResults, hiringSet }.
Parameters
400 workspace_required).Request body
application/json, optional: object.
Response 200
data is a object.
curl -X POST "https://api.ken.so/v1/job-post-searches/people/count" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{}'{
"success": true,
"data": null
}Import people at the hiring companies into a campaign
/v1/job-post-searches/importjob-post-searches.importBody { jobFilters, peopleFilters, campaignId, importLimit }. Forwards { campaignId, clientId, peopleFilters: { ...peopleFilters, accountIds }, importLimit } to ken-search v1/export/campaign for the backend user, records the five "Hiring for" variables per hiring company for the import batches, and returns { jobId }. Poll the job the way the Search Contacts import does. An empty hiring set is 400 validation_failed with detail code empty_hiring_set. ken-search refusals keep their status (400 validation_failed, 403 forbidden).
Parameters
400 workspace_required).Request body
application/json, optional: object.
Response 200
data is a JobPostSearchImportResult.
curl -X POST "https://api.ken.so/v1/job-post-searches/import" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{}'{
"success": true,
"data": {
"jobId": 812
}
}