Weekly Recruitee hiring pipeline snapshot in Google Sheets

Every Monday at 7am, log one row per open role into a spreadsheet so you can see how your hiring pipeline moves week over week.

Deterministic Code
RecruiteeGoogle SheetsSlack BotHR & PeopleOperationsDaily DigestsData Sync
PromptCreate

Every Monday at 7am, build a hiring pipeline snapshot from Recruitee and append it to a Google Sheet so we accumulate a week-over-week trend instead of only ever seeing today's numbers. Use a cron trigger set to every Monday at 7am.

Start with Recruitee List Offers to get the roles that are currently published. Treat those published roles as the set of open roles for the week, and ignore closed, filled, archived, and talent pool entries.

For each open role, call Get Pipeline Stages for Offer to resolve that role's pipeline stage names, then call List Candidates filtered by that offer to count candidates. From those candidates compute: the number of new applicants created in the last seven days, the total number of active candidates, the count of candidates sitting in each pipeline stage, and the count of disqualified candidates. List Candidates supports filters for offer, qualification state, and date range, so use those filters for the seven day new applicant window and for the disqualified count rather than pulling everything and filtering by hand where it can be avoided.

Recruitee list endpoints page with offset and limit and return a total in the response, so page through by advancing offset by limit until you have collected total items or the returned array comes back empty. Counting off a single unpaged first page would undercount any role with a busy pipeline, so make sure every count is taken over the full set.

Then append one row per open role to Google Sheets with Append Values. Each row should carry the week's date, the role title, new applicants in the last seven days, total active candidates, the count sitting in each pipeline stage, and the disqualified count. Append Values writes after the last row of the detected table, which is exactly the behaviour we want: it must never overwrite prior weeks. One row per role per week, so the sheet accumulates into a trend history that can be charted or pivoted. Keep the stage counts in a consistent column order across runs, taking the order from the sheet's existing header row, and write a zero for any stage a particular role's pipeline does not include, so the columns stay aligned even when roles use different pipeline templates.

After the rows are written, post a short message to the recruiting channel using the Slack Bot Send a Message operation. The message should confirm the week's snapshot was logged, link to the sheet, and explicitly name any open role that received zero new applicants in the last seven days, since those are the roles most likely to be quietly stalling. Keep it to a few lines rather than restating every number that is already in the sheet.

Every step here is deterministic, so build this as a code workflow: list, count, append fixed columns, post. If a single role's stage or candidate lookup fails, still write the rows for the roles that succeeded and note the skipped role in the Slack message rather than failing the whole run.

Example output

Row appended to the tracker on Monday 10 Aug: 2026-08-10 | Senior Backend Engineer | New (7d): 4 | Active: 23 | Applied: 9 | Screening: 6 | Interview: 5 | Offer: 1 | Disqualified: 12 Slack post in #recruiting: Weekly hiring snapshot for 10 Aug is in the tracker: <link to sheet> 6 open roles logged this week. No new applicants: Product Designer, Office Manager.

What does this prompt do?

  • Every Monday morning, checks each of your published Recruitee roles and records where all of the candidates currently sit.
  • Adds one new row per role per week to your spreadsheet, so earlier weeks are never overwritten and a real trend history builds up.
  • Captures new applicants from the last seven days, total active candidates, how many people sit in each hiring stage, and how many were turned down.
  • Posts a short recap to your recruiting channel with a link to the sheet and a callout naming any role that got no new applicants that week.

What do I need to use this?

  • A Recruitee account with the open roles you want to track
  • A Google account and a spreadsheet set aside to collect the weekly rows
  • A Slack workspace with a recruiting channel where the recap should be posted

How can I customize it?

  • Change when it runs, for example Friday afternoon as a week-in-review instead of Monday at 7am
  • Narrow which roles are included, such as a single department, location, or hiring team
  • Point the recap at a different Slack channel, or widen the new applicant window from seven days to a fortnight

FAQs

Will this overwrite last week's numbers?
No. Each run adds new rows underneath whatever is already in the sheet and never edits earlier rows, so every week you keep the full history.
Can I turn this into a chart?
Yes, and that is the point of the layout. Because you get exactly one row per role per week with the same columns every time, you can chart any column over time or build a pivot table by role without reshaping the data.
What happens to roles that are closed, filled, or on hold?
Only roles that are currently published are included, so closed roles simply stop producing new rows. The rows they already generated stay in the sheet as history.
What if different roles use different hiring stages?
The stage names are read from each role's own pipeline, and the counts are written into a consistent set of columns. If a role does not use one of the stages, that column is recorded as zero so the sheet stays tidy and comparable.
Do I need to set the spreadsheet up first?
Create the spreadsheet and give it a header row for the columns you want. After that the workflow just keeps adding rows beneath it each week.
What does the Slack recap actually say?
A short message confirming the week's rows were written, a link to the sheet, and the names of any open roles that received zero new applicants in the last seven days so nothing quietly stalls.

Related templates

Build a credential rotation checklist when someone leaves

When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.

1Password
Rippling
Slack Bot
+1
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task

Stop looking at hiring numbers with no sense of the trend.

Build a week-by-week record of every open role automatically, and let your team see which pipelines are filling up and which have gone quiet.