LinkedIn Jobs Scraper — export a search to CSV
Turns a LinkedIn jobs search into a spreadsheet. It reads the job cards from the results panel — title, company, location, posting age, link — and writes them out as a CSV you can sort, filter and diff against last week’s run.
What you get
One row per posting, with the job title, company, location, how long the posting has been up, LinkedIn’s own job ID, and a direct link back to the listing. The file is written with a byte-order mark, which sounds like trivia until you open a search for a non-English market in Excel and find every accented character mangled.
The job ID is the column that earns its place. Titles get edited and companies get renamed, but the ID is stable — it’s what lets you diff one week’s export against the next and see what actually changed.
Why LinkedIn makes this harder than it looks
The results panel is a virtual DOM. There are 25 results per page, but only about seven are rendered at any moment; the rest exist in the document as list items carrying a data-job-id attribute and no text at all. Text only populates when a card scrolls into view.
The naive version of this — query the list, read the cards — returns seven rows and gives you no indication that it missed eighteen. That silent partial failure is the trap, and it’s the thing the skill exists to avoid: it finds the scrollable container, scrolls it in steps with a pause for each re-render, parses once the cards are hydrated, then pages through with the Next button and repeats.
It also strips the interface noise that sits inside each card — Promoted, Easy Apply, Dismiss, Actively reviewing applicants — so the CSV holds job data rather than a transcript of LinkedIn’s UI.
How to use it well
Filter in LinkedIn before you export, not in the spreadsheet afterwards. Date posted, location and remote status are cheap to set in the interface and tedious to reconstruct from a CSV.
Then run it weekly and keep the files. A single export is a list of jobs; a series of them is a read on the market. A posting that reappears after a month is a search that failed, which usually means either the comp is wrong or the spec is unrealistic — and both are useful things to know before you apply. A company that posts the same role repeatedly has a retention problem, not a hiring problem.
Where it falls short
It reads the rendered page, so it only sees what the results panel has loaded — scroll first if you want the full set. It is also inherently fragile: LinkedIn changes its markup regularly, and a layout change can break extraction until the skill is updated. Because it depends on specific class names and container shapes, expect to need a fix rather than expecting it to degrade gracefully.
And scraping sits against LinkedIn’s terms of service. This is for your own job search — the equivalent of copying results into a notebook by hand, faster. It is not a foundation to build a product on, and treating it as one is a good way to lose an account.