Data & API
As of 2026-10-31, ChainJobs publishes 3,540 live crypto, web3 & blockchain roles from 198 companies as open data, regenerated daily. License: CC BY 4.0 — attribution required (credit “ChainJobs” with a link to chainjobs.io).
Endpoints
| URL | What it is |
|---|---|
| GET https://chainjobs.io/api/jobs.json | Documented machine file for citation and research: every live role with the employer apply URL and the daily last-confirmed timestamp, plus generated_at, licence, attribution, sources and counts. Also reachable at /api/jobs. |
| GET https://chainjobs.io/jobs-data.json | The compact index the site's own filters and the widget read. Same job set, interned for size. |
| GET https://chainjobs.io/feed.xml | RSS 2.0, newest 50 roles; per-category and per-tag feeds on the feeds index. |
All three are static files with Access-Control-Allow-Origin: *, so they can be fetched cross-origin. No key, no rate-limit sign-up.
Source repo + examples: github.com/Mirkie/crypto-jobs-data
/api/jobs.json
Top level: generated_at (ISO 8601 UTC build time), license, license_name, attribution, documentation, sources (one entry per applicant-tracking system: companies and jobs from it), counts (jobs, companies, remote, with_salary), categories (code → label) and jobs. Each job object:
| Key | Meaning |
|---|---|
| id | same stable id as jobs-data.json |
| title | job title |
| company | company name |
| company_site | the company's own domain, as an https URL |
| apply_url | the employer's own apply page (its applicant-tracking system) |
| chainjobs_url | the ChainJobs listing page |
| location | location as the employer states it |
| remote | true when the employer lists the role as remote |
| category | category code (see top-level categories) |
| date_posted | posting date, YYYY-MM-DD |
| first_seen | when ChainJobs first saw the role at the source (ISO 8601, UTC) |
| last_confirmed | the last daily sync at which the role was still open on the employer's own careers page (ISO 8601, UTC) |
| salary | {min, max, currency, period} — only when the employer publishes a band; currency is null when the posting shows a bare "$" outside the US and names no currency |
/jobs-data.json
Top level: updated (ISO date), cats / tags / regions / cities / ecos (code → label maps), comps (array of [company name, website domain]), locs (array of location strings) and jobs (array). Each job object:
| Key | Meaning |
|---|---|
| id | stable listing id (12 hex chars) |
| t | job title |
| c | index into comps — the company is comps[c] = [name, website domain] |
| l | index into locs — the location string is locs[l] |
| r | remote: 1 if the employer lists the role as remote, else 0 |
| k | category code (see cats) |
| d | posting date, YYYY-MM-DD |
| u | path to the ChainJobs listing — present only when the title is non-ASCII; otherwise build it as /jobs/{id}-{slug}/ (slug = title lowercased, each run of non-[a-z0-9] → "-", trimmed, max 60 chars) |
| tg | skill/role tag codes (see tags) — optional |
| e | ecosystem codes of the company (see ecos) — optional |
| rg | region code (see regions) — optional |
| ct | city code (see cities) — optional |
| sn | seniority: senior or entry — optional |
| nw | 1 = first seen in the last 48 hours — optional |
| nd | 1 = first seen in the last 7 days — optional |
| fs | date ChainJobs first saw the role, YYYY-MM-DD — only for roles first seen in the last 30 days — optional |
| f | 1 = featured placement — optional |
| sy | formatted salary band, employer-stated only — optional |
| sk | sort key: annualised USD maximum of the band, USD bands only — optional |
Company and location are interned to keep the file small: read them as comps[job.c] and locs[job.l]. Optional keys are omitted, not null, when they don't apply.
Where the data comes from
Every role is read once a day from the hiring company's own applicant-tracking system — Greenhouse, Lever, Ashby and 7 other applicant-tracking systems (companies per system: Ashby 84 · Greenhouse 61 · Lever 39 · Workable 5 · BambooHR 3 · Recruitee 2 · Workday 1 · Teamtailor 1 · Gem 1 · Rippling 1). Roles leave the files when they close at the source. Salary appears only when the employer publishes a band; nothing is estimated. Full methodology: about the data.
Terms
Data is provided as-is under CC BY 4.0. Attribution is required: name “ChainJobs” and link to chainjobs.io wherever you surface it; please keep each listing's link to the employer's application page. Cite as ChainJobs, chainjobs.io, data as of 2026-10-31. Questions or corrections: the contact form.