Bite Apps/SafeACH

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

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

PositionLengthFieldContents
11Record Type CodeNumeric
2–32Priority CodeNumeric
4–1310Immediate DestinationAlphanumeric
14–2310Immediate OriginAlphanumeric
24–296File Creation DateDate YYMMDD
30–334File Creation TimeTime HHMM
341File ID ModifierAlphanumeric
35–373Record SizeNumeric
38–392Blocking FactorNumeric
401Format CodeNumeric
41–6323Immediate Destination NameAlphanumeric
64–8623Immediate Origin NameAlphanumeric
87–948Reference CodeAlphanumeric

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

PositionLengthFieldContents
11Record Type CodeNumeric
2–43Service Class CodeNumeric
5–2016Company NameAlphanumeric
21–4020Company Discretionary DataAlphanumeric
41–5010Company IdentificationAlphanumeric
51–533Standard Entry Class CodeAlphanumeric
54–6310Company Entry DescriptionAlphanumeric
64–696Company Descriptive DateAlphanumeric
70–756Effective Entry DateDate YYMMDD
76–783Settlement Date (Julian)Alphanumeric
791Originator Status CodeAlphanumeric
80–878Originating DFI IdentificationNumeric
88–947Batch NumberNumeric

6 — Entry Detail record (PPD)

PositionLengthFieldContents
11Record Type CodeNumeric
2–32Transaction CodeNumeric
4–118Receiving DFI IdentificationNumeric
121Check DigitNumeric
13–2917DFI Account NumberAlphanumeric
30–3910AmountAmount in cents
40–5415Individual Identification NumberAlphanumeric
55–7622Individual NameAlphanumeric
77–782Discretionary DataAlphanumeric
791Addenda Record IndicatorNumeric
80–9415Trace NumberNumeric

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

PositionLengthFieldContents
40–5415Identification NumberAlphanumeric
55–7622Receiving Company NameAlphanumeric

WEB / TEL — fields that differ from PPD

PositionLengthFieldContents
77–782Payment Type CodeAlphanumeric

CTX — fields that differ from PPD

PositionLengthFieldContents
40–5415Identification NumberAlphanumeric
55–584Number of Addenda RecordsNumeric
59–7416Receiving Company Name / ID NumberAlphanumeric
75–762ReservedBlank / reserved

7 — Addenda records

Addenda type 05 (payment related information)

PositionLengthFieldContents
11Record Type CodeNumeric
2–32Addenda Type CodeNumeric
4–8380Payment Related InformationAlphanumeric
84–874Addenda Sequence NumberNumeric
88–947Entry Detail Sequence NumberNumeric

Addenda type 99 (return)

PositionLengthFieldContents
11Record Type CodeNumeric
2–32Addenda Type CodeNumeric
4–63Return Reason CodeAlphanumeric
7–2115Original Entry Trace NumberNumeric
22–276Date of DeathAlphanumeric
28–358Original Receiving DFI IdentificationNumeric
36–7944Addenda InformationAlphanumeric
80–9415Trace NumberNumeric

Addenda type 98 (notification of change)

PositionLengthFieldContents
11Record Type CodeNumeric
2–32Addenda Type CodeNumeric
4–63Change CodeAlphanumeric
7–2115Original Entry Trace NumberNumeric
22–276ReservedBlank / reserved
28–358Original Receiving DFI IdentificationNumeric
36–6429Corrected DataAlphanumeric
65–7915ReservedBlank / reserved
80–9415Trace NumberNumeric

Return reason and change codes are listed on the ACH return and NOC codes page.

8 — Batch Control record

PositionLengthFieldContents
11Record Type CodeNumeric
2–43Service Class CodeNumeric
5–106Entry/Addenda CountNumeric
11–2010Entry HashNumeric
21–3212Total Debit Entry Dollar AmountAmount in cents
33–4412Total Credit Entry Dollar AmountAmount in cents
45–5410Company IdentificationAlphanumeric
55–7319Message Authentication CodeAlphanumeric
74–796ReservedBlank / reserved
80–878Originating DFI IdentificationNumeric
88–947Batch NumberNumeric

9 — File Control record

PositionLengthFieldContents
11Record Type CodeNumeric
2–76Batch CountNumeric
8–136Block CountNumeric
14–218Entry/Addenda CountNumeric
22–3110Entry HashNumeric
32–4312Total Debit Entry Dollar Amount in FileAmount in cents
44–5512Total Credit Entry Dollar Amount in FileAmount in cents
56–9439ReservedBlank / reserved

Entry hash, totals and blocking

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 codeMeaning
200Mixed debits and credits
220Credits only
225Debits 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.