Collecting ACH payments through Stripe

Shai Schechter • 2021

Early draft

Just a brain dump, likely not coherent yet.

There’s one little-known fact about collecting ACH payments through Stripe that is the cause of so much confusion.

I’ve known of people giving up on trying to accept ACH payments altogether because of it.

That critical fact:

There are 2 totally different mechanisms for collecting payment from someone through the ACH network. They have totally different flows and use cases. Stripe supports both of them in different ways. Yet they’re often both just called “ACH”.

I like to fix the confusion by calling them ACH Push and ACH Pull.

ACH Push

Also sometimes known as ACH Credit Transfer.

With ACH Push, the customer initiates (pushes) the payment to you. They log in to their bank’s online banking system or walk into their bank branch. They provide the bank with an account number, a routing number, and an amount of money. The money is then sent to you.

ACH Pull

Also sometimes known as ACH Debit.

With ACH Pull, you can take (pull) amounts of money from the customer’s bank account whenever you need to (after first completing a verification step to give you permission to take money from their account).

Stripe supports both of these

An ACH Push through Stripe involves Stripe generating a unique bank account number that you can provide to the customer. Any time the customer sends money to that account number it shows up in your Stripe account, attached to the customer, and you can create charges against that balance.

An ACH Pull through Stripe has two routes for the initial verification step.