Skip to content

bincat233/ApplyPilot-Plus

 
 

Repository files navigation

ApplyPilot-Plus is an actively maintained fork of the original open-source project ApplyPilot, created by Pickle-Pixel and first published on GitHub on February 17, 2026. This fork exists to merge useful pending changes, review community contributions, and keep the project moving.

We are not affiliated with applypilot.app, useapplypilot.com, or any other product using the "ApplyPilot" name. These sites are not associated with this repository and may misrepresent what they offer.

ApplyPilot-Plus

Applied to 1,000 jobs in 2 days. Fully autonomous. Open source.

PyPI version Python 3.11+ License: AGPL-3.0 GitHub stars ko-fi

0218.mp4

Why This Fork Exists

ApplyPilot-Plus exists to keep the project useful and moving:

  • Fix bugs and maintain compatibility as the ecosystem changes
  • Review and merge community pull requests
  • Proactively bring in valuable upstream or community PRs that remain pending
  • Maintain a practical, contributor-friendly fork for people who want to keep building on ApplyPilot

This repository aims to stay respectful to the original project while providing a place where useful improvements can actually land.


What It Does

ApplyPilot-Plus is a 6-stage autonomous job application pipeline. It discovers jobs across 5+ boards, scores them against your resume with AI, tailors your resume per job, writes cover letters, and submits applications for you. It navigates forms, uploads documents, answers screening questions, all hands-free.

Three commands. That's it.

pip install applypilot
pip install --no-deps python-jobspy && pip install pydantic tls-client requests markdownify regex
applypilot init          # one-time setup: resume, profile, preferences, API keys
applypilot doctor        # verify your setup — shows what's installed and what's missing
applypilot run           # discover > enrich > score > tailor > cover letters
applypilot run -w 4      # same but parallel (4 threads for discovery/enrichment)
applypilot apply         # autonomous browser-driven submission
applypilot apply -w 3    # parallel apply (3 Chrome instances)
applypilot apply --dry-run  # fill forms without submitting

Why two install commands? python-jobspy pins an exact numpy version in its metadata that conflicts with pip's resolver, but works fine at runtime with any modern numpy. The --no-deps flag bypasses the resolver; the second command installs jobspy's actual runtime dependencies. Everything except python-jobspy installs normally.


Two Paths

Full Pipeline (recommended)

Requires: Python 3.11+, Node.js (for npx), an LLM key (Gemini/OpenAI/Claude) or LLM_URL, Claude Code CLI, Chrome

Runs all 6 stages, from job discovery to autonomous application submission. This is the full power of ApplyPilot-Plus.

Discovery + Tailoring Only

Requires: Python 3.11+, an LLM key (Gemini/OpenAI/Claude) or LLM_URL

Runs stages 1-5: discovers jobs, scores them, tailors your resume, generates cover letters. You submit applications manually with the AI-prepared materials.


The Pipeline

Stage What Happens
1. Discover Scrapes 5 job boards (Indeed, LinkedIn, Glassdoor, ZipRecruiter, Google Jobs) + 48 Workday employer portals + 129 Greenhouse ATS employers + 31 direct career sites, including Lensa
2. Enrich Fetches full job descriptions via JSON-LD, CSS selectors, or AI-powered extraction
3. Score AI rates every job 1-10 based on your resume and preferences. Only high-fit jobs proceed
4. Tailor AI rewrites your resume per job: reorganizes, emphasizes relevant experience, adds keywords. Never fabricates
5. Cover Letter AI generates a targeted cover letter per job
6. Auto-Apply Claude Code navigates application forms, fills fields, uploads documents, answers questions, and submits

Each stage is independent. Run them all or pick what you need.


ApplyPilot vs The Alternatives

Feature ApplyPilot-Plus AIHawk Manual
Job discovery 5 boards + Workday + direct sites LinkedIn only One board at a time
AI scoring 1-10 fit score per job Basic filtering Your gut feeling
Resume tailoring Per-job AI rewrite Template-based Hours per application
Auto-apply Full form navigation + submission LinkedIn Easy Apply only Click, type, repeat
Supported sites Indeed, LinkedIn, Glassdoor, ZipRecruiter, Google Jobs, 129 Greenhouse employers, 48 Workday portals, 31 direct sites including Lensa LinkedIn Whatever you open
License AGPL-3.0 MIT N/A

Requirements

Component Required For Details
Python 3.11+ Everything Core runtime
Node.js 18+ Auto-apply Needed for npx to run Playwright MCP server
LLM credentials or local endpoint Scoring, tailoring, cover letters Set one of GEMINI_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, or LLM_URL. Optional: set LLM_MODEL (for example gemini/gemini-3.0-flash) to override the default model.
Chrome/Chromium Auto-apply Auto-detected on most systems
Claude Code CLI Auto-apply Install from claude.ai/code

Gemini API key is free. Get one at aistudio.google.com. OpenAI, Claude, and local models (Ollama/llama.cpp/vLLM) are also supported. ApplyPilot uses Gemini through LiteLLM's native Gemini provider path, and Gemini API version routing is owned by LiteLLM.

Optional

Component What It Does
CapSolver API key Solves CAPTCHAs during auto-apply (hCaptcha, reCAPTCHA, Turnstile, FunCaptcha). Without it, CAPTCHA-blocked applications just fail gracefully

Gemini Smoke Check (optional)

GEMINI_API_KEY=your_key_here pytest -m smoke -q tests/test_gemini_smoke.py

Note: python-jobspy is installed separately with --no-deps because it pins an exact numpy version in its metadata that conflicts with pip's resolver. It works fine with modern numpy at runtime.


