ACH test file generator with returns and NOCs
Generate a NACHA ACH file (PPD or CCD, credits or debits), then the return file and Notification of Change your bank would send back for chosen entries. Every reply carries the original trace number, so you can test how your system matches returns and corrections to payments. Synthetic data, reproducible with a seed.
3. Files
Need returns and NOCs in your CI?
We are building an API that answers your test ACH files like an RDFI: returns, NOCs, reversals and ISO 20022 equivalents, per bank. Tell us what you integrate with and get early access. For Stripe-specific outcome checks see the ACH QA pack.
FAQ
What does the ACH test file generator create?
A NACHA-formatted originated file (PPD or CCD, credits or debits), a return file for the entries you choose with R-codes such as R01 or R03, and a Notification of Change (COR) file with C-codes such as C01. Each return and NOC addenda carries the original trace number, so you can test how your system matches replies to payments.
Are the files valid NACHA files?
They follow the NACHA record layout (94-character records, blocking factor 10, batch and file control totals and entry hashes) and pass the open-source Moov ACH validator in our tests. They are synthetic test files: do not send them to a real ACH operator or bank.
Which routing and account numbers are used?
Receiving banks use public, checksum-valid routing numbers of large US banks; account numbers, names and company IDs are synthetic. Use a seed to get the same files every time for regression fixtures.
What is the difference between a return and a NOC?
A return (R-code) sends the money back because the entry could not be posted, for example R01 insufficient funds or R03 no account. A Notification of Change (C-code) posts the entry but tells the originator to correct the account or routing data for future entries.
Related: US bank account & routing number generator · routing number checker · pain.002 / camt.054 generator
IBANgen provides synthetic QA data. Generated files do not reflect how any real bank or ACH operator processes entries.