A NACHA file has no headers, no delimiters and no decimal points. Every line is exactly 94 characters and every field sits at a fixed position. This page documents all six record types position by position, and the converter above turns the file into spreadsheet rows without you counting characters.
Last updated July 2026
Upload your bank statement
Drop file here or click to upload
PDF, JPG, PNG, BMP, HEIC, TIFF, MT940
Uploading...
The NACHA file format is the fixed-width ASCII layout US banks use to exchange batches of ACH payments. Every line is exactly 94 characters and the first character is the record type code: 1 opens the file, 5 opens a batch, 6 is one payment, 7 carries addenda detail, 8 closes a batch with control totals, and 9 closes the file. There are no delimiters, so each field is identified by its character position rather than by a comma or a header.
Opening the file is easy. Getting usable numbers out of it is where the format fights back, and each of these failures is silent.
There are no commas or tabs anywhere in the file, so Excel treats each 94 character line as a single cell. Nothing splits until you tell Excel the exact character positions of all eleven fields.
The Amount field holds whole cents right justified and zero filled. A payment of $1,250.00 is stored as 0000125000, so every total is 100 times too large until you divide.
Excel reads the eight digit Receiving DFI Identification as a number and drops any leading zero, which silently corrupts routing numbers for a large set of US banks.
A seventeen character account number imported as a number becomes something like 1.23457E+16, and the original digits are gone. It has to come in as text.
Nothing in the file is negative. Whether a line is money in or money out lives in the two digit Transaction Code, so a raw sum of the Amount column is meaningless.
Header, batch, entry, addenda and control records are all 94 characters wide but hold completely different fields. Split them with a single rule and the control totals land in the middle of your payment data.
Upload the ACH file and get one row per payment with the fields already separated, decoded and typed correctly.
Each record type is parsed on its own layout, so entry detail lines become columns and control records are read as totals rather than dumped in with the payments.
Whole cent values are converted to real currency numbers, so a 0000125000 field arrives as 1250.00 and the column totals correctly on the first try.
Routing numbers, account numbers and fifteen digit trace numbers keep every leading zero and never flip into scientific notation.
The two digit code becomes a readable direction and account type, so you can filter credits from debits and checking from savings without a lookup table.
Batch and file control counts, hashes and dollar totals come through as their own rows, which is what you need to prove the file balances before release.
ACH files carry full account and routing numbers. Uploads use 256-bit encryption and you can delete files whenever you want.
Nothing to install and no credit card to start.
Open the file in a text editor. If every line is the same width and starts with 1, 5, 6, 7, 8 or 9, it is a NACHA ACH file rather than a statement.
Tip: A .ach, .txt or .nacha extension all hold the same thing.
Drag the file into the box above. Each record type is read on its own layout and the entry detail lines become the transaction rows.
Tip: Multi batch files are fine.
Save as XLSX or CSV, then compare your debit and credit totals against the dollar totals in the file control record before you send anything to the bank.
Tip: A file that does not balance gets rejected outright.
Anyone who has to prove what is inside an ACH file before it goes to the bank, or work out what went through after it came back. Reading the file by eye means knowing where each field starts and stops.
Verify names, amounts and account numbers in a payroll or vendor batch before release, when a single wrong digit sends money to a stranger.
Tie batch control totals to the general ledger and confirm the file the bank received is the file that was approved.
Build or test an ACH generator against the real field positions instead of guessing at offsets from a sample file.
Turn an ACH batch into rows that can be matched against the bank statement line the batch settled as.
Test a population of payments against the originating file rather than a summary report someone assembled by hand.
Review SEC codes and entry descriptions across batches to confirm the authorization type matches how the payment was collected.
A NACHA file is a strict hierarchy, and the order is not optional. One File Header opens the file, then one or more batches, then one File Control closes it. Inside every batch, a Batch Header opens the group, an Entry Detail record represents each payment, an optional Addenda record follows an entry that carries extra remittance data, and a Batch Control closes the group with its totals. Read down the first character of every line and you should see 1, then 5, then a run of 6 and 7, then 8, repeating for each batch, and finally 9. Out of sequence records or a missing mandatory record cause the bank to reject all or part of the file.
| Code | Record | What it does | How many |
|---|---|---|---|
| 1 | File Header | Identifies the sending and receiving institutions and stamps the file with a creation date and time. | Exactly one, first line |
| 5 | Batch Header | Opens a batch and carries the company name, the SEC code, the entry description and the effective date. | One per batch |
| 6 | Entry Detail | One individual payment: who is being paid or debited, at which bank and account, and for how much. | One per payment |
| 7 | Addenda | Optional remittance or supporting detail attached to the entry immediately above it. | Zero or more per entry |
| 8 | Batch Control | Closes the batch with its entry count, entry hash and separate debit and credit dollar totals. | One per batch |
| 9 | File Control | Closes the file with batch count, block count, total entries, entry hash and file level dollar totals. | Exactly one, last meaningful line |
Files are also blocked in groups of ten records, which is why the File Header carries a blocking factor of 10 and why real files end with lines of nothing but the digit 9 repeated. Those filler lines are padding to reach a multiple of ten, not data, and they should be dropped before analysis.
The first line of the file. Immediate Destination is the receiving bank routing number and Immediate Origin is normally your company identification, both ten characters wide with a leading space or zero.
| Position | Length | Field |
|---|---|---|
| 01-01 | 1 | Record Type Code (always 1) |
| 02-03 | 2 | Priority Code |
| 04-13 | 10 | Immediate Destination |
| 14-23 | 10 | Immediate Origin |
| 24-29 | 6 | File Creation Date (YYMMDD) |
| 30-33 | 4 | File Creation Time (HHMM) |
| 34-34 | 1 | File ID Modifier |
| 35-37 | 3 | Record Size (always 094) |
| 38-39 | 2 | Blocking Factor (always 10) |
| 40-40 | 1 | Format Code (always 1) |
| 41-63 | 23 | Immediate Destination Name |
| 64-86 | 23 | Immediate Origin Name |
| 87-94 | 8 | Reference Code |
This is the record that decides how the whole batch is treated. Service Class Code says whether the batch holds credits, debits or both, and the SEC code at 51-53 states the authorization type, which is what determines the return window for every entry in the batch.
| Position | Length | Field |
|---|---|---|
| 01-01 | 1 | Record Type Code (always 5) |
| 02-04 | 3 | Service Class Code (200 mixed, 220 credits only, 225 debits only) |
| 05-20 | 16 | Company Name (what the receiver sees on their statement) |
| 21-40 | 20 | Company Discretionary Data |
| 41-50 | 10 | Company Identification |
| 51-53 | 3 | Standard Entry Class Code (PPD, CCD, WEB, TEL, CTX) |
| 54-63 | 10 | Company Entry Description (PAYROLL, PURCHASE, and so on) |
| 64-69 | 6 | Company Descriptive Date |
| 70-75 | 6 | Effective Entry Date (YYMMDD) |
| 76-78 | 3 | Settlement Date, Julian (inserted by the ACH operator) |
| 79-79 | 1 | Originator Status Code |
| 80-87 | 8 | Originating DFI Identification |
| 88-94 | 7 | Batch Number |
The record you actually want in a spreadsheet. One line is one payment. This layout covers the common SEC codes including PPD, CCD, WEB and TEL. CTX and IAT entries use variations on it, so check the field positions against the SEC code in the batch header before you parse a corporate or international file.
| Position | Length | Field | Notes |
|---|---|---|---|
| 01-01 | 1 | Record Type Code | Always 6 |
| 02-03 | 2 | Transaction Code | Carries the direction and the account type |
| 04-11 | 8 | Receiving DFI Identification | First eight digits of the routing number |
| 12-12 | 1 | Check Digit | Ninth digit of the routing number |
| 13-29 | 17 | DFI Account Number | Left justified, space filled, must stay text |
| 30-39 | 10 | Amount | Whole cents, zero filled, no decimal point |
| 40-54 | 15 | Identification Number | Your employee or invoice reference |
| 55-76 | 22 | Individual or Company Name | The receiver name |
| 77-78 | 2 | Discretionary Data | Free for the originator to use |
| 79-79 | 1 | Addenda Record Indicator | 1 means a type 7 record follows |
| 80-94 | 15 | Trace Number | The unique reference you quote when tracing a payment |
The addenda record hangs off the entry above it and its Entry Detail Sequence Number at 88-94 is what ties the two together. The two control records are where a file proves it balances, and they are the first thing the bank checks.
| Record | Position | Length | Field |
|---|---|---|---|
| Addenda (7) | 02-03 | 2 | Addenda Type Code (05 is the common remittance type) |
| Addenda (7) | 04-83 | 80 | Payment Related Information |
| Addenda (7) | 84-87 | 4 | Addenda Sequence Number |
| Addenda (7) | 88-94 | 7 | Entry Detail Sequence Number |
| Batch Control (8) | 05-10 | 6 | Entry and Addenda Count |
| Batch Control (8) | 11-20 | 10 | Entry Hash |
| Batch Control (8) | 21-32 | 12 | Total Debit Dollar Amount in Batch |
| Batch Control (8) | 33-44 | 12 | Total Credit Dollar Amount in Batch |
| Batch Control (8) | 88-94 | 7 | Batch Number (matches the batch header) |
| File Control (9) | 02-07 | 6 | Batch Count |
| File Control (9) | 08-13 | 6 | Block Count |
| File Control (9) | 14-21 | 8 | Entry and Addenda Count |
| File Control (9) | 22-31 | 10 | Entry Hash |
| File Control (9) | 32-51 | 20 | Total Debit Dollar Amount in File |
| File Control (9) | 52-71 | 20 | Total Credit Dollar Amount in File |
The Entry Hash is the sum of every Receiving DFI Identification in the batch, truncated to its rightmost ten digits. It is a checksum, not a dollar figure, and it is the field most often computed wrong by a homegrown generator. Our guide on validating a NACHA file before sending it to the bank walks through the checks that catch a bad hash or an unbalanced batch before the bank does.
Positions 02-03 carry the transaction code, and it is the only thing in the file that tells you whether money is moving in or out. Nothing is stored as a negative number, so summing the amount column without splitting on this code gives you a total that means nothing.
| Code | Account | Direction | Meaning |
|---|---|---|---|
| 22 | Checking | Credit | Deposit into a checking account, the payroll direct deposit code |
| 23 | Checking | Credit | Prenotification of a checking credit, zero dollars |
| 27 | Checking | Debit | Collection from a checking account |
| 28 | Checking | Debit | Prenotification of a checking debit, zero dollars |
| 32 | Savings | Credit | Deposit into a savings account |
| 33 | Savings | Credit | Prenotification of a savings credit, zero dollars |
| 37 | Savings | Debit | Collection from a savings account |
| 38 | Savings | Debit | Prenotification of a savings debit, zero dollars |
| 42 | General ledger | Credit | Credit to a financial institution general ledger account |
| 47 | General ledger | Debit | Debit to a financial institution general ledger account |
| 52 | Loan | Credit | Payment applied to a loan account |
Codes 21 and 31 carry a Notification of Change, where the receiving bank is telling you an account or routing number has moved. Those arrive back from the bank rather than going out in your file, and they need acting on or the next batch fails the same way.
The Standard Entry Class code at positions 51-53 of the batch header states how the payment was authorized. It is not cosmetic. The SEC code sets the return window and the documentation you have to keep, and using the wrong one is a rules violation even if the money moves.
| SEC code | Name | Typical use |
|---|---|---|
| PPD | Prearranged Payment and Deposit | Consumer accounts: payroll direct deposit and recurring consumer debits |
| CCD | Corporate Credit or Debit | Business to business payments and vendor settlement |
| WEB | Internet Initiated Entry | Consumer debits authorized online or through an app |
| TEL | Telephone Initiated Entry | Consumer debits authorized over the phone |
| CTX | Corporate Trade Exchange | Business payments carrying structured remittance data in addenda records |
| IAT | International ACH Transaction | Payments where part of the transaction is outside the United States |
The full list also covers ARC, BOC, POP and RCK for check conversion, plus COR for notifications of change and ADV for accounting advices. The full ACH SEC codes list covers when each one applies, and what to put in the company entry description covers the field right next to it.
You can do this by hand if you only need to eyeball one batch. Open the file with Excel set to All Files, and when the Text Import Wizard appears choose Fixed width rather than Delimited. Then place break lines at the character positions from the entry detail table above, and set the account number, routing number and trace number columns to Text before you finish, or Excel destroys them.
The break positions for an entry detail line are 1, 3, 11, 12, 29, 39, 54, 76, 78, 79. That gives you the eleven fields in order. Two things still need fixing afterward: divide the amount column by 100 to restore the decimal, and add a column that translates the transaction code into a direction so the debits can carry a negative sign.
The catch is that this only works cleanly if you first split the file so that only type 6 lines are in the sheet. Import the whole file at those break positions and the header, batch and control records get sliced at meaningless points, because they hold entirely different fields at those same offsets. That is the main reason people give up on the manual route on a real multi batch file and use the NACHA file to Excel converter instead, which reads each record type on its own layout in one pass. The step by step manual method is written up in how to open a NACHA ACH file in Excel.
This trips up people who are handed one expecting a statement. A NACHA file is a payment instruction: it tells the bank what to do. It has no opening balance, no closing balance, no running balance and no record of anything that was not originated in this file. It will not tell you whether a payment settled, was returned, or bounced. For that you need the statement or a returns file coming back from the bank.
If you are trying to reconcile, remember the whole ACH batch usually lands on the bank statement as a single summarized line, not as one line per payment. Matching the two means totaling the file by settlement date and comparing that to the statement line, which reconciling an ACH file against your bank statement works through. When a payment comes back, the reason arrives as a return code, and the ACH return codes list from R01 to R85 decodes them.
NACHA is one of several fixed layouts a US business gets from its bank, and they are easy to confuse because several are positional text. BAI2 is the balance reporting format and, like NACHA, stores amounts as whole cents, so the BAI to Excel converter covers that one. MT940 is tag based and comes from SWIFT, handled by the MT940 to Excel converter, and camt.053 is the ISO 20022 XML equivalent read by the camt.053 to Excel converter. If you are not sure which one you were sent, the bank file format converter compares them side by side, and the plain bank statement converter handles the PDF statement itself. Once the payments are in a sheet, teams that also want the receipts and card spend behind those payments read automatically tend to pair this with automated expense capture.
A NACHA file, also called an ACH file, is the standard fixed-width text file US banks use to move batches of ACH payments such as payroll, vendor payments and direct debits. Nacha governs the ACH network and publishes the format, so the two names describe the same thing.
Exactly 94 characters, for every record type. Files are also blocked in groups of ten records, which is why the file header carries a blocking factor of 10 and why real files end in filler lines made entirely of the digit 9 to reach a multiple of ten.
The first character of each line: 1 is the file header, 5 is a batch header, 6 is an entry detail record holding one payment, 7 is an addenda record, 8 is a batch control record with the batch totals, and 9 is the file control record that closes the file.
Positions 30 to 39, ten characters, right justified and zero filled. It holds whole cents with the decimal point implied, so $1,250.00 is written as 0000125000. Divide by 100 after import or every total comes out a hundred times too large.
From the transaction code at positions 02 to 03 of the entry detail record. 22 is a checking credit and 27 a checking debit, 32 and 37 are the savings equivalents. No amount in the file is ever stored as a negative number, so the code is the only direction signal.
Open it with Excel set to All Files, choose Fixed width in the Text Import Wizard, and set break points at 1, 3, 11, 12, 29, 39, 54, 76, 78 and 79 for entry detail lines. Format the account, routing and trace columns as Text first, otherwise Excel strips leading zeros.
A checksum, not a dollar amount. It is the sum of every Receiving DFI Identification in the batch, truncated to the rightmost ten digits. Banks use it to confirm no entry was added, dropped or altered in transit, and a miscalculated hash rejects the file.
No. A NACHA file is a payment instruction, not a statement. It carries no opening balance, closing balance or running balance, and it cannot tell you whether a payment settled or was returned. For that you need the bank statement or a returns file.
Convert an ACH file to spreadsheet rows.
Compare NACHA, BAI2, MT940 and camt.053.
The other positional format banks send.
From the same family of tools
Get started converting bank statements to spreadsheets.
USD
per month
billed as
$288 yearly
Choose speed vs accuracy when extracting
| Base AI Faster | 2,500 pages |
| Pro AI Best accuracy | 500 pages |
Scale statement conversion across your team with automation.
USD
per month
billed as
$888 yearly
Choose speed vs accuracy when extracting
| Base AI Faster | 10,000 pages |
| Pro AI Best accuracy | 2,000 pages |
Enterprise-grade bank statement conversion and controls.
USD
per month
billed as
$ yearly
Choose speed vs accuracy when extracting
| Base AI Faster | pages |
| Pro AI Best accuracy | pages |