Install
openclaw skills install linkedin-jobsSearch and monitor LinkedIn job listings with city-based filters, hourly cron support, and smart deduplication. Supports 100+ global tech hubs.
openclaw skills install linkedin-jobsSearch and monitor LinkedIn job listings with powerful filters. Supports 100+ global tech hubs with precise geo IDs, hourly monitoring via cron, and smart deduplication.
After installation, optionally customize by copying config.example.json to config.json:
cp {baseDir}/config.example.json {baseDir}/config.json
Configurable options:
Use the exec tool to run a direct search:
python {baseDir}/linkedin_scraper.py --keywords "AI Engineer" --location "Bengaluru, India" --max-pages 2
Parameters:
| Parameter | Description | Example Values |
|---|---|---|
--keywords, -k | Job search keywords (required) | "AI Engineer", "Python Developer" |
--location, -l | City, country | "Noida, India", "San Francisco", "Berlin" |
--experience, -e | Experience levels | 2 (Entry), 3 (Associate), 4 (Mid-Senior) |
--remote, -r | Work arrangement | 1 (On-site), 2 (Remote), 3 (Hybrid) |
--date-posted, -d | Time filter | r86400 (24h), r604800 (1wk), r2592000 (1mo) |
--job-type, -j | Employment type | F (Full-time), P (Part-time), C (Contract) |
--max-pages, -p | Pages to scrape (25 jobs/page) | 1-5 |
Example - Entry level AI jobs in Noida, hybrid/on-site:
python {baseDir}/linkedin_scraper.py --keywords "AI Engineer" --location "Noida, India" --experience "2" --remote "1,3" --max-pages 2
When the user wants to set up recurring job searches, use these commands:
Add a new search profile:
python {baseDir}/linkedin_cron.py add --keywords "AI Engineer" --location "Bengaluru, India"
Add multiple job titles at once (comma-separated):
python {baseDir}/linkedin_cron.py add --keywords "AI Engineer, ML Engineer, Data Scientist" --location "Bengaluru, India"
This creates 3 separate profiles with the same location and filters, and deduplicates results across all of them.
Add with custom filters:
python {baseDir}/linkedin_cron.py add --keywords "Python Developer" --location "San Francisco" --experience "2" --remote "2,3"
List all search profiles:
python {baseDir}/linkedin_cron.py list
Run all enabled profiles now (for hourly cron or manual check):
python {baseDir}/linkedin_cron.py run
Run specific profile:
python {baseDir}/linkedin_cron.py run --profile ai-engineer-bengaluru
Enable/Disable a profile:
python {baseDir}/linkedin_cron.py enable --profile ai-engineer-bengaluru
python {baseDir}/linkedin_cron.py disable --profile ai-engineer-bengaluru
Remove a profile:
python {baseDir}/linkedin_cron.py remove --profile ai-engineer-bengaluru
Clear job history (to see all jobs again):
python {baseDir}/linkedin_cron.py clear-history
View statistics:
python {baseDir}/linkedin_cron.py stats
The skill has built-in geo IDs for precise location-based results:
India: Bengaluru, Noida, Hyderabad, Mumbai, Delhi NCR, Pune, Chennai, Gurugram, Kolkata, Ahmedabad, Jaipur, Chandigarh, Kochi, Coimbatore, Indore, Lucknow
USA: San Francisco, New York, Seattle, Austin, Boston, Los Angeles, Chicago, Denver, San Diego, Washington DC, Atlanta, Dallas, Houston, Phoenix, Miami, Portland
UK: London, Manchester, Edinburgh, Cambridge, Oxford, Bristol, Birmingham, Leeds, Glasgow
Europe: Berlin, Amsterdam, Dublin, Paris, Munich, Zurich, Stockholm, Barcelona, Madrid, Milan, Vienna, Prague, Warsaw, Brussels, Copenhagen
Asia Pacific: Singapore, Sydney, Melbourne, Tokyo, Hong Kong, Seoul, Taipei, Kuala Lumpur, Jakarta, Bangkok, Shanghai, Beijing
Canada: Toronto, Vancouver, Montreal, Ottawa, Calgary, Waterloo
Middle East: Dubai, Abu Dhabi, Riyadh, Tel Aviv, Doha
Latin America: Sao Paulo, Mexico City, Buenos Aires, Bogota, Santiago
Africa: Johannesburg, Cape Town, Lagos, Nairobi, Cairo
For unlisted cities, the skill falls back to text-based search. You can also add custom geo IDs in config.json.
The scraper returns JSON with job details including:
When presenting new jobs to the user, format them clearly:
Found X new jobs for "[keywords]":
━━━ [Location] ━━━
1. [Title] @ [Company]
📍 [Location] ([Remote/Hybrid/On-site])
💼 [Employment Type] | [Experience Level]
🕐 Posted [time ago]
📋 Requirements:
• Experience: [requirements]
• Tech Stack: [tech_stack]
• Role: [role_summary]
🔗 [url]
| User Says | Action |
|---|---|
| "Search LinkedIn for X jobs in Y" | Run one-time search with linkedin_scraper.py |
| "Monitor LinkedIn for X jobs" | Add profile with linkedin_cron.py add |
| "Add X jobs in Y to my searches" | Add profile with linkedin_cron.py add |
| "Search for AI Engineer, ML Engineer, Data Scientist in Bengaluru" | Add multiple profiles with comma-separated keywords |
| "Monitor these roles: X, Y, Z in location" | Add multiple profiles at once |
| "Stop searching for X" | Disable or remove profile |
| "Show my job searches" | Run linkedin_cron.py list |
| "Check for new jobs" | Run linkedin_cron.py run |
| "Clear job history" | Run linkedin_cron.py clear-history |
When the user doesn't specify filters, use these defaults (configurable in config.json):
Experience Levels (--experience):
Job Types (--job-type):
Remote Options (--remote):
Date Posted (--date-posted):
Once you've configured your search profiles, you can ask the agent to set up automated monitoring:
The agent will configure the appropriate cron schedule in OpenClaw based on your preference.