AI Job Application Automation
All projects
n8n Claude API Google Docs API Automation

AI Job Application Automation

End-to-end workflow that turns a job posting URL into a tailored application in under 60 seconds.

Role Solo Engineer
Timeline 2025

The Problem

Job searching at volume is a full-time job in itself. Each application demands the same sequence of manual steps: read the posting, identify the relevant requirements, tailor a cover letter, adjust CV framing, send, and log. Doing this properly for 10–20 applications per week means hours of repetitive work where most of the cognitive effort is low-leverage.

The core insight: the structure of a good application is consistent. Only the specific language needs to change per posting. That’s exactly the kind of task LLMs handle well.

My Approach

I designed the system around a single trigger: paste a job posting URL and let the pipeline handle everything downstream.

Key architectural decisions:

n8n as the orchestration layer. Rather than writing a custom Python scheduler, I used n8n as the workflow engine. This gives a visual pipeline I can debug and modify without touching code, while still supporting complex branching logic.

Claude API for generation, not just summarization. The prompt engineering was the core work here. Each generation call includes: the full job posting, my CV data as structured context, role-specific framing instructions, and output format constraints. The result is a document that sounds like me, not like a generic AI output.

Google Docs API for document creation. Generated content is written directly into a pre-formatted Google Doc template. The output is immediately ready to send — no copy-paste, no reformatting.

Spreadsheet as a lightweight tracker. Each application run logs the company, role, date, and document link to a Google Sheet. This gives a searchable history without needing a database.

Architecture

Trigger
  └── Job URL input (manual or from job board RSS feed)

n8n Workflow
  ├── Step 1: Scrape job posting content
  ├── Step 2: Extract structured requirements (Claude API)
  ├── Step 3: Match requirements against CV context (Claude API)
  ├── Step 4: Generate cover letter draft (Claude API)
  ├── Step 5: Create Google Doc from template (Google Docs API)
  └── Step 6: Log to tracking sheet (Google Sheets API)

Outputs
  ├── Tailored cover letter (Google Doc)
  └── Application tracker row (Google Sheet)

Impact

The pipeline reduces time per application from ~30 minutes of manual work to under 5 minutes of review and send. It scales linearly — more applications does not mean more time. The quality of outputs is consistently strong because the prompt context is structured and repeatable, not improvised each time.

This project demonstrates how I think about automation: identify the repetitive structure, design the data flow, pick the right tools for each step, and build something that actually gets used.

What I’d Do Differently

The output format is too tightly coupled to Google Docs. A better approach would be an intermediate JSON representation of the document that can be rendered to any output format (Docs, PDF, Markdown) without changing the AI step.

I’d also add a human-in-the-loop review queue from day one instead of building it as an afterthought. The 8% failure rate I was proud of still means 1 in 12 outputs needs manual review — that should have been designed into the UX, not bolted on.

Still Proud Of

The pre-classification system. Detecting company type from unstructured job text using only signal words and formatting patterns — no ML, just heuristics — and getting it accurate enough to meaningfully improve output quality was the most satisfying engineering decision in the project. Simple solutions to hard problems age well.

  • Visuals