Excel · Finance

How to Reconcile Payroll in Excel with ChatGPT

Provide ChatGPT with payroll and GL data that your organisation allows you to process, then use it to draft a reconciliation by cost centre/account, surface exceptions and off-cycle items, and produce control totals for review. Treat the result as an investigation aid, not an automatic sign-off.

Choose your situation — copy the prompt:
PAYROLL SYSTEM TOTALS
Required columns:
Cost Centre | Payroll GL Code | Pay Type | Run ID | Amount
[Paste payroll rows here]

GENERAL LEDGER POSTINGS — SAME ACCOUNTING PERIOD
Required columns:
Journal Ref | Cost Centre | GL Account | Description | Amount
[Paste GL rows here]

ACCOUNT MAPPING
[Map each Payroll GL Code / Pay Type to the GL Account that should receive it.
If codes already match, state "same codes". Do not infer mappings from descriptions.]

RECONCILIATION SETTINGS
- Accounting period: [e.g. June 2025]
- Currency / units: [e.g. GBP]
- Sign convention: [state whether payroll/GL expense amounts are positive or negative]
- Absolute tolerance: £[e.g. 0.50]
- Grouping key: Cost Centre + mapped GL Account
- Off-cycle runs should be: [included in the period total / excluded because posted next period]
  and identify them by Run ID / Pay Type.

Rules:
1. Aggregate payroll by Cost Centre + mapped GL Account before comparing with GL.
   Pay Type may be shown as detail, but do not split the reconciliation by Pay Type unless
   the account mapping requires separate GL accounts.
2. Aggregate all GL journal lines by the same Cost Centre + GL Account key.
3. Variance = GL Posted − Payroll Total, using the stated sign convention.
4. Status = MATCH only when ABS(Variance) <= tolerance.
5. Payroll key with no GL amount → MISSING FROM GL.
6. GL key with no mapped payroll amount → UNMATCHED GL ENTRY.
7. Equal-and-opposite variances are only a CANDIDATE reclassification/miscoding pattern.
   Flag them for investigation; do not conclude miscoding without journal detail.
8. Count off-cycle rows once only. If you list them separately for review, state whether
   they are already included in Payroll Total so the summary is not double-counted.
9. Do not infer a journal entry, correct account, accounting period, or cause without evidence.
10. Recalculate source control totals independently before presenting the result.

Output:
1. Reconciliation table:
   Cost Centre | GL Account | Payroll Total | GL Posted | Variance | Status | Evidence/notes
2. Pay Type / Run ID detail for exception rows only
3. Candidate equal-and-opposite patterns, clearly labelled "investigate"
4. Off-cycle review list with an "included in total? yes/no" column
5. Control summary calculated from the original source data:
   Payroll source total | GL source total | Net variance |
   Number of payroll grouping keys | Number of GL grouping keys |
   Number of keys outside tolerance

Do not call this a final sign-off. A reviewer must confirm exceptions and control totals.

Replace all bracketed sections with your real data, then paste the prompt into ChatGPT.

I have a payroll-to-GL variance I need to investigate.

Cost Centre: [e.g. Operations]
GL Account: [e.g. 6100 — Gross Pay]
Payroll system total: [e.g. £60,000]
GL posted amount: [e.g. £55,000]
Variance: [e.g. -£5,000 (GL understated)]

Other accounts showing movement in the same period:
[Paste any other GL postings for this cost centre this month]

Please investigate this variance without assuming the cause.

1. Recalculate the variance from the figures I supplied.
2. List the plausible explanations supported by the evidence.
3. Tell me what additional payroll run / journal / period detail would confirm or reject each explanation.
4. If an equal-and-opposite amount appears in another account, label it only as a candidate reclassification until the journal detail proves it.
5. Do not propose a correcting journal entry unless the source journal, intended GL account,
   accounting period and debit/credit direction are all evidenced in the data I provide.
