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.
Additional information
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.
Frequently asked questions
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
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.