Skip to content
VerifyStub

Pay stub to CSV, one row per stub, with the math checked

Drop in PDFs or phone photos of pay stubs and get a CSV with a fixed set of columns, in pay-date order, ready for a spreadsheet or your system's import. Every row carries its own check results.

Pay stub intake

Free: 1 file per day, up to 10 pages, no account

Used only for files over 10 pages or a second file in a day.

No file handy? Open a built-in sample (fictional people and employers).

Files are processed in memory and deleted after conversion. How uploads are handled.

Sample result: three weekly stubs, one period missing, one stub off by $12.40

Brightwater Home Care (fictional), March to April 2025. The 03/17 to 03/23 stub is not in the file. Upload your own file above and this area is replaced with its stubs.

  1. Stub 1 · Weekly

    Paid Mar 14, 2025

    Period Mar 3 – Mar 9, 2025

    Math checks pass
    Gross
    $918.00
    Taxes
    $164.59
    Deductions
    $91.14
    Net
    $662.27

    YTD gross $9,648.00 · YTD net $6,960.33

    • Gross - taxes - deductions = net. 918.00 - 164.59 taxes - 91.14 deductions = 662.27, matching net pay.
    • Earnings lines add up to gross. 3 earnings line(s) add to 918.00.

    4 more consistency checks passed.

    Lines read from this stub

    Earnings read

    LineHoursRateCurrentYTD
    Regular4022.50900.009,000.00
    Overtime033.750.00405.00
    Shift Differential121.5018.00243.00

    Taxes read

    LineCurrentYTD
    Federal Withholding74.42763.82
    Social Security Tax52.97593.73
    Medicare Tax12.39138.87
    State Income Tax24.81287.01

    Deductions read

    LineCurrentYTD
    401(k) Employee pre-tax27.54289.44
    Health Insurance pre-tax54.00522.00
    Dental Insurance pre-tax9.6092.80
  2. Stub 2 · Weekly

    Paid Mar 21, 2025

    Period Mar 10 – Mar 16, 2025

    2 to review
    Gross
    $1,053.00
    Taxes
    $190.62
    Deductions
    $107.59
    Net
    $767.19

    YTD gross $10,701.00 · YTD net $7,727.52

    • Gross - taxes - deductions = net. 1,053.00 - 190.62 taxes - 107.59 deductions = 754.79, but net pay prints 767.19 (higher by 12.40).
    • Earnings lines add up to gross. 3 earnings line(s) add to 1,053.00.
    • Deduction lines add up to the printed total. Deduction lines add to 107.59 but the stub's total deductions prints 95.19 (differs by 12.40).

    3 more consistency checks passed.

    Lines read from this stub

    Earnings read

    LineHoursRateCurrentYTD
    Regular4022.50900.009,900.00
    Overtime433.75135.00540.00
    Shift Differential121.5018.00261.00

    Taxes read

    LineCurrentYTD
    Federal Withholding86.20850.02
    Social Security Tax61.34655.07
    Medicare Tax14.35153.22
    State Income Tax28.73315.74

    Deductions read

    LineCurrentYTD
    401(k) Employee pre-tax31.59321.03
    Health Insurance pre-tax54.00576.00
    Dental Insurance pre-tax9.60102.40
    Parking pre-tax12.4012.40
  3. Stub 3 · Weekly

    Paid Apr 4, 2025

    Period Mar 24 – Mar 30, 2025

    1 to review
    Gross
    $921.00
    Taxes
    $165.16
    Deductions
    $91.23
    Net
    $664.61

    YTD gross $12,607.50 · YTD net $9,090.81

    • Gross - taxes - deductions = net. 921.00 - 165.16 taxes - 91.23 deductions = 664.61, matching net pay.
    • Earnings lines add up to gross. 3 earnings line(s) add to 921.00.

    4 more consistency checks passed.

    Lines read from this stub

    Earnings read

    LineHoursRateCurrentYTD
    Regular4022.50900.0011,700.00
    Overtime033.750.00607.50
    Shift Differential141.5021.00300.00

    Taxes read

    LineCurrentYTD
    Federal Withholding74.681,013.39
    Social Security Tax53.16769.33
    Medicare Tax12.43179.94
    State Income Tax24.89370.20

    Deductions read

    LineCurrentYTD
    401(k) Employee pre-tax27.63378.23
    Health Insurance pre-tax54.00684.00
    Dental Insurance pre-tax9.60121.60

