New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Scrapes LinkedIn job postings using the JobSpy library

LinkedIn Scraper

by gooseworks-ai · MIT license · ★ 1,220 on GitHub · updated Sep 21

LinkedIn Scraper cover

Scrapes LinkedIn job postings using the JobSpy library (python-jobspy). Use this skill whenever the user wants to find jobs on LinkedIn, search for open roles, pull job listings, build a job pipeline, source job targets for GTM…

---
name: linkedin-job-scraper
description: >
  Scrapes LinkedIn job postings using the JobSpy library (python-jobspy). Use this skill
  whenever the user wants to find jobs on LinkedIn, search for open roles, pull job listings,
  build a job pipeline, source job targets for GTM research, or monitor hiring signals.
  Even if the user just says "find me some jobs" or "what roles is [company] hiring for",
  use this skill. It runs a local Python script that outputs a CSV of job postings with
  title, company, location, salary, job type, description, and direct URLs.
tags: [lead-generation]
---

# LinkedIn Scraper

## Overview

This skill finds LinkedIn job postings by running `tools/jobspy_scraper.py`, a thin wrapper
around the [JobSpy](https://github.com/speedyapply/JobSpy) library. It handles installation,

Overview

This skill finds LinkedIn job postings by running tools/jobspy_scraper.py, a thin wrapper around the JobSpy library. It handles installation, parameter construction, execution, and result interpretation.

Manual install (npx, ZIP)
Claude Codenpx skills add gooseworks-ai/goose-skills --skill linkedin-job-scraper -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \ | tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/lead-generation/capabilities/linkedin-job-scraper
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/c29ea802ee7382101974/linkedin-job-scraper.zip" -OutFile "$env:TEMP\linkedin-job-scraper.zip"; Expand-Archive "$env:TEMP\linkedin-job-scraper.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md5.6 KB
  • skill.meta.json270 B
  • scripts/1 file · 3.9 KB
Read the files here
gooseworks-ai/615c6853 files
SKILL.md
Show the full text172 lines

LinkedIn Scraper

Overview

This skill finds LinkedIn job postings by running tools/jobspy_scraper.py, a thin wrapper around the JobSpy library. It handles installation, parameter construction, execution, and result interpretation.

Quick Start

Install the dependency once (requires Python 3.10+):

python3.12 -m pip install -U python-jobspy --break-system-packages

Run the scraper:

python3.12 tools/jobspy_scraper.py \
  --search "software engineer" \
  --location "San Francisco, CA" \
  --results 25 \
  --output .tmp/jobs.csv

Results are saved as CSV and printed as a summary table.


Workflow

Step 1 — Understand the request

Identify from the user's message:

  • Search term — job title, role, or keyword (required)
  • Location — city, state, or "Remote" (optional but recommended)
  • Results wanted — default to 25 if not specified
  • Recency — hours_old filter if user wants recent posts (e.g. "last 48 hours")
  • Company filter — linkedin_company_ids if targeting a specific company
  • Full descriptions — set --fetch-descriptions if user needs job description text

If anything is ambiguous (e.g. "find AI jobs"), pick reasonable defaults and tell the user what you used.

Step 2 — Construct the command

Build the tools/jobspy_scraper.py command using the parameters below. Always save output to .tmp/ so it's disposable and easy to find.

python tools/jobspy_scraper.py \
  --search "<term>" \
  --location "<location>" \
  --results <N> \
  [--hours-old <N>] \
  [--fetch-descriptions] \
  [--company-ids <id1,id2>] \
  [--job-type fulltime|parttime|contract|internship] \
  [--remote] \
  --output .tmp/<descriptive_filename>.csv

Note: --hours-old and --easy-apply cannot be used together (LinkedIn API constraint).

Step 3 — Run the script

Execute the command. The script will print a progress message and a summary of results found.

If the script is not found at tools/jobspy_scraper.py, check whether the file needs to be created by reading skills/linkedin-job-scraper/scripts/jobspy_scraper.py and copying it to tools/.

Step 4 — Interpret and present results

After the run:

  • Report how many jobs were found
  • Show a brief table: Title | Company | Location | Salary | Posted
  • Note the output file path so the user can open it
  • If 0 results: suggest broadening the search term or removing the location filter

Parameters Reference

Flag Description Default
--search Job title / keywords required
--location City, state, or country none
--results Number of results to fetch 25
--hours-old Only jobs posted within N hours none
--fetch-descriptions Fetch full job descriptions (slower) false
--company-ids Comma-separated LinkedIn company IDs none
--job-type fulltime, parttime, contract, internship any
--remote Filter for remote jobs only false
--output Path for CSV output .tmp/jobs.csv

Output Columns

The CSV output includes:

Column Description
TITLE Job title
COMPANY Employer name
LOCATION City / State / Country
IS_REMOTE True/False
JOB_TYPE fulltime, contract, etc.
DATE_POSTED When the listing was posted
MIN_AMOUNT Minimum salary
MAX_AMOUNT Maximum salary
CURRENCY Currency code
JOB_URL Direct link to the LinkedIn posting
DESCRIPTION Full job description (if --fetch-descriptions used)
JOB_LEVEL Seniority level (LinkedIn-specific)
COMPANY_INDUSTRY Industry classification

Common Use Cases

Find recent engineering roles at a startup:

python tools/jobspy_scraper.py --search "growth engineer" --location "New York" \
  --results 50 --hours-old 72 --output .tmp/growth_eng_nyc.csv

Monitor what a specific company is hiring for:

# First find the LinkedIn company ID from the company's LinkedIn URL
python tools/jobspy_scraper.py --search "engineer" --company-ids 1234567 \
  --results 100 --fetch-descriptions --output .tmp/company_hiring.csv

Find remote contract roles:

python tools/jobspy_scraper.py --search "data analyst" --remote \
  --job-type contract --results 30 --output .tmp/remote_contracts.csv

Error Handling

Error Fix
ModuleNotFoundError: jobspy Run pip install -U python-jobspy
0 results returned Broaden search term, remove location, increase --results
Rate limited / blocked Wait a few minutes; avoid running back-to-back large scrapes
hours_old and easy_apply cannot both be set Remove one of those flags

Script Location

The scraper script lives at tools/jobspy_scraper.py.

If it doesn't exist, copy it from skills/linkedin-scraper/scripts/jobspy_scraper.py to tools/:

cp skills/linkedin-job-scraper/scripts/jobspy_scraper.py tools/
1---
2name: linkedin-job-scraper
3description: >
4 Scrapes LinkedIn job postings using the JobSpy library (python-jobspy). Use this skill
5 whenever the user wants to find jobs on LinkedIn, search for open roles, pull job listings,
6 build a job pipeline, source job targets for GTM research, or monitor hiring signals.
7 Even if the user just says "find me some jobs" or "what roles is [company] hiring for",
8 use this skill. It runs a local Python script that outputs a CSV of job postings with
9 title, company, location, salary, job type, description, and direct URLs.
10tags: [lead-generation]
11---
12 
13# LinkedIn Scraper
14 
15## Overview
16 
17This skill finds LinkedIn job postings by running `tools/jobspy_scraper.py`, a thin wrapper
18around the [JobSpy](https://github.com/speedyapply/JobSpy) library. It handles installation,
19parameter construction, execution, and result interpretation.
20 
21## Quick Start
22 
23**Install the dependency once (requires Python 3.10+):**
24```bash
25python3.12 -m pip install -U python-jobspy --break-system-packages
26```
27 
28**Run the scraper:**
29```bash
30python3.12 tools/jobspy_scraper.py \
31 --search "software engineer" \
32 --location "San Francisco, CA" \
33 --results 25 \
34 --output .tmp/jobs.csv
35```
36 
37Results are saved as CSV and printed as a summary table.
38 
39---
40 
41## Workflow
42 
43### Step 1 — Understand the request
44 
45Identify from the user's message:
46- **Search term** — job title, role, or keyword (required)
47- **Location** — city, state, or "Remote" (optional but recommended)
48- **Results wanted** — default to 25 if not specified
49- **Recency** — `hours_old` filter if user wants recent posts (e.g. "last 48 hours")
50- **Company filter** — `linkedin_company_ids` if targeting a specific company
51- **Full descriptions** — set `--fetch-descriptions` if user needs job description text
52 
53If anything is ambiguous (e.g. "find AI jobs"), pick reasonable defaults and tell the user what you used.
54 
55### Step 2 — Construct the command
56 
57Build the `tools/jobspy_scraper.py` command using the parameters below.
58Always save output to `.tmp/` so it's disposable and easy to find.
59 
60```bash
61python tools/jobspy_scraper.py \
62 --search "<term>" \
63 --location "<location>" \
64 --results <N> \
65 [--hours-old <N>] \
66 [--fetch-descriptions] \
67 [--company-ids <id1,id2>] \
68 [--job-type fulltime|parttime|contract|internship] \
69 [--remote] \
70 --output .tmp/<descriptive_filename>.csv
71```
72 
73**Note:** `--hours-old` and `--easy-apply` cannot be used together (LinkedIn API constraint).
74 
75### Step 3 — Run the script
76 
77Execute the command. The script will print a progress message and a summary of results found.
78 
79If the script is not found at `tools/jobspy_scraper.py`, check whether the file needs to be created
80by reading `skills/linkedin-job-scraper/scripts/jobspy_scraper.py` and copying it to `tools/`.
81 
82### Step 4 — Interpret and present results
83 
84After the run:
85- Report how many jobs were found
86- Show a brief table: Title | Company | Location | Salary | Posted
87- Note the output file path so the user can open it
88- If 0 results: suggest broadening the search term or removing the location filter
89 
90---
91 
92## Parameters Reference
93 
94| Flag | Description | Default |
95|------|-------------|---------|
96| `--search` | Job title / keywords | required |
97| `--location` | City, state, or country | none |
98| `--results` | Number of results to fetch | 25 |
99| `--hours-old` | Only jobs posted within N hours | none |
100| `--fetch-descriptions` | Fetch full job descriptions (slower) | false |
101| `--company-ids` | Comma-separated LinkedIn company IDs | none |
102| `--job-type` | fulltime, parttime, contract, internship | any |
103| `--remote` | Filter for remote jobs only | false |
104| `--output` | Path for CSV output | .tmp/jobs.csv |
105 
106---
107 
108## Output Columns
109 
110The CSV output includes:
111 
112| Column | Description |
113|--------|-------------|
114| `TITLE` | Job title |
115| `COMPANY` | Employer name |
116| `LOCATION` | City / State / Country |
117| `IS_REMOTE` | True/False |
118| `JOB_TYPE` | fulltime, contract, etc. |
119| `DATE_POSTED` | When the listing was posted |
120| `MIN_AMOUNT` | Minimum salary |
121| `MAX_AMOUNT` | Maximum salary |
122| `CURRENCY` | Currency code |
123| `JOB_URL` | Direct link to the LinkedIn posting |
124| `DESCRIPTION` | Full job description (if --fetch-descriptions used) |
125| `JOB_LEVEL` | Seniority level (LinkedIn-specific) |
126| `COMPANY_INDUSTRY` | Industry classification |
127 
128---
129 
130## Common Use Cases
131 
132**Find recent engineering roles at a startup:**
133```bash
134python tools/jobspy_scraper.py --search "growth engineer" --location "New York" \
135 --results 50 --hours-old 72 --output .tmp/growth_eng_nyc.csv
136```
137 
138**Monitor what a specific company is hiring for:**
139```bash
140# First find the LinkedIn company ID from the company's LinkedIn URL
141python tools/jobspy_scraper.py --search "engineer" --company-ids 1234567 \
142 --results 100 --fetch-descriptions --output .tmp/company_hiring.csv
143```
144 
145**Find remote contract roles:**
146```bash
147python tools/jobspy_scraper.py --search "data analyst" --remote \
148 --job-type contract --results 30 --output .tmp/remote_contracts.csv
149```
150 
151---
152 
153## Error Handling
154 
155| Error | Fix |
156|-------|-----|
157| `ModuleNotFoundError: jobspy` | Run `pip install -U python-jobspy` |
158| 0 results returned | Broaden search term, remove location, increase `--results` |
159| Rate limited / blocked | Wait a few minutes; avoid running back-to-back large scrapes |
160| `hours_old and easy_apply cannot both be set` | Remove one of those flags |
161 
162---
163 
164## Script Location
165 
166The scraper script lives at `tools/jobspy_scraper.py`.
167 
168If it doesn't exist, copy it from `skills/linkedin-scraper/scripts/jobspy_scraper.py` to `tools/`:
169```bash
170cp skills/linkedin-job-scraper/scripts/jobspy_scraper.py tools/
171```
172 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 1,220
Checked
Source
gooseworks-ai/goose-skills ↗
Creator
gooseworks-ai · 206 listings
View creator

Made with linkedin-job-scraper

LinkedIn Scraper — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)
LinkedIn Scraper — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)

