Sample runbook. This person and their routines are invented.

Maverick7.7/10
Useful
8
Creative
6.5
Replicable
8.5

Twelve recruiting routines with counted figures and approval gates, plus a netball side project; mostly scheduled, and the build steps are specific and match the rows.

Sade Okonkwo

Sade's Runbook

I run Hartline Search, a one-woman technical recruiting shop. Candidates are people; everything else is a pipeline.

Updated 2026-10-10 · figures cover 30 days

Then tell your agent which numbers to build.

Daily3

1Screen inbound applicants against the live briefs

an Airtable automation plus a ChatGPT project · every 2 hours, working days

Every inbound CV gets scored against my open briefs with two lines of reasoning, and a decline draft written for the clear misses. I read every score before anything moves -- the drafts wait for me, always.

183 applicants screened, 41 advanced, 142 declined with a real reply

Example · inventedInvented score: '[Candidate T.] vs the Rivermark platform brief: strong on infra-at-scale, no compliance-domain exposure the brief insists on. Suggest: decline for this, hold for the next infra role.'
How to build it
Needs
- An Airtable base holding applicants (CV text, source) and open briefs (must-haves, nice-to-haves, deal-breakers).
- A ChatGPT project with the briefs loaded.
- Ask your person for the scoring scale (default 1 to 5) and the score below which a decline is clear (default 2).

Build
1. Schedule an Airtable automation every 2 hours on working days, picking up applicants with no score.
2. Send each CV and the open briefs to the ChatGPT project. Instruction: 'Score this CV against each open brief from 1 to 5. Give two lines of reasoning that cite the brief's must-haves. Name the best-fitting brief, or say none.'
3. Write score, reasoning and best brief back to the applicant record.
4. For scores at or below the threshold, draft a decline that mentions something specific from their CV. Save it as an email draft only.
5. Your person reads every score and approves each decline before anything is sent or any stage changes.

Check
- The first run should show scored records with two-line reasoning and drafts for the clear misses only.
- Test with one CV you know is a poor fit and confirm a decline draft appears but is not sent.

2Chase interview feedback until it exists

an Airtable automation · 9am

Any interview older than 48 hours with no hiring-manager feedback triggers a polite chase, escalating in warmth, and once feedback lands a candidate-update draft appears for me to approve and send. Candidates stopped going a week in the dark, which is most of why they say yes to me twice.

37 chases sent, 29 feedbacks extracted, 29 candidate updates sent

Example · inventedInvented chase: 'Third nudge to [HM at Osprey Labs]: [Candidate R.] interviewed Monday. She has two other processes moving. A no today beats a yes next Friday.'
How to build it
Needs
- An Airtable base with interviews (date, candidate, client contact, feedback status).
- Access to the inbox to read hiring-manager replies and save drafts.
- Ask your person for the chase wording style and the three warmth levels, plus the 48-hour wait (default).

Build
1. Schedule an Airtable automation for 9am daily. Find interviews older than 48 hours with no feedback recorded.
2. Draft a chase per interview. Escalate with the chase count: first is friendly, second is direct, third states that the candidate has other processes moving and a quick no is better than a late yes. Instruction: 'Write three sentences, polite, specific to this candidate and interview date.'
3. Save chases as drafts. Your person approves each before it goes.
4. When a reply arrives, extract the feedback into the interview record (verdict, reasons, next step).
5. Create a candidate-update draft from the extracted feedback. Your person approves and sends it.

Check
- A day with a stale interview should produce one chase draft and nothing sent.
- Test by adding a fake reply and confirm the feedback fields fill and an update draft appears.

3Build candidate prep packs before interviews

a ChatGPT project · 6pm, for next-day interviews

Each candidate interviewing tomorrow gets a pack: panel names and backgrounds, the team's tech stack from public sources, and the three questions this client always asks. Sent from me, assembled by the machine.

22 packs sent, 19 interviews happened