What does a pay stub to CSV conversion produce?

A pay stub to CSV conversion turns each stub into one row of plain values: dates, earnings by type, taxes, deductions, net pay and year-to-date totals. The point is to stop retyping the same eight to twenty numbers per stub.

Here each row also has the result of the net-pay math and the YTD chain check, so the sheet shows which rows to trust and which to compare with the original.

From pay stub to CSV in four steps

  1. Upload the file

    Choose a PDF or photos, or paste an image. Free: 1 file per day, up to 10 pages, no account.

  2. Stubs are found and read

    The file is split into one stub per row. Dates, earnings, taxes, deductions, net and YTD figures are read into their columns.

  3. The checks fill their columns

    Net-pay math, the earnings sum and the YTD chain are tested and written next to each row, with a flags column in plain words.

  4. Download or copy

    Download the CSV, the chain report or the JSON, or copy the CSV straight into a spreadsheet.

The 45 columns, with a real example

Example values are the first stub of built-in sample A (a fictional employee), taken from the file this site produces for it.

ColumnWhat it holdsExample
Who and when
stub_no Position in pay-date order across the whole result. 1 is the earliest stub. 1
employer Employer name as printed on the stub. Cedar Ridge Supply Co.
employee Employee name as printed on the stub. Morgan T. Ellery
ssn_masked XXX-XX- followed by the last four digits. The full number is never written out. XXX-XX-4821
period_start First day of the pay period, YYYY-MM-DD. When a stub prints only the end date, the start is derived from the pay frequency and flagged on screen. 2025-05-04
period_end Last day of the pay period, YYYY-MM-DD. 2025-05-17
pay_date Date the pay was issued (the check or pay date), YYYY-MM-DD. Stubs are ordered by this. 2025-05-23
frequency weekly, biweekly, semimonthly, monthly or other. Blank when it could not be worked out. biweekly
Hours and rate
regular_hours Hours on the regular earnings line. Blank for salaried stubs. 80
regular_rate Hourly rate on the regular earnings line, kept only when hours times rate matches the amount. 26
overtime_hours Hours on overtime earnings lines. 4.5
Earnings
regular_pay Regular earnings for the period. 2080.00
overtime_pay Overtime earnings for the period. 175.50
bonus_pay Bonus earnings for the period. (blank)
commission_pay Commission earnings for the period. (blank)
pto_pay Paid time off: PTO, vacation, sick, holiday, bereavement and jury duty pay. (blank)
other_earnings Every other earnings line, such as tips or allowances. Reimbursements added after net are not part of it. (blank)
gross_pay Gross pay as printed. If the stub does not print it, the sum of the earnings lines (labelled 'summed' on screen). 2255.50
Taxes
federal_tax Federal income tax withheld. 214.84
state_tax State income tax withheld. 56.27
local_tax City, county or other local income tax withheld. 51.15
social_security_tax Social Security (OASDI) tax withheld. 133.85
medicare_tax Medicare tax withheld. 31.30
other_tax Other statutory withholdings, such as state disability, family-leave or unemployment contributions. (blank)
total_taxes Sum of the tax lines. If the stub shows only a total, that printed total. 487.41
Deductions
pretax_deductions Pre-tax deductions: the printed total if there is one, otherwise the lines marked pre-tax. 209.38
posttax_deductions Post-tax deductions, on the same basis. (blank)
retirement_401k Retirement plan contributions (401(k), 403(b), 457, IRA-style lines). 112.78
health_deductions Medical and vision premiums, HSA/FSA and similar benefit lines. 85.00
dental_deductions Dental premiums. 11.60
garnishments Garnishments, child support and levies. (blank)
other_deductions Deduction lines that fit none of the groups above. (blank)
total_deductions Sum of the deduction lines. If the stub shows only a total, that printed total. 209.38
Net pay and year to date
net_pay Net pay as printed. 1558.71
ytd_gross Year-to-date gross as printed (or summed from the YTD column of the earnings lines). 21671.00
ytd_taxes Year-to-date taxes. 4822.90
ytd_deductions Year-to-date deductions. 2014.78
ytd_net Year-to-date net pay. 14833.32
Checks
net_math_check PASS, FAIL or NA: does gross minus taxes minus deductions equal net pay within $0.02? PASS
net_math_diff Printed net minus the computed net, in dollars. Positive means the stub prints more than the lines support. 0.00
earnings_sum_check PASS, FAIL or NA: do the earnings lines add up to gross pay? PASS
ytd_chain_status FIRST, TIES, BREAK, GAP, RESET_OK, RESET_BREAK or UNCHECKED: how this stub's YTD gross relates to the previous stub's. FIRST
ytd_chain_expected The YTD gross the chain predicts: previous YTD plus this stub's gross. (blank)
ytd_chain_diff Printed YTD gross minus the predicted value, in dollars. (blank)
flags Plain-language reasons the stub needs a second look. Empty when every check passes. (blank)

