Export the payroll run to a spreadsheet, replace names and personal identifiers with codes, build totals by department and pay element with a pivot table, and then give only the redacted summary to AI to write the owner's commentary. Check every figure against the payroll journal before the report goes out.
The reason this works is the split of jobs. The spreadsheet does the arithmetic, exactly and repeatably. AI does the part people dislike: turning forty rows into four sentences, and pointing at the lines that moved. The owner gets one page; you keep the detail. The catch is that a fluent AI paragraph can quote the wrong total, so every figure it writes is ticked back to the sheet before the page goes out.
What the owner actually wants from a payroll report
Owners rarely want to see individual pay. They want to know four things: what payroll cost this month in total, how that compares with last month and budget, why it moved, and whether anything needs a decision. A good report answers those on a page, with the supporting numbers one click away.
So decide the report's contents before you touch the data. A sensible monthly shape:
- Total payroll cost, split into gross pay, employer on-costs (employer taxes, pension contributions and similar) and other pay-related costs.
- Cost by department or cost centre.
- Cost by pay element: base pay, overtime, bonuses, back pay, leaver payments, holiday pay.
- Headcount at month end, joiners and leavers.
- Variance against last month and against budget, with flags.
- Two or three sentences of commentary and one question for the owner.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowStep one: export the right file
Most payroll systems offer a payroll journal, a payslip summary and a detailed pay-element report. The journal is the one that ties to the accounts, so make it your source. If your system offers a custom export, pick these columns:
- Employee ID (internal code)
- Department or cost centre
- Pay element (base, overtime, bonus and so on)
- Amount for the period
- Employer on-cost lines, ideally per employee
- Pay period date
- Start date and leaving date, if the export includes them
Do not export bank details, tax identifiers, addresses or dates of birth. If your system forces them into the export, delete those columns first, in a copy, and never work from the original. Payroll data is among the most sensitive a business holds, and many payroll provider contracts and data-protection rules restrict how it may be shared; if in doubt, ask a qualified adviser.
Step two: redact before the file goes near an AI tool
Redaction means the personal data never reaches the model, so you cannot rely on a policy to protect it. Do it in three layers, in this order.
- Delete identifiers. Names, addresses, bank, tax and national identifiers, email addresses, dates of birth.
- Swap names for codes. Replace each name with the employee ID. Keep the key (ID to name) in the payroll system, not in the sheet you share.
- Aggregate by default. For the AI step, send department-level totals instead of employee rows. You only need individual rows when you are explaining a single variance, and even then a code and a pay element are enough.
A check you can run in a minute: search the file for common name patterns, for digits in the format of a bank or tax number, and for the @ symbol. If anything turns up, the file is not ready. Small groups need care too: a "department" with one employee identifies that person's pay, so merge tiny departments into "Other" before reporting.
Before and after: a redacted extract
Illustrative figures for a small kitchen fitting business. The raw export has a name, address and tax ID in each row. The version sent for summarising is this:
| Department | Pay element | October | September | Budget |
|---|---|---|---|---|
| Fitting team | Base pay | 21,400 | 21,400 | 21,500 |
| Fitting team | Overtime | 3,150 | 1,820 | 1,800 |
| Design and sales | Base pay | 9,600 | 9,600 | 9,600 |
| Design and sales | Bonus | 2,400 | 0 | 0 |
| Office | Base pay | 5,200 | 5,200 | 5,200 |
| Office | Leaver payment | 1,150 | 0 | 0 |
| All | Employer on-costs | 9,410 | 7,540 | 7,600 |
No names, no individual rows, and every figure still supports the commentary. That is the target for the AI step.
Step three: build the summary with a pivot table and a few formulas
Put the cleaned data on one sheet and the report on another. A pivot table with department in rows, pay element in columns and amount as the value gives the totals. If you prefer formulas, SUMIFS does the same on a summary grid:
=SUMIFS(Data!$D:$D, Data!$B:$B, $A2, Data!$C:$C, B$1, Data!$F:$F, $K$1)
That sums the amount column where department matches the row label, pay element matches the column heading and the period matches the month typed in K1. Copy it across and down. For the variance work, use a list laid out like the extract above: department in A, pay element in B, this month in C, last month in D and budget in E. Then add four calculated columns: change against last month in F (=C2-D2), percentage change in G, variance against budget in H (=C2-E2) and the flag in I. The percentage formula guards against a zero last month:
=IF(D2=0,"",(C2-D2)/D2)
If you want more help with formulas and AI inside the spreadsheet, the tutorial on using ChatGPT with Excel covers the practical side, and a clean data layout matters as much as the formula.
Step four: set variance flags the sheet applies, not the model
Flags should be rules, so they are the same every month. In column I, add a formula that returns a label:
=IF(ABS(F2)<250,"",IF(D2=0,"Investigate",IF(ABS(G2)>=0.05,"Investigate","")))
This flags a line only if it moved by at least 250 and at least 5 per cent, which stops tiny lines flagging on a percentage and large lines hiding behind a small percentage. The middle test matters: a line that was zero last month (a first bonus, a leaver payment) has no percentage, and a simpler AND() version returns an error on it instead of a flag. Nested IFs only evaluate the branch they need, so the new line flags cleanly. Adjust to your size: a ten-person business might use 150 and 5 per cent; a hundred-person business 1,500 and 3 per cent. Write the rule on the report.
Apply it in the example above. Fitting team overtime rose from 1,820 to 3,150, a change of 1,330 or about 73 per cent, against a budget of 1,800: flagged. Design bonus 2,400 against nothing: flagged, though probably planned. The leaver payment of 1,150 against nothing: flagged as a one-off. Employer on-costs rose by 1,870 (about 25 per cent), which is bigger than the pay changes alone explain, so it also flags.
Step five: ask AI for the commentary, with a tight prompt
Give the model the redacted, flagged table and ask for commentary that explains only what is in it. Telling it what it may not do matters as much as telling it what to do.
Below is a redacted payroll cost summary for one month, with last month and budget.
Write a one-page commentary for the business owner.
Structure: (1) total cost and change vs last month and budget; (2) the three biggest movements, each with the amount and percentage; (3) which movements look like one-offs (bonus, leaver payment) versus run-rate; (4) one question the owner should answer.
Use only the figures in the table. Do not speculate about reasons; instead write "reason to confirm" where the table does not explain a change.
Do not mention individuals. Do not give legal, tax or employment advice. Use en-GB spelling.
Illustrative output, shortened: "Total payroll cost for October was 52,310, up 6,050 (13.1%) on September and 6,010 over budget. Three lines drive most of the movement: fitting team overtime (+1,330, 73%), a design and sales bonus of 2,400 not in the budget, and employer on-costs (+1,870, 25%), which rose faster than the pay lines. The bonus and the 1,150 leaver payment look like one-offs; excluding them, run-rate cost was 48,760, about 2.4% above September. Reason to confirm: why overtime rose in the fitting team. Question for the owner: is the bonus to be repeated, and should next month's budget include it?"
Now check the sums, because that sample contains three deliberate slips of the sort models make. Add the seven October lines: 21,400 plus 3,150 plus 9,600 plus 2,400 plus 5,200 plus 1,150 plus 9,410 is 52,310, which is right. September is 21,400 plus 1,820 plus 9,600 plus 5,200 plus 7,540, which is 45,560, so the real change is 6,750 (14.8%), not 6,050 (13.1%). The budget total is 45,700, so October is 6,610 over, not 6,010. And run-rate cost without the bonus and the leaver payment is 48,760, which is 3,200 or 7.0% above September, not 2.4%. The text reads fluently around every one of those errors. You can only catch them by recomputing each number the model quotes against the sheet, which is why the next step is a tie-out and why the sheet, not the model, owns the arithmetic.
Step six: tie out before you send
Four checks, each takes minutes, and any failure stops the report:
- Total to journal. The report total must equal the payroll journal total for the period. Differences usually come from timing (a payment made after month end) or an on-cost line missing from the export.
- Headcount to payroll. Count unique employee IDs in the data and compare with the payroll headcount report.
- Payment to bank. The net pay run leaves the bank in one or a few payments; the amounts should match the payroll's net pay figure. The tutorial on automating bank reconciliation with AI covers the matching approach.
- Quoted numbers to sheet. Every number in the commentary is ticked back to a cell.
A realistic mistake and how it showed up
Say a bookkeeper builds the report from the payslip summary rather than the journal. The summary shows gross pay but leaves out employer on-costs and a pension contribution that is paid through a different channel. The report says payroll cost 42,900, the accounts show 52,310, and the owner asks why the numbers disagree. The fix is simple: report from the journal, and put a reconciliation line on the report that shows the tie to the accounts.
Explaining one flagged line with a second, narrower prompt
The first prompt describes the month. The second is for a single flagged line, where the owner asks "why did overtime jump?". Pull only the rows behind that line, still coded, and ask for patterns rather than stories.
Below are redacted rows for fitting team overtime, October and September.
Columns: employee code, week ending, overtime hours, overtime cost.
Tell me: (a) how many codes account for more than half the cost; (b) which weeks are highest;
(c) whether the increase is spread across the team or concentrated.
Do not guess causes. List the facts the table shows and the questions I should ask the team lead.
Illustrative output: "Three of nine codes account for 61% of October overtime cost. Weeks ending 17 and 24 October are highest, 940 and 1,010 against a September weekly average of 455. The increase is concentrated rather than spread. Questions: was there a deadline or a project in those two weeks, and was the overtime approved in advance?" That is useful because it stays on the facts and hands you the next questions. If it had written "likely due to a large contract", you would delete the sentence; it has no way to know.
The one-page layout the owner receives
Put the page together in a fixed order so the owner learns where to look. This example layout works for most small businesses:
| Block | Contents | Source |
|---|---|---|
| Headline | Total cost, change vs last month, vs budget | Pivot totals |
| Run-rate line | Total without one-offs, change vs last month | Pivot with tag filter |
| Department table | Cost and change per department | Pivot |
| Flags | Lines marked Investigate, with the rule shown | Flag column |
| Headcount | Month end, joiners, leavers, cost per head | Payroll headcount report |
| Commentary | Three to five sentences | AI draft, edited by you |
| Decision | One question for the owner | You |
| Tie-out | Total to payroll journal, with date checked | Your check |
The tie-out block is the one people leave off, and it is the one that makes the owner trust the rest. A line such as "Report total equals payroll journal total, checked 4 November" costs ten seconds to write and saves an awkward conversation later.
Using the report to set next month's expectation
A cost report looks backwards; a few extra lines make it useful for planning. Add a "known changes next month" note: a joiner starting, a pay review effective on a date, a bonus that will not repeat, holiday pay that will fall in the summer. AI can then turn your list into an expected total range.
Say your known changes are one joiner at roughly 2,600 a month in total employer cost, one leaver paid out this month and not again, and overtime expected to fall back to about 2,000. The sheet gives a simple expected figure: run-rate 48,760, plus 2,600 for the joiner, minus about 1,150 of overtime reduction (3,150 down to 2,000), is roughly 50,210. The leaver payment and bonus do not recur, so they are already out of the run-rate. Ask the model to present that as a range and to state its assumptions, but compute the midpoint in the sheet. The owner now has a number to hold the next report against, which is what makes variance flags meaningful.
Handling joiners, leavers and back pay without distorting the trend
Month-on-month comparisons mislead when staff move. Three habits keep the picture honest.
- Show headcount beside cost. Cost per head (total divided by average headcount) stops a new hire reading as a pay rise.
- Separate one-offs. Tag leaver payments, back pay, bonuses and holiday payouts in the category column, and report run-rate with and without them.
- Annotate part months. A joiner on the 20th costs a third of a month, then a full month the next. Add a note column and flag "part month" so next month's rise is expected.
Say a childcare nursery has a seasonal pattern, with extra staff at the start of the school year and fewer in summer. Comparing September with August alone would flag every line. Add a column for the same month last year and flag against that too, since seasonal businesses are better judged against their own history.
How the report looks for different kinds of business
The layout is the same; the lines that matter differ. A specialist food importer has warehouse overtime that swings with shipment arrival, so overtime by week is the line to watch. A craft brewery supplier has drivers whose pay includes mileage or allowances; make allowances a separate pay element so they do not hide inside base pay. A kitchen fitter pays subcontractors who may sit outside payroll entirely; report them in a separate block so the owner does not compare employed and contracted labour as one figure. A nursery has statutory ratios, so headcount by room matters more than total cost. Adjust the department rows accordingly.
Automating the monthly run without losing control
Once the first report works, shorten the routine:
- Save the export settings in the payroll system so the same columns come out each month.
- Keep one workbook with a Data sheet, a Report sheet and a Notes sheet. Paste the new redacted data over the old.
- Save the commentary prompt in a text file, and change only the month's figures.
- Store each month's finished report in a dated folder with the tie-out screenshots.
Some payroll and accounting platforms now include their own reporting and AI summaries. The tutorial on which payroll software features are real AI helps you judge which are worth switching on, but even then, keep the tie-out step. A built-in summary is only as good as the data and rules behind it.
Time and cost of the monthly routine
For a business with twenty to forty staff, expect roughly an hour and a half the first month (building the pivot, flags and prompt) and thirty to forty-five minutes each month afterwards. Those are planning estimates, not measurements, and they exclude investigating flagged lines, which is the work the report exists to prompt. A business-grade AI plan costs a modest monthly fee, and the spreadsheet you already have does the rest. The saving is less about hours than about the owner seeing a consistent, checked page every month.
When the report should not use AI at all
If the file cannot be redacted, if a contract forbids sharing it, or if your business has a handful of employees whose pay is identifiable even in aggregate, skip the AI step and write the commentary yourself from the flagged table. The pivot, flags and tie-out are the valuable parts, and they work without any model. If you want to review the options with someone, my AI implementation consultation covers where AI adds value in finance reporting and where it does not. For the checks that come before payroll runs, AI payroll checks for timesheet errors pairs well with this report, and the AI guide lists the rest.
Payroll reporting questions before you involve AI
Is it safe to upload a payroll export to an AI tool?
Not as it comes out of the payroll system. Remove names, tax and bank identifiers and replace them with employee codes, or aggregate by department before anything leaves your systems. Use a business plan with terms you have read, and check your payroll provider's contract for any limit on sharing exports.
Should AI calculate the totals?
Let the spreadsheet calculate them and let AI describe them. Pivot tables and SUMIFS are exact and repeatable; a language model can slip on arithmetic. Use AI for the commentary, the variance explanations to investigate and the plain-English summary, then tick the figures against the sheet.
How do I stop one-off payments distorting the trend?
Tag every pay element in a category column: base pay, overtime, bonus, back pay, leaver payments. Report the one-offs on their own line and show run-rate cost without them. The summary then says what changed and what was a single event.
What variance threshold should I use?
Start with 5 per cent or a fixed amount, whichever is larger, per department and per pay element. Tune it after two months. Too tight and every line flags; too loose and a slow creep goes unseen. Write the threshold at the top of the report.
Further reads
- How Payroll Bureaus Use AI to Cut Errors and Queries — How a bureau reduces payroll errors with AI.
- AI Tools for Payroll and HR: What Gusto, Rippling and Deel Offer — What payroll platforms offer for reporting and AI.
- How to Use AI to Understand Your Profit and Loss Statement — Read the profit and loss that the payroll cost feeds.
- Is It Safe to Connect AI Tools to Your Business Bank Account? — Risks of connecting AI tools to financial accounts.
- Restaurant Labour Cost Percentage: Test Rota Changes With AI First — A labour-cost view for hospitality, built from rotas.
- How to Use AI for Payroll: Query Answers, Checks and Reports — Three safe AI jobs for a payroll team, with the pay-data safeguard in each step: payslip query drafts, anonymised exception checks, a monthly summary.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: the author's working method for payroll reporting; payroll provider export documentation and the spreadsheet vendor's documentation for pivot tables and SUMIFS should be checked for the exact menu names in your version.