Configuration

All generated by applypilot init:

profile.json

Your personal data in one structured file: contact info, work authorization, compensation, experience, skills, resume facts (preserved during tailoring), and EEO defaults. Powers scoring, tailoring, and form auto-fill.

searches.yaml

Job search queries, target titles, locations, boards. Run multiple searches with different parameters.

.env

API keys and runtime config: GEMINI_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, LLM_URL, optional LLM_MODEL, optional LLM_API_KEY, and CAPSOLVER_API_KEY.

For auto-apply, you can also set CHROME_PROFILE_DIRECTORY (for example Profile 1) if your logged-in Chrome session is not stored under Default.

Package configs (shipped with ApplyPilot-Plus)

  • config/employers.yaml - Workday employer registry (48 preconfigured)
  • config/sites.yaml - Direct career sites (31+), blocked sites, base URLs, manual ATS domains
  • config/searches.example.yaml - Example search configuration

How Stages Work

Discover

Queries Indeed, LinkedIn, Glassdoor, ZipRecruiter, Google Jobs via JobSpy. Fetches from 129 Greenhouse ATS employers. Scrapes 48 Workday employer portals (configurable in employers.yaml). Hits 31 direct career sites with custom extractors, including Lensa with pagination-aware extraction and extra relevance filtering. Deduplicates by URL.

For targeted debugging or source-specific refreshes, you can limit discovery to selected sites.yaml entries:

applypilot run discover --site-filter Lensa
applypilot run discover --site-filter Lensa --site-filter Dice

Enrich

Visits each job URL and extracts the full description. 3-tier cascade: JSON-LD structured data, then CSS selector patterns, then AI-powered extraction for unknown layouts.

If a site reacts poorly to headless browsing, run enrichment with a visible browser:

applypilot run enrich --show-browser

Score

AI scores every job 1-10 against your profile. 9-10 = strong match, 7-8 = good, 5-6 = moderate, 1-4 = skip. Only jobs above your threshold proceed to tailoring.

Tailor

Generates a custom resume per job: reorders experience, emphasizes relevant skills, incorporates keywords from the job description. Your resume_facts (companies, projects, metrics) are preserved exactly. The AI reorganizes but never fabricates.

Cover Letter

Writes a targeted cover letter per job referencing the specific company, role, and how your experience maps to their requirements.

Auto-Apply

Claude Code launches a Chrome instance, navigates to each application page, detects the form type, fills personal information and work history, uploads the tailored resume and cover letter, answers screening questions with AI, and submits. A live dashboard shows progress in real-time.

The Playwright MCP server is configured automatically at runtime per worker. No manual MCP setup needed.

# Utility modes (no Chrome/Claude needed)
applypilot add-url URL                 # insert or update one job manually
applypilot run enrich --reset-enrich-errors  # clear failed enrichment state
applypilot apply --mark-applied URL    # manually mark a job as applied
applypilot apply --mark-failed URL     # manually mark a job as failed
applypilot apply --reset-failed        # reset all failed jobs for retry
applypilot apply --remove-expired      # delete expired jobs from the database
applypilot apply --reset-in-progress   # clear stuck apply locks
applypilot apply --kill-chrome         # kill tracked Chrome worker processes
applypilot apply --gen --url URL       # generate prompt file for manual debugging

CLI Reference

applypilot init                         # First-time setup wizard
applypilot doctor                       # Verify setup, diagnose missing requirements
applypilot --log-level info run tailor               # Normal business progress, HTTP noise hidden
applypilot --log-level debug run tailor              # Include HTTP/SDK request details for debugging
applypilot --log-file ~/.applypilot/run.log status    # Mirror logs to a file explicitly
applypilot run [stages...]              # Run pipeline stages (or 'all')
applypilot run --workers 4              # Parallel discovery/enrichment
applypilot run --stream                 # Concurrent stages (streaming mode)
applypilot run --min-score 8            # Override score threshold
applypilot run --dry-run                # Preview without executing
applypilot run discover --site-filter Lensa  # Only run smart extract for matching sites
applypilot run enrich --show-browser    # Show browser during enrichment
applypilot run enrich --reset-enrich-errors  # Retry jobs that previously failed enrichment
applypilot run --validation lenient     # Relax validation (recommended for Gemini free tier)
applypilot run --validation strict      # Strictest validation (retries on any banned word)
applypilot add-url URL                  # Add or update a job by URL
applypilot apply                        # Launch auto-apply
applypilot apply --workers 3            # Parallel browser workers
applypilot apply --dry-run              # Fill forms without submitting
applypilot apply --continuous           # Run forever, polling for new jobs
applypilot apply --headless             # Headless browser mode
applypilot apply --remove-expired       # Remove expired jobs from the DB
applypilot apply --reset-in-progress    # Clear stale in-progress locks
applypilot apply --kill-chrome          # Kill tracked Chrome worker processes
applypilot apply --url URL              # Apply to a specific job
applypilot status                       # Pipeline statistics with per-stage progress
applypilot dashboard                    # Open HTML results dashboard

Contributing

See CONTRIBUTING.md for development setup, coding standards, and PR guidelines.

Merged upstream work and pending reviews are tracked in issue #1.


License

ApplyPilot-Plus is licensed under the GNU Affero General Public License v3.0.

You are free to use, modify, and distribute this software. If you deploy a modified version as a service, you must release your source code under the same license.

About

Actively maintained fork of ApplyPilot. Fixes bugs, reviews PRs, and merges valuable pending changes.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%