FastACH 0.7.3
dotnet add package FastACH --version 0.7.3
NuGet\Install-Package FastACH -Version 0.7.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FastACH" Version="0.7.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FastACH" Version="0.7.3" />
<PackageReference Include="FastACH" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FastACH --version 0.7.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: FastACH, 0.7.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FastACH@0.7.3
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FastACH&version=0.7.3
#tool nuget:?package=FastACH&version=0.7.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
FastACH
.NET library for reading and writing ACH files
Continuous integration
| Branch | Build status |
|---|---|
| master |
Installation 
.NET 8.0, .NET 9.0, .NET 10.0
PM> Install-Package FastACH
Add namespace to the program
using FastACH;
using FastACH.Builders; // For using AchFileBuilder
Usage
Reading ACH file
var achFile = await AchFile.Read("ACH.txt");
achFile.WriteToConsole(); // Output to console
// Line map can be used for the error reporting
var lineMap = new List<(IRecord record, uint line)>();
var achFile = await AchFile.Read("ACH.txt", lineMap);
Reading ACH file to colorful console
var achFile = await AchFile.Read(name);
achFile.WriteToConsole();
Writing ACH file using AchFileBuilder (Recommended)
The AchFileBuilder provides a fluent API for building ACH files with less boilerplate code.
Simple Example - Credit and Debit Transactions
var achFile = new AchFileBuilder()
.With(
ImmediateDestination: "123456789",
ImmediateOrigin: "987654321",
ImmediateDestinationName: "Bank of America",
ImmediateOriginName: "My Corporation")
.WithBatch(batch => batch
.With(
CompanyId: "1234567890",
OriginatingDFIID: "12345678",
CompanyEntryDescription: "PAYROLL",
CompanyName: "My Company")
.WithCreditTransaction(
amount: 1500.00m,
routingNumber: "111111111",
accountNumber: "987654321",
receiverName: "John Doe")
.WithDebitTransaction(
amount: 500.00m,
routingNumber: "222222222",
accountNumber: "123456789",
receiverName: "Jane Smith"))
.Build();
await achFile.WriteToFile("ACH.txt");
Advanced Example - With All Optional Fields
var achFile = new AchFileBuilder()
.With(
ImmediateDestination: "123456789",
ImmediateOrigin: "987654321",
ImmediateDestinationName: "PNC Bank",
ImmediateOriginName: "Microsoft Inc.",
ReferenceCode: "REF12345",
FileIdModifier: 'A')
.WithBatch(batch => batch
.With(
CompanyId: "1234567890",
OriginatingDFIID: "12345678",
CompanyEntryDescription: "PAYROLL",
CompanyName: "My Company",
ServiceClassCode: 200,
entryClassCode: "PPD",
CompanyDiscretionaryData: "DISCRETIONARY",
CompanyDescriptiveDate: new DateOnly(2024, 1, 15),
EffectiveEntryDate: new DateOnly(2024, 1, 31),
OriginatorsStatusCode: '1',
BatchNumber: 1)
.WithCreditTransaction(
amount: 1500.00m,
routingNumber: "111111111",
accountNumber: "987654321",
receiverName: "Employee One",
receiverId: "EMP001",
discretionaryData: "PAY")
.WithAddenda(
addendaTypeCode: 5,
addendaInformation: "Salary payment for January 2024",
addendaSequenceNumber: 1))
.Build();
await achFile.WriteToFile("ACH.txt");
Multiple Batches Example
var achFile = new AchFileBuilder()
.With("123456789", "987654321")
.WithBatch(batch => batch
.With("1234567890", "12345678", "PAYROLL", "Company A")
.WithCreditTransaction(1000.00m, "111111111", "ACCT001", "Employee 1")
.WithCreditTransaction(1200.00m, "222222222", "ACCT002", "Employee 2"))
.WithBatch(batch => batch
.With("0987654321", "87654321", "INVOICE", "Company B")
.WithDebitTransaction(500.00m, "333333333", "ACCT003", "Customer 1")
.WithDebitTransaction(750.00m, "444444444", "ACCT004", "Customer 2"))
.Build();
await achFile.WriteToFile("ACH.txt");
Writing ACH file (Manual Approach)
var achFile = new AchFile()
{
FileHeader = new FileHeaderRecord()
{
ImmediateDestination = "123456789",
ImmediateOrigin = "123456789",
FileCreationDate = DateOnly.FromDateTime(DateTime.Now),
FileCreationTime = TimeOnly.FromDateTime(DateTime.Now),
FileIdModifier = 'A',
ImmediateDestinationName = "PNC Bank",
ImmediateOriginName = "Microsoft Inc.",
ReferenceCode = "00000000"
},
BatchRecordList =
{
new BatchRecord()
{
BatchHeader = new BatchHeaderRecord()
{
ServiceClassCode = 200,
CompanyName = "companyName",
CompanyDiscretionaryData = "companyDiscretionary",
CompanyId = "companyID",
CompanyEntryDescription = "EntryDescr",
CompanyDescriptiveDate = new DateOnly(2011, 02, 03),
EffectiveEntryDate = new DateOnly(2011, 01, 02),
OriginatingDFIID = "DFINumber"
},
TransactionRecords =
{
new TransactionRecord
{
EntryDetail = new EntryDetailRecord()
{
TransactionCode = 22,
ReceivingDFIID = 12345678,
CheckDigit = '9',
DFIAccountNumber = "1313131313",
Amount = 22M,
ReceiverIdentificationNumber = "ID Number",
ReceiverName = "ID Name",
DiscretionaryData = "Desc Data",
AddendaRecordIndicator = true,
},
AddendaRecords = new List<AddendaRecord>
{
new AddendaRecord()
{
AddendaInformation = "Monthly bill"
}
}
},
new TransactionRecord()
{
EntryDetail = new EntryDetailRecord()
{
TransactionCode = 27,
ReceivingDFIID = 12345678,
CheckDigit = '9',
DFIAccountNumber = "1313131313",
Amount = 27M,
ReceiverIdentificationNumber = "ID Number",
ReceiverName = "ID Name",
DiscretionaryData = "Desc Data",
AddendaRecordIndicator = false,
}
}
}
}
}
};
await achFile.WriteToFile("ACH.txt");
Perfomance results
I created a benchmark to compare reading performance between FastACH and very popular ChoETL.Nacha library.
| Method | NumberOfEntries | Mean | Error | Gen0 | Gen1 | Gen2 | Allocated |
|---|---|---|---|---|---|---|---|
| FastACH | 1000 | 11.62 ms | NA | - | - | - | 949.88 KB |
| ChoetlNacha | 1000 | 908.52 ms | NA | 561000.0000 | 555000.0000 | 555000.0000 | 3770936.66 KB |
| FastACH | 10000 | 31.50 ms | NA | - | - | - | 9297.73 KB |
| ChoetlNacha | 10000 | 5,316.70 ms | NA | 2485000.0000 | 2427000.0000 | 2425000.0000 | 37579633.04 KB |
| FastACH | 100000 | 214.57 ms | NA | 7000.0000 | 6000.0000 | 2000.0000 | 92815.55 KB |
| ChoetlNacha | 100000 | 43,563.12 ms | NA | 31105000.0000 | 30491000.0000 | 30491000.0000 | 375791391.55 KB |
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.7.3 | 152 | 1/19/2026 |
| 0.7.2 | 81 | 1/19/2026 |
| 0.7.1.103 | 1,373 | 9/8/2025 |
| 0.7.1.1 | 80 | 1/19/2026 |
| 0.7.0.102 | 192 | 9/8/2025 |
| 0.7.0.101 | 192 | 9/8/2025 |
| 0.6.0.100 | 583 | 8/12/2025 |
| 0.6.0.99 | 617 | 8/12/2025 |
| 0.5.0.98 | 1,586 | 3/7/2025 |
| 0.4.0.94 | 856 | 12/12/2024 |
| 0.3.5.93 | 186 | 10/22/2024 |
| 0.3.5.92 | 459 | 10/21/2024 |
| 0.3.4.90 | 226 | 10/18/2024 |
| 0.3.4.89 | 224 | 10/18/2024 |
| 0.3.3.88 | 238 | 6/28/2024 |
| 0.3.3.87 | 644 | 6/27/2024 |
| 0.3.2.86 | 189 | 6/27/2024 |
| 0.3.1.85 | 205 | 6/27/2024 |
| 0.3.0.84 | 209 | 6/27/2024 |
| 0.2.6.83 | 280 | 6/5/2024 |
| 0.2.5.82 | 190 | 6/5/2024 |
| 0.2.5.81 | 179 | 6/5/2024 |
| 0.2.5.80 | 185 | 6/4/2024 |
| 0.2.5.79 | 196 | 6/4/2024 |
| 0.2.5.78 | 161 | 6/4/2024 |
| 0.2.4.77 | 219 | 6/4/2024 |
| 0.2.4.76 | 188 | 6/4/2024 |
| 0.2.3.75 | 180 | 6/4/2024 |
| 0.2.3.74 | 204 | 6/4/2024 |
| 0.2.2.73 | 198 | 6/4/2024 |
| 0.2.1.72 | 218 | 6/4/2024 |
| 0.2.1.71 | 180 | 5/31/2024 |
| 0.2.0.70 | 179 | 5/31/2024 |
| 0.1.11.69 | 180 | 5/31/2024 |
| 0.1.10.68 | 374 | 4/15/2024 |
| 0.1.9.67 | 207 | 2/1/2024 |
| 0.1.8.66 | 584 | 2/1/2024 |
| 0.1.7.65 | 219 | 2/1/2024 |
| 0.1.6.64 | 198 | 2/1/2024 |
| 0.1.5.63 | 211 | 2/1/2024 |
| 0.1.4.62 | 170 | 1/31/2024 |
| 0.1.3.61 | 202 | 1/31/2024 |
| 0.1.2.60 | 196 | 1/31/2024 |
| 0.1.1.59 | 173 | 1/31/2024 |
| 0.1.1.58 | 178 | 1/31/2024 |
| 0.1.0.57 | 202 | 1/31/2024 |
| 0.0.12.56 | 192 | 1/25/2024 |
| 0.0.11.55 | 191 | 1/24/2024 |
| 0.0.10.53 | 211 | 1/24/2024 |
| 0.0.10.52 | 210 | 1/23/2024 |
| 0.0.9.51 | 175 | 1/23/2024 |
| 0.0.8.50 | 183 | 1/23/2024 |
| 0.0.8.49 | 168 | 1/23/2024 |
| 0.0.8.48 | 199 | 1/23/2024 |
| 0.0.7.47 | 200 | 1/22/2024 |
| 0.0.6.46 | 177 | 1/22/2024 |
| 0.0.6 | 202 | 1/22/2024 |
| 0.0.5 | 212 | 1/18/2024 |
| 0.0.4 | 192 | 1/18/2024 |
| 0.0.3 | 200 | 1/18/2024 |
| 0.0.2 | 181 | 1/16/2024 |
| 0.0.1.1 | 190 | 1/8/2024 |
| 0.0.1 | 223 | 1/8/2024 |