The Most Developer-Friendly Job Market API
A REST API for 8.4M+ live jobs across 25+ countries and 540k companies — US, UK, EU, MENA, APAC, LATAM. Cursor pagination, webhooks, typed SDKs, hourly refresh. Auth with a bearer token and ship in an afternoon.
Country-scoped queries: ?country=gb|de|fr|nl|pl|in|ae|sa|sg|au|br
{
"object": "list",
"has_more": true,
"next_cursor": "cur_018Q...zR",
"data": [
{
"id": "job_3F8aQzR2L",
"title": "Senior Backend Engineer",
"company": { "id": "co_vercel", "name": "Vercel", "domain": "vercel.com" },
"location": { "city": null, "country": "US", "remote": true },
"compensation": { "currency": "USD", "min": 180000, "max": 240000, "equity": true },
"tech_stack": ["typescript", "rust", "postgres", "kubernetes"],
"posted_at": "2026-05-26T09:14:02Z",
"apply_url": "https://vercel.com/careers/..."
}
]
}The boring stuff, done right.
One normalized schema
No source-specific or country-specific quirks. Every job has the same fields whether it came from a US careers page, a German ATS, Reed in the UK, or a Dubai job board.
Global cursor pagination
Stable cursors that don't shift when new jobs land. Page through 4M+ results across every region without losing your place.
Hourly refresh
Postings appear in the API within 60 minutes of going live. Webhooks fire the moment something matches your filter.
Typed SDKs
TypeScript, Python, and Go SDKs generated from the same OpenAPI spec. Zero drift between docs and runtime.
Stable IDs
Job IDs and company IDs are immutable. Deduped across sources so the same role doesn't appear three times.
Honest rate limits
Per-second burst plus monthly cap. No surprise throttling, no shadow quotas — your dashboard shows exactly what's left.
Pick a language. Ship today.
curl https://api.hirenode.io/v1/jobs \
-H "Authorization: Bearer hn_live_xxx" \
-G --data-urlencode "tech=rust" \
--data-urlencode "location=remote-eu" \
--data-urlencode "salary_min=120000"import { Hirenode } from "@hirenode/sdk";
const hn = new Hirenode({ apiKey: process.env.HIRENODE_KEY });
const { data } = await hn.jobs.list({
tech: ["rust", "postgres"],
location: "remote-eu",
salary_min: 120_000,
});from hirenode import Hirenode
hn = Hirenode(api_key=os.environ["HIRENODE_KEY"])
jobs = hn.jobs.list(
tech=["rust", "postgres"],
location="remote-eu",
salary_min=120_000,
)client := hirenode.New(os.Getenv("HIRENODE_KEY"))
jobs, err := client.Jobs.List(ctx, &hirenode.JobsListParams{
Tech: []string{"rust", "postgres"},
Location: "remote-eu",
SalaryMin: 120000,
})Three resources. Everything you need.
| Method | Path | Description |
|---|---|---|
| GET | /v1/jobs | List jobs with filters: tech, location, salary_min, posted_after, cursor. |
| GET | /v1/jobs/:id | Retrieve a single job with full description, compensation, and apply URL. |
| GET | /v1/companies | Search companies. Filter by domain, industry, hiring velocity. |
| GET | /v1/companies/:id/hiring | 90-day hiring timeline for a company — open roles, deltas, top tech. |
| GET | /v1/trends | Aggregate trends: which technologies, geos, and bands are heating up. |
| POST | /v1/webhooks | Create a webhook that fires when a job matches your filter. |
What people build with the API.
Job boards
Spin up a niche job board (remote Rust, EU AI, junior frontend) without scraping a single page.
Talent CRMs
Enrich your CRM with live hiring signals. Know when your champion's company starts hiring again.
Market intelligence
Powering investor newsletters, comp benchmarking tools, and labor-market dashboards.
Salary tooling
Real compensation bands across geos and seniorities — built on parsed postings, not surveys.
Internal tooling
Hiring teams pipe data into Notion, Linear, and custom Retool dashboards.
AI agents
LLM agents that source candidates, draft outreach, and qualify opportunities — all on real-time data.
One Job Search API. Every source. Zero scrapers.
The hirenode Job Search API is a single REST API for job listings that returns a normalized JSON job data feed across every public source — Greenhouse, Lever, Ashby, Workday, LinkedIn, Indeed, USAJobs, Wellfound and direct company careers pages. Hit one endpoint, get clean records with stable IDs, parsed compensation, structured tech_stack arrays and ISO-8601 timestamps. You stop maintaining a fleet of scrapers; we keep the dedupe, parsing and refresh fresh.
The job board aggregator API ships with cursor-based API pagination so you can stably stream millions of rows without losing your place when new postings land. Webhooks fire within 60 seconds of a match, signed with HMAC-SHA256 and retried on transient failures. Typed SDKs for TypeScript, Python and Go are generated from the same OpenAPI spec — zero drift between docs and runtime.
Every saved query is also exposed as a permanent RSS feed for tech jobs and a hosted JSON endpoint, so you can power a niche board, an LLM agent or a Slack bot with the same backend.
Job Search API, answered.
Is this a Job Search API or a Job Board Aggregator API?
+
Both. hirenode is a REST API for job listings that aggregates from every major source — Greenhouse, Lever, Ashby, Workday, LinkedIn, Indeed, USAJobs, Wellfound and company career pages — into one normalized schema. You query a single Job Search API and we handle the dedupe, parsing and refresh.
What does the JSON job data feed look like?
+
Every /v1/jobs response is a paginated JSON job data feed with id, title, company, location, remote flag, tech_stack array, parsed compensation (min/max/currency), posted_at, apply_url and source URL. Stable IDs across sources, ISO-8601 timestamps, and a has_more / next_cursor pair for cursor-based API pagination.
How does cursor-based API pagination work?
+
Every response includes a next_cursor token. Pass it back on the next request and you receive the next page with no duplicates and no missed records — even if new jobs land between requests. Cursors are stable across the lifetime of your query and survive backfills.
Do you provide an RSS feed for tech jobs?
+
Yes. Every saved filter on hirenode generates a permanent RSS feed for tech jobs and a JSON job feed API endpoint. Drop the RSS into Beehiiv, Substack or any reader; hit the JSON from a custom UI, a Slack bot, or an LLM agent.
What's the rate limit?
+
Free 5,000 requests/month. Pro is 50,000/mo, Business is 500,000/mo, Enterprise is custom. Per-second burst is honest — your dashboard shows exactly what's left and webhooks fire on quota events.
Are there typed SDKs?
+
Yes — TypeScript, Python and Go SDKs are generated from the OpenAPI spec so the runtime never drifts from the docs. cURL examples work for every endpoint.
Can I get a webhook when new jobs match my filter?
+
Yes. POST a filter to /v1/webhooks and we'll fire HTTPS callbacks within 60 seconds of a matching job appearing. Signed payloads with HMAC-SHA256, automatic retries, and a delivery log per endpoint.
Free tier. 250 requests / month.
Curator is $8/mo. Upgrade any time. Cancel any time.
