
ISSUE 002 · UNDER THE HOOD
If you read the short (less technical) version of this in the newsletter, you already know the shape of it: I paste a job link into Claude, and a few seconds later it’s logged, de-duplicated, and sorted in my tracker.
This is the longer version, for anyone who wants to know what happens between “paste the link” and “all set.” We’ll look at the spreadsheet structure, what Claude is doing, what n8n is doing, my Apps Scripts, the verification step, and analyze the day it all went awry. Settle in. It’s long.
The spreadsheet itself
The tracker is a Google Sheet. Google Sheets keeps version history, which matters when automations are making changes on your behalf. If something goes wrong, you can usually restore an earlier, recent version rather than rebuilding everything from memory.
My Sheet has three tabs, and each one uses a slightly different set of columns.
Active has ten columns: Role, Company, Status, Date, Link, Salary, Resume, Platform, Notes, and Interview Rounds. This is where every application lives while it’s still in motion.
·Archive has twelve columns. It carries everything Active does, plus Date Resolved and Days to Response, so I can look back and see how long it took a company to respond, if it responded at all.
A separate Changelog tab records every change to the Sheet: date, source, action, and details. The source tells me whether a row was added through the Claude and n8n workflow, moved by a nightly script, or changed manually by me. Several different processes touch this Sheet. The changelog helps me see what changed, when it changed, and what made the change.
What Claude is doing
When I paste a link into the Cowork project, Claude opens the job posting and extracts the information I track. For most job boards, it can read the page directly. LinkedIn is more complicated because much of its content is available only through a logged-in session. When Claude can’t retrieve a posting directly, it uses Claude-in-Chrome to navigate the page through my browser. That means Claude is working inside a session where I’m already signed in. I use that access selectively and pay attention to what tabs are being opened. I’m not going to lie; it’s still a little creepy to see something invisible surfing the Internet on my own machine.
Update to this section ☝: On the day this newsletter was released, Anthropic added a built-in browser to Cowork. So now, I just click a web icon in the upper right and a browser appears next to the conversation but within the Claude app. I navigate to LinkedIn and log in there. No longer is Claude using my own Chrome outside of my app. Instead, it’s using its own version sandboxed inside its own app. Which makes me feel better. I can choose to share cookies and passwords or not. This new feature has made this workflow much smoother.
Also, it’s an example of how fast things change!
Once Claude has the posting, it identifies the company, role, salary if one is listed, application platform, and other details that belong in the Sheet.
Before anything gets written, Claude checks the Link column against the jobs already in Active. That duplicate check is non-negotiable. Without it, I can send the same posting through twice because I forgot I had already added it. (I know this because its happened. More than once.)
I usually won't paste in just one link to a workflow session. I'll queue up five or six completed job applications and hand them to Claude in a batch, partly because it's faster, and partly because processing them together uses fewer tokens than running the same extraction six separate times. If you're using Claude for anything repetitive, batching like this is worth building into your habits early.
Where n8n comes in
n8n is a workflow automation platform, similar to tools such as Zapier or Make. These platforms connect applications and move data between them through a visual, step-by-step workflow. Claude decides what information belongs in the tracker. n8n is what moves that information into the right places.
I originally was using a different automation platform, but found it was too expensive. When I moved the job tracker into n8n, Claude built the first version of the workflow based on my design in the previous platform. The new process worked, but the way it kept the Active tab alphabetized introduced more risk than I understood at the time.
The original n8n workflow

The original workflow cleared and rebuilt the Active tab every time it ran.
The first version of the n8n workflow followed this sequence:
1. Read Active pulled every current row from the Active tab.
2. Clear Active Data temporarily cleared the tab.
3. Combine And Sort combined the rows it had just read with the new jobs Claude was adding, then sorted the full set alphabetically by company.
4. Write Sorted Active put the combined, sorted list back into the empty tab.
5. Build Changelog Rows created the matching changelog entries.
6. Write Changelog added those entries to the Changelog tab.
That read-clear-write pattern looks frightening in hindsight. At the time, it solved a practical problem: I wanted the Active tab to remain alphabetized after every update, but n8n didn’t have a native Sort operation in the Google Sheets node. The approach Claude built was to read the existing rows, add the new ones, sort the combined data, clear the Sheet, and write everything back. It worked without fail for a while. But it also created a moment in every run when the Active tab was empty and depended on the remaining steps to restore it correctly.
The day it broke
In mid-August, I asked Claude to make a change involving a small group of duplicate rows. Instead of making the change directly in Google Sheets, Claude attempted to modify the existing n8n workflow.
The Clear node was supposed to be narrowed to a limited range. Claude updated what appeared to be the correct range setting, but the change landed in a duplicate copy of the setting that the node did not actually use. The real range field was never changed. It still pointed to the full Sheet. When the workflow ran, Active dropped from 84 rows to one. About 320 rows in Archive kept their row structure, but most of their columns were blanked out. The step that was supposed to put the data back did not restore it correctly.
To restore the data, Claude began using n8n’s execution logs to reconstruct the spreadsheet. This took time and tokens. Once I understood the process, I pointed out that there was a faster recovery path: restore an earlier version in Google Sheets, then use the n8n logs to recover only the most recent changes. We found this fast, and nothing was permanently lost. There are now safeguards built into the workflow instructions, including to refer immediately to the most recent revisions if there is a failure and not return to retrace its steps.
Still, it happened because an AI was editing the internal settings of an automation when I requested a change to the spreadsheet. It changed a parameter path that looked correct but wasn’t, and the workflow had no way to recognize the change as unusually dangerous before it ran.
What the workflow looks like now

