An open-source, agentic web automation system designed to autonomously find, analyze, and apply to job postings on Applicant Tracking Systems (ATS) like Greenhouse and Lever.
It leverages Playwright for browser automation, large language models (LLMs) to map custom forms and generate dynamic cover letters, and SQLite/Redis for queue management.
- Scraper Cron (
scraper_cron.js): Bypasses job aggregators (Indeed, Glassdoor) to query top-tier tech ATS APIs directly, avoiding Cloudflare and Datadome bot protection walls. - Ingestion Worker (
ingestion_worker.js): Connects to ATS instances via residential proxies, scrapes the application form DOM schema, and passes the schema and job description to the LLM Engine. - LLM Engine (
llm_engine.js): Reads your resume and the DOM schema, then generates a precise JSON payload to answer all questions, dropdowns, and checkboxes. - Execution Worker (
worker.js): A scalable BullMQ worker that launches a Playwright Chromium instance, navigates to the application, maps the LLM's JSON payload to the DOM, uploads the resume, and submits the application.
- Node.js 18+
- SQLite3
- Redis (for BullMQ queue management)
- Playwright Chromium browsers installed
- Clone the repository.
- Run
npm installandnpx playwright install. - Create a
.envfile based on the required secrets (OpenAI API keys, proxy credentials, 2captcha keys). - Place your personal resume as
user_resume.pdfanduser_resume.txtin the root directory. - Initialize the SQLite database by running
node schema.sql(or equivalent setup script). - Start the Redis server.
- Run the components:
node api.js(Dashboard API)node ingestion_worker.js(Form parser)node worker.js(Playwright execution)
- Job Aggregator Bot Protection: The system relies on direct ATS APIs (Greenhouse/Lever) because standard aggregators (Indeed, ZipRecruiter) block the Playwright bots with Cloudflare/Datadome.
- Invisible Validation Errors: Single Page Apps (SPAs) often fail silently if a dropdown isn't clicked correctly, causing Playwright to timeout.
- Complex Custom Dropdowns: The LLM sometimes struggles to map string answers to dynamic div-based dropdowns (especially on Workday).
- CAPTCHAs: Some Greenhouse boards randomly trigger hCaptcha. The 2captcha bypass is in beta.
MIT License. See LICENSE for details.