JobPostings API vs JSearch (OpenWeb Ninja) · Adzuna · TheirStack
JSearch API Alternative · Direct Employer ATS URLs & 434 Sources Without Aggregator Lag.$0.199 vs $2.50+
per 1,000 job records (0 Credits on empty queries).
JSearch (OpenWeb Ninja) scrapes Google for Jobs aggregator cards—returning third-party redirect links (LinkedIn, ZipRecruiter, BeBee), stale closed listings, and per-request charges even when 0 jobs match. JobPostings API indexes 9.9M+ verified employer ATS postings across 434 sources with direct apply URLs, live ETag refresh, and record-based billing.
Cost per 1,000 structured ATS job records
1 Credit = 1 Returned Job Record. Empty search results (0 matches) cost 0 Credits. Crypto top-ups automatically include +5% Bonus Credits.
Side-by-side comparison.
| Capability | JobPostings API | openwebninja.com | Adzuna API | TheirStack |
|---|---|---|---|---|
| Primary data origin | 434 employer ATS & corporate career portals (+ optional global pool) | Google for Jobs aggregator SERP scrapes | Job board syndicate feed | ~175 ATS & job board crawls |
| Application URL quality (apply_url) | Direct employer ATS board URL (Greenhouse, Lever, Ashby, Workday) | Aggregator hops (ZipRecruiter, Talent.com, LinkedIn login walls) | Affiliate CPC tracking redirect | Direct URL ($200/mo minimum) |
| Billing on 0-result or empty queries | 0 Credits ($0.00) — strictly 1 Credit per returned job | Charged per HTTP request / page regardless of 0 results | Rate-limited partner quota | Consumes monthly plan quota |
| Commercial redistribution clarity | Explicit redistribution_allowed boolean + license metadata per job | Unclassified mixed SERP scrapes (high ToS risk) | Requires publisher attribution widget | Internal GTM enrichment focus |
| Entry pricing & non-expiring PAYG | $19/mo Starter · $25 never-expiring PAYG (30,000 Credits) | $25–$150/mo expiring request tiers + per-request overages | Approval-gated affiliate terms | $200/mo ($2,400/yr) |
| On-demand live ATS board ETag refresh | GET /v1/companies/{slug}/jobs?refresh=true | Not supported (waits on search-engine cache) | Not supported | Batch crawl only |
Competitor pricing verified from public pricing pages as of November 2026. Actual costs may vary based on plan tier, concurrency add-ons, and overage rates. All third-party trademarks are the property of their respective owners. JobPostings API rates: $0.199 / 1K jobs (Scale), $0.33 / 1K jobs (Pro), $0.76 / 1K jobs (Starter).
Why engineering teams switch from JSearch API.
Eliminate Dead Aggregator Redirects & Login Walls
Because JSearch scrapes Google for Jobs cards, its apply options frequently route candidates through ZipRecruiter, Talent.com, or LinkedIn walls—hurting job-board conversion and breaking AI applying agents. JobPostings API gives you canonical employer ATS URLs with link_type='direct' and redistribution_allowed=true by default.
Stop Paying for Empty Niche Queries & Pagination Misses
Request-based APIs bill your quota every time you check whether a specific company or city has open roles—even when the response array is empty. JobPostings API charges 0 Credits whenever 0 jobs are returned, and up to 100 full job records (including HTML & plain-text descriptions) per single HTTP call.
Normalized Annual USD Salaries, Skills & Real-Time Closed Feeds
Every record includes normalized salary.annual_usd_min / annual_usd_max, canonical tech skills[], work_arrangement (remote | hybrid | onsite), and dedicated /v1/feeds/new, /v1/feeds/updated, and /v1/feeds/closed endpoints so you never display zombie requisitions.
Migrate from JSearch API to JobPostings API in 2 Minutes
Replace string-concatenated Google-for-Jobs text queries with structured ATS, country, skill, and salary filters:
import requests
# Unstructured query string; bills 1-10 requests even if 0 direct employer jobs match
res = requests.get(
"https://api.openwebninja.com/jsearch/search",
headers={"x-api-key": "own_key..."},
params={"query": "Senior Python Engineer in United States", "remote_jobs_only": "true", "num_pages": 3},
)
jobs = res.json().get("data", [])import requests
# Structured filters across 434 verified ATS sources; 0 Credits if empty; up to 100 jobs/call
res = requests.get(
"https://api.jobpostingsapi.com/v1/jobs/search",
headers={"x-api-key": "jp_live_your_api_key"},
params={
"q": "Python Engineer",
"seniority": "senior",
"country": "US",
"work_arrangement": "remote",
"limit": 50,
},
timeout=20,
)
payload = res.json()
print(f"Returned {len(payload['data'])} verified ATS jobs (total={payload['meta']['total']})")Interactive Engineering Workbench · Benchmark vs JSearch API
Verify real-time latency, pagination math & JSON schema
Frequently asked questions
- Is JSearch free, and how does JobPostings API's free trial compare?
- JSearch typically limits free-tier testers to a tiny monthly request cap (often 100–200 requests/month) behind marketplace rate limits. JobPostings API grants 500 Free Credits immediately on sign-up with no credit card required, plus 0-credit free endpoints (/v1/sources, /v1/taxonomy/skills, /v1/taxonomy/locations, and /v1/tools/ats-detector).
- How much does JSearch cost vs JobPostings API at 100,000 to 1,000,000 jobs/month?
- Because JSearch returns ~10 jobs per page and charges per request/page Multiplier, pulling 100,000–1,000,000 jobs plus empty company checks costs hundreds of dollars per month with expiring quotas. On JobPostings API, Growth ($49/mo) includes 100,000 job records ($0.49/1K), Pro ($99/mo) includes 300,000 ($0.33/1K), Scale ($199/mo) includes 1,000,000 ($0.199/1K), and PAYG packs ($25 for 30,000 Credits up to $300 for 800,000 Credits) never expire.
- Why do JSearch job links often point to third-party boards instead of the employer?
- JSearch extracts whatever publisher Google for Jobs surfaces first—frequently staffing aggregators, ZipRecruiter, or LinkedIn. JobPostings API ingests directly from 434 ATS and corporate career systems (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Rippling, BambooHR) so apply_url points straight to the employer's application form.
- Can I legally republish JobPostings API jobs on my public niche job board?
- Yes. By default, /v1/jobs/search filters to redistribution_allowed=true (9.9M+ verified employer ATS and corporate career-site postings safe for commercial syndication). If you also want broader job-board coverage, pass include_attributed=true to access all 19.8M+ active listings with explicit attribution metadata.
Test it against JSearch API for free.
Every new account receives 500 free Credits immediately — no card required.