LinkedIn Jobs
by @yashsuman15
Search and monitor LinkedIn job listings with city-based filters, hourly cron support, and smart deduplication. Supports 100+ global tech hubs.
clawhub install linkedin-jobsπ About This Skill
name: linkedin_jobs description: Search and monitor LinkedIn job listings with city-based filters, hourly cron support, and smart deduplication. Supports 100+ global tech hubs. metadata: { "openclaw": { "requires": { "bins": ["python"] }, "emoji": "πΌ", "homepage": "https://clawhub.ai/skills/linkedin-jobs", "install": [{ "id": "pip", "kind": "pip", "packages": ["requests", "beautifulsoup4"], "label": "Install Python dependencies" }] }, "clawhub": { "version": "1.0.0", "license": "MIT", "tags": ["jobs", "linkedin", "scraping", "career", "automation", "cron"], "category": "productivity" } } user-invocable: true
LinkedIn Job Search Skill
Search and monitor LinkedIn job listings with powerful filters. Supports 100+ global tech hubs with precise geo IDs, hourly monitoring via cron, and smart deduplication.
Configuration
After installation, optionally customize by copying config.example.json to config.json:
cp {baseDir}/config.example.json {baseDir}/config.json
Configurable options:
Capabilities
1. One-time search: Search LinkedIn for jobs matching keywords and filters 2. Scheduled monitoring: Add search profiles that run hourly via cron 3. Smart deduplication: Only shows new jobs you haven't seen before 4. Global city support: 100+ tech hubs with precise geo IDs
How to Use
One-Time Job Search
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
Managing Search Profiles (for Hourly Monitoring)
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
Supported Cities (100+ Global Tech Hubs)
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.
Output Format
The scraper returns JSON with job details including:
Formatting Job Notifications
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 Intent Mapping
| 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 |
Default Filters
When the user doesn't specify filters, use these defaults (configurable in config.json):
Filter Code Reference
Experience Levels (--experience):
Job Types (--job-type):
Remote Options (--remote):
Date Posted (--date-posted):
Cron Setup (Optional)
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.
βοΈ Configuration
After installation, optionally customize by copying config.example.json to config.json:
cp {baseDir}/config.example.json {baseDir}/config.json
Configurable options: