Bite Apps › SafeACH › NACHA file format
NACHA ACH file format — record layouts, field by field
Every record of a NACHA ACH file with exact positions, lengths and contents — file header (1), batch header (5), entry detail (6) for PPD, CCD, WEB and CTX, addenda (7), batch control (8) and file control (9) — and how the entry hash, totals and block count are calculated.
Have a file that a bank rejected? SafeACH shows every record against these layouts and recomputes hashes and totals — locally, nothing is uploaded.
Open SafeACH — free, in your browser- File structure
- 1 — File Header
- 5 — Batch Header
- 6 — Entry Detail (PPD)
- Entry Detail for CCD, WEB and CTX
- 7 — Addenda
- 8 — Batch Control
- 9 — File Control
- Entry hash, totals and blocking
- Routing number check digit
- Service class and SEC codes
- FAQ
File structure
A NACHA ACH file is plain ASCII text made of fixed-width 94-character records. The first character of every record is its type. Records are grouped in blocks of ten (the blocking factor), and the last block is filled with records of all 9s.
1 File Header
5 Batch Header (one per batch: company, SEC code, effective date)
6 Entry Detail (one per payment)
7 Addenda (optional: remittance, return 99, NOC 98, IAT 10–18)
8 Batch Control (counts, entry hash and totals of the batch)
9 File Control (counts, entry hash and totals of the file)
9999999999… (padding to a multiple of 10 records)
Positions below are 1-based and inclusive, as in the Nacha Operating Rules. Numeric fields are right-justified and zero-filled; alphanumeric fields are left-justified and space-filled. Amounts have no decimal point — 0000012500 is $125.00.
1 — File Header record
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–3 | 2 | Priority Code | Numeric |
| 4–13 | 10 | Immediate Destination | Alphanumeric |
| 14–23 | 10 | Immediate Origin | Alphanumeric |
| 24–29 | 6 | File Creation Date | Date YYMMDD |
| 30–33 | 4 | File Creation Time | Time HHMM |
| 34 | 1 | File ID Modifier | Alphanumeric |
| 35–37 | 3 | Record Size | Numeric |
| 38–39 | 2 | Blocking Factor | Numeric |
| 40 | 1 | Format Code | Numeric |
| 41–63 | 23 | Immediate Destination Name | Alphanumeric |
| 64–86 | 23 | Immediate Origin Name | Alphanumeric |
| 87–94 | 8 | Reference Code | Alphanumeric |
Immediate Destination is usually a space followed by the 9-digit routing number of the receiving point (your ODFI or its processor); Immediate Origin is a 10-character ID your bank assigns. Record Size must be 094, Blocking Factor 10, Format Code 1.
5 — Batch Header record
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–4 | 3 | Service Class Code | Numeric |
| 5–20 | 16 | Company Name | Alphanumeric |
| 21–40 | 20 | Company Discretionary Data | Alphanumeric |
| 41–50 | 10 | Company Identification | Alphanumeric |
| 51–53 | 3 | Standard Entry Class Code | Alphanumeric |
| 54–63 | 10 | Company Entry Description | Alphanumeric |
| 64–69 | 6 | Company Descriptive Date | Alphanumeric |
| 70–75 | 6 | Effective Entry Date | Date YYMMDD |
| 76–78 | 3 | Settlement Date (Julian) | Alphanumeric |
| 79 | 1 | Originator Status Code | Alphanumeric |
| 80–87 | 8 | Originating DFI Identification | Numeric |
| 88–94 | 7 | Batch Number | Numeric |
6 — Entry Detail record (PPD)
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–3 | 2 | Transaction Code | Numeric |
| 4–11 | 8 | Receiving DFI Identification | Numeric |
| 12 | 1 | Check Digit | Numeric |
| 13–29 | 17 | DFI Account Number | Alphanumeric |
| 30–39 | 10 | Amount | Amount in cents |
| 40–54 | 15 | Individual Identification Number | Alphanumeric |
| 55–76 | 22 | Individual Name | Alphanumeric |
| 77–78 | 2 | Discretionary Data | Alphanumeric |
| 79 | 1 | Addenda Record Indicator | Numeric |
| 80–94 | 15 | Trace Number | Numeric |
The RDFI routing number is split: positions 4–11 hold the 8-digit identification that goes into the entry hash, position 12 the check digit. The Trace Number starts with the 8-digit ODFI routing number from the batch header, followed by a 7-digit sequence that must be ascending within the batch.
Entry Detail for CCD, WEB and CTX
The layout is the same 94 columns; only some fields change meaning.
CCD — fields that differ from PPD
| Position | Length | Field | Contents |
|---|---|---|---|
| 40–54 | 15 | Identification Number | Alphanumeric |
| 55–76 | 22 | Receiving Company Name | Alphanumeric |
WEB / TEL — fields that differ from PPD
| Position | Length | Field | Contents |
|---|---|---|---|
| 77–78 | 2 | Payment Type Code | Alphanumeric |
CTX — fields that differ from PPD
| Position | Length | Field | Contents |
|---|---|---|---|
| 40–54 | 15 | Identification Number | Alphanumeric |
| 55–58 | 4 | Number of Addenda Records | Numeric |
| 59–74 | 16 | Receiving Company Name / ID Number | Alphanumeric |
| 75–76 | 2 | Reserved | Blank / reserved |
7 — Addenda records
Addenda type 05 (payment related information)
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–3 | 2 | Addenda Type Code | Numeric |
| 4–83 | 80 | Payment Related Information | Alphanumeric |
| 84–87 | 4 | Addenda Sequence Number | Numeric |
| 88–94 | 7 | Entry Detail Sequence Number | Numeric |
Addenda type 99 (return)
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–3 | 2 | Addenda Type Code | Numeric |
| 4–6 | 3 | Return Reason Code | Alphanumeric |
| 7–21 | 15 | Original Entry Trace Number | Numeric |
| 22–27 | 6 | Date of Death | Alphanumeric |
| 28–35 | 8 | Original Receiving DFI Identification | Numeric |
| 36–79 | 44 | Addenda Information | Alphanumeric |
| 80–94 | 15 | Trace Number | Numeric |
Addenda type 98 (notification of change)
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–3 | 2 | Addenda Type Code | Numeric |
| 4–6 | 3 | Change Code | Alphanumeric |
| 7–21 | 15 | Original Entry Trace Number | Numeric |
| 22–27 | 6 | Reserved | Blank / reserved |
| 28–35 | 8 | Original Receiving DFI Identification | Numeric |
| 36–64 | 29 | Corrected Data | Alphanumeric |
| 65–79 | 15 | Reserved | Blank / reserved |
| 80–94 | 15 | Trace Number | Numeric |
Return reason and change codes are listed on the ACH return and NOC codes page.
8 — Batch Control record
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–4 | 3 | Service Class Code | Numeric |
| 5–10 | 6 | Entry/Addenda Count | Numeric |
| 11–20 | 10 | Entry Hash | Numeric |
| 21–32 | 12 | Total Debit Entry Dollar Amount | Amount in cents |
| 33–44 | 12 | Total Credit Entry Dollar Amount | Amount in cents |
| 45–54 | 10 | Company Identification | Alphanumeric |
| 55–73 | 19 | Message Authentication Code | Alphanumeric |
| 74–79 | 6 | Reserved | Blank / reserved |
| 80–87 | 8 | Originating DFI Identification | Numeric |
| 88–94 | 7 | Batch Number | Numeric |
9 — File Control record
| Position | Length | Field | Contents |
|---|---|---|---|
| 1 | 1 | Record Type Code | Numeric |
| 2–7 | 6 | Batch Count | Numeric |
| 8–13 | 6 | Block Count | Numeric |
| 14–21 | 8 | Entry/Addenda Count | Numeric |
| 22–31 | 10 | Entry Hash | Numeric |
| 32–43 | 12 | Total Debit Entry Dollar Amount in File | Amount in cents |
| 44–55 | 12 | Total Credit Entry Dollar Amount in File | Amount in cents |
| 56–94 | 39 | Reserved | Blank / reserved |
Entry hash, totals and blocking
- Entry hash (batch): add up the 8-digit RDFI identifications (positions 4–11) of every entry detail record in the batch and keep the rightmost 10 digits.
- Entry hash (file): add up the batch entry hashes and again keep the rightmost 10 digits.
- Entry/addenda count: number of 6 records plus number of 7 records — in the batch control for the batch, in the file control for the whole file.
- Total debit / credit amounts: sums of the entry amounts, split by transaction code (debits end in 5–9, credits in 0–4).
- Block count: total number of records including the 1 and 9 records and the padding, divided by 10. A file of 23 records is padded with seven 9-records to 30, so the block count is 3.
Getting any of these wrong is the classic reason an ODFI rejects a whole file. SafeACH recomputes all of them and shows the expected value next to the one in your file — and its anonymizer rebuilds them when you trim or mask a file.
Routing number check digit
A 9-digit ABA routing number carries a check digit in the last position. Multiply the first eight digits by the weights 3, 7, 1, 3, 7, 1, 3, 7, add the products, and the check digit is the amount needed to reach the next multiple of 10: (10 − sum mod 10) mod 10. For 01100001: 0·3 + 1·7 + 1·1 + 0·3 + 0·7 + 0·1 + 0·3 + 1·7 = 15, so the check digit is 5 and the full number is 011000015.
Service class and SEC codes
| Service class code | Meaning |
|---|---|
| 200 | Mixed debits and credits |
| 220 | Credits only |
| 225 | Debits only |
The Standard Entry Class (SEC) code in the batch header says how the payment was authorized and which entry layout applies — for example PPD (consumer, prearranged: payroll, bill pay), CCD (corporate), CTX (corporate with up to 9,999 addenda), WEB (consumer debit authorized online), TEL (authorized by phone), IAT (international) and COR (notifications of change). Since 20 March 2026 Nacha requires the company entry description PAYROLL for PPD wage credits and PURCHASE for WEB e-commerce debits.
FAQ
How long is each record in a NACHA file?
Every record is exactly 94 characters, followed by a line break. Some banks send files without line breaks; SafeACH splits those into 94-character records automatically.
How is the entry hash calculated?
Sum the 8-digit RDFI routing identifications (positions 4–11 of each entry detail record) in the batch and keep the rightmost 10 digits. The file entry hash is the sum of the batch hashes, again truncated to 10 digits.
Why must an ACH file have a multiple of 10 records?
Files are organized in blocks of ten 94-character records (blocking factor 10). If the record count is not a multiple of ten, the file is padded with records consisting of 94 nines, and the block count in the file control record reflects the padded total.
Can I check a NACHA file without uploading it?
Yes. SafeACH runs entirely in your browser: open the file and it shows every record field by field, recomputes hashes, totals and blocking, and flags errors. Nothing is uploaded.
Last updated 2026-11-10. Something wrong or missing? Email support@biteapps.cc.