ES
Writing / Field notes

Job-Hunt Autopilot

· Enzo Snyman

What it is

Job-Hunt Autopilot is an assisted job-application loop for a single candidate. It runs on Google Apps Script, Google Sheets, and Gemini. Each morning it sources jobs, scores how well they fit, tailors a CV and a cover letter, drafts the outreach, and tracks everything in one Sheet. A person approves each step before anything leaves the account. Nothing is auto-sent. The goal is modest and specific: help book 2-5 interviews a week.

I built it for one person's search, then packaged it so anyone can run their own copy.

What I built

The whole thing is one Apps Script file bound to a Google Sheet. Four jobs run in sequence, and a human sits between each one.

  • dailySource() pulls fresh roles from the job boards and drops them into the Sheet.
  • scoreQueue() asks Gemini to score each role's fit from 0 to 100 and routes the strong matches to an Approvals tab.
  • prepApprovedBatch() tailors a CV and cover letter for every role you approved, saves them to Drive as PDFs, and, where a contact email exists, creates a Gmail draft with the CV attached.
  • weeklyReport() drafts a short funnel summary against the 2-5 interview target.

Your part is two ticks and a read. You tick Approve on the roles worth pursuing. You review the drafts and send the ones you are happy with. Everything else stays a draft in Gmail or a file in Drive, waiting for you.

Once you install the trigger, the sourcing and scoring run on their own every morning at 06:00 Johannesburg time.

What it runs on

Sourcing uses official APIs only, with no scraping.

  • JSearch, through RapidAPI, is the main feed. It aggregates Google for Jobs, so a single call reaches roles listed on Indeed, LinkedIn, Glassdoor, and PNet.
  • Adzuna comes in through its official API as a second, independent feed.
  • Public ATS feeds from Greenhouse, Lever, Ashby, and Workable are supported too, and they are off by default.

Every link is validated the moment it arrives. Dead links are dropped before they ever reach the Sheet.

A short, honest word on coverage. The wide board reach is real, and it is worth being precise about where it comes from. JSearch aggregates Google for Jobs, and that single feed is what reaches Indeed, LinkedIn, Glassdoor, and PNet. There is no direct connection to each of those boards under the hood. One aggregated feed does the work, and I would rather say that plainly than imply four private pipelines that were never built.

Guardrails by design

The whole point is that this can run quietly and stay honest, so the guardrails are part of the design from the first line.

  • Assisted only. There is no auto-submit anywhere. Every CV, cover letter, and email is a draft until a person sends it.
  • Honest drafting. The prompts forbid inventing metrics, employers, or dates, and salary is never printed.
  • Compliant sourcing. Official APIs and public ATS feeds only, with no scraping. Portal-only roles are flagged for you to submit by hand.
  • Secrets stay out of the code. API keys live in Script Properties, never in the file you share.

Why it is here

I put this on the site because it is a clean, complete example of the kind of work the practice sells. It is small. It runs in the background without supervision. It uses no client data. It is legally clean. And it stays honest about what it does and what it leaves to a person. Quiet automation that earns its keep and tells the truth about itself is the whole idea.

Run it yourself

The template is MIT licensed and already sanitised. It ships with an example config, sample data, and no secrets. Setup takes about 30 to 40 minutes with no coding: paste one file, answer a few questions, add your CV. All three services have free tiers, so you can run the whole loop at no cost.

Download the template and run it yourself