datasets/linkedin jobs
9,473,176 jobs·one-time purchase

LinkedIn Job
Dataset

9,473,176 real LinkedIn job postings from 218 regions worldwide. Complete records — full descriptions, parsed salaries, applicant counts. Query it in Postgres the day you buy.

  • Not affiliated with LinkedIn
  • Person-data stripped
  • Free sample · delivered in 24h

+36,742 last 24h · 1,749,028 still open · 611,139 companies

sample_record.json
postgresql
{
  "title": "Cheffe/Chef de projet informatique (F/H)",
  "company": "Euro Information Developpements",
  "location": "Strasbourg, Grand Est, France",
  "salary": "40,000–48,000 EUR/yr",
  "applicant_count": 117,
  "employment_type": "Full-time",
  "posted_at_precise": "2026-08-12T16:41:55Z",
  "is_active": true,
  … full description + 20 more fields
}

real row from the free sample · applicant counts tracked over time

Coverage
218 LinkedIn regions worldwide. Not remote-only, not US-only.
Depth
April 2026 to today — months of history, not years, and we say so.
Freshness
Scraped continuously; dump built fresh at purchase.
The unusual part
Applicant counts, and how they moved over time.
Not included
No personal profiles. Not now, not later.
sample · 5 of 1,000 free rows

What a row looks like.

real rows · not illustrations
titlecompanylocationapplicant_countsalary
Cheffe/Chef de projet informatique (F/H)Euro Information DéveloppementStrasbourg, France11740,000–48,000 EUR/yr
Major Gift Officer, Athletics AdvancementMerrimack CollegeNorth Andover, MA, US2785,000–100,000 USD/yr
Senior Software Engineer — FrontendGoodScoreBengaluru, Karnataka, India135
Fox Fire Center AnalystCalifornia Department of ForestrySacramento, CA, US413,861–6,276 USD/mo
Sr Business Relationship & Communications MgrMcCormick & CompanyGurugram, Haryana, India200+

The free sample is 1,000 rows drawn at random from live postings — not hand-picked. About 1 row in 10 carries a parsed salary and 1 in 12 an applicant count, in the sample and in the full dataset alike. We'd rather you find that out now than after paying.

applicant velocity

The column nobody else has.

job_applicant_history

Every posting gets re-visited continuously. Each time its applicant count moves, we write a new timestamped observation. What you end up with isn't a job board dump — it's the lifecycle of a hiring process.

  • Applicant velocity
    How fast a role fills its funnel — the roles pulling 40 applicants a day versus the ones sitting at 3.
  • Time-to-fill
    first_seen_at until is_active flips, per company and per role type.
  • Stalled requisitions
    Open for weeks, applicant count flat. A strong buying signal if you sell to recruiters.
  • Competition scoring
    For job-board products: rank a listing by how contested it actually is.

Worth being precise: the series starts accumulating from the day we began recording it, so depth grows daily rather than reaching back across the whole archive. 817,372 observations recorded so far.

psql · your connectionno credits consumed
-- Which openings are pulling applicants fastest?
-- This is the query nobody else can answer: it needs the applicant count
-- observed repeatedly over time, not a single snapshot value.

SELECT
  j.title,
  j.company,
  j.location,
  min(h.applicant_count)                                    AS started_at,
  max(h.applicant_count)                                    AS now_at,
  round(
    (max(h.applicant_count) - min(h.applicant_count))::numeric
    / (extract(epoch FROM max(h.observed_at) - min(h.observed_at)) / 86400)
  , 1)                                                      AS applicants_per_day
FROM jobs j
JOIN job_applicant_history h USING (linkedin_job_id)
WHERE j.is_active
  AND j.posted_date > now() - interval '14 days'
GROUP BY j.linkedin_job_id, j.title, j.company, j.location
HAVING count(*) > 3
ORDER BY applicants_per_day DESC
LIMIT 25;
schema · 18 field groups

Every field, and how often it's filled.

