DEV Community

Cover image for An automated assistant that fills out online job application forms for you.
Athul
Athul

Posted on

An automated assistant that fills out online job application forms for you.

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

What it does: It is an automated assistant that fills out online job application forms for you.

The problem it solves: Applying to jobs takes hours of typing the same information (name, experience, summary) over and over. This tool automates the boring typing part.

Who benefits: Job seekers who want to save time and energy during repetitive application processes.

Demo

How to see it in action: Clone the repo, set your profile in .env, and run python agent.py .

Visual confirmation: The browser opens automatically (headless=false), types the answers live on your screen, and takes screenshots before and after submitting.

Code

GitHub logo 42lv88 / Job_Apply_Agent-

Apply for job using agent

Job Apply Agent 🤖

An autonomous job application agent that combines Playwright (browser automation) with Ollama/Gemma (local LLM) to automatically fill and submit job application forms.

Architecture

┌─────────────────────────────────────────────────┐
│                  agent.py (orchestrator)         │
└────┬───────────┬──────────────┬─────────────────┘
     │           │              │
     ▼           ▼              ▼
scraper.py  llm_client.py  form_filler.py
(Playwright) (Ollama HTTP)  (Playwright)
     │           │              │
     ▼           ▼              ▼
 Job page     Gemma 2B      Fill fields
 HTML/DOM     local LLM     + submit

Project Structure

Job_Apply_Agent-/
├── agent.py           # Main orchestrator – run this
├── config.py          # Env-var configuration loader
├── scraper.py         # Playwright scraper (JD + form fields)
├── llm_client.py      # Ollama HTTP client (Gemma)
├── prompt_builder.py  # Builds LLM prompt, parses JSON response
├── form_filler.py     # Fills fields + clicks Submit
├── test_pipeline.py   # Integration test with mock HTML page
├── requirements.txt
├── setup.sh
└── .env.example

Quick Start

1. Install dependencies

bash setup.sh
Enter fullscreen mode Exit fullscreen mode

2. Configure your profile

cp .env.example .env
# Edit .env with your name, email, resume
…
Enter fullscreen mode Exit fullscreen mode

How I Built It

Core files breakdown:
agent.py: The main controller that connects everything together.
scraper.py: Looks at the webpage and finds all the text boxes and questions using Playwright.
llm_client.py: Talks to your local AI (Gemma) to figure out the best answers based on your resume.
form_filler.py: Types the answers into the form and clicks submit.

Playwright: A browser automation tool that acts like a robot hand, clicking buttons and typing into fields on web pages.

Ollama & Gemma 2B: A lightweight, open-weight AI model running locally on your computer. It reads the job description and form questions, then generates custom answers based on your profile.

Python Architecture: Built in modular pieces so the scraper, AI client, and form filler operate independently.

Why Does Open Innovation Matter?

Why Does Open Innovation Matter?

Privacy first: Your resume, phone number, and personal details stay on your own computer instead of being sent to a third-party cloud server.

No API costs: Running an open-source model locally via Ollama means you don't pay subscription fees or per-token API costs.

Total control: You can modify the code, swap out models, or adjust safety flags (DRY_RUN=true) easily without depending on closed platform rules.
Enter fullscreen mode Exit fullscreen mode

The Lazy Payoff

Time saved: Instead of spending 5 to 10 minutes filling out every single job form manually, the agent fills it out in seconds.

Safety net: With DRY_RUN=true and non-headless mode, you always stay in control to review the answers before anything gets submitted.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)