Skip to content

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

JobPostings API (Growth $0.49 · Scale $0.199)$0.199 – $0.76
TheirStack & Coresignal ($200–$800/mo min)$6.50+

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.

JobPostings API compared with JSearch API, Adzuna API, and TheirStack
CapabilityJobPostings APIopenwebninja.comAdzuna APITheirStack
Primary data origin434 employer ATS & corporate career portals (+ optional global pool)Google for Jobs aggregator SERP scrapesJob 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 redirectDirect URL ($200/mo minimum)
Billing on 0-result or empty queries0 Credits ($0.00) — strictly 1 Credit per returned jobCharged per HTTP request / page regardless of 0 resultsRate-limited partner quotaConsumes monthly plan quota
Commercial redistribution clarityExplicit redistribution_allowed boolean + license metadata per jobUnclassified mixed SERP scrapes (high ToS risk)Requires publisher attribution widgetInternal 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 overagesApproval-gated affiliate terms$200/mo ($2,400/yr)
On-demand live ATS board ETag refreshGET /v1/companies/{slug}/jobs?refresh=trueNot supported (waits on search-engine cache)Not supportedBatch 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:

Before (OpenWeb Ninja JSearch /search — Per-Request Billing)
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", [])
After (JobPostings API GET /v1/jobs/search — $0.199–$0.76 / 1K Jobs, 0 Cost if Empty)
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

5,000 jobs/day
2,000 records/day
500 checks/day
HTTP Calls / Day
570
100 jobs/page batching
ATS Sources Covered
434 Sources
1 JSON schema
Empty Search Fee
0 Credits
$0.00 for 0 results
Estimated Monthly Pipeline Cost (30 Days)
$44.78/ mo at Scale rate ($74.25 at Pro rate)
Monthly consumption: 225,000 Credits (7,500 Credits/day)
JobPostings API (Scale $0.199/1K):$44.78 / mo
Legacy Enterprise Job Feeds:$1012.50 / mo
Empty search / 4xx error fee:$0.00 (0 Credits)

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.