coverage measured, not estimated
fieldtypedescriptionexamplefilled
applicant_countintegerApplicants LinkedIn reported at last observation. Almost nobody else sells this.1178%
applicant_count_is_cappedbooleanTrue when LinkedIn showed a ceiling (“over 200”) instead of a number, so a flat series isn't mistaken for stalled interestfalse100%
salary_min · salary_maxnumericParsed out of the posting's own salary text40000 · 4800010%
salary_currency · salary_intervaltextCurrency code and period. 40+ currencies present, not USD-onlyEUR · yr10%
salary_rangetextThe raw salary string, kept so you can re-parse if our regex missed a locale₹1,000,000.00/yr - ₹3,000,000.00/yr10%
linkedin_job_idtext · primary keyLinkedIn's own posting id. Stable, joinable, dedupes across regions4459780495100%
titletextRole title exactly as postedJava Fullstack Developer100%
company · company_slug · company_idtext · text · integerCompany name, LinkedIn slug, and numeric company id for joinsViraaj HR Solutions · viraajhrsolutions · 3021119599%
location · regiontextLocation as posted, plus the region partition it was found in. 218 regions worldwideMumbai Metropolitan Region · Maharashtra, India100%
descriptiontextFull job body, plain text. Person-shaped contact details removedAbout The Opportunity…100%
leveltextLinkedIn's seniority label. Note: ~2 in 3 postings carry “Not Applicable” — that is LinkedIn's data, not a gap in oursMid-Senior level100%
employment_typetextFull-time · Part-time · Contract · Internship · TemporaryFull-time100%
job_function · industriestextLinkedIn's function and industry labelsEngineering and IT · Software Development99%
industry_ids · title_idinteger[] · integerLinkedIn's numeric ontology ids — the stable join keys behind the text labels[4] · 1073899%
posted_date · posted_at_precisetimestamptzWhen LinkedIn says it was posted. The precise variant is to the minute2026-08-31T08:45:35Z96%
first_seen_at · last_seen_attimestamptzWhen we first indexed it and last re-saw it. The two together are the posting's observed lifetime2026-08-31T09:20:02Z100%
is_activebooleanFlips false when a posting stops being re-seen. Time-to-fill falls out of first_seen_at → this flippingtrue100%
linkedin_url · canonical_urltextBack to the posting itselflinkedin.com/jobs/view/4459780495100%

Plus job_applicant_history as its own table — one row per observed change in a posting's applicant count, joinable on linkedin_job_id.

no etl

Connect and query. That's the integration.

postgres 16 · sslmode=require
connect
psql "postgresql://ds_a41f9c:••••@db.linkfetch.io:5432/linkfetch_public?sslmode=require"

linkfetch_public=> \dt
 Schema |         Name          | Type
--------+-----------------------+-------
 public | jobs                  | table
 public | job_applicant_history | table
 public | dataset_meta          | table
hiring signal
-- Who started hiring engineers this month, and where?
SELECT company, region, count(*) AS openings
FROM jobs
WHERE first_seen_at > now() - interval '30 days'
  AND job_function ILIKE '%Engineering%'
  AND is_active
GROUP BY company, region
HAVING count(*) >= 5
ORDER BY openings DESC;

Indexed for the obvious things — company, title, location, recency, salary floor, and full-text over descriptions — so ordinary queries stay fast without you tuning anything. Your role is read-only, with a per-session query timeout so a runaway aggregation only ever costs you your own connection.

the alternatives

Where we win, and where we don't.

checked 2026-08
LinkFetchBright DataCoresignalKaggle dumps
Pricing modelOne price — $199, the whole databasePer record (~$0.0025)CreditsFree
Minimum orderNone$250Annual contract typical
Direct SQL access to the databaseYes — a connection stringNo — files / APINo — APIStatic download
Applicant countsYesNoNoRarely
Applicant count over timeYes — observed series per postingNoNoNo
Refresh cadenceContinuous scrape, nightly replica rebuildMonthly~6 hoursStale — one-off uploads
Total coverage8M+ postings since Apr 2026Very large468M postingsVaries
Historical depthMonths — we are newer, and say soYearsYearsVaries

