Bite Apps/SafeACH

SafeACH — NACHA ACH file viewer, validator & anonymizer

Open a NACHA ACH file and see every 94-character record field by field. SafeACH checks record lengths and order, ABA routing check digits, transaction codes, trace numbers, addenda, entry hashes, batch and file totals and blocking; decodes return reasons and notifications of change; flags the 2026 Nacha PAYROLL / PURCHASE descriptions — and rebuilds the file with names, accounts and IDs masked and every control record recalculated, so you can share it with your bank or a vendor. Your file is processed in this browser tab and never uploaded.

100% client-side 0 network requests since this page loaded No sign-up · no analytics · no cookies Works offline once loaded
Drop a NACHA ACH file (.ach, .txt) — read locally, never uploaded
PPD, CCD, CTX, WEB, TEL, COR returns/NOCs and more. IAT: structure and totals.

Your ACH file stays on this device

Open or drop a NACHA file, or pick a sample from Load sample… above. Open DevTools → Network first: reading a file makes zero requests.

Free vs Pro

One payment, no subscription. Compare all Bite Apps plans →

Free

$0
  • Every check on the whole file — lengths, order, check digits, hashes, totals, blocking
  • 94-column record inspector with field explanations
  • Return and NOC decoding
  • Entries list and CSV for the first 100 entries
  • Anonymize & fix files with up to 100 entries
Open a file

SafeACH Pro Lifetime

$19 one-time
  • Unlimited entries in the list and exports
  • Excel (.xlsx) export with Entries, Batches and Checks sheets
  • Download anonymized or fixed files of any size
  • Token map CSV (original → masked values)
  • All future SafeACH updates

How a NACHA ACH file is built

A NACHA file is plain ASCII text made of fixed-width records, each exactly 94 characters long. The first character of every record says what it is:

TypeRecordWhat it carries
1File headerImmediate destination (ACH Operator or bank routing number), immediate origin, creation date and time, file ID modifier, record size 094, blocking factor 10, format code 1.
5Batch headerService class code (200 mixed, 220 credits, 225 debits), company name and identification, SEC code (PPD, CCD, CTX, WEB…), company entry description, effective entry date, originating DFI, batch number.
6Entry detailTransaction code, receiving DFI routing number and check digit, account number, amount in cents, ID number, receiver name, addenda indicator, 15-digit trace number.
7AddendaPayment-related information (type 05), a return (type 99) or a notification of change (type 98).
8Batch controlEntry/addenda count, entry hash, total debits, total credits for the batch.
9File controlBatch count, block count, entry/addenda count, entry hash and debit/credit totals for the whole file — followed by lines of 94 nines to fill the last block of 10.

Numeric fields are right-justified and zero-filled; alphanumeric fields are left-justified and space-filled. Amounts have no decimal point: 0000245000 is $2,450.00.

Entry hash, totals and blocking — why banks reject files

Most ACH rejects are arithmetic, not content. The bank or ACH Operator recomputes the control records and refuses the batch or the whole file when they disagree:

SafeACH recomputes all of these and shows the declared and recalculated values side by side in Batches & totals. The Anonymize & fix tab writes a corrected file in which every 8 and 9 record and the padding are rebuilt from the entries.

Transaction codes

AccountCreditCredit prenoteDebitDebit prenoteReturns / NOC
Checking2223272821, 26
Savings3233373831, 36
General ledger4243474841, 46
Loan525355 (reversals)—51, 56

Codes ending in 4 or 9 (24, 29, 34, 39, 44, 49, 54) are zero-dollar entries that carry remittance data.

Return reason codes and notifications of change

Returns arrive as entries with a type 99 addenda; notifications of change (NOCs) arrive in COR batches with a type 98 addenda carrying the corrected data. SafeACH decodes every code. The most common ones:

CodeMeaning
R01Insufficient funds
R02Account closed
R03No account / unable to locate account
R04Invalid account number structure
R07Authorization revoked by customer
R08Payment stopped
R10Customer advises originator is not known and/or not authorized
R16Account frozen / entry returned per OFAC instruction
R20Non-transaction account
R29Corporate customer advises not authorized
C01NOC: incorrect DFI account number
C02NOC: incorrect routing number
C05NOC: incorrect transaction code

2026 Nacha rules: PAYROLL and PURCHASE

Since 20 March 2026 the Nacha Operating Rules require two standard Company Entry Descriptions (batch header positions 54–63): PAYROLL for PPD credits that pay wages, salaries and similar compensation, and PURCHASE for WEB debits for consumer e-commerce purchases. SafeACH warns when a PPD credit batch or a WEB debit batch looks like payroll or an online purchase but uses another description. It cannot know the purpose of a batch for certain, so these are warnings, not errors.

Sharing an ACH file safely

Banks, payroll vendors and processors routinely ask for “the file” when a batch is rejected. A raw ACH file carries employee names, account numbers and sometimes Social Security–style ID numbers. Masking them by hand breaks nothing visible — but if you also trim the file to a few entries, every count, hash and total in the 8 and 9 records is now wrong and the file no longer reproduces the problem.

SafeACH replaces names, account numbers, ID numbers, company details and addenda text with consistent tokens (the same original value always becomes the same token), keeps routing numbers, amounts, dates and trace numbers, optionally keeps only the first entries of each batch, and then recalculates every batch control, the file control, the block count and the padding. The rebuilt file is parsed and checked again before you download it.

How to use SafeACH

  1. Open DevTools → Network if you want to watch: reading a file makes no requests.
  2. Open or drop the ACH file (or paste its text). Files without line breaks are split into 94-character records automatically.
  3. Read the verdict and the Checks tab. Click a line reference to jump to the record; the faulty field is highlighted in red.
  4. Use Entries to search and export the payments, and Batches & totals to compare declared and recalculated controls.
  5. In Anonymize & fix, pick what to mask and download the rebuilt file for your ticket or test environment.

FAQ

Is my ACH file uploaded anywhere?

No. SafeACH is a single web page that parses the file with JavaScript in your browser tab. The page's Content-Security-Policy blocks every network destination except the Polar license check, which only sends a license key. You can verify it in DevTools → Network and keep using the page offline once it has loaded.

Which NACHA formats does SafeACH support?

All standard 94-character NACHA files: PPD, CCD, CTX, WEB, TEL, ARC, BOC, POP and the other SEC codes, prenotes, zero-dollar entries, returns (type 99 addenda), notifications of change (COR batches with type 98 addenda) and IAT batches. For IAT it checks structure, counts, hashes and totals but does not validate the seven mandatory IAT addenda field by field.

How is the entry hash calculated?

Add up the 8-digit receiving DFI identification (positions 4–11) of every entry detail record in the batch and keep the rightmost 10 digits. The file control's entry hash is the sum of all batch entry hashes, again truncated to 10 digits. The check digit in position 12 is not part of the hash.

Why does my file need lines of 9s at the end?

NACHA files use a blocking factor of 10, so the total number of records must be a multiple of 10. After the file control record the file is padded with records of 94 nines, between zero and nine of them. The block count in the file control is the number of 10-record blocks.

Can SafeACH fix a file with wrong totals?

Yes. In Anonymize & fix, leave all masking off and keep “Recalculate batch & file controls” and “Pad to a multiple of 10” on. SafeACH rewrites every batch control, the file control, the block count and the padding from the entries and re-checks the result. It does not change entries, so problems such as a wrong routing check digit are still reported.

Does masking keep the file valid?

Yes. Masked values keep the field widths, routing numbers and amounts are kept, and the control records are recalculated, so the rebuilt file still balances and parses in bank and vendor tools. The same original value always maps to the same token, so duplicates and patterns survive.

Does SafeACH check the 2026 Nacha PAYROLL and PURCHASE descriptions?

Yes. It warns when a PPD credit batch looks like payroll, or a WEB debit batch looks like an e-commerce purchase, but its Company Entry Description is not PAYROLL or PURCHASE. These standard descriptions are required since 20 March 2026.

Is SafeACH a replacement for my bank's validation?

No. SafeACH checks the NACHA record formats, the arithmetic and a set of Nacha rules so you catch most rejects before you upload. Your bank and the ACH Operator apply their own edits, limits and risk checks, and their result is the final word.

SafeACH Pro — $19 one-time

  • Unlimited entries, Excel export
  • Download anonymized / fixed files of any size
  • Token map CSV

Buy SafeACH Pro ($19) Secure checkout by Polar. After payment your license key is shown in your Polar customer portal (linked from the receipt email).


Activation sends only your license key to api.polar.sh. ACH data never leaves this page — the Content-Security-Policy blocks every other destination.