Overview
Job API is a REST service that aggregates job postings from multiple boards in a single request. It wraps python-jobspy and exposes it as a clean JSON API deployable on Vercel.
Supported job boards: indeed, linkedin, naukri, remoteok, arbeitnow, remotive, jobicy.
Want to test the API interactively? Use the Playground — a built-in API client that lets you send requests and inspect responses in real time.
Quick Start
The simplest possible request — search for software engineer jobs on Indeed:
Base URL
All endpoints are relative to the base URL. In local development the default is http://localhost:8000.
Endpoints
Pass all parameters as URL query parameters. Ideal for browser fetches and simple integrations.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| search_term | string | optional | — | Keyword query. Supports -negative and "exact phrase". |
| site_name | string | optional | all | Comma-separated boards: indeed, linkedin, naukri, remoteok, arbeitnow, remotive, jobicy. |
| location | string | optional | — | City, state, country, or any location string. |
| country_indeed | string | optional | USA | Country filter for Indeed. E.g. UK, Canada. |
| results_wanted | integer | optional | 15 | Number of results per site (max ~1000). |
| hours_old | integer | optional | — | Only return jobs posted within the last N hours. |
| job_type | string | optional | — | fulltime | parttime | internship | contract |
| is_remote | boolean | optional | — | Filter for remote listings only. |
| distance | integer | optional | 50 | Search radius in miles. |
| offset | integer | optional | 0 | Skip the first N results (for pagination). |
| description_format | string | optional | markdown | markdown | html |
| easy_apply | boolean | optional | — | Return only jobs with in-board quick apply. |
| linkedin_fetch_description | boolean | optional | false | Fetch full LinkedIn descriptions (significantly slower). |
| linkedin_company_ids | string | optional | — | Comma-separated LinkedIn company IDs, e.g. 1441,2382. |
| enforce_annual_salary | boolean | optional | false | Normalise all salary figures to annual amounts. |
| output_format | string | optional | json | json | csv | excel |
| proxies | string | optional | — | Comma-separated proxy list user:pass@host:port. |
Accepts the same parameters as the GET endpoint but as a JSON body. Array fields like site_name and linkedin_company_ids can be passed as real JSON arrays.
Returns a simple status object. Useful for uptime monitoring and deployment checks.
Response Schema
All successful job requests return the following top-level structure:
Job Object
indeed.{ city, state, country }fulltime, parttime, contract, or internship.2025-01-15.{ min_amount, max_amount, interval, currency }