The current workflow updates individual records and no longer contains a Clear step.
We redesigned the workflow so it no longer clears the Sheet before rebuilding it.
The current sequence looks like this:
1. Claude triggers the workflow.
2. New Active Rows formats the new job entries so they match the Sheet’s columns.
3. Write Active Rows appends or updates each job using the Link column as the match. If the link is already present, the workflow updates that row. If it isn’t, it adds a new row at the bottom.
4. Build Changelog Rows creates the matching changelog entries.
5. Write Changelog adds those entries to the Changelog tab.
6. Read Active (Sort Check) reads the Active tab again after the new rows have been written.
7. Sort By Company sorts a copy of that fresh data alphabetically.
8. Write Sorted Active writes the sorted values back to the existing rows.
Sorting still requires a read, sort, and write. The important difference is that the workflow no longer clears a pre-set range first. The new design can still make mistakes, as no automation is immune. But removing the Clear step sharply reduces the amount of damage a single configuration error can cause.
The verification step
After the workflow runs, Claude reads the Sheet back and checks whether the expected result is there. It confirms the row count, company names, sort order, and changelog entries before telling me the run is complete.
That verification step didn’t prevent the original failure, but it did surface the problem immediately. Claude’s readback showed that the expected data was missing, so we knew something had gone wrong before I continued using or trusting the tracker.
The ordinary job-entry workflow and a change to the sheet itself should not have been treated as the same kind of task. A normal run follows a familiar path. Editing the machinery can change what that path touches, deletes, or overwrites.
Claude built the workflow, and that changed my role
Claude’s ability to build and maintain an n8n workflow made this system possible without a lot of effort on my part. I am perfectly capable of building the n8n flow, but since Claude understood the flow I wrote from the previous automation, I let it build what I assumed was a copy into n8n.
Because Claude built the workflow, I was reviewing whether it worked without dissecting every design decision inside it. The read-clear-write pattern did work, right up until a later change exposed how much risk it carried.
AI can help build the machinery, but that doesn’t remove the need for the human to understand where the risk points are located.
There is an Apps Script workflow behind the scenes
Not everything in this system needs Claude or n8n or me. The final participant in the workflow, a Google Apps Script, is its own workflow.
A nightly Google Apps Script connected to the Sheet handles ghosting and non-selection. Any Active row that has gone 30 days without an update gets moved to Archive and marked Ghosted. The Script also checks my email for any auto-rejections and moves those rows to Not Selected and Archive. Because Apps Script is specific to Google apps, everything is running in a closed environment. It runs while I sleep, checking dates instead of reading job postings. It doesn’t require an AI model because its following clear steps based on information already in the Sheet. A small script is enough. And don’t be afraid of writing the code. Claude or ChatGPT can do that for you and you’ll just follow instructions to paste it in. However, you do need to know when to ask for it, because the AI will often default to a more complex route.
This is part of designing a useful workflow: not every step needs the most advanced tool available. Claude is helpful when the work requires reading and interpretation. n8n is useful for moving and writing data consistently. The Apps Script is enough for checking a date and moving a row.
Update to the workflow: After writing this and spending even more time with the n8n workflow, I decommissioned the n8n Sort piece (n8n steps 7-8) this morning. Instead, I added a code line to the Nightly Apps Script. “Sort the Active tab along with the Archive tab every night.” This way, no data leaves, everything stays within the spreadsheet, and I’m relying on a code return instead of Claude or n8n.

Apps Script workflow as of 08/27
What I learned
Each layer of the system has a defined role. Claude reads the posting and makes judgments about the information. n8n performs the repeatable work of writing and logging. The Apps Script checks dates, moves stale applications, and sorts alphabetically by company. A final Claude readback verifies the result before anything is considered finished.
The failure happened at the seam between those roles. Claude wasn’t processing another job posting. It was changing the automation itself based on a request I’d made. That higher-risk action didn’t have the same limits or approval process as the everyday workflow.
AI won’t always take the easiest path. It will often retread previous steps instead of realizing there are more straightforward ways to make a change or correct a mistake. In this case, it defaulted to using n8n twice instead directly going to the Google Sheet for making modifications (causing the original failure) and for bringing back revisions.
As humans, we need to make sure that the workflow remains as straightforward as possible. We add AI to simplify, but that means we need to pay attention and be willing to iterate as the connected tools, models, and our processes evolve.
Flow & Function: AI in Working Order
AI Disclosure:
This newsletter uses AI for the following: design, research, initial summaries, and finding multiple sources. The final copy, writing, perspectives, and em-dashes are created by Michelle.
