I Built an AI Agent to Track My Job Applications. Here's What Broke — And How I Fixed It.
Every few days I'd remember to check my sent folder, scan for new applications, copy them into a spreadsheet. I'd miss things. So I built an AI agent to do it automatically. It broke in 4 different ways.
I track every job application in a spreadsheet. Company, role, date, status, notes. Simple. The problem was I was updating it manually — and inconsistently. Status changes would sit in my inbox for a week. Rejections would land in Junk and I wouldn't see them at all.
So I built an AI agent to do it for me. Every 4 hours it scans my email, checks for new applications and responses, and updates the spreadsheet automatically. It runs on a single M1 Mac with zero cloud cost. But getting it to actually work required diagnosing 4 separate failures.
The Setup
The system runs on Hermes Agent. A cron job fires every 4 hours. The agent scans Outlook Sent for new applications, scans Inbox, Junk, and Spam for responses — interview invites, rejections, offers, next steps. Searches Gmail. Reads the current spreadsheet to check what's already tracked. Adds new rows, updates status changes, and sends a Telegram summary if anything changed.
Tech: Hermes Agent · Zapier MCP · Outlook · Gmail · Google Sheets · Telegram
What Broke
Bug #1: Wrong API Path
The agent was looking for a local OAuth token file that didn't exist. It was trying to use the Google API directly instead of going through Zapier, which already had Google Sheets connected and authenticated. Every write attempt failed with "token not found."
Bug #2: Unknown Action Names
Even when the agent tried Zapier, it didn't know the exact action keys. Zapier's actions aren't guessable — the write action for creating a row has a specific name you can't infer. The agent guessed, failed, and fell back to the non-existent token file.
Bug #3: Outlook Folder IDs
The agent passed "Sent" as the folder ID. Zapier needs the actual encoded folder ID string — a long base64-like identifier. Without it, the search returned nothing and the agent thought there were no new emails.
Bug #4: Zapier Follow-Up Questions
Zapier's write actions ask follow-up questions about formatting — bold, italic, text color, background color. In an automated context, nobody answers them. The API calls timed out waiting for responses that never came.
The Fix
Four specific changes to the cron job prompt fixed all 4 bugs:
- Call
list_enabled_zapier_actionsfirst. Returns exact action keys for every connected app. No guessing. - Use
COL$A,COL$Bfor column mapping. The sheet had no header row — first row was data. Zapier read the first cell as the column name. UsingCOL$Amaps directly to spreadsheet columns. - Include all formatting params. Every write call now includes
text_format_bold: false,background_color: "#FFFFFF". No stalled follow-ups. - Expand email search to all folders. Inbox, Sent, Junk Email, and Spam. Job responses get filtered into Junk constantly.
The Result
After the fix, one manual run found several applications I'd missed — responses sitting in Junk, confirmations I'd forgotten about, status changes that never got recorded. The sheet grew by about 15 entries in one pass.
The cron now runs automatically every 4 hours. I get a Telegram ping when something changes. If nothing new, it stays silent. The spreadsheet stays current without me thinking about it.
Running on: M1 Mac · 6 AI agents · 26 automated workflows · $0/month cloud cost
Why This Matters
This isn't a demo. This is a production system using free-tier AI models, zero cloud cost, handling real email and real API calls — and recovering from errors I didn't anticipate.
Demos work when everything goes right. Infrastructure works when things break. And things always break. The skill isn't in building systems that work — it's in diagnosing why they don't and fixing them without starting over.
Open to Remote Roles
Agentic AI Engineer · MLOps · AI Solutions Architect
Based in Jamaica (EST) · Production experience from day one