by gooseworks-ai

Similar skills

See all →
SkillExtract text, tables, metadataXberg Document Extractionxberg-io/xberg · by xberg-ioExtract text, tables, metadata, and images from 107 document formats (PDF, Office, images, HTML, email, archives, academic) using Xberg. Use when writing code that calls Xberg APIs in Python, Node.js/TypeScript, Rust, or CLI. Covers installation, extraction (sync/async), configuration (OCR, chunking, output format), batch processing, error handling, and plugins.★ 9.4k GitHub starsSkillMove code from one implementation to another functionCode migrationkucherenko/jscpd · by kucherenkoMove code from one implementation to another function by function, tests first and code second, and check two implementations of one app for parity, with jscpd --compare as the progress measure and a coverage map binding each function to its tests. Use when porting a library or app to another language or framework (Java to Kotlin, JavaScript to Rust, a Python library to TypeScript, an iOS app to Android), when asked what is left to port, or when comparing the Android and iOS versions of an app.★ 6.3k GitHub starsSkillManages Ahrefs API usage in Python using ahrefs-pythonOpenClaudia/openclaudia-skills · by OpenClaudiaManages Ahrefs API usage in Python using `ahrefs-python` library. Use when working with SEO / marketing related tasks or with data including backlinks, keywords, domain ratings, organic traffic, site audits, rank tracking, and brand monitoring. Covers `ahrefs-python` usage including AhrefsClient / AsyncAhrefsClient, typed request/response models, error handling, and all API sections.★ 705 GitHub starsMCPDocx LLM translatoradeudealfluence/adeu · by dealfluenceDocx ↔ LLM translator. Projects .docx office files to Markdown for editing. Projects edits back to OOXML as tracked changes (redlines). Python and Node.js implementations.★ 165 GitHub starsSkillCreate an Amazon-compliant white-background main imageAmazon White-Background Main Image · 亚马逊白底主图xianyu110/ecommerce-image-skills · by xianyu110Create an Amazon-compliant white-background main image (pure #FFFFFF background, product fills ≥85% of the frame, no text, props or watermark) from a product photo with GPT Image 2.5, then verify it with a Python check script. Use for Amazon/Walmart/eBay main images, 白底图, 白底主图, hero image, listing main photo.★ 92 GitHub starsMCPOfficial monorepo of SDKs, CLISendmux sdkSendmux/sendmux-sdk · by SendmuxOfficial monorepo of SDKs, CLI, and MCP servers for Sendmux email APIs across TypeScript, Python, Go, PHP, Rust, and Ruby.★ 65 GitHub stars

More from gooseworks-ai

SkillMine the highest-converting ad angles from customer reviewsAd angle minergooseworks-ai/goose-skills · by gooseworks-aiMine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.★ 1.2k GitHub starsSkillAnalyze ad campaign performance data to identify what'sAd campaign analyzergooseworks-ai/goose-skills · by gooseworks-aiAnalyze ad campaign performance data (Google, Meta, LinkedIn) to identify what's working, what's wasting budget, and specific cut/scale/test recommendations. Runs statistical analysis, funnel diagnostics, and multi-channel budget reallocation with specific dollar-amount shift recommendations and scenario modeling.★ 1.2k GitHub starsSkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzergooseworks-ai/goose-skills · by gooseworks-aiFor paid lead-gen and participant-recruitment ads, replaces vanity CPA with true CAC per qualified lead by joining ad-platform data with downstream funnel events, surfaces tracking gaps, and classifies every creative into Scale / Keep / Investigate / Cut.★ 1.2k GitHub starsSkillAnalyze the message match between your ads and landing pagesAd to landing page auditorgooseworks-ai/goose-skills · by gooseworks-aiAnalyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.★ 1.2k GitHub starsSkillCheck and improve your brand's visibility across AI searchAeogooseworks-ai/goose-skills · by gooseworks-aiCheck and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek). Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations. Uses the npx goose-aeo@latest CLI.★ 1.2k GitHub starsSkillSearch Amazon products - find items, compare pricesAmazon Product Searchgooseworks-ai/goose-skills · by gooseworks-aiSearch Amazon products - find items, compare prices, read reviews★ 1.2k GitHub stars