Automated job application tool — find, score, and apply to LinkedIn positions hands-free.
- Fill in your profile — target job titles, skills, resume, and location preferences
- Click Search Jobs — the scraper finds matching LinkedIn postings and scores each one
- Review results in the dashboard — each job is scored 0–100 against your resume by an LLM
- Select jobs and click Apply to Selected — an AI agent fills out and submits each application, generating a personalized cover letter and PDF resume on the fly
- Optionally configure a schedule to run searches automatically on a daily or weekly cron
Every job found by a search is saved and stays in your dashboard whether or not you ever apply to it — so the app works as a standalone job board even if you skip Easy Apply entirely.
- Status pipeline — each job starts at
pending_reviewand can be moved toapplied,rejected, orskippedmanually from the dashboard (applying/failedare set automatically when the AI agent runs) - Search + filter + sort — filter by status or workplace type (on-site/remote/hybrid), search by title/company/location, sort by score or recency
- Score at a glance — every job carries its 0–100 LLM match score, so you can triage without re-reading each posting
- Company history — the detail view shows how many times you've applied to or been rejected by that company before, and which titles
- One-click back to source — every job links back to the original LinkedIn posting
- Smart deduplication — skips jobs already in your dashboard by URL, and (if enabled) by matching company + title + location, so re-running a search doesn't flood you with the same postings; exclude keywords and companies you never want to see
| Layer | Tech |
|---|---|
| Frontend + API | Next.js 16 App Router |
| Auth | Better Auth (email + password) |
| Job queue | BullMQ + Redis |
| Database | PostgreSQL + Drizzle ORM |
| Scraper | Playwright (LinkedIn) |
| AI Agent | LLM agent + Playwright MCP |
| Observability | Langfuse (self-hosted) |
apps/
web/ Next.js frontend + API routes (port 3000)
worker/ BullMQ worker — runs scraper and AI agent
packages/
api/ tRPC routers, services, BullMQ queue definitions
db/ Drizzle schema + migrations + repository query functions
automation/ LinkedIn scraper
ai/ AI apply agent + resume PDF generator + LLM job scorer
shared/ Shared utilities and constants (used by api + worker)
Prerequisites: Docker with Compose v2.20+ (ships with Docker Desktop 4.22+)
git clone <repo-url>
cd appliedGet an API key from v0.dev/gateway (requires a Vercel account):
echo "AI_GATEWAY_API_KEY=your-key" > .envBefore exposing to the internet: also set
BETTER_AUTH_SECRET(openssl rand -base64 32) andENCRYPTION_KEY(openssl rand -hex 32) in.env.
docker compose up -dMigrations run automatically before the app starts. Everything else is pre-configured.
Go to http://localhost:3000 and create an account.
See CONTRIBUTING.md for local development setup, commands, and architecture notes.
This tool automates interactions with LinkedIn in ways that may violate their User Agreement. Use it at your own risk. The authors are not responsible for any consequences including account suspension or legal action.