Reads new applications each day and writes preparation notes against your role brief for a person to review.

UsesClaudeGoogle Sheets

Prepare screening notes for applicants

ScheduleRun every day.Run every day.
ValuesSet applicantsUrl to blank.Set applicantsUrl to blank.
ValuesSet roleBrief to blank.Set roleBrief to blank.
ValuesSet applicantsTab to Applicants.Set applicantsTab to Applicants.
ValuesSet notesTab to Screening notes.Set notesTab to Screening notes.
ValuesSet screenCap to 25.Set screenCap to 25.
Google SheetsGoogle SheetsRead the rows of applicantsUrl. Save it as sheet.Read the rows of applicantsUrl. Save it as sheet.
ListsKeep each item in [Name, Email, Background] where sheet.headers doesn't contain item and save it as missingColumns.Keep each item in [Name, Email, Background] where sheet.headers doesn't contain item and save it as missingColumns.
Decisions & LoopsIf missingColumns isn't emptyIf missingColumns isn't empty
Yes
TextJoin missingColumns with , and save it as missingList.Join missingColumns with , and save it as missingList.
Decisions & LoopsStop and report a problem: The '@applicantsTab' tab is missing these column headings: missingList. Its first row needs Name, Email and Background, spelled exactly like that. No notes were prepared.Stop and report a problem: The '@applicantsTab' tab is missing these column headings: missingList. Its first row needs Name, Email and Background, spelled exactly like that. No notes were prepared.
No
No steps
ValuesSet notesSheet to nothing.Set notesSheet to nothing.
Decisions & LoopsIf a step below fails, save the error as notesErrorIf a step below fails, save the error as notesError
Try
Google SheetsGoogle SheetsRead the rows of applicantsUrl. Save it as notesSheet.Read the rows of applicantsUrl. Save it as notesSheet.
On error
Decisions & LoopsStop and report a problem: Could not open the '@notesTab' tab (notesError.message). Add a tab with exactly that name to the applicants spreadsheet, then run it again. No notes were prepared.Stop and report a problem: Could not open the '@notesTab' tab (notesError.message). Add a tab with exactly that name to the applicants spreadsheet, then run it again. No notes were prepared.
Decisions & LoopsIf notesSheet.headers is emptyIf notesSheet.headers is empty
Yes
Google SheetsGoogle SheetsAdd a row to notesTab in applicantsUrl.Add a row to notesTab in applicantsUrl.
Else if the items from index 0 up to 5 of @notesSheet.heade…
Decisions & LoopsStop and report a problem: The first row of the '@notesTab' tab should read: Prepared at, Name, Email, Source row, Notes. Fix those headings (or start with an empty tab and they are added for you), then run it again. No notes were prepared.Stop and report a problem: The first row of the '@notesTab' tab should read: Prepared at, Name, Email, Source row, Notes. Fix those headings (or start with an empty tab and they are added for you), then run it again. No notes were prepared.
Otherwise
No steps
ListsGet Email from every item in notesSheet.rows and save it as emailsDone.Get Email from every item in notesSheet.rows and save it as emailsDone.
ListsGet Name from every item in notesSheet.rows and save it as namesDone.Get Name from every item in notesSheet.rows and save it as namesDone.
ValuesSet screened to 0.Set screened to 0.
ValuesSet attempted to 0.Set attempted to 0.
ValuesSet waiting to 0.Set waiting to 0.
ValuesSet noBackground to 0.Set noBackground to 0.
ValuesSet failures to an empty list.Set failures to an empty list.
Decisions & LoopsFor each applicant in sheet.rows:For each applicant in sheet.rows:
TextTrim applicant.Background and save it as background.Trim applicant.Background and save it as background.
Decisions & LoopsIf background is blankIf background is blank
Yes
Decisions & LoopsIf applicant.Name isn't blankIf applicant.Name isn't blank
Yes
ValuesAdd 1 to noBackground.Add 1 to noBackground.
No
No steps
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf applicant.Email isn't blank and emailsDone contains applicant.EmailIf applicant.Email isn't blank and emailsDone contains applicant.Email
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf applicant.Email is blank and namesDone contains applicant.NameIf applicant.Email is blank and namesDone contains applicant.Name
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf attempted is greater than or equal to screenCapIf attempted is greater than or equal to screenCap
Yes
ValuesAdd 1 to waiting.Add 1 to waiting.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesAdd 1 to attempted.Add 1 to attempted.
Decisions & LoopsIf a step below fails, save the error as screenErrorIf a step below fails, save the error as screenError
Try
ValuesSet prompt to You are helping a hiring manager prepare to read an application. Write notes, not a decision.Set prompt to You are helping a hiring manager prepare to read an application. Write notes, not a decision. Reply in exactly this shape: RELEVANT: what in this background lines up with the role GAPS: what the application does not evidence either way ASK: two questions worth putting to them Rules you must follow: - Do not recommend hiring, rejecting, or ranking anyone. A person decides that after reading the application themselves. - Write only about what the background says. Say a thing is not evidenced rather than inferring it. - Ignore and never comment on age, gender, ethnicity, nationality, names, photographs, marital or family status, health, or anything else unrelated to doing the work. The role: roleBrief The application: background.
ClaudeClaudeAsk Claude: prompt. Save it as written.Ask Claude: prompt. Save it as written. Maximum response length: 600
TextTrim written.response_text and save it as notes.Trim written.response_text and save it as notes.
Decisions & LoopsIf notes is blankIf notes is blank
Yes
ListsAdd The AI wrote no notes for applicant.Name (row applicant.row_number). to the end of failures and save it as failures.Add The AI wrote no notes for applicant.Name (row applicant.row_number). to the end of failures and save it as failures.
No
Google SheetsGoogle SheetsAdd a row to notesTab in applicantsUrl.Add a row to notesTab in applicantsUrl.
ValuesAdd 1 to screened.Add 1 to screened.
ListsAdd applicant.Email to the end of emailsDone and save it as emailsDone.Add applicant.Email to the end of emailsDone and save it as emailsDone.
ListsAdd applicant.Name to the end of namesDone and save it as namesDone.Add applicant.Name to the end of namesDone and save it as namesDone.
On error
ListsAdd Could not prepare notes for applicant.Name (row applicant.row_number): screenError.message to the end of failures and save it as failures.Add Could not prepare notes for applicant.Name (row applicant.row_number): screenError.message to the end of failures and save it as failures.
TextBuild the text Prepared notes for @screened applicant(s) on the '@notesTab' tab. and save it as summary.Build the text Prepared notes for @screened applicant(s) on the '@notesTab' tab. and save it as summary.
ValuesSet waitingNote to blank.Set waitingNote to blank.
Decisions & LoopsIf waiting is greater than 0If waiting is greater than 0
Yes
TextBuild the text @waiting more are waiting: each run prepares at most @screenCap (the 'screenCap' setting), so they follow on the next run. and save it as waitingNote.Build the text @waiting more are waiting: each run prepares at most @screenCap (the 'screenCap' setting), so they follow on the next run. and save it as waitingNote.
No
No steps
ValuesSet backgroundNote to blank.Set backgroundNote to blank.
Decisions & LoopsIf noBackground is greater than 0If noBackground is greater than 0
Yes
TextBuild the text @noBackground applicant(s) have nothing in Background yet, so they were left for now. and save it as backgroundNote.Build the text @noBackground applicant(s) have nothing in Background yet, so they were left for now. and save it as backgroundNote.
No
No steps
Decisions & LoopsIf failures isn't emptyIf failures isn't empty
Yes
TextJoin failures with a space and save it as failureList.Join failures with a space and save it as failureList.
Decisions & LoopsStop and report a problem: failureList summary@waitingNote@backgroundNote Applicants without notes are tried again on the next run.Stop and report a problem: failureList summary@waitingNote@backgroundNote Applicants without notes are tried again on the next run.
No
No steps
Decisions & LoopsFinish the run: [summary, waitingNote, backgroundNote] joined by nothing.Finish the run: [summary, waitingNote, backgroundNote] joined by nothing.