6. If the evidence is sufficient for a reclassification, show the proposed entry separately
   and label it "review before posting".

Use this after spotting a VARIANCE in the main reconciliation output.

I need to reconcile payroll at employee level only if my GL contains employee-level identifiers.

PRIVACY / DATA MINIMISATION
Use Employee ID only. Do not include employee names, addresses, bank details, tax IDs,
national insurance/social-security numbers, or other unnecessary personal data.

PAYROLL EXTRACT
Columns: Employee ID | Cost Centre | Payroll GL Code | Gross Pay |
Employer Tax | Pension/Benefits | Net Pay
[Paste only the fields required for this check]

GL POSTINGS FOR THE SAME PERIOD
Columns: Journal Ref | Employee ID (if genuinely present) | GL Account | Amount
[Paste GL rows]

First determine whether the GL is actually granular enough for employee-level matching.
If Employee ID is absent or one GL line aggregates multiple employees, stop and say that
an employee-level reconciliation cannot be proven from this GL extract.

If employee-level IDs do exist:
- Map Payroll GL Code to GL Account explicitly.
- Aggregate multiple payroll or GL rows by Employee ID + mapped GL Account before comparing.
- Do not reuse or double-count lines.
- Variance = GL − Payroll using the stated sign convention.
- Apply tolerance: £[amount].
- Missing payroll-side counterpart → UNMATCHED GL.
- Missing GL-side counterpart → MISSING FROM GL.
- Do not infer corrections or causes from the amount alone.

Output:
1. Employee ID + GL Account reconciliation table
2. Missing from GL list
3. Unmatched GL list
4. Source control totals and exception count
5. Any limitation caused by aggregation or missing identifiers

For cost-centre level reconciliation use the Full reconciliation tab above.

Before — payroll and GL totals disagree, but account context is missing
ExcelHomeDataSort & Filter
F2
fx
=E2-D2
ABCDEF
1Cost CentreGL AccountPay TypePayrollGLVariance
2Operations6100Gross Pay£57,800£55,300−£2,500
3Operations6200Employer NIC£19,460£21,960+£2,500
4Operations total£77,260£77,260£0
Payroll ExportGL ExtractRecon
The cost centre total agrees, but the expense split does not. Without GL account and Pay Type visible, the two £2,500 variances look like unrelated problems.
After — equal-and-opposite variances are flagged as a candidate reclassification
ExcelHomeFormulasConditional Formatting
G2
fx
=IF(ABS(F2)<=$J$1,"MATCH","INVESTIGATE") // J1 = absolute tolerance
ABCDEFG
1Cost CentreGL AcctPay TypePayrollGLVarianceStatus
2Operations6100Gross Pay£57,800£55,300−£2,500Investigate pairing
3Operations6200Employer NIC£19,460£21,960+£2,500Candidate opposite
4Operations total£77,260£77,260£0Total reconciles
Reconciliation logic
Variance = GL − Payroll

6100 Gross Pay:      £55,300 − £57,800 = −£2,500
6200 Employer NIC:   £21,960 − £19,460 = +£2,500
Net variance:                              £0

Pattern → candidate reclassification / miscoding only.

Only if the underlying journal proves £2,500 was posted to 6200 instead of 6100:
Proposed reclass for review:
Dr 6100 Gross Pay       £2,500
Cr 6200 Employer NIC    £2,500

Do not post from the variance pattern alone. ✓
Before — £5,000 variance is visible only at account total level
ExcelHomeDataFilter
F2
fx
=E2-D2
ABCDEF
1Cost CentreGL AcctPay TypePayrollGLVariance
2Operations6100Gross Pay£60,000£55,000−£5,000
The total proves the GL is £5,000 below payroll, but it does not identify whether the cause is timing, miscoding, an off-cycle run, or a manual journal.
After — detailed Run ID evidence identifies the missing off-cycle posting
ExcelHomeDataSort & Filter
F4
fx
MISSING FROM GL
ABCDEF
1DateRun / JournalPay TypePayrollGLResult
230/06/2025REG-JUNRegular£55,000£55,000Matched
315/06/2025OC-1506Off-cycle£5,000Missing from GL
4Total£60,000£55,000−£5,000
Root-cause trace
Regular payroll:
Payroll £55,000 ↔ GL £55,000 = matched

