Your CEO, on the way out of a meeting: "Can you pull the people numbers before the board call?"
You can. You know what it costs. Employee list from the HRIS. Leavers from the spreadsheet you keep by hand. Survey results from a third tool. Salaries in a file one person owns. Then the part nobody counts: making department names match across four exports so you can segment anything.
Two evenings. And then someone in the meeting asks how you calculated turnover, and the conversation is about the denominator instead of the people who left.
You've probably tried the obvious fix. Paste an export into a chat, ask for a dashboard. What comes back looks impressive and can't be defended. No formulas. A turnover rate that used headcount at the start of the period on one card and average headcount on the next. And somewhere in there, a number the model filled in because your column was empty.
A blank cell is honest. An invented number gets presented to your board.
This lesson adds a prompt that goes in the other order. It checks what data you actually have before it promises a chart, does the arithmetic in code, and prints the formula under every chart so the definition travels with the number.
One rule holds the whole thing together: a number without a comparison is decoration. Every figure carries a change against the prior period or a benchmark you gave it, or it says there isn't one.
What you'll have at the end
One HTML page. Blocks down the left. Each block opens with the question it answers and where the data came from, then three or four headline numbers with their change, then the charts. Under each chart, the formula.
Ten blocks in the catalog:
→ Headcount and composition
→ Retention and attrition
→ Engagement and sentiment
→ Performance and talent
→ Career and mobility
→ Compensation and pay equity
→ Hiring
→ Absence and wellbeing
→ Diversity and inclusion
→ Workforce planning
You won't get ten, and you shouldn't want ten. Four full blocks beat ten half-empty ones. An employee list and an exit list give you the first two properly. Add a survey export and a review export and you have what companies your size actually present.
Three things are true of every number on the page.
It came from your data. No gap gets filled with a guess. Missing field, missing metric.
It carries its definition. Turnover is exits in the period over headcount at the start. Compa-ratio is salary over band midpoint. Printed under the chart, in the page you send upward.
Small groups are protected. Any survey slice under five respondents shows n<5. Pay and flight-risk views carry a line saying they're for HR and the direct manager. That's the floor, not legal advice. Your works council may want more.
Before you start
Your data sources. This decides how good the result is. Connect what you have, using connectors from Basic setup, identity and your AI policy: your HRIS (HiBob, Personio, BambooHR, Rippling, Deel, Gusto), your performance or engagement tool (Effy AI, Lattice, Leapsome, Culture Amp, 15Five), your ATS (Greenhouse, Lever, Ashby), and wherever spreadsheets live: Drive, OneDrive, SharePoint, Notion, Airtable.
Nothing connected works too. It takes uploads: CSV, spreadsheet, Google Sheet, Notion database, a pasted table. Most people run it on exports first and connect tools later, once they know which blocks they use.
The workspace, from How to organize context files. Own room, so next month's build starts from this one.
The AI policy, from the setup lesson. This is the most sensitive data in the course: salaries, exit reasons, survey comments. Send IDs, not names. The dashboard segments by department and level; it doesn't need to know who Maria is. The exception is a pay or flight-risk view, which needs the person, and which is the view you keep out of the shared page.
How the build runs
Three phases. Nothing gets built until phase two is done.
Phase 1, what's already reachable. Claude makes one small read against each connected tool to check the fields exist and are filled. Not "you have an HRIS" but "department is filled for 340 of 372 people." An empty column is the usual reason a block can't segment, and you want that news now, not in the chart. It also names any connector that's configured but failing, since that's often a one-click fix.
Then a table: source, blocks it can feed, what's missing. Read it before anything else.
Phase 2, what to give it. For the gaps, it asks, and the ask is concrete. An exit list with ID, exit date and voluntary or involuntary gets you the retention block. No regretted flag, that block minus one card, and it says so up front. Level history buys promotion rate and time in level. Salaries plus band min, mid and max buy compa-ratio and the unadjusted gender pay gap.
Each file gets profiled before anything is promised: columns, rows, date range, and one feasibility line per block. If a header is ambiguous it asks. status means something different in every HRIS, and guessing wrong poisons everything downstream.
Phase 3, compute, then build. The arithmetic runs in code against your files, not from reading them. That matters twice: the numbers are right, and the code runs again next month on a fresh export. Then the page, ordered by your question. Ask why people are leaving and retention leads.
The prompt
Start a task with your exports ready or your tools connected. The prompt lives in Effy's HR skills library, so what you copy is the current version:
Copy the whole file, paste it in. It opens by telling you what it can and can't build. That's the most useful five minutes in the process.
If you have nothing to upload yet
Say so, or say "just show me what it looks like." It builds all ten blocks on invented data for a fictional 400-person company, labelled sample on every block.
Worth doing even if you do have data. You see every chart, pick the four you'd present, and then ask IT for three exports instead of eleven.
The label stays on. A page of invented numbers with the label removed is the worst thing this process can produce.
What to watch for
The feasibility table. Your cheapest edit point. If it says a block is missing a field, that's your export request, already written.
The denominator. Turnover uses headcount at the start of the period unless the metric calls for average headcount. If your company defines it differently, say so at the start. Then it's your definition on every card.
Filled-in blanks. Same failure as the handbook lesson. The most helpful-looking thing a model can do with a gap is put a plausible number in it. The prompt forbids it. Check anyway.
n<5. Not a formatting problem. If someone asks you to unsuppress one team's engagement score, that's the moment the survey stops being anonymous and response rates drop next cycle.
Predictive scores. Flight risk only appears with its drivers next to it. A score with no reasons gets ignored, or acted on without being understood.
The adjusted pay gap. The one metric with no simple formula. It's a regression, and the page says so. A flag to investigate, not a verdict, and a pay specialist looks at it before it leaves the room. The unadjusted gap, median by level, is what reporting regimes ask for.
Where it lives
The dashboard is an output. It goes where leadership reads things. The exports do not go in HR-CONTEXT-FOR-AI/; salary files and exit lists don't belong in a folder you connect to everything.
One file goes in the workspace: company/people-metrics-definitions.md. Blocks you present, formula for each metric, your denominator choice, date of the last build. Half a page.
That's what makes the second build cheap. It also settles it when a manager shows up with a different turnover number from their own spreadsheet.
Keeping it true
Built once, it's a slide. Built monthly, it changes decisions.
Keep the code from phase 3. Next month: same room, fresh exports, re-run. The numbers move, the definitions don't.
Add one line to the weekly context review from How to organize context files: if a definition changed, write it in the definitions file with the date. A silent definition change is the only way a monthly dashboard lies to you.
And note the questions leadership asks that the page couldn't answer. Three of those and you know which export to chase. It's usually the ATS.
Next board call, the answer is a link, and the question about the denominator is already answered under the chart.