# 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.

- Workflow type: code
- Services: Rippling, Google Sheets, Slack
- Categories: HR & People, Finance
- Published: 2026-07-08

## What it does

- 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 you'll need

- 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).

## Prompt

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.

## How to customize

- 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.

## FAQ

### Do I need to build the Google Sheets tracker first?

Yes. Create a spreadsheet with columns for snapshot date, department, work location, employment type, and count. The workflow appends new rows every week to the tab you point it at, so the structure needs to exist first.

### What if two people leave and two people start in the same week?

The snapshot only counts who is active on the day it runs, so a net-zero week shows a delta of zero in Slack. The individual rows in the sheet still reflect where those people sit by department and location, so you can see churn if you dig into the tracker.

### Can I use this with a Rippling sandbox first?

Yes. Rippling issues separate tokens for sandbox and production. Set up the workflow with a sandbox token to verify the numbers look right, then swap in your production token when you are ready to go live.

### What does the Slack message actually look like?

A short line with the total active headcount, the change from last week (for example, plus three or minus one), and a link to the Google Sheets tracker. You can rewrite the format after the workflow is generated.

### Does the previous week's row need to be in a specific place in the sheet?

The workflow reads the most recent snapshot rows from the tracker to compute the delta, so as long as new rows keep appending to the same tab it will find them. Do not manually re-sort or delete history rows or the delta will be wrong.

Use this prompt in General Input: https://www.generalinput.com/prompts/weekly-headcount-snapshot-from-rippling-to-google-sheets-and-slack