Example · inventedInvented pack line: '[Panelist: their Head of Data] joined from a bank, publicly allergic to buzzwords -- answer the pipeline question with numbers, not adjectives.'
How to build it
Needs
- A ChatGPT project with web browsing for public sources.
- Access to the calendar or ATS for interviews booked tomorrow, including panel names and the candidate.
- Ask your person for each client's usual three interview questions and the pack format they prefer.

Build
1. At 6pm each day, list interviews happening the next day. Skip the run if there are none.
2. For each, collect the panel names, then search public sources only (company site, talks, public profiles) for their backgrounds and the team's tech stack.
3. Instruction to the model: 'Write a one-page prep pack for this candidate: who is on the panel and one line on each background, the team's stack, the three questions this client always asks, and one practical tip per panellist. Mark anything you could not verify.'
4. Save the pack as an email draft from your person to the candidate.
5. Your person reads and approves every pack before it is sent.

Check
- The first pack should name each panellist with a sourced detail and flag gaps.
- Test with an interview where one panellist has little public presence and confirm the pack says so rather than guessing.

Weekly4

4Re-warm the silver medalists

an Airtable automation plus a ChatGPT project · Tuesday mornings

Every strong runner-up from 5-7 months ago resurfaces with a drafted check-in that references their actual process, not 'hope you're well'. I approve each one; about a third reply, and two have become placements this year.

26 re-warms drafted, 21 sent, 8 replies, 1 now interviewing

Example · inventedInvented re-warm: '[Candidate M.], you were the second choice at [Delverton] in April -- their loss. A staff role just opened that fixes the two things you didn't like about that one. Coffee?'
How to build it
Needs
- An Airtable base with past candidates, the process they reached, outcome and the date.
- A ChatGPT project and the inbox for saving drafts.
- Ask your person what counts as a strong runner-up (default: reached final stage, rated 4 or above) and for a tone sample.

Build
1. Every Tuesday morning, filter candidates who finished as runner-up between 5 and 7 months ago and rated strong.
2. Pull their process notes: client, role, what they liked and disliked, and any open roles that fit now.
3. Instruction to the model: 'Draft a short check-in that refers to their actual process and, if an open role fits, names it and why. Never write hope you're well. Under 90 words, in this tone sample.'
4. Save each as an email draft and list them in a review view.
5. Your person approves, edits or skips each draft. Record sent and replied in Airtable.

Check
- The first run should give a short list of drafts, each mentioning a specific past process.
- Test that a candidate outside the 5 to 7 month window does not appear.

5Watch my shortlists for public activity

a ChatGPT project · Fridays

People on active shortlists get checked for conference talks, open-source releases, and promotions, so my outreach can mention something true. Nothing creepy: public artifacts only, and I say where I saw it.

48 people watched, 11 activity hits, 7 used in outreach

Example · inventedInvented hit: '[Candidate J.] gave a talk on schema migrations at [a fictional conf] Tuesday. Your Rivermark brief is 40% schema-migration pain. Open with the talk.'
How to build it
Needs
- A list of people on active shortlists, with names, employers and the brief each belongs to (from the applicant tracker).
- A ChatGPT project with web browsing.
- Ask your person which public sources are allowed (default: conference programmes, code repositories, company announcements) and to confirm personal social accounts are out of scope.

Build
1. Every Friday, load the active shortlists.
2. For each person, search the allowed sources for the past week: talks, open-source releases, promotions or job moves.
3. Instruction: 'Report only public, verifiable activity with its source and date. Explain in one line how it connects to their brief. If nothing is found, say none.'
4. Write hits into the candidate record with the source noted, so outreach can say where it was seen.
5. Do not send outreach. Your person decides which hits go into messages and approves each message.

Check
- The first output should be a short list of hits with sources, and no entry for people with no findings.
- Test by checking that every hit has a source your person can open and confirm.

6Send each client their pipeline truth

an Airtable automation · Thursday 4pm