Reading the checks. A PASS means the printed numbers agree with each other. It says nothing about whether the stub is genuine or whether the employer's payroll is correct.

Pay stub to CSV: by hand, generic converter, VerifyStub

What each approach hands you, and what is left for you to do.

What you need Typing into a sheet Generic PDF-to-CSV tool VerifyStub
Column layout Your own template, rebuilt for each file Whatever columns the stub printed, so each payroll provider gives a different sheet 45 fixed columns in the same order every time
Several stubs in one PDF One at a time Usually one table per page, left for you to stack Split into one row per stub and put in pay-date order
Current and YTD columns You keep them apart Often merged or shifted into the wrong column Read separately; YTD figures have their own columns
Negatives and parentheses Typed as you read them Parentheses and trailing minus signs stay as text Parsed to numbers; withholdings written as positive amounts
Dates Mixed formats Left as printed (03/14/25, Mar 14, 2025) YYYY-MM-DD in every date column
Arithmetic checks Only if you add formulas None net_math_check, earnings_sum_check and the YTD chain columns on every row
SSN column Whatever you copy Whatever is printed XXX-XX- plus the last four digits

Pay stub to CSV: common questions

Which columns does the CSV have?

45 columns, always in the same order: who and when, hours and rate, earnings, taxes, deductions, net and year-to-date figures, and the check results. The table on this page lists each one with an example from the built-in sample.

Does the CSV include the check results?

Yes. Each row carries net_math_check, net_math_diff, earnings_sum_check, ytd_chain_status, ytd_chain_expected, ytd_chain_diff and a flags column in plain language, so the checks travel with the data into your spreadsheet.

How are negative numbers and parentheses handled?

Figures printed as (123.45) or 123.45- are read as negative numbers. Withholdings that a stub prints as negatives are written as positive amounts in the tax and deduction columns, so a tax column always reads as the amount taken out.

Why is a cell blank?

A blank means the stub did not print that figure or it could not be read with confidence. A blank is never filled with zero or a guess. If it matters for your calculation, open 'Lines read from this stub' and compare with the original.

Does Excel open the file correctly?

The download is UTF-8 with a byte-order mark, comma separated, with money as plain numbers (two decimals, no currency symbol or thousands separator) and dates as YYYY-MM-DD. If Excel shows dates as text, use Data, From Text/CSV and set the column type.

Can I import the CSV into my loan or screening system?

It is a standard CSV, so any system that imports delimited files can take it after you map the columns. There are no direct integrations with loan origination or screening systems.

What is in the chain-report CSV?

One row per link between neighbouring stubs: the two stub numbers and pay dates, the status (TIES, BREAK, GAP, RESET_OK, RESET_BREAK or UNCHECKED), the expected and printed YTD gross, the difference, and for gaps the missing period and the gross it would have to hold.

Does a text cell ever run as a formula?

No. Text cells that begin with =, +, - or @ are prefixed with an apostrophe so a spreadsheet shows them as text instead of running them.

What if a stub cannot be read?

You get a warning that names the stub and what was missing, and the row keeps blanks where figures were not found. If no pay stub figures are found in a file at all, the page says so instead of returning an empty or invented sheet.

Is the full Social Security number kept?

No. The CSV shows XXX-XX- and the last four digits only.

How uploads are handled

Turn the next stack of stubs into a CSV

Free: 1 file per day, up to 10 pages, no account. Nothing to install.

Upload pay stubs