create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
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
$ npx -y skills add gooseworks-ai/goose-skills --skill linkedin-job-scraper --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/linkedin-job-scraperContext preview
The summary Claude sees to decide when to auto-load this skill.
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
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]
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, parameter construction, execution, and result interpretation.
**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.
---
Identify from the user's message:
If anything is ambiguous (e.g. "find AI jobs"), pick reasonable defaults and tell the user what you used.
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).
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/`.
After the run:
---
| 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 |
---
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 |
---
**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 | 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 |
---
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/
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.