Tip
One command sets it up. python setup.py auto-detects your hardware,
installs Ollama if you don't have it, picks the right local model for
your machine, and writes your config. About 60 seconds.
git clone https://github.com/Aditya-00a/Instaply
cd Instaply/agent
python setup.py # detect HW + install Ollama + pick model
python setup.py profile --resume ~/Desktop/cv.pdf # build your profile from a PDF
python setup.py doctor # sanity-check everything
python run.py # foreground first run
# Then schedule it to run unattended (one of these)
bash scripts/setup-scheduler.sh # macOS / Linux
.\scripts\setup-scheduler.ps1 # WindowsUnder 5 minutes on a fresh laptop. Each step is opinionated and gets out of your way:
| Command | What it does |
|---|---|
python setup.py |
Detects your OS / RAM / GPU. Installs Ollama via brew / winget / curl. Picks the right local model for your hardware (3B → 70B). Writes config/.env. |
python setup.py profile |
Walks ~15 questions (identity, contact, work auth, target roles, optional EEO). Pass --resume <path> to autopopulate from a PDF / DOCX. Writes data/profile.json + data/master-resume.json. |
python setup.py doctor |
Runs 10 health checks (Python version, deps, Ollama up, model pulled, Playwright Chromium, profile valid, SQLite writable). Tells you the exact fix for any failure. |
python run.py |
Starts the autonomous loop in the foreground. Discovers, scores, tailors, drafts. Hit Ctrl-C anytime. |
setup-scheduler.{sh,ps1} |
Installs it as a scheduled task (macOS launchd / Linux cron / Windows Task Scheduler). Idempotent, has status / remove / start / stop subcommands. |
After the scheduler is in, you sleep. The loop wakes up every 30 min, discovers fresh jobs across Greenhouse / Lever / SmartRecruiters / JobSpy sources, scores them against your profile, drafts tailored applications, and queues them. You wake up to a queue of drafts ready to review and submit.
Important
Instaply runs on your laptop, with your IP, your cookies, and your local LLM. Nothing in the apply path touches an Instaply server. There is no Instaply server.
Sending hundreds of job applications by hand is broken. Most never reach a human. The few that do are filtered before anyone reads them. Existing automation tools want $30–80/month to fill a form on your behalf, and they do it from a datacenter IP that gets bot-detected within seconds.
Instaply takes the opposite shape. It's a local-first agent that runs on the machine you already own, fills out applications with your real browser, and pauses for you to solve the captcha and click submit. MIT licensed, no subscriptions, no telemetry, no servers in the loop. Free forever.
If it helps you land a role, open an issue titled "Got the job". That's the only metric that matters.
A typical day, end-to-end:
sequenceDiagram
autonumber
participant Sched as Task Scheduler
participant Agent as Autonomous Agent
participant Disc as Discovery
participant Engine as Scoring + Tailoring
participant DB as ~/.instaply/data.db
participant Browser as Your Chrome (Playwright)
participant ATS as Greenhouse / Lever / SmartRecruiters
participant You
Sched->>Agent: wake up (every N minutes)
Agent->>Disc: scan ATS pools + JobSpy sources
Disc-->>Agent: 200 fresh postings
Agent->>Engine: score against profile (39 rules + LLM fallback)
Engine-->>Agent: 12 strong matches
Agent->>Engine: tailor resume + cover letter per match
Agent->>DB: queue 12 drafts as packet_generated
Note over You,Browser: When you sit down later…
You->>DB: review the queue
You->>Browser: approve draft #3
Browser->>ATS: open + autofill 23 fields
Note over Browser,You: pauses at captcha + final Submit
You->>Browser: solve captcha and click Submit
You->>DB: mark submitted ✓
The agent never silently submits anything. The autofill engine fills ~80% of fields with deterministic rules, falls back to your local LLM for the gnarly 20%, and always stops at the captcha + the Submit button for you to verify.
| 🪐 Instaply | 💸 Paid SaaS agents | 🪟 Browser extensions | |
|---|---|---|---|
| Price | $0 · MIT | $30–80 / month | Often free, then upsell |
| Captcha | ✅ You solve, in your own browser | ❌ Bot detection often blocks | |
| Your data | ✅ Local SQLite, zero servers | ☁️ Their cloud | ☁️ Their cloud |
| Source code | ✅ MIT, on GitHub | ❌ Closed | ❌ Closed |
| Runs while you sleep | ✅ Background loop | ✅ But: cloud-side | ❌ Only when you click |
| Account required | ❌ None | ✅ Always | ✅ Usually |
| Picks the right LLM for your hardware | ✅ Setup wizard | n/a | n/a |
| Capability | How |
|---|---|
| Job discovery | Polls Greenhouse, Lever, SmartRecruiters slug pools + JobSpy aggregators (LinkedIn, Indeed, Glassdoor) on schedule |
| Scoring | 39 deterministic field rules + LLM fallback for ambiguous fits; weighted by your profile, target roles, sponsorship requirements |
| Resume tailoring | Per-job re-ranking of bullets and projects against the JD, controlled by config/resume_rules.json |
| Cover letter drafting | Local LLM, conservative prompt with the candidate's grounded experience |
| Form autofill | Playwright opens your Chrome, fills 23+ standard fields, pauses for captcha and final submit |
| Queue + audit | Local SQLite at ~/.instaply/data.db — every job, every decision, every screenshot |
| Confirmation tracking | Optional Gmail OAuth to match employer reply emails back to applications |
| Self-restart | Watchdog script keeps the loop alive across crashes and reboots |
| What | Where | Who sees it |
|---|---|---|
| Resume + extracted profile | agent/data/profile.json + master-resume.json | Only you, plus the ATS you apply to |
| Saved screening answers | agent/data/jobs.db | Only you |
| Application history + screenshots | agent/data/jobs.db + artifacts/ | Only you |
| LLM calls | Your local Ollama (default) or your own API key | You + your model provider |
|
|
agent/ # 🤖 the autonomous engine
├── run.py # ├─ the persistent discovery + apply loop
├── apply_now.py # ├─ single-job worker (called by run.py + manually)
├── setup.py # ├─ cross-platform setup wizard
├── find_wd_job.py # ├─ Workday discovery (beta)
├── jobspy_search.py # ├─ JobSpy aggregator wrapper
├── backend/ # ├─ services the loop depends on
│ ├── services/ # │ ├─ auto_apply, application_pipeline, tailor, …
│ ├── db/ # │ ├─ jobs repository
│ ├── models/ # │ ├─ pydantic schemas
│ └── prompts/ # │ └─ LLM prompt templates
├── config/ # ├─ env + design tokens + resume rules
├── data/ # ├─ company pools (your profile lives here)
└── scripts/ # └─ scheduler setup, watchdog, gmail tracker
apps/web/ # 🌐 instaply.asion.ai — landing page
.github/ # 🤖 issue templates, banner, architecture diagram
LAUNCH.md # 🚀 launch playbook (GitHub setup + announce)
Three things Instaply will never do silently — by design:
|
Solve captcha When hCaptcha or reCAPTCHA Enterprise pops up, the agent pauses and waits for you. |
Click final Submit The last button press is always your call. Always. |
Confirm landing Look for the confirmation page yourself, then mark it done so it gets logged. |
Everything else (parsing forms, filling 23+ field types, remembering your saved answers, scoring jobs, scheduling the loop, tailoring per JD) is automated.
|
|
PRs welcome for any of these. See CONTRIBUTING.md for good first issues.
Open an issue titled "Got the job" — it's the only metric that matters.
⭐ Star the repo — it's the cheapest way to help other students find this.
📄 MIT licensed. Do whatever you want with this. See LICENSE.
Built with Python, Playwright, and a complete refusal to charge anyone $30/month to fill a form.