We are not going to out-scale Coresignal on volume or Bright Data on history, and the last two rows say so. What we have is the shape of the deal: no meter, no minimum, no integration work, and two columns of hiring signal they don't carry. Competitor details are from their public pricing as of August 2026 and change without notice — check them.

pricing · two ways to buy

One price. No meter.

dodo payments · merchant of record
start here
the databaseone-time
$199once

Every posting we've indexed, Apr 27, 2026 → Sep 22, 2026, rebuilt fresh the day you buy. Load it, keep it, own it — no subscription, no meter, no ongoing relationship.

  • 9,473,176 postings · 611,139 companies
  • Coverage Apr 27, 2026 → Sep 22, 2026
  • Postgres dump · CSV · JSONL
  • Applicant-count series included
  • Delivered within 24 hours
  • Person data stripped, verified
  • Yours permanently
live database accessmonthly
$49/month

A read-only connection string to a database that keeps updating. No credits, no per-row billing, no quota arithmetic. For when a frozen dump isn't enough.

  • Unlimited queries — genuinely
  • Rebuilt nightly from the live scrape
  • Applicant series, always current
  • Indexed for real query patterns
  • IP allowlisting available
  • Cancel any time

Need a filtered cut, an invoice, or a DPA? Talk to us. Prefer per-lookup API calls over bulk? That's the API.

faq · 8 answers

The awkward questions first.

/terms
  • What exactly do I get for $199?

    The entire database as files, built fresh the day you buy: a PostgreSQL custom-format dump (pg_restore and go), plus CSV and JSONL of the same rows for everything that isn't Postgres. Both tables ship — the jobs archive and the applicant-count time series — with a manifest stating exact row counts and the coverage window. It's a one-time purchase; the files are yours permanently.

  • And the $49/month live access?

    A read-only PostgreSQL connection string to a database holding the same data, rebuilt from the live scrape every night. Connect with psql, DBeaver, your ORM or a notebook, and query as much as you like — no credits, no per-row charges, no meter. It's the plan B for when a frozen dump isn't enough: most buyers start with the dump.

  • What is the applicant-count time series, and why does it matter?

    Every posting is re-visited continuously, and each time the applicant count changes we record the new value with a timestamp. That turns a static job board dump into lifecycle data: how fast a role accumulates applicants, which roles stall, and — combined with first_seen_at and is_active — roughly how long a posting stays open. A single-snapshot dataset cannot answer any of those questions, and as far as we know no competitor sells the series.

  • How much history is there? Be honest.

    The archive starts in late April 2026, so this is months of depth, not years. Coresignal and Bright Data have been collecting far longer and will beat us on historical reach. What we have that they don't is applicant counts, the applicant time series, flat pricing and direct SQL access. If your work needs a decade of postings, buy from them; if it needs live signal you can query without a meter running, buy from us.

  • Is there personal data in here?

    No, and there deliberately never will be. This is job and company data only. We store no LinkedIn profiles, run no fake accounts, and access nothing that isn't publicly visible. Job descriptions sometimes contain a recruiter's email or phone number, so every description is passed through a redaction step before it reaches the public database or a snapshot, and the export aborts if anything person-shaped survives the check.

  • Can I resell it?

    No. Both SKUs are licensed for your own use and analysis, including commercial use, but redistributing or reselling the dataset in whole or in substantial part is not permitted. Building a product on top of it that exposes derived results is fine. Republishing the rows themselves is not.

  • How fast is delivery?

    You get a confirmation email the moment payment clears, then a second email with the goods. Snapshots are built fresh from the current database and the download links are emailed automatically — usually within the hour, always within 24. Live access works the same way: a dedicated read-only role is provisioned and the connection string emailed. A human watches every order and steps in if anything fails.

  • Can I try before buying?

    Yes. There's a free 1,000-row sample below with the complete schema and full description bodies. No signup, no email gate — it's a static file. It is drawn at random rather than hand-picked, so its field coverage matches the real dataset.

no meter, no minimum

Take the sample first. It's free and it's the real thing.

Not affiliated with, endorsed by, or sponsored by LinkedIn. Public job postings only — no personal profile data. Figures as of 2026-09-22 18:49 UTC.