Inspiration

Job hunting today feels like a full-time job.

Even highly qualified engineers spend hours searching, filtering, filling out repetitive forms, re-uploading resumes, handling OTP logins, and tracking statuses manually. The process is slow, repetitive, and emotionally draining.

We asked:

If AI can generate code, analyze data, and automate workflows — why are we still manually clicking “Apply”?

That question led to Applaid — an autonomous job application agent that doesn’t just recommend jobs, but executes the full application pipeline.

What it does

Applaid automates the entire job application lifecycle: 1. Ingests your resume and job preferences 2. Discovers new matching roles hourly 3. Scores and ranks jobs automatically 4. Applies via browser automation 5. Handles OTP verification using Gmail 6. Parses confirmation/rejection emails 7. Tracks everything in a live dashboard

Instead of: Search → Apply → Track (manual) Applaid creates: Discover → Score → Apply → Verify → Track → Optimize It turns job hunting into a closed-loop automation system.

How we built it

Applaid is a cron-scheduled, stateful system deployed on Render.

Core Stack • Tavily → Job discovery and relevance scoring • Yutori MCP → Cloud browser automation for auto-apply • Gmail MCP → OTP extraction + status parsing • Postgres → Persistent state management • Render Cron → Hourly automation • Airbyte → Email/job data syncing

Matching Model

We modeled job fit using a scoring function:

Score(job) = \alpha \cdot skill_match + \beta \cdot location_fit + \gamma \cdot salary_fit

Jobs are queued automatically when:

Score(job) > 0.8

This prevents blind mass-application and keeps targeting intentional.

State Machine

Every application follows a structured lifecycle: QUEUED → PREFILLED → SUBMITTED → NEEDS_OTP → CONFIRMED / REJECTED This ensures reliability, retries, and visibility.

Challenges we ran into

  1. Anti-bot protections

Many job sites detect automation. We implemented: • Rate limiting • Domain-level throttling • Optional human-approval mode

  1. OTP handling

Extracting verification codes from email required: • Regex-based parsing • Matching email events to active tasks • Managing timing between browser and inbox polling

  1. Deduplication

The same job can appear across multiple sources. We solved this using canonical URL hashing and database constraints.

  1. Maintaining consistent state

Distributed automation can fail mid-process. We built structured logs and retry policies to maintain state integrity.

Accomplishments that we're proud of

• Built a fully autonomous, closed-loop job application system
• Integrated multiple MCP-based tools into a single orchestrated pipeline
• Designed a persistent state machine instead of one-off scripts
• Created an hourly cron-driven automation engine
• Demonstrated end-to-end flow: discovery → apply → confirmation → tracking

Most importantly:

We turned job applications into infrastructure.

What we learned

Automation is more about orchestration than scripting
• State management is harder than automation itself
• Email parsing is surprisingly complex
• Cron-based systems require observability and safeguards
• Modular MCP integrations dramatically accelerate development

We also learned that execution speed matters — but targeted execution matters more.

What's next for Applaid

Built With

  • airbyte
  • tavily
  • yutori
Share this project:

Updates