Per client: who's at what stage, who's gone cold, and whose process is losing candidates to speed. The slow clients get the same report as the fast ones, which is the point.

6 client reports sent weekly, 24 total

Example · inventedInvented report line: 'You have had [Candidate K.] at offer-pending for 9 days. Market average for this role is 4. She is interviewing elsewhere Friday.'
How to build it
Needs
- An Airtable base with candidates per client, stage, stage-entry dates and the last activity date.
- Ask your person for the list of clients, the cold threshold (default 7 days without movement) and benchmark days per stage (default: your own averages).

Build
1. Schedule an Airtable automation for Thursday 3pm to build each client's report, ready for approval by 4pm.
2. Per client include: every candidate by stage, who has gone cold, and where the client's slowness is losing candidates, comparing days in stage with the benchmark and noting any rival processes.
3. Use the same template and the same candour for every client, fast or slow. Instruction: 'State facts with numbers and dates. Where the client is the delay, say so plainly and politely.'
4. Save each report as a draft in the client's folder and as an email draft.
5. Your person reviews and approves each report before it is sent.

Check
- The first batch should be one report per client with identical structure.
- Test with a candidate held at offer for longer than the benchmark and confirm it is called out.

7Run the netball league admin

Zapier · Sunday nights

Availability poll out, team sheet drafted from the replies, pitch booking confirmed. I captain a netball team the way I run a search: ruthlessly, with reminders.

4 match weeks handled, 1 forfeit avoided

Example · inventedInvented sheet note: 'Only 6 confirmed by Thursday -- draft went to the reserves list automatically. [Tola] accepted, full seven by Friday noon.'
How to build it
Needs
- Zapier with access to a form or polling tool, the team's contact list and a spreadsheet for the team sheet.
- Ask your person for the roster, the reserves list, the minimum squad size (default 7), the confirmation deadline (default Thursday) and the pitch booking contact.

Build
1. On Sunday night, draft the availability poll for the coming match week. Your person approves it before it goes to the team.
2. As replies arrive, update the team sheet in the spreadsheet with available players.
3. On Thursday, if fewer than the minimum have confirmed, draft a message to the reserves list. Your person approves it before it is sent.
4. Once the squad is full, draft the pitch booking confirmation and the final team sheet. Your person approves both before anything is sent to the venue or the team.

Check
- The first week should show a poll draft, a live sheet and a flag when numbers fall short.
- Test with a week where only five confirm and check the reserves draft is created but not sent.

Monthly3

8Check in on placements at 30 and 90 days

an Airtable automation plus a ChatGPT project · 1st of the month

Everyone I placed hits a 30-day and 90-day check-in, drafted with details from their actual search. A wobble at day 30 is fixable; at day 100 it's a refund clause.

9 check-ins sent, 8 fine, 1 wobble caught and resolved with the client

Example · inventedInvented wobble: '[Placed candidate] at day 30: "the role is great, the promised platform team doesn't exist yet." Flagged to client; team spun up two weeks later.'
How to build it
Needs
- An Airtable base with placements (candidate, client, start date, search notes).
- A ChatGPT project and the inbox for saving drafts.
- Ask your person for the tone sample, and the refund or guarantee window (default 90 days) so wobbles can be flagged against it.

Build
1. On the 1st of each month, find placements that reach 30 or 90 days that month.
2. Gather their search notes: what the candidate wanted, what the client promised, any open worries.
3. Instruction to the model: 'Draft a warm, short check-in that refers to promises made during their search and asks how each is turning out. Ask one open question.'
4. Save the drafts. Your person approves each before sending.
5. When a reply arrives, log a status (fine or wobble) and the reason. Flag wobbles to your person with a suggested note to the client, which they approve.

Check
- The first run should list each due placement with a draft citing real details.
- Test that a wobble reply creates a flagged record and a client-note draft.

9Log why offers get declined

a ChatGPT project · month end