Off-cycle run OC-1506:
Payroll £5,000 ↔ no GL posting = missing from GL

Account variance:
£55,000 GL − £60,000 payroll = −£5,000 ✓

Within this example, the Run ID detail identifies the missing payroll-side posting.
The correcting journal's credit account cannot be inferred safely from this excerpt; use the payroll journal / clearing-account detail before posting.
Before — employee-level rows are mixed with no exception status
ExcelHomeDataFilter
E4
fx
ABCDEF
1Emp IDCost CentreGL AcctPayroll GrossGL AmountStatus
2EMP-041Operations6100£3,500£3,500?
3EMP-042Operations6100£4,200?
4EMP-043Sales6100£2,800£2,800?
5EMP-091Finance6100£3,250£3,200?
Without an explicit variance and status column, the reviewer has to scan employee IDs and amounts manually to find missing or mismatched postings.
After — matching by Employee ID + GL account isolates exceptions
ExcelHomeFormulasFilter
F3
fx
=IF(E3="","",E3-D3)
ABCDEFG
1Emp IDCost CentreGL AcctPayrollGLVarianceStatus
2EMP-041Operations6100£3,500£3,500£0Matched
3EMP-042Operations6100£4,200Missing from GL
4EMP-043Sales6100£2,800£2,800£0Matched
5EMP-091Finance6100£3,250£3,200−£50Variance
6Sample summary£13,750£9,5002 exceptions
Exception logic
Variance formula keeps numeric variance separate:
=IF(E3="","",E3-D3)

Status formula can then test missing GL vs tolerance.

EMP-041: £3,500 − £3,500 → matched
EMP-042: no GL row for Employee ID + 6100 → Missing from GL
EMP-043: £2,800 − £2,800 → matched
EMP-091: £3,200 GL − £3,250 payroll = −£50 → variance

Sample totals:
Payroll £13,750
GL £9,500
Net variance = £9,500 − £13,750 = −£4,250

Shown sample: 4 employees, 2 exceptions. ✓
Four payroll-to-GL variance patterns worth investigating
GL miscoding
Equal-and-opposite variance across two accounts can indicate a possible reclassification — verify journal detail before concluding miscoding
High risk
Wrong period posting
Payroll run posted in Month 7 but belongs in Month 6 → timing difference
High risk
Off-cycle not journalised
Off-cycle run paid out but no GL journal posted → MISSING FROM GL
Easy fix
Manual journal adjustment
GL adjusted manually with no matching payroll entry → UNMATCHED GL ENTRY
Invisible

Payroll reconciliation process step by step

Run a payroll reconciliation with ChatGPT — 4 steps
1

Export payroll totals by cost centre and GL account

From your payroll system, export a summary by cost centre and pay type — not individual employee rows. You need: Cost Centre, GL Account, Pay Type (Gross Pay / Employer NIC / Pension), and Amount. Most payroll systems have a cost analysis or cost centre summary report for this.

2

Export the matching GL postings for the same period

From your accounting system, extract all journal lines posted to the payroll-related GL accounts defined in your own chart of accounts for the period. Include Journal Ref, Cost Centre, GL Account, Description, and Amount. If your payroll and GL use different account codes, prepare a mapping table.

3

Paste both datasets into the prompt and set your tolerance

Use the tolerance approved by your reconciliation policy. Set it to £0.00 when exact agreement is required; do not choose £0.50 merely because it appears in the example. Specify the period clearly — ChatGPT uses it in the sign-off summary header.

4

Check equal-and-opposite variances first

When one account is short by exactly the amount another is over, the pattern can indicate a reclassification issue, but it does not prove one. Check the source journal, account mapping and payroll run before deciding whether any correcting entry is needed.

Tip: Coordinate payroll-to-GL and bank reconciliation according to your close process. They test different assertions: payroll-to-GL checks accounting classification/completeness, while the bank reconciliation checks cash clearing and other bank-side exceptions.

Reconcile Payroll Totals

Investigate and fix a variance — 4 steps
1

Identify the specific Cost Centre and GL Account

Use the main reconciliation output to find the exact combination causing the variance (e.g., Operations - 6100 Gross Pay).

2

Pull the GL transaction list

Export only the ledger entries for that specific GL account and cost centre for the period. Do not clutter the prompt with the entire company's ledger.

3

Provide ChatGPT with the details

Use the Variance prompt and supply the payroll total, GL total, and the detailed GL rows. ChatGPT checks against common issues like missing journals, wrong period postings, or manual adjustments.

4

Document the confirmed correction

Use ChatGPT's diagnosis as an investigation aid. Only after the source payroll journal, period, accounts and supporting detail prove the cause should you prepare any reclass, accrual or missing entry for your normal review/approval process.

Investigate Payroll Variances

Reconcile at the employee level — 4 steps
1

Export raw payroll data per employee

Export only the payroll fields required for the check, using Employee ID rather than employee name. Avoid unnecessary personal data such as bank details, tax IDs or addresses.

2

Ensure GL report includes Employee ID tags

Check whether the GL genuinely contains Employee ID at line level. If the journal aggregates several employees into one posting, employee-level matching cannot be proven from that GL extract; reconcile at the available aggregation level instead.

3

Run the strict Employee ID matching prompt

Paste both datasets into ChatGPT using the Employee-level prompt. If both datasets are employee-granular, aggregate by Employee ID + mapped GL Account and compare those totals. If the granularity differs, stop rather than forcing a match.

4

Follow up on orphaned records

Investigate the exceptions list. Investigate orphaned records without assuming the cause. They may reflect timing, aggregation, mapping, an omitted journal or another data-quality/control issue.

Frequently asked questions

What is payroll reconciliation and why does it matter for month-end close?
Payroll reconciliation verifies that payroll costs and related amounts in the general ledger agree to the payroll register or payroll-system output for the same period — including gross pay, employer taxes, and benefits. Without it, the salary line on your P&L can carry errors for weeks before anyone notices.
Can ChatGPT reconcile payroll across multiple pay frequencies in one pass?
Yes, if the pay periods and GL posting periods are clearly separated. Reconcile each frequency/run to the appropriate accounting period and account mapping first, then combine only the control totals that belong to the same reconciliation period.
Does ChatGPT work with exports from ADP, Workday, or SAP?
ChatGPT can analyse data you paste and, in supported environments, spreadsheet files you upload. For payroll data, follow your organisation's approved ChatGPT/data-handling policy and minimise personal information before sharing. Then map the export columns explicitly rather than assuming ChatGPT will infer the structure correctly.
How do I handle mid-month pay adjustments or off-cycle runs?
Identify off-cycle runs separately by Run ID / Pay Type and state whether they belong in the current accounting period. If they are listed separately for review, keep an "included in payroll total?" flag so they are not counted twice in the reconciliation summary.
Can I use this to check individual employee records?
Use employee-level matching only when both payroll and GL extracts genuinely contain employee-level identifiers. If the GL is aggregated, reconcile at the available cost-centre/account or journal level instead. Use Employee ID only and minimise unnecessary personal data.
What causes most payroll-to-GL variances?
Examples worth investigating include wrong-period postings, account mapping/reclassification issues, off-cycle runs not reflected in the GL, and manual journals without corresponding payroll detail. Equal-and-opposite variances are only a signal to investigate, not proof of miscoding.

Related Excel workflows