This tutorial shows how to scrape LinkedIn jobs from detail-page URLs into CSV with the LinkedIn Job Details Page Scraper template for UScraper. You will prepare URLs, set the export path, run a small batch, and validate the output.
Before you start
Prerequisites for a LinkedIn job details scraper
You need UScraper installed as a local desktop app, the LinkedIn Job Details Page Scraper template, and a short list of LinkedIn job detail URLs you are allowed to process. The workflow opens detail pages; it does not discover jobs from search results.
Prepare the browser profile before you run the template. Open LinkedIn manually, complete any login or account checks, and confirm that one sample job detail page renders normally. The template does not automate login, CAPTCHA, MFA, or access challenges.
Review the current LinkedIn User Agreement, LinkedIn robots.txt, privacy rules, and your intended reuse before collecting data. For official integrations, start with the LinkedIn API documentation and Job Posting API overview.
Technical access is not permission. Keep runs modest, avoid bypassing technical controls, and treat every export as a source file that still needs policy, legal, and data-use review.
Workflow anatomy
How the LinkedIn job scraper workflow works
The JSON export is the authoritative definition of the workflow. In plain English, the path is:
Navigate URL list -> Wait for Page Load -> Sleep -> Wait for body
-> Inject JavaScript -> Structured Export -> Loop Continue
The extractor checks structured job data first, then LinkedIn detail-page selectors, then a URL-slug fallback for expired or redirected jobs.
| Workflow block | Purpose | Validation check |
|---|---|---|
| Navigate | Stores the LinkedIn job detail URL list | Replace the sample URLs with approved links. |
| Wait for Page Load and Sleep | Gives LinkedIn time to render or redirect | Increase pacing only after you inspect a slow page. |
| Wait for Element | Confirms the document body exists | A body can still be an authwall, so watch the browser. |
| Inject JavaScript | Normalizes JSON-LD, visible selectors, and URL fallback data | Empty values usually mean access, expiry, or layout drift. |
| Structured Export | Writes configured columns to CSV | Confirm file name, save folder, headers, and append mode. |
| Loop Continue | Advances to the next URL | Keep it at the end of the loop body. |
Runbook
How to scrape LinkedIn job descriptions to CSV
Import the template
Open the LinkedIn Job Details Page Scraper page, download the JSON, and import it into UScraper.
Prepare LinkedIn access
Use the browser profile that UScraper will run with. Manually complete login or verification, then confirm one job detail URL loads.
Replace the URL list
Open Navigate and paste job detail URLs from an approved search, alert, tracker, spreadsheet, or source workflow.
Set the export path
Structured Export writes linkedin_job_details_scraper_v2.csv in append mode. Change the save folder before production runs.
Run a small batch
Process two to five URLs while watching the page state. Stop if LinkedIn shows an authwall, redirect, or mostly blank rows.
Validate before scaling
Open the CSV, compare rows against live pages, remove test rows if needed, then expand the Navigate list gradually.
Append mode adds duplicate rows when you rerun the same URLs. Use a dated filename or clear the CSV before a second pass.
Output
LinkedIn jobs to CSV: export fields
No CSV sample is bundled, so use the workflow definition as the source of truth. The output is strongest when LinkedIn exposes structured job data or renders the full detail page in the current session.
linkedin_job_details_scraper_v2.csvColumn
Job_title
Title from JSON-LD, page heading, or URL fallback.
Column
Job_link
Final job URL.
Column
Company
Employer name.
Column
Company_link
LinkedIn company URL when exposed.
Column
Job_location
Location text from job metadata or page text.
Column
Post_time
Date posted or posting age.
Column
Applicant_count
Visible applicant count.
Column
Job_description
Cleaned job description.
Column
Employment_type
Full-time, contract, internship, or similar.
Column
Hiring_person
Recruiter or poster when visible.
Column
minPay
Minimum pay when available.
Column
maxPay
Maximum pay when available.
| Field group | Columns included |
|---|---|
| Core job | Job_title, Job_link, Job_location, Post_time, Applicant_count |
| Employer | Company, Company_link, Hiring_person |
| Description and taxonomy | Job_description, Industry, Employment_type, Valid_through, Seniority_level, Job_function |
| Compensation | minPay, maxPay |
Validation
Common LinkedIn job scraper issues and fixes
Run the first export with the browser and CSV side by side. Check the first row, last row, one full-description row, and one blank-heavy row.
| Symptom | Likely cause | Fix |
|---|---|---|
| Only the title or URL is populated | Authwall, redirect, expired job, or fallback extraction | Open the URL manually and confirm the detail page renders. |
Job_description is blank | Description is hidden, lazy content did not render, or the layout changed | Increase wait time slightly and rerun a short test. |
| Company fields are blank | Company link is hidden or session-specific | Inspect the page and compare with another job URL. |
| Duplicate rows appear | Append mode reran the same URLs | Clear the CSV, rename it, or dedupe by Job_link. |
| Many rows fail at once | LinkedIn throttling, HTTP 999, or account state change | Pause, reduce batch size, and complete any manual account checks. |
Reproduce with one URL, confirm the loaded page state, then decide whether the issue is access, timing, page expiry, or selector drift.
Tool choice
LinkedIn job posting API alternative: when to use each path
The official LinkedIn Job Posting API is for approved Talent Solutions posting workflows, such as posting and managing jobs from an ATS. It is not a general job-description export.
| Option | Best fit | Trade-off |
|---|---|---|
| LinkedIn Job Posting API | Approved ATS, partner, and job-posting lifecycle workflows | Correct official route for posting, not a general detail export. |
| Python, Selenium, Puppeteer, or Crawlee | Engineering-owned scrapers with tests, queues, proxies, and custom storage | Maximum control, but higher maintenance and policy risk. |
| Hosted LinkedIn jobs scraper tools | Cloud scheduling, APIs, datasets, and remote execution | Convenient at scale, but data runs through vendor infrastructure. |
| UScraper template | Supervised CSV export from a known URL list in a local desktop app | Best for reviewable batches, not unattended fleet-scale crawling. |
If engineers will maintain the parser, write code. If analysts need a visible workflow and a CSV, start with the UScraper template.
FAQ
Frequently asked questions
You can use UScraper to extract job descriptions from pages you are authorized to access, but LinkedIn terms, robots directives, privacy rules, and local laws may restrict automated collection or reuse.
Next step
Download the LinkedIn job details scraper template
Use this tutorial as the runbook and the template page as the source file. Import LinkedIn Job Details Page Scraper, test two URLs, validate the CSV, then expand only after the workflow produces clean rows. For adjacent hiring workflows, browse the template library or the UScraper blog.