Every declined offer gets a structured postmortem: the stated reason, my read of the real reason, and which stage the loss actually happened at. Four quarters of this beats any salary survey I can buy.

3 declines logged, 2 traced to comp-band surprises at offer stage

Example · inventedInvented entry: 'Stated: counter-offer. Real: the band was disclosed at offer, 15% under expectation set at screen. The loss happened in week one, not week six.'
How to build it
Needs
- An Airtable base with offers and their outcome, plus stage history for each candidate.
- A ChatGPT project.
- Ask your person for the postmortem fields (default: stated reason, likely real reason, stage where the loss happened, comp gap if any) and for notes on each decline.

Build
1. At month end, list offers declined during the month.
2. For each, send the stage history, notes, and any message from the candidate to the model.
3. Instruction: 'Fill the postmortem. Quote the stated reason. Give your read of the real reason with the evidence for it. Say at which stage the loss actually happened, which may be earlier than the decline. Mark low-confidence reads.'
4. Write the entry into a postmortem table in Airtable.
5. Your person reviews and corrects each entry. Nothing is shared outside the base.

Check
- The first month should give one structured entry per declined offer.
- Test that an entry names an earlier stage than the decline where the notes support it, and that it flags uncertainty.

10Update my own comp notes from closed processes

an Airtable automation · month end

Accepted and declined offers from my own processes, anonymised, rolled into my comp ranges per role and level. My numbers are small but they're mine, and they're current.

7 data points added across 4 role families

Example · inventedInvented note: 'Staff backend, fintech, remote-first: accepted range moved up ~6% since Q2 on a base of five offers. Thin data, real direction.'
How to build it
Needs
- An Airtable base with closed offers (role family, level, sector, location model, base, outcome).
- Ask your person for the role families to track, the minimum data points before a range is shown (default 3), and the anonymisation rule (default: no names or client names stored in the notes).

Build
1. At month end, find offers closed that month (accepted or declined).
2. Strip candidate and client names, then add each as a data point to the matching role family and level.
3. Recalculate the accepted range per family: low, median and high base, and the shift from the previous quarter.
4. Note the sample size beside every range, and mark ranges below the minimum as thin. Instruction: 'Summarise the direction of change in one sentence. State the number of data points. Do not extrapolate beyond them.'
5. Your person reviews the updated notes before they are used with clients.

Check
- The first run should add new rows and update ranges with counts shown.
- Test that a family with two data points is marked thin.

On demand2

11Rewrite client job descriptions into something humans answer

a ChatGPT project · on demand

Client sends a 900-word wishlist; I return 300 words with the actual job, the actual stack, and the salary printed in numbers. Reply rates tell me which version wins, every time.

run 8 times, 8 clients accepted the rewrite

Example · inventedInvented before/after: '"Rockstar engineer, wear many hats" -> "You'll own the billing system. Two other engineers. $165-185k. The on-call is real and paid."'
How to build it
Needs
- A ChatGPT project.
- Ask your person for their rewrite template (default sections: the job, the team, the stack, the salary in numbers, what is unusual about the role) and a before and after example if they have one.

Build
1. When a client sends a job description, paste it into the project.
2. Instruction to the model: 'Rewrite this job description in about 300 words for a candidate to answer. State what the person will actually do in the first year, the actual stack, the team size, and print the salary range in numbers. Drop buzzwords and wishlists. List up to five must-haves. Where the original is missing a salary or a stack, list the questions to ask the client instead of guessing.'
3. Review the output with your person, who edits it and sends it to the client for sign-off.
4. Once live, record reply rates for the original and the rewrite.

Check
- The first rewrite should be near 300 words, with a numeric salary or an open question about it.
- Test with a vague description and confirm the gaps appear as questions.

12Build sourcing search strings per brief

a ChatGPT project · on demand

Each new brief gets a set of boolean strings and adjacent-title lists, including the titles the perfect candidate had two jobs ago. The machine is better at synonyms than I am; I'm better at taste.

