Weekly headcount snapshot from Rippling to Google Sheets and Slack
Every Monday at 6am, log active headcount from Rippling into a Google Sheets tracker and post the week over week change to your finance channel in Slack.
Build a deterministic code workflow that runs every Monday at 6am and captures a weekly headcount snapshot from Rippling into a Google Sheets tracker, then posts a short update to Slack. Every step is a discrete, deterministic node: list, group, append, read prior row, post message.
Trigger: cron, every Monday at 6:00 AM in the workspace's local timezone.
Step 1: Call Rippling's List Workers operation. Filter to employment_status = ACTIVE and set expand to include department, work_location, and employment_type so every worker row comes back with those related objects inlined. Page through with limit=100 and cursor until nextCursor is null.
Step 2: In code, bucket the workers into rows keyed by (snapshot_date, department name, work_location name, employment_type). snapshot_date is today's ISO date. Produce one row per unique combination with a count column of how many active workers fall into that bucket. Also compute the total active headcount across all buckets.
Step 3: Call Google Sheets Append Values on a pre-existing tracker spreadsheet. The spreadsheet ID and sheet/tab name should be configurable inputs. Append one row per bucket in the order: snapshot_date, department, work_location, employment_type, count. Use USER_ENTERED value input option so dates render correctly.
Step 4: Before posting to Slack, call Google Sheets Get Values on the same tracker to read the prior snapshot's rows (the most recent snapshot_date that is not today's). Sum the count column for those rows to get last week's total. Compute delta = this week's total minus last week's total.
Step 5: Call Slack Send a Message to the #finance-ops channel (channel name should be a configurable input). Post a short message like: "Weekly headcount snapshot: 247 active employees this week (change from last week: +3). View the tracker: <sheet URL>." Format the delta with a plus sign for positive, minus for negative, or "unchanged" for zero. Include a link to the Google Sheets tracker.
Configurable inputs at authoring time: Google Sheets spreadsheet ID, sheet/tab name, Slack channel, and cron timezone. Everything else (Rippling filter, expand set, row schema) is fixed by the workflow itself.
Failure behavior: if Rippling returns an empty worker list, do not append anything and post a Slack alert saying the snapshot failed. If the Google Sheets prior-snapshot read returns no history rows (first run), skip the delta and post just this week's total with a note that this is the first snapshot.
What does this prompt do?
- Pulls every active employee from Rippling with their department and work location, then groups them into a clean count by department, location, and employment type.
- Appends this week's snapshot as new rows in a Google Sheets tracker you already own, so finance has a longitudinal record of company growth.
- Reads the previous week's snapshot from the same sheet, calculates the change in total active headcount, and posts a short update to your finance channel in Slack with a link back to the sheet.
- Runs on autopilot every Monday morning so nobody has to remember to refresh the dashboard.
What do I need to use this?
- A Rippling admin account that can issue an API token for reading workers, departments, and work locations.
- A Google Sheets tracker you have edit access to, with a tab set up for headcount rows.
- A Slack workspace and the name of the channel you want the weekly update posted in (for example, #finance-ops).
How can I customize it?
- Change the schedule if Monday at 6am is not right for your team. Any recurring day and time works.
- Adjust how rows are bucketed. Default is by department, work location, and employment type, but you can slice by manager, cost center, or country instead.
- Point the Slack update at a different channel, add more numbers (like new hires this week), or route it as a DM to your CFO.
- Swap Google Sheets for a different sheet or workbook if finance keeps the tracker somewhere else.
FAQs
Do I need to build the Google Sheets tracker first?
What if two people leave and two people start in the same week?
Can I use this with a Rippling sandbox first?
What does the Slack message actually look like?
Does the previous week's row need to be in a specific place in the sheet?
Related templates
Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.
See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.
Every couple of hours we find the chats your team never answered, email those visitors a real reply, and hand the sensitive ones to a support lead.
Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.
Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.
Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.
Give finance a headcount tracker that updates itself.
Connect Rippling, Google Sheets, and Slack once and Geni logs a fresh snapshot every Monday morning, no manual exports.