Overview
Job Search keeps its own index of the open jobs on public company career boards, refreshed through the day, so a search never waits on a company's website. Every job has the same shape whichever company posted it. Keyword search matches every word you give against the job title, with plurals and accents folded, so data engineers finds Senior Data Engineer. Results are newest first; pass a job's id to get its full description on a paid plan.
Endpoint
One host, one path per API. The block below shows this call in four languages; every one of them is the same HTTP request. Making requests covers the timeouts, retries and parameter rules that apply to all of them. The SDKs wrap the same call in a typed client.
curl "https://api.apiverve.com/v1/jobsearch?keyword=software%20engineer&location=New%20York&country=US&remote=true&employmentType=full-time&postedSince=7d&company=airbnb&minSalary=100000&page=1" \
-H "x-api-key: your_api_key_here"const res = await fetch('https://api.apiverve.com/v1/jobsearch?keyword=software%20engineer&location=New%20York&country=US&remote=true&employmentType=full-time&postedSince=7d&company=airbnb&minSalary=100000&page=1', {
headers: { 'x-api-key': 'your_api_key_here' },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data } = await res.json();
console.log(data);import requests
res = requests.get(
"https://api.apiverve.com/v1/jobsearch?keyword=software%20engineer&location=New%20York&country=US&remote=true&employmentType=full-time&postedSince=7d&company=airbnb&minSalary=100000&page=1",
headers={"x-api-key": "your_api_key_here"},
timeout=15,
)
res.raise_for_status()
print(res.json()["data"])package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.apiverve.com/v1/jobsearch?keyword=software%20engineer&location=New%20York&country=US&remote=true&employmentType=full-time&postedSince=7d&company=airbnb&minSalary=100000&page=1", nil)
req.Header.Set("x-api-key", "your_api_key_here")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
}Replace your_api_key_here with the key from your dashboard. When the inputs arrive as a list rather than one at a time, batch requests run up to 200 of them through this same API in a single call.
Authentication
Send your key in the x-api-key header. That is the only auth step — there is no token exchange and no per-endpoint scope to configure. Authentication covers creating, rotating and revoking keys.
A 401 means the key is missing, invalid or expired. A 403 means the key is valid but not permitted here — blocked by a key restriction or an IP allow-list. Running out of credits is a 429.
Parameters
Sent in the query string. Premium parameters are accepted on every plan but only take effect on plans that include them.
| Parameter | Type | Description |
|---|---|---|
keywordRequired | string | Words that must all appear in the job title, for example data engineer or product designer. length 0–100 |
locationOptional | string | Return only jobs with a location containing this text, for example London, New York or Bavaria. length 0–100 |
countryOptional | string | Return only jobs in this country: an ISO 3166 code or a name, for example US, GB or Germany. length 0–60 |
remoteOptional | boolean | true returns only jobs open to remote work; false only jobs that are not. |
employmentTypeOptional | string | Return only jobs of this employment type. Jobs that give no employment type are kept, since many companies leave it blank; only jobs of another type are left out.full-timepart-timecontractinternshiptemporary |
postedSinceOptional | string | Return only jobs first published at or after this date or date-time (ISO 8601, for example 2026-10-01), or within this age: a number followed by h, d or w, for example 12h, 7d or 2w. length 0–30 |
companyOptional | string | Return only jobs at this company, by its career board name, usually the company name in lowercase, for example airbnb. length 0–100 |
minSalaryOptionalPremium | number | Return only jobs whose salary range reaches at least this amount, in the job's own currency and pay period. Jobs that publish no salary are left out when this is set. range 0–∞ |
pageOptional | integer | Page of results: 10 jobs per page up to page 5 on the free plan, 50 per page up to page 10 on paid plans. default 1 · range 1–10 |
Response
Every API returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape. Response format covers the envelope, the other output formats and how premium fields are withheld.
{
"status": "ok",
"error": null,
"data": {
"page": 1,
"count": 2,
"hasMore": true,
"jobs": [
{
"id": "b4f50cb0115efeef41cb",
"title": "Senior Network and Cloud Engineer",
"company": "Acturis",
"location": "London, England, United Kingdom",
"locations": [
"London, England, United Kingdom"
],
"country": "GB",
"remote": false,
"workplaceType": "hybrid",
"employmentType": "full-time",
"postedAt": "2026-10-14T15:37:26.000Z",
"url": "https://careers.acturis.com/o/senior-network-and-cloud-engineer",
"applyUrl": "https://careers.acturis.com/o/senior-network-and-cloud-engineer/c/new",
"salary": {
"min": null,
"max": null,
"currency": null,
"interval": null
}
},
{
"id": "43175a4af41a8c5a9a3b",
"title": "Senior AI Engineer in Computer Vision",
"company": "Faktion BV",
"location": "Antwerp, Vlaams Gewest, Belgium",
"locations": [
"Antwerp, Vlaams Gewest, Belgium"
],
"country": "BE",
"remote": false,
"workplaceType": "hybrid",
"employmentType": "full-time",
"postedAt": "2026-08-24T13:17:35.000Z",
"url": "https://talent.faktion.com/o/senior-ai-engineer-in-computer-vision",
"applyUrl": "https://talent.faktion.com/o/senior-ai-engineer-in-computer-vision/c/new",
"salary": {
"min": null,
"max": null,
"currency": null,
"interval": null
}
}
]
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
page | number | 1 | Page of results returned |
count | number | 2 | Number of jobs on this page |
hasMore | boolean | true | true when another page may hold more matching jobs |
jobs | array[2] | Matching jobs on this page, newest first | |
id | string | "b4f50cb0115efeef41cb" | Job id; pass it as id for the job's full description |
title | string | "Senior Network and Cloud Engineer" | Job title |
company | string | "Acturis" | Company hiring for the job |
location | string | "London, England, United Kingdom" | Primary location of the job |
locations | array | [London, England, United Kingdom] | Locations the job is offered in, primary first (up to 5) |
country | string | "GB" | ISO 3166-1 alpha-2 country of the primary location; null when the location names none, such as Remote |
remote | boolean | false | true when the job is open to remote work |
workplaceType | string | "hybrid" | remote, hybrid or onsite; null when the company does not say |
employmentType | string | "full-time" | full-time, part-time, contract, internship, temporary or volunteer; null when the company does not say |
postedAt | string | "2026-10-14T15:37:26.000Z" | When the job was first published (ISO 8601) |
url | string | "https://careers.acturis.com/o/senior-network-and-cloud-engineer" | URL of the job's posting page |
applyUrl | string | "https://careers.acturis.com/o/senior-network-and-cloud-engineer/c/new" | URL to apply for the job |
salary | object | {...} | Salary range as the company publishes it; every value is null when it publishes none |
minPremium | object | null | Lower end of the salary range |
maxPremium | object | null | Upper end of the salary range |
currencyPremium | object | null | ISO 4217 currency of the salary range |
intervalPremium | object | null | Period the salary is paid per: year, month, week, day or hour |
Errors
Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change. Error handling covers the full status list and which of them are worth retrying.
| Status | Meaning | What to do |
|---|---|---|
400 | Input was rejected | Read error; it names the parameter. |
401 | Key missing or invalid | Check the header name and the key value. |
403 | Key valid, but not permitted | A key restriction or IP allow-list; see key scoping. |
429 | Rate limited, or out of credits | Read error to tell them apart; see rate limits. |
Use cases
- Job Boards
- Niche job sites and aggregators fill their listings by keyword, location and remote filters without integrating each company's careers system.
- Job Alerts
- Alert services run saved searches with postedSince to send only jobs published since the last run.
- Hiring Signals
- Sales and investment tools watch which companies are hiring for which roles and where.
- Career Tools
- Resume and career apps suggest open roles that match a candidate's title and location.
Other ways to use Job Search
Set up Job Search on APIVerve, or reach the same source a different way. Your APIVerve account and credits work on all of them — one key, one balance.
Related
More in data: