Guide

How to run a payroll parallel test, step by step

Payroll parallel testing means running the same pay period through your current and your new payroll system, then comparing the results employee by employee and pay code by pay code. This guide covers the method, a parallel run checklist, the problems that usually produce false variances, and how to read what comes back.

What is a payroll parallel test?

A parallel test (also called a parallel run) processes the same employees, with the same inputs, for the same period in two payroll systems: the source, usually the system you run today, and the target, the system you are moving to. You then compare the two sets of results line by line. Where they differ, someone has to explain why.

The comparison is only as good as its join. To line up results you need to know which source employee is which target employee, and which source pay code (and tax authority) corresponds to which target pay code. Most of the effort in a parallel test goes into building and checking those two mappings, not into the arithmetic.

Why teams run a parallel test before go-live

A new payroll system can pass every unit test and still pay people differently. Earnings, deductions, taxes, employer costs and converted employee data all interact, and the fastest way to see the combined effect is to pay a real period both ways.

A parallel test also gives the project a record. When sign-off comes, the payroll lead, the implementation partner and finance can point to what was compared, what differed, what was fixed, and which differences were accepted and why.

The payroll parallel testing method: 10 steps

This method works whatever tool you use to compare. You can follow it with spreadsheets alone; a later section shows how SmartCompaire supports the comparison steps.

  1. Agree the scope and the pass criteria

    Write down which pay groups, countries and periods are in scope, who signs off, and what “done” means: for example, every variance either within tolerance, fixed, or documented as a known or accepted difference. Agree this before the first comparison, not after.

  2. Choose the periods and align the inputs

    Pick periods that exercise the rules you changed, and make sure both systems receive the same inputs for them: the same hours, new hires, terminations, rate changes and one-off payments. A difference caused by a missing input in one system looks exactly like a configuration error.

  3. Extract results from both systems at the same level of detail

    Export one row per employee, tax authority and pay code, with the amount and, where available, the number (hours or units) and rate. Keep payroll area and period fields so you can tell runs apart. Compare like with like: current-period amounts against current-period amounts.

  4. Build the employee crosswalk

    Map every source employee number to its target employee number. Each number should appear once on each side. Check for employees who are paid in one system but missing from the crosswalk, and keep employee numbers as text so leading zeros survive.

  5. Map pay codes and tax authorities

    Map each source pay code, together with its tax authority where one applies, to the target pay code, and assign each mapping to a category such as earnings, pre-tax deductions, employee taxes, employer taxes or net pay. Expect many-to-one mappings where one system splits what the other combines.

  6. Set tolerances per category

    Decide how large a difference is acceptable for each category, and agree it with finance or audit. Tolerances keep rounding noise out of the review, but set them too wide and real errors disappear inside them.

  7. Check readiness before comparing

    Before you compare, count the pay rows that will not join: pay codes with no mapping, employees with no crosswalk entry, rows with no tax authority, and cells holding spreadsheet errors. Fix these first. Each can produce a false variance or an unintended total.

  8. Run the comparison and keep one-sided rows

    Sum amounts per employee and mapping group on each side, then subtract. Use a join that keeps rows found in only one system: a pay code that exists only in the target is a finding, and a lookup that silently drops it hides the problem.

  9. Triage every variance

    Give each over-tolerance row an outcome: a defect to fix (with an owner, priority and due date), a known or accepted difference with a written justification, or a mapping correction. Record the decision against the row so the next reviewer does not start again.

  10. Fix, rerun and sign off

    Apply the fixes, rerun the comparison and confirm the count of over-tolerance rows is falling. Keep each run to show the trend, and sign off on a run whose variances you have actually triaged.

What usually goes wrong in a parallel run

Most early variances are not pay errors but comparison problems. Check these before you raise a defect.

  • Employee keys that do not line up. The new system issues new employee numbers, or reuses old ones for different people. Without a reliable crosswalk, the same person shows up as one employee missing from the target and another missing from the source.
  • Employee number formats. Spreadsheets turn “0012345” into 12345, and one system pads numbers while the other does not. The numbers then never match, and every row for that employee looks unmapped.
  • Tax authorities treated as an afterthought. The same tax pay code can exist under several federal, state or local authorities. Map on pay code alone and amounts from different authorities get added together. Leave the authority blank and, depending on the tool, rows either fail to join or get summed across authorities.
  • Unmapped or new pay codes. Target systems often introduce codes the source never had, such as split earnings or new employer contributions. If a code has no mapping, its amounts either vanish from a lookup-based comparison or inflate the variance count.
  • Many-to-one mappings compared one-to-one. When two source codes become one target code, comparing each source code to the target total produces two false variances. Group the codes and compare the sums.
  • Thresholds that are too tight, too loose, or missing. A zero tolerance on everything buries reviewers in rounding differences. A wide one hides real errors. A category with no tolerance gets no pass or fail at all.
  • Periods mixed together. Loading two periods into one comparison adds them together, so an error in one period can be masked by an opposite error in the other. Compare one period at a time, or be explicit that you are comparing totals.
  • Spreadsheet errors and formatting. #N/A or #REF! cells, currency symbols, bracketed negatives and mixed date formats all break a hand-built comparison quietly.

How to read parallel test results

Start with the counts, not the rows. Separate exact matches, rows within tolerance, rows over tolerance, rows with no tolerance, and rows that could not be paired because the employee or pay code had no mapping. Clear the mapping gaps first: they are comparison problems, and they distort every other number.

Next, group over-tolerance rows by category and pay code. A single configuration error usually shows up as the same pay code differing for many employees, so one fix can clear dozens of rows. Differences spread across many codes for one employee usually point to that employee’s data: a missing rate change, a different work location, or an input that reached only one system.

Look at the direction and the components. A consistent sign suggests a rule difference; mixed signs suggest timing or input differences. Where you have number and rate, check which one moved.

Review net pay last. It is what employees notice, but it is the sum of everything above it.

Finally, track the over-tolerance count across runs. If it rises after a fix, the fix moved the problem rather than solving it.

How SmartCompaire supports a parallel test

SmartCompaire works from files exported from your source and target systems, so it needs no connection to either one.

Loading both extracts

Upload .xlsx, .xls or .csv files, or paste rows. File imports keep leading zeros and read $ signs, commas and bracketed negatives. Payroll area and period are stored but do not separate rows: a project’s pay data is totalled together.

Learn more

Mapping and readiness check

A mapping left without a tax authority applies to that pay code under every authority, so fill in authorities wherever one pay code exists under several. Before a run, the readiness check lists unmatched pay codes and unmapped employees.

Comparison runs and triage

Runs keep one-sided rows and grade the amount difference against absolute thresholds. Reviewers link defects or KD/AD records to rows. Decisions stay on the run they were made in; a rerun produces fresh rows, so link accepted differences again.

Reading results and reporting

Six report types come as PDF or Excel. The Comparison report lists up to the 500 largest over-threshold rows; export the results grid to Excel for every row.

Learn more

Hirra, the in-app assistant

Hirra, in beta, works with your own permissions: it can read your data and, if your role allows, raise defects or update review fields; it cannot run comparisons or imports from chat yet.

Learn more

Parallel run checklist

A short checklist to keep beside the method. Each item should be true before you sign off.

  • Scope is written down: pay groups, countries, periods, sign-off owner and pass criteria.
  • Inputs match: both systems processed the same hours, changes and one-off payments for the period.
  • Extracts match in grain: one row per employee, tax authority and pay code, current-period amounts on both sides.
  • Every paid employee is mapped: no employee in either extract is missing from the crosswalk, and leading zeros are intact.
  • Every pay code is mapped: including tax authorities, new target-only codes and many-to-one groupings.
  • Every category has a tolerance: agreed with finance or audit and recorded with the project.
  • One-sided rows are visible: the comparison shows amounts that exist in only one system.
  • Every over-tolerance row has an outcome: fixed, raised as a defect, or documented as a known or accepted difference.
  • The run you sign off on is kept: with its counts, thresholds and the review decisions made against it, and it is the run you actually triaged.

Frequently asked questions

What is the difference between a parallel test and a parallel run?

The terms are used interchangeably. Both mean processing the same period in the current and the new system and comparing the results. Some teams use “parallel run” for one cycle and “parallel testing” for the whole exercise.

How many pay periods should a payroll parallel test cover?

There is no fixed number. Choose enough periods to exercise the rules that changed and the events your population has, and keep going until the variance count is stable and explained. In SmartCompaire, each project totals all of its pay data, so create one project per period you want to compare separately. Each project needs its own employee and pay code mappings, so upload the same mapping files to each.

Do I need a live connection to my payroll systems to run a parallel test?

No. SmartCompaire runs a parallel test from files exported from your source and target systems, in .xlsx, .xls or .csv format, or from rows you type or paste. It has no live connection to any payroll or time system and does not write anything back.

Can SmartCompaire compare time and attendance data?

Partly. A time project uses the same file layout and engine as payroll. Only the Amount difference is graded; hours or units in the Number column are compared and shown but not graded, so include amounts if you need pass or fail. There are no time-specific rules such as shifts, overtime or punches.

What is a KD/AD?

A known or accepted difference: a variance the team has investigated and decided is expected, such as a deliberate rule change in the new system. In SmartCompaire, a KD/AD record holds the description, a link to the justification document, an assignee and an approval status, and you link it to result rows one at a time.

See SmartCompaire on your own payroll data

Bring a source and a target extract from your parallel run; we will walk through the comparison with you.

Request a demo