What this API does and who it is for
The LinkedIn Job Search API, operated by Fantastic.jobs, aggregates publicly available LinkedIn job posting data into a queryable database refreshed every hour. The dataset covers jobs from more than 100 countries, indexes over 20,000 listings per hour, and applies AI enrichment to extract structured details from free-text descriptions on non-agency postings. The API is explicitly not an official LinkedIn product — no member profile pages are scraped, only public job postings.
The target audience is developers building job aggregation platforms, applicant tracking system (ATS) integrations, recruitment analytics dashboards, or any product that needs a broad, up-to-date snapshot of active LinkedIn job postings. With nearly 12,700 marketplace subscribers and a popularity score of 9.9 out of 10, it is among the most adopted job data APIs currently available.
Endpoint walkthrough
The API exposes five endpoints, each representing a different time window into the job database:
- GET /active-jb-1h — Jobs indexed in the last hour, but with a one-to-two hour processing delay. If a job is posted at 06:00 UTC, expect it to appear between 07:00 and 08:00 UTC. This is the "firehose" endpoint, suited to pipelines that poll every hour for the freshest data.
- GET /active-jb-24h — All jobs indexed within the past 24 hours. Suitable for daily polling cadences.
- GET /active-jb-7d — Active jobs indexed over the past seven days. Good for weekly data pulls.
- GET /active-jb-6m — Active LinkedIn jobs posted within the last six months. Unlike the shorter windows, this endpoint returns up to 500 jobs per request (all others cap at 100) and refreshes every minute with a ~45-minute enrichment delay. Expired jobs are purged hourly, checked once per day. Note that
description_filteris not supported on this endpoint. - GET /active-jb-expired — Available on Ultra and Mega plans only. Returns an array of job IDs flagged as expired the previous day (typically 300,000+ IDs per update). Importantly, this endpoint does not consume Jobs credits.
All endpoints support an offset parameter for pagination, so you can page through large result sets beyond a single 100- or 500-job response.
One known limitation as of early 2026: the external_apply_url field is currently returning empty. The provider has flagged this and is working on a resolution, but developers who need direct apply links should factor this into their evaluation.
Credit system and rate tracking
The API uses a dual-credit model:
- Jobs credits — decremented by the number of jobs returned in each response, not the number of requests.
- Request credits — decremented by one per API call, regardless of result size.
The design intent is that Jobs credits will be exhausted before Request credits, which makes sense for most polling strategies where you're pulling the maximum allowed jobs per call. Every response includes headers that show your remaining balances and seconds until the monthly reset:
x-ratelimit-jobs-limit: 200000
x-ratelimit-jobs-remaining: 199234
x-ratelimit-requests-limit: 25000
x-ratelimit-requests-remaining: 24975
x-ratelimit-jobs-reset: 2505077
This makes it straightforward to build adaptive polling logic that slows down as credits approach their limits.
Filters and search syntax
The API's filter system is one of its more capable aspects. title_filter supports Google-style query syntax: bare keywords (AND logic by default), quoted phrases, OR operators, and negation with a minus prefix. A separate advanced_title_filter adds support for parenthesis grouping, prefix wildcards (:*), and the <-> followed-by operator for proximity matching — useful for patterns like Project <-> Manag:* to match "Project Manager" and "Project Management" simultaneously.
The same syntax applies to location_filter. The provider recommends using full country names ("United States" rather than "US") and full city names with regional context for UK cities (e.g., "Birmingham, England, United Kingdom").
Additional filters include:
- description_filter — full-text search on job descriptions; works on 24h and hourly endpoints but is risky on 7d (timeout risk) and unavailable on 6m.
- organization_description_filter and organization_specialties_filter — search within company-level LinkedIn metadata; both unavailable on 6m.
- organization_slug_filter — exact-match filter on one or more company slugs, comma-delimited without spaces.
- type_filter — accepts
FULL_TIME,PART_TIME,CONTRACTOR,INTERN,TEMPORARY,VOLUNTEER,OTHER; comma-delimited. - industry_filter — case-sensitive exact match on LinkedIn's industry taxonomy; supports comma-delimited lists and double-quoting for industries containing commas.
- seniority_filter — filter by seniority level (documentation truncated, but the filter exists).
Pricing breakdown
| Plan | Monthly cost | Requests | Jobs | Rate limit |
|---|---|---|---|---|
| Basic | $0 | 25 | 250 | — |
| Pro | $45 | 5,000 | 10,000 | 5 req/sec |
| Ultra | $95 | 10,000 | 20,000 | 15 req/sec |
| Mega | $175 | 25,000 | 50,000 | 25 req/sec |
The Basic tier is effectively a trial — 25 requests returning at most 250 jobs total is barely enough to evaluate the response schema and filter behavior. It is not viable for production use.
Pro at $45/month gives 10,000 jobs per month. If you're pulling 100 jobs per call daily across a narrow job category, this is workable. For a broad job board that wants coverage across many titles and geographies, the math turns unfavorable quickly.
Ultra (the provider's recommended tier at $95/month) doubles the job allowance to 20,000 and notably adds access to the Expired Jobs endpoint, which is valuable for platforms that need to remove stale listings without polling each job individually. The 15 req/sec rate limit also allows for faster burst pulls.
Mega at $175/month is aimed at high-volume pipelines: 50,000 jobs and 25,000 requests per month. For requirements beyond 200,000 jobs per month, the provider invites direct contact at [email protected].
Practical use cases
Job aggregation platforms are the obvious fit. The hourly and 24h endpoints allow near-real-time feeds, while the 6m endpoint provides a historical snapshot for launch or backfill.
Recruitment analytics teams can combine industry_filter, location_filter, and seniority_filter to track demand trends for specific roles across geographies over time.
Company research tools can use organization_slug_filter alongside the company metadata fields (industry, follower count, specialties, description) to enrich company profiles with their hiring activity.
Things to verify before integrating
- Duplicate handling: The API deduplicates by URL, but organizations sometimes post the same role in multiple cities, creating logical duplicates. Plan for deduplication on
title + organizationortitle + organization + locationon your end. - Reposted jobs: The time-window endpoints return jobs indexed in that window, not necessarily posted within it. Use the
date_filterparameter if you need strict control overdate_postedvalues. - external_apply_url: Currently unavailable. Do not build any apply flow dependency on this field until the provider resolves the issue.
- Average latency sits at around 971 ms. For synchronous user-facing queries, this is worth accounting for; for background polling jobs, it is largely irrelevant.
- Success rate of 98% is solid but means roughly 1 in 50 requests may fail; implement retries.
Getting started
The API is available through RapidAPI. Subscribe to the Basic plan to test the response structure and filter syntax at no cost. For polling strategy, the provider recommends scheduling calls at fixed intervals aligned with the endpoint's time window — same time daily for 24h, same time weekly for 7d, same time hourly for 1h — to avoid pulling duplicate records across sessions. Combine multiple filter conditions in a single call wherever possible; the OR syntax in location_filter lets you cover several markets without burning additional request credits.