Skip to main content

Job postings API: live US jobs, verified on employers' own career sites

Looking for an Indeed API, a LinkedIn jobs API or a Glassdoor API to search job postings? LinkedIn's talent APIs are for posting jobs and taking applications through partner applicant-tracking systems, and Indeed's developer documentation is its partner program. VeritaHire reads employers' own career sites directly (Workday, Greenhouse, iCIMS, SmartRecruiters and more), so there is no board in between to close the door, and no stale copies: a job that leaves the employer's site is marked closed within about 36 hours, and every record says when it was last confirmed there.

Quickstart (no key)

curl "https://veritahire.com/api/jobs-search.php?what=registered+nurse&where=Austin,+TX"
import requests

r = requests.get("https://veritahire.com/api/jobs-search.php",
                 params={"what": "registered nurse", "where": "Austin, TX", "radius_miles": 25})
for job in r.json()["jobs"]:
    print(job["title"], "|", job["employer"], "|", job["pay_as_posted"], "|", job["apply_url"])
const r = await fetch("https://veritahire.com/api/jobs-search.php?" +
  new URLSearchParams({ what: "cashier", where: "Phoenix, AZ" }));
const { jobs } = await r.json();
jobs.forEach(j => console.log(j.title, j.employer, j.last_confirmed_on_employer_site));

Each job carries posted pay (never estimated), what the posting asks for (education, licences, years), distance, the employer's own apply link, and when it was last confirmed on the employer's site.

Is a posting still open?

curl "https://veritahire.com/api/job-status.php?url=https://careers.example.com/job/12345"
# {"status": "open" | "closed" | "unknown", "last_confirmed_on_employer_site": "...", ...}

Competitive Hiring Report: why isn't this role filling? (no key)

Talent intelligence for one open US healthcare clinical posting (nurses, therapists, technologists, pharmacists, aides): how fast the same role closes within 25 miles and how fast this employer usually closes it, the pay each competitor posts (salary benchmarking), who else is hiring it, the last roles like it to close, and whether more of these roles opened than closed nearby over the last 4 weeks.

curl "https://veritahire.com/api/benchmark.php?job_url=https://careers.example.org/job/12345"
# or ?job_id=... or ?employer=...&title=...&city=...&state=...

HTTP 202 with "status": "building" means the report is being built: ask again after retry_after_seconds. The full report (sample) goes to the hiring manager by email through POST /api/benchmark-claim.php with their address; their click opens it. Send it only when they ask.

Job Openings Index (no key)

A daily index of open US job postings measured from employers' own career sites, published the next morning (base 2026-09-04 = 100): https://veritahire.com/job-openings-index/. Full series as CSV: https://veritahire.com/job-openings-index/veritahire-job-openings-index.csv; latest figures as JSON: https://veritahire.com/job-openings-index/latest.json.

The full feed (key)

curl -H "X-API-Key: vh_..." "https://veritahire.com/api/v1/jobs.php?state=CA&category=healthcare_clinical&limit=100"

Cursor-paged with after / next_after; full row reference in the OpenAPI file. Paid tiers: https://veritahire.com/verified-jobs-feed/

Examples in this repo

examples/python/search_jobs.py live jobs near a place (no key)
examples/python/is_job_still_open.py open / closed / unknown for any posting URL (no key)
examples/python/full_feed.py every live posting for a state and category, paged (key)
examples/javascript/search_jobs.mjs live jobs near a place, Node 18+ (no key)
examples/javascript/is_job_still_open.mjs still-open check, Node 18+ (no key)

Limits

Free endpoints return one page of up to 25 jobs and are rate-limited per address; every response states the filters it applied, and a search that runs out of time says so (HTTP 503 with retry_after_seconds) rather than returning zero.

Where the data comes from

Public job postings on employers' own career sites, read from the site or the applicant-tracking system it runs on. We do not copy other job boards. Questions: data@veritahire.com

This repository holds examples and documentation only (MIT licence). The API itself is a hosted service.

Client libraries

Tiny clients with the same five calls (search_jobs / searchJobs, job_status / jobStatus, get_job / getJob, feed, competitive_hiring_report / competitiveHiringReport), retrying when the API reports it is busy. Source in clients/python and clients/js.

pip install veritahire        # Python
npm install veritahire        # JavaScript (Node 18+, browsers, Deno, Bun)
from veritahire import search_jobs, job_status
for job in search_jobs("registered nurse", "Austin, TX"):
    print(job["title"], job["employer"], job["apply_url"])
print(job_status(url="https://careers.example.com/job/12345")["status"])

from veritahire import competitive_hiring_report
r = competitive_hiring_report(job_url="https://careers.example.org/job/12345")
print(r["market"], r["competitors"][:3])
import { searchJobs, jobStatus } from "veritahire";
const jobs = await searchJobs({ what: "electrician", where: "Las Vegas, NV" });
console.log((await jobStatus({ url: "https://careers.example.com/job/12345" })).status);

Metadata

Release files for veritahire 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for veritahire 0.2.0
File Size Uploaded
veritahire-0.2.0.tar.gz 5.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for veritahire 0.2.0
File Interpreter ABI Platform
veritahire-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 11.3 kB

Release files / veritahire-0.2.0.tar.gz

Download URL veritahire-0.2.0.tar.gz
Size 5.5 kB
Tags Source
SHA-256 checksum
How to use checksums
74f13c24df3e0c6a1d7ac66ad4ad45a67408b805e331daa65e6f9e249ef5888c
BLAKE2b-256 checksum
How to use checksums
ffc4af75e9ddcb3b0c2c5e4199bbe1e7cbf3c0072efa4f65162346b0ee7ae4ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / veritahire-0.2.0-py3-none-any.whl

Download URL veritahire-0.2.0-py3-none-any.whl
Size 5.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
df5b1f200df6480a801513f3d27cb3c79fe335a433696fdd000d695a171ca5ea
BLAKE2b-256 checksum
How to use checksums
b925a078266d9f48219ed2c89a8d09f160833b1bc99ea7ee75ef0753e9608241
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page