Set Up Earnings and Deduction Fields for Paystubs
Configure paystub fields in the dashboard — separate earnings and deductions tables, capture pay period totals, and export payroll data.
Ready to set this up? Sign up for PerfectParser and get 20 free credits — no credit card required.
What this guide helps you do
This guide shows how to configure a paystub parser in PerfectParser, separate earnings and deductions tables, run a test batch, and export payroll data. Use the prompt below only when you need consistent field names across payroll providers — skip it initially for broader discovery.
Why paystubs are hard to parse
Paystubs pack current-period and year-to-date figures side by side in earnings and deductions tables. Auto-detect often grabs the YTD gross when you intended the period gross, or merges federal tax withheld this period with the YTD tax column. Payroll providers use different labels — "Regular", "Base", "Salary" for the same earnings type — and overtime may appear as a separate row or embedded in hours. Deductions span taxes, benefits, garnishments, and 401(k) contributions in one table with inconsistent ordering. Pay period and pay date are distinct fields but appear adjacent in headers. Multi-page stubs attach benefit summaries on page two. A schema without separate earnings_breakdown and deductions_breakdown tables loses the detail income verification workflows require.
Recommended Fields
We suggest configuring the following schema fields for your Paystub Parser to capture all essential earnings and withholding details.
| Field Name | Type | Description |
|---|---|---|
employee_name | Text | The employee's full name. |
employer_name | Text | The name of the company issuing the paystub. |
pay_period | Text | The payroll date range (e.g. June 1 - June 15, 2026). |
pay_date | Text | The date the check/wages were issued. |
gross_earnings | Number | Pre-tax earnings for the current period. |
net_pay | Number | The final take-home net pay amount. |
earnings_breakdown | Table | Table containing type (e.g., Regular, Overtime), hours, rate, and amount for current earnings. |
deductions_breakdown | Table | Table of withholdings (e.g. Federal Tax, Health Insurance) containing type and amount. |
AI Prompt (Optional)
Use this only when you want to guide auto-detect toward a specific set of fields.
If you want PerfectParser to discover additional fields on its own, leave the AI Prompt (Optional) box blank for the first pass, review the detected schema, then add a prompt only if you need tighter consistency.
When you do use a prompt, copy and paste the following instructions into the AI Prompt (Optional) field during setup:
Set up this parser in the dashboard
Create a parser
Go to Parsers → New Parser in the dashboard. Give it a name like "Paystub Parser" and optionally select the document category.
Upload a sample document
Drag and drop a representative paystub (PDF, PNG, or JPEG). Use a stub from your target payroll provider — the AI uses it to learn earnings and deductions table structure.
Detect fields or use standard fields
Paste the AI Prompt from the section above into the AI Prompt (Optional) box if you want tighter field mapping, then click Auto-Detect. To discover more fields automatically, leave the prompt blank and click Auto-Detect. Or skip auto-detect and add fields manually using the Recommended Fields table above.
Review and save your schema
Check that gross_earnings and net_pay reflect current period values, not YTD totals. Confirm earnings_breakdown and deductions_breakdown are separate Table fields. Click Save.
Run a test batch
Navigate to Bulk Extraction, choose how your files are organised, upload a small test set of paystubs, and click Extract All Files. Review the results in Batch History and export to CSV or Excel.
Common mistakes
- Mapping YTD gross into gross_earnings when the header row shows both period and YTD columns.
- Collapsing earnings and deductions into one table — they serve different purposes in underwriting and HR workflows.
- Omitting deductions_breakdown and relying only on net_pay — reviewers cannot verify tax withholding without line detail.
- Confusing pay_date (check date) with pay_period (coverage range) when both appear in the header block.
Next steps
Test your first extraction free — sign up for PerfectParser, no credit card needed.
FAQs
Do I need a sample paystub to set up this parser?
Yes. Upload a paystub from the payroll provider you process most often — ADP, Gusto, and in-house formats use different table layouts. Include a stub that shows both earnings and deductions sections.
How do I handle YTD columns vs current-period amounts?
Keep gross_earnings and net_pay as current-period Number fields. In your earnings_breakdown and deductions_breakdown tables, add field descriptions that specify 'current period only, not year-to-date'. If YTD totals are required, add explicit YTD fields rather than reusing period fields.
How many credits does setup and a test extraction use?
Parser setup is free. Each paystub page costs 1 credit. Most paystubs are one page. Income verification batches with multiple months per applicant should budget 1 credit per stub.
Looking for product features and use cases?