NACHA file format explained, record by record

Blog · 2026-10-03 · 5 min read

Free tool: Open the free NACHA file generator – runs in your browser, files are not uploaded.

A NACHA file (also called an ACH file) is a plain-text file that a US business uploads to its bank to send many ACH payments at once – payroll direct deposits, vendor payments or collections. Every line is a record of exactly 94 characters, and the first character says what kind of record it is. Banks reject files where a single line is too short, a total is off by one cent, or the hash does not add up.

This guide walks through a real two-payment payroll file, produced by our NACHA file generator and checked by an independent parser. Field positions follow Nacha's own ACH Guide for Developers.

The example file

101 02100002111234567892610020930A094101JPMORGAN CHASE         EXAMPLE CORP
5220EXAMPLE CORP                        1123456789PPDPAYROLL         261005   1021000020000001
622021000021123456789        0000150000EMP001         JANE DOE                0021000020000001
632011000015987654321        0000225050EMP002         JOHN SMITH              0021000020000002
822000000200032000030000000000000000003750501123456789                         021000020000001
9000001000001000000020003200003000000000000000000375050
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
...                                     (filler lines up to a multiple of 10)

Trailing spaces are not shown; in the real file every line is padded to 94 characters. The routing numbers are well-known public examples, the account numbers are made up.

The structure

RecordType codeHow manyWhat it holds
File header11 per fileYour bank (immediate destination), your company or bank ID (immediate origin), creation date and time
Batch header51 per batchCompany name and ID, SEC code (PPD, CCD…), entry description, effective date
Entry detail61 per paymentTransaction code, receiver's routing and account number, amount, name, trace number
Addenda7Optional80 characters of payment-related information (PPD/CCD allow one per entry)
Batch control81 per batchEntry count, entry hash, total debits and credits of the batch
File control91 per fileBatch count, block count, entry count, hash and totals of the whole file

1 – File header

PositionsFieldIn the example
1Record type1
2–3Priority code01 (always)
4–13Immediate destination: a blank + your bank's 9-digit routing number 021000021
14–23Immediate origin: often your company ID – your bank tells you what to put here1123456789
24–29 / 30–33File creation date (YYMMDD) and time (HHMM)261002 0930
34File ID modifier: A, B, C… for a second or third file on the same dayA
35–40Record size 094, blocking factor 10, format code 1094101
41–63 / 64–86Destination and origin names (23 characters each)JPMORGAN CHASE, EXAMPLE CORP

5 – Batch header

6 – Entry detail (one per payment)

6 22 02100002 1 123456789         0000150000 EMP001          JANE DOE               00 0 021000020000001
│ │  │        │ │                 │          │               │                      │  │ └ trace number (ODFI + sequence)
│ │  │        │ │                 │          │               │                      │  └ addenda indicator
│ │  │        │ │                 │          │               └ receiver name (22)   └ discretionary data
│ │  │        │ │                 │          └ identification number (15)
│ │  │        │ │                 └ amount in cents (10 digits) = $1,500.00
│ │  │        │ └ account number (17, left-aligned)
│ │  │        └ check digit (9th routing digit)
│ │  └ receiving bank routing, first 8 digits
│ └ transaction code
└ record type

Spaces added between fields for readability; the real line has none.

The transaction code says which kind of account and which direction:

CheckingSavings
Credit (deposit)2232
Debit (collection)2737
Prenote (zero-dollar test) credit / debit23 / 2833 / 38

Amounts have no decimal point: 0000150000 is $1,500.00. The routing number is split: 8 digits plus the check digit, which must pass the ABA checksum (weights 3, 7, 1).

8 – Batch control and the entry hash

The entry hash (positions 11–20) is the sum of the 8-digit receiving-bank numbers of all entries, keeping only the last 10 digits. In the example: 02100002 + 01100001 = 03200003, written as 0003200003. Then come total debits (21–32) and total credits (33–44) in cents: 000000375050 = $3,750.50. The company ID and batch number must repeat the batch header exactly.

9 – File control and blocking

The file control repeats the totals for the whole file, adds the batch count and the block count. NACHA files are written in blocks of 10 records ("blocking factor 10"). If the number of lines is not a multiple of 10, the file is padded with lines of 94 nines. Our example has 6 real records, so 4 filler lines are added and the block count is 000001.

Common reasons a bank rejects a NACHA file

Build it from a spreadsheet: PayBatchKit's NACHA generator pads every field, computes the hash, totals and blocking, checks routing numbers and warns about weekend dates – in your browser, without uploading your payroll. Prefer to start from a template? Download the free NACHA payroll template. Step-by-step: how to create a NACHA file from Excel.

Our files pass structural checks (record lengths, hash, totals, blocking) with an independent parser. They have not been run through every bank's ACH validator, so send a small test file or a prenote the first time.

Free tool: Open the free NACHA file generator – runs in your browser, files are not uploaded.

Sources

Related guides

Published 2026-10-03 by Karuna Labs. Our tools check file structure and checksums; always review outputs (and payment files in your bank's preview) before relying on them. This is general information, not financial, tax or legal advice.