Monthly market salary benchmark for People Ops

Refresh a Google Sheet of market salaries on the first of every month and ping People Ops in Slack about roles that moved more than 5%.

Deterministic Code
Real-Time Glassdoor DataGoogle SheetsSlackHR & PeopleOperationsData SyncAI ReportsNotifications & Alerts
PromptCreate

Build a deterministic code workflow that keeps a People Ops compensation benchmark spreadsheet fresh every month without anyone touching it.

Trigger: cron, on the first day of every month at 6:00am in the workspace's local timezone.

Step 1. Read the role list from Google Sheets using Get Values. The spreadsheet has a tab named config with columns: job_title, location, years_of_experience (optional, one of ALL, LESS_THAN_ONE, ONE_TO_THREE, FOUR_TO_SIX, SEVEN_TO_NINE, TEN_TO_FOURTEEN, FIFTEEN_OR_MORE). Read the full data range, skip the header row, and turn it into an array of role objects.

Step 2. Loop over each role and call Real-Time Glassdoor Data Salary Estimation with the job_title, location, and years_of_experience from that row (default years_of_experience to ALL when the cell is blank). Capture market low, median, and high from the response. If the call returns a transient 503, retry once after a 2 second wait. If it still fails, skip that row and record the error to log so the rest of the sweep continues.

Step 3. Append one row per role to a tab named history using Google Sheets Append Values, with columns: date (today's ISO date), job_title, location, experience, low, median, high. One Append Values call per role is fine, or batch them into a single append if cleaner.

Step 4. Compute month-over-month median change. For each role in this run, look up the previous snapshot for the same job_title plus location plus experience combination from the history tab (the most recent row before today's date) and compute the percent change in median. If there is no prior snapshot, mark this run as the baseline.

Step 5. Build a Slack message and send it to the People Ops channel using Slack Send a Message. The message should list only the roles where the absolute median change exceeded 5 percent, formatted as one line per role: job title, location, old median, new median, percent change with an up or down arrow. If no roles crossed the threshold, send a short confirmation that the monthly sweep ran and nothing moved by more than 5 percent. If this was the baseline run, say so explicitly.

Every step maps to a known node with structured inputs. There is no model judgement in the loop, so build this as a code workflow, not an agent.

Additional information

What does this prompt do?
  • Runs automatically on the first of every month at 6am so your comp data is always current without anyone remembering to refresh it.
  • Reads your list of tracked roles from a Google Sheet config tab, then pulls fresh market low, median, and high salary numbers for each one.
  • Appends one timestamped row per role to a history tab so you build a clean monthly time series for trend analysis and board reporting.
  • Compares this month's median to last month's and posts a focused Slack alert in People Ops, listing only the roles where pay moved more than 5% in either direction.
What do I need to use this?
  • A Google account with edit access to the spreadsheet you want to use as your benchmark tracker.
  • A Slack workspace and a channel where the People Ops team wants the monthly summary posted.
  • A Real-Time Glassdoor Data account (free tier works for small role lists) so the workflow can fetch market salary estimates.
How can I customize it?
  • Add or remove rows in the config tab to change which roles you track, including the location and experience level for each one.
  • Change the alert threshold from 5% to whatever movement actually matters to your team, or split it into separate up and down thresholds.
  • Swap the Slack channel, switch to a People Ops direct message, or change the cadence to quarterly if monthly feels like too much.

Frequently asked questions

What does the Google Sheet need to look like before I run this?
One tab named config with a row per role you want to track (job title, location, optional experience bucket), and one empty tab named history where the workflow will append the monthly snapshots. The workflow creates the header row on the history tab automatically the first time it runs.
Do I need a paid Glassdoor or Ravio subscription?
No. This uses the public Real-Time Glassdoor Data integration. The free tier covers 100 lookups per month, which is enough for most teams tracking a few dozen roles.
What happens the very first month, when there's nothing to compare against?
The workflow still writes a full snapshot to the history tab, and the Slack message simply notes that this is the baseline run. From month two onward you start getting real movement alerts.
Can I track roles across multiple offices or countries?
Yes. Each row in the config tab carries its own location, so you can track the same job title in New York, London, and Berlin as three separate rows and get three separate alerts.
What if no roles moved by more than 5% this month?
The workflow still posts a short message in Slack confirming the snapshot ran and that nothing crossed your alert threshold, so the team knows the check happened and the silence is intentional.

Stop rebuilding your comp benchmark spreadsheet by hand.

Connect Google Sheets, Slack, and Glassdoor once. Geni refreshes your market salary tracker every month and flags the roles that actually moved.