run 5 times for 5 new briefs

Example · inventedInvented string note: 'For the data-platform brief, also search "analytics engineer" circa 2021 -- that cohort retitled to platform roles and nobody searches their old name.'
How to build it
Needs
- A ChatGPT project.
- The brief for each new search: title, must-have skills, seniority, sector, location.
- Ask your person which sourcing site's search syntax to target, and which titles or employers to exclude.

Build
1. When a new brief arrives, paste it into the project.
2. Instruction to the model: 'Produce three to five boolean search strings, from narrow to broad, in the syntax of the target site. Add a list of adjacent job titles, including titles the ideal candidate would have held two jobs ago and titles that were renamed in recent years. Add skills that commonly sit beside the must-haves. Explain each string in one line.'
3. Your person reads the output and removes anything that lacks taste or fit.
4. Paste the approved strings into the sourcing tool and note which returned the best candidates.

Check
- The first set should include old and adjacent titles, not only the title on the brief.
- Test one string on the sourcing site and confirm it returns sensible results and not noise.

Tools

Reads from

  • Airtable ATScandidates, stages, clients
  • Inboxapplications, HM replies
  • Public webtalks, releases, promotions

Writes to

  • Email draftsevery candidate and client touch, held for approval
  • Airtablescores, postmortems, comp notes
  • Client reportsweekly pipeline truth

Assessment

Twelve recruiting routines with counted figures and approval gates, plus a netball side project; mostly scheduled, and the build steps are specific and match the rows.

Useful8

Nine of twelve run on a schedule, with counts and a person-approved loop

Routines 1, 2, 4 and 6 run unprompted and land as drafts or Airtable records, with figures such as 183 screened and 29 feedbacks extracted. Routine 2 closes a loop, since feedback turns into a candidate update. Routines 11 and 12 are on demand with thin counts, and Routine 9 has only 3 declines logged.

Creative6.5

Strongest ideas are built on recruiting data nobody else holds

Routine 4 (silver medalists), Routine 9 (decline postmortems that trace the stage of loss) and Routine 6 (identical candour for slow clients) come from this person's own situation. Routine 10 builds a private comp dataset. Routines 1, 3 and 11 are closer to common screening, prep and drafting uses.

Replicable8.5

Build steps give thresholds, instructions and tests that match each row

Routines 1, 2, 4 and 7 name defaults such as the score cut-off of 2, the 48-hour wait, the 5 to 7 month window and a squad of 7. Each has a quoted instruction and a check with a negative test. Routine 12 is looser on how to judge string quality, and Routine 3 does not say where panel names come from if the ATS lacks them.

Standouts

  • 4Resurfaces past runner-ups with a drafted note tied to their real process, with a stated 5 to 7 month window and counted replies.
  • 9Postmortems separate the stated reason from the real one and date the loss to an earlier stage, building a dataset over time.
  • 2Escalating chases run daily and extracted feedback triggers a candidate update, so the loop closes with counts for both steps.

What to do next

  1. UsefulAdd counts with a window to Routines 11 and 12, such as reply rates for original against rewritten descriptions, which the build step already says to record.
  2. UsefulState where Routine 6 reports land after approval and how many clients acted on a flagged delay, so the loop is visible.
  3. UsefulShow a figure for Routine 3 on candidate outcomes, such as how many pack recipients advanced, beyond packs sent and interviews held.
  4. CreativeGive Routine 5 and Routine 10 a visible result, such as a changed offer or a client who moved a band, to show the unusual ideas get used.
  5. ReplicableFor Routine 12, add a way to score strings, for example the share of returned profiles that pass a must-have check, so the taste step can be rebuilt.
  6. ReplicableFor Routine 3, say how panel names are obtained when the calendar lacks them, and what the pack does in that case.

Share on LinkedInShare on X

Judged 2026-10-10 · weights Useful 50, Creative 30, Replicable 20