Status: Beta 🚧
An automated TypeScript bot that streamlines the LinkedIn Easy Apply process using Puppeteer for browser automation. This tool automatically fills out job application forms and manages the application workflow.
This bot automates the repetitive task of applying to LinkedIn jobs through the Easy Apply feature. It navigates LinkedIn's job search interface, filters relevant positions, and automatically completes application forms using predefined user data and intelligent form-filling algorithms.
Key Technical Features:
- Browser automation with Puppeteer
- Multi-page form handling
- Intelligent field detection and filling
- Database integration for application tracking
- AI-powered form completion (optional)
- Sequential job processing with error recovery
- Node.js 16+
- PostgreSQL database
- LinkedIn account
- OpenAI API key (optional, for AI features)
- Clone the repository
git clone https://github.com/your-username/linkedin-easy-apply-bot.git
cd linkedin-easy-apply-bot- Install dependencies
npm install- Database setup
# Create PostgreSQL database
createdb linkedin_bot
# Run migrations
npx prisma migrate dev
npx prisma generate- Environment configuration
# Copy environment template
cp .env.example .env
# Edit .env with your database credentials- Bot configuration
# Copy configuration template
cp config.example.ts config.ts
# Edit config.ts with your personal informationDATABASE_URL="postgresql://user:password@localhost:5432/linkedin_bot"
LINKEDIN_EMAIL=your-email@example.com
LINKEDIN_PASSWORD=your-password
OPENAI_API_KEY=your-openai-key (optional)
LIMIT=10
HEADLESS_MODE=falseexport const config = {
LINKEDIN_EMAIL: "your-email@example.com",
LINKEDIN_PASSWORD: "your-password",
PHONE: "+1234567890",
HOME_CITY: "Your City, Country",
CV_PATH: "/path/to/your/resume.pdf",
COVER_LETTER_PATH: "/path/to/your/cover-letter.pdf",
// Job search parameters
KEYWORDS: "javascript developer",
LOCATION: "Spain",
WORKPLACE: {
REMOTE: true,
ON_SITE: true,
HYBRID: true
},
// Form filling configurations
YEARS_OF_EXPERIENCE: {
"javascript": "5",
"react": "3"
},
BOOLEANS: {
"visa.*sponsor": false,
"authorized.*work": true
},
// Additional configurations...
};npm run startnpm run start SUBMIT- Space: Pause/Resume execution
- Ctrl+C: Stop bot gracefully
scripts/apply.ts: Main execution script and orchestrationapply/: Core application logic and form submissionapply-form/: Form filling modules (text, boolean, multiple choice)fetch/: Job discovery and filtering logiclogin/: LinkedIn authentication handlingselectors/: CSS selectors for LinkedIn elementsutils/: Database, keyboard handling, and utility functions
The bot uses a multi-layered approach for form completion:
- Configuration matching: Regex-based field identification
- AI completion: OpenAI integration for complex fields
- Default values: Intelligent fallbacks for unmatched fields
- Field verification: Pre-filling validation to avoid duplicates
- Sequential job processing to avoid rate limiting
- Automatic retry logic for failed applications
- Database logging for application tracking
- Graceful error recovery and resource cleanup
Known limitations:
- LinkedIn UI changes may break selectors
- Rate limiting may occur with high-volume usage
- Some form types may not be fully supported
- Browser detection mechanisms may interfere
Recommended usage:
- Test thoroughly before production use
- Monitor execution and adjust selectors as needed
- Use reasonable application limits
- Respect LinkedIn's terms of service
Important: This tool is for educational and personal use only.
- Comply with LinkedIn's Terms of Service
- Use responsibly to avoid account limitations
- Apply only to relevant positions
- Respect company application processes
- Do not use for spam or mass applications
Contributions are welcome! This project benefits from community collaboration.
How to contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/improvement) - Commit your changes (
git commit -m 'Add improvement') - Push to the branch (
git push origin feature/improvement) - Open a Pull Request
Areas needing contribution:
- LinkedIn selector updates
- Form filling improvements
- Error handling enhancements
- Documentation improvements
- Testing and validation
Found a bug or need help? Please open an issue:
- Bug reports: Include error logs and configuration details
- Feature requests: Describe the use case and expected behavior
- Questions: Check existing issues before posting
Created and supervised by: [Your Name]
This project was developed to automate repetitive job application tasks while maintaining quality and relevance in the application process.
This project is licensed under the MIT License - see the LICENSE file for details.
The use of this bot is at your own risk. The developers are not responsible for:
- LinkedIn account suspensions or limitations
- Violations of terms of service
- Consequences of misuse
Use this tool ethically and responsibly.