This project automates job scraping and job applications on LinkedIn. It utilizes Selenium for browser automation, handles Easy Apply workflows, and applies dynamic filtering based on user-configurable criteria.
- Overview
- Project Structure
- Requirements
- Setup
- Usage
- Configuration
- Key Features
- Error Handling
- Known Issues
- Future Improvements
The LinkedIn Job Apply Automation project helps in:
- Scraping job postings from LinkedIn based on predefined roles, filters, and locations.
- Processing each job post to determine eligibility (filtering blocked companies, keywords, and experience requirements).
- Automating the Easy Apply process or logging External Apply links for manual applications.
LinkedIn-Apply-Automation/
├── config.py # Contains user settings and job search configurations
├── helpers.py # Utility functions for automation
├── Scrape.py # Script to scrape job links
├── apply_jobs.py # Automates the application process
├── Resumes/ # Directory for resumes (default and generated)
├── CSV/ # Stores job links and processed IDs
└── README.md # Project documentation
- Python 3.8 or higher
- Google Chrome Browser
- Selenium
- undetected_chromedriver
- Additional Python packages:
numpy
,requests
,pyautogui
-
Clone the repository:
git clone https://github.com/your-repo/linkedin-apply-automation.git cd linkedin-apply-automation
-
Install the required libraries:
pip install -r requirements.txt
-
Update
config.py
with your settings:- Preferred roles, experience levels, and locations.
- User-specific details like contact information and LinkedIn profile.
- Resume paths and other configurations.
-
Set up a Chrome profile:
- Modify
setup_driver()
inhelpers.py
to include your Chrome profile path.
- Modify
Run the Scrape.py
script to collect job IDs based on search criteria:
python Scrape.py
Output:
- The script saves filtered job links in
CSV/collected_links_run.csv
.
Run the apply_jobs.py
script to apply for the jobs:
python apply_jobs.py
Output:
- The script processes the jobs and automates Easy Apply applications.
- External job URLs are saved to
CSV/external_URL.csv
.
The config.py
file allows you to customize all settings:
additional_time
: Extra delay for slow networks.current_run_csv
: File path to store current job links.
query_params
: Filters for LinkedIn job search (distance, experience, etc.).roles
: Job titles to search for (e.g.,Machine Learning Intern
,Python Developer
).
BLOCKED_COMPANY_NAMES
: Companies to exclude.BLOCKED_DESCRIPTION_WORDS
: Keywords to skip job descriptions.
- Personal information, resume path, years of experience, work authorization, and salary expectations.
-
Scraping LinkedIn Jobs
- Mimics human-like scrolling and interaction to collect job listings.
- Supports pagination to fetch jobs across multiple pages.
-
Dynamic Filtering
- Filters blocked companies, keywords, unpaid internships, and high-experience roles.
-
Easy Apply Automation
- Detects and automates the Easy Apply process.
- Uploads resumes dynamically based on the job description via a webhook.
-
External Apply Logging
- Saves links for jobs that redirect to external applications.
-
Resume Customization
- Uses a webhook to fetch tailored resumes for each application.
- Network Errors: The script retries connections automatically.
- Missing Elements: If LinkedIn page structure changes, missing elements are logged and skipped.
- Duplicate IDs: Duplicate job IDs are automatically removed from CSV files.
- LinkedIn may temporarily block your account if excessive automation is detected.
Solution: Useundetected_chromedriver
and human-like delays (random_wait
). - External apply processes are logged but not automated.
- Add support for cover letter customization.
- Automate external applications where possible.
- Enhance error handling for CAPTCHA or multi-step applications.
Prakash Maheshwaran
- LinkedIn: Prakash Maheshwaran
- Portfolio: prakash.dynoxglobal.com
This tool is for personal use only. Automating applications on LinkedIn may violate their terms of service. Use responsibly.