CSV to NACHA Direct Deposit File Generator

Upload or paste a CSV of employees with routing numbers, account numbers, and payment amounts — get a NACHA-compliant ACH direct deposit file in seconds. Everything runs in your browser; your payroll data is never uploaded anywhere.

Step 1 — Company & Bank Settings

These fields come from your bank (ODFI). Ask your payroll bank contact for the exact values.

Step 2 — Upload or Paste CSV

Drop CSV here or click to browse
Accepted: .csv or plain text

— or paste CSV below —

Expected columns (header row required):

name, routing, account, amount, account_type ↑ order matters only if you use these exact header names (case-insensitive) account_type = "checking" or "savings" (defaults to checking if blank)

How it works

A NACHA ACH file is a fixed-width text file where every line is exactly 94 characters. The file is structured in five record types arranged as follows:

1 — File Header Identifies your bank (ODFI), destination, file creation date, and a unique file ID modifier.
5 — Batch Header Groups related entries. Contains your company name, company ID, SEC code (PPD/CCD), entry description, and effective date.
6 — Entry Detail One record per employee. Transaction code encodes credit vs. debit and checking vs. savings. Amount in cents (no decimal, implied 2 places).
8 — Batch Control Closes the batch. Contains entry count, hash of all routing numbers, and total debit/credit amounts.
9 — File Control Closes the file. Total batch count, block count (lines ÷ 10), all entry counts, aggregate hash, and grand totals.
Padding to block boundary NACHA files must contain a multiple of 10 lines (blocking factor = 10). Remaining lines are padded with rows of "9"s.

This tool generates PPD entries (for individual bank accounts) or CCD entries (for corporate accounts), always as credit transactions (depositing money into the recipient's account). Routing number check-digit validation uses the standard ABA weighted sum (3·d1 + 7·d2 + 1·d3 + 3·d4 + 7·d5 + 1·d6 + 3·d7 + 7·d8 + d9 ≡ 0 mod 10).

Frequently asked questions

What is a NACHA file and why does payroll need one?
NACHA (National Automated Clearing House Association) defines the file format that US banks use to move money via the ACH network. When you process direct deposit payroll, your bank or payroll processor typically requires you to submit a NACHA-formatted text file containing each employee's bank routing number, account number, and payment amount in a precisely structured 94-character fixed-width format. This generator creates that file from a simple spreadsheet export.
What is PPD vs. CCD, and which should I use?
PPD (Prearranged Payment and Deposit) is used when the receiver is an individual — the most common choice for employee direct deposit payroll. CCD (Corporate Credit or Debit) is used when the receiver is a business or corporate entity. If you are paying employees, choose PPD. If you are transferring funds between business accounts or paying vendor accounts, choose CCD.
What is the "Originating DFI Routing" (ODFI)?
The ODFI (Originating Depository Financial Institution) is your bank — the institution that submits the ACH file on your behalf. Your bank will give you their 9-digit routing number to use here, along with a Company ID (usually your EIN/tax ID with a leading "1"). The Immediate Destination routing is usually the same number and represents the Federal Reserve Bank or clearing house that processes the batch. Your bank's treasury or ACH operations team will confirm the exact values for your account.
How is the routing number check digit validated?
ABA routing numbers use a weighted checksum. Multiply each digit by the pattern 3, 7, 1, 3, 7, 1, 3, 7, 1 and sum the products. The result must be divisible by 10. For example, routing 021000021: (0×3)+(2×7)+(1×1)+(0×3)+(0×7)+(0×1)+(0×3)+(2×7)+(1×1) = 0+14+1+0+0+0+0+14+1 = 30 ✓ divisible by 10. This tool validates every routing number in your CSV before generating the file.
Is my payroll data secure? Does anything get uploaded?
No data ever leaves your device. This tool is entirely client-side JavaScript running in your browser. The CSV you paste or upload and the NACHA file it generates exist only in browser memory. No server receives, stores, or transmits any of your payroll information.
What is the "Entry Hash" in the NACHA file?
The entry hash is the sum of all routing numbers (the first 8 digits of the full 9-digit number, i.e. excluding the check digit) in the batch. This hash is included in both the Batch Control record and the File Control record so that the receiving bank can verify no entries were dropped or altered during transmission. If the hash doesn't match, the file will be rejected. This tool computes the hash automatically.