1. Home
  2. Fundraising
  3. Payment Gateways
  4. Stripe Bacs Direct Debit UK

Stripe Bacs Direct Debit UK

Skill Level


You should already have access to Fundraising tools, have the Stripe Gateway setup, know how to create a donation page, and be familiar with your Stripe account settings

What will I learn?

In this article you will learn how to use the Stripe gateway to enable BACS Direct Debits on your donation pages.

Video Walkthrough

You can use the Stripe gateway to enable your supporters to set up monthly BACS Direct Debits associated with UK banks using their account number and sort code. The payments are managed by Engaging Networks, so you can control the recurring donations from within the Lookup Supporters Recurring Donations gadget.

For details on other direct debit payment methods using the Stripe gateway (such as iDEAL and SEPA), please refer to this article.

User journey and notifications when setting up a Direct Debit

1) The supporter will start on an Engaging Networks page

The supporter will land on an Engaging Networks page to begin with, to enter their personal details and payment information. Account number and sort code are not taken at this stage.

Stripe Bacs User Flow

2) The supporter will be taken to a Stripe page

On submission of the page hosted by Engaging Networks, donors will be redirected to the Stripe Checkout page where they can enter their bank account details and billing address. This information cannot be retrieved from Engaging Networks and must be completed on the Stripe page.

Stripe Bacs Set up

Once completed, Stripe will show an additional confirmation page that will ask the donor to confirm their Direct Debit details, before they are redirected to the final thank you page in Engaging Networks.

Stripe Bacs Confirm

3) Finally the supporter will be shown an Engaging Networks thanks page

The supporter will be taken to an Engaging Networks thank you page, and can also be sent a thank you email. 

4) Email confirmations

For the payment notifications (Advance Notice Letters – ANL) you have two options – either Stripe can handle this or Engaging Networks can (recommended) – see this page for more information

How it works

There are some unique characteristics to Stripe Bacs Direct Debit.

  1. Supporters will enter their account information in Stripe, not Engaging Networks
  2. When the page is submitted, Engaging Networks will create a mandate in Stripe. At this point, a £0 transaction is created in Engaging Networks which is “pending” until it becomes active (“success”). no transaction is submitted, and no charges are made at this point.

    The amount initially shows as zero because it’s not an actual transaction, and there is no amount to connect it to in Stripe. It corresponds to the initial mandate.

  3. On the start date and subsequent dates, Engaging Networks will ask Stripe to take a real payment and if a successful a “success” transaction is created with an amount. The start date that the supporter chooses is not the day that the first payment will be debited. It is usually around 4 days after that day.
  • Click here to read more about how Stripe manages BACS Direct Debit payments
  • Click here to find out how data is stored in Engaging Networks

Getting Started

1) You will need a validated Stripe account.

Follow the instructions here to add a Stripe gateway connection to your Engaging Networks account. If you are already using Stripe for card processing, you can use an existing connection.

You will also need to add a number of settings inside the gateway to get the Stripe Bacs integration working on your donation pages.

2) Enable Bacs Direct debit

Your Stripe account will need to have Bacs enabled. To do that:

a) In your Stripe dashboard, go to Settings > Payments > Payment methods.

Stripe Bacs Settings

b) Enable Bacs direct debit

Stripe Bacs Enable

3) Add webhooks and Stripe callback events

You will need to add webhooks to allow Engaging Networks and Stripe to communicate about payments. 

a) In Stripe, go to Developers > Webhooks or search for “webhooks”

b) Click “+ add endpoint

Stripe Bacs Listen

c) Type in the webhook URL (https://ca.engagingnetworks.app/page/stripe/webhook) and click “+ Select events

Stripe Bacs Select Events

d) Add the following Stripe callback events (you can use top search tool to search for relevant event names)








4) Set up a Stripe PDD donation page in Engaging Networks

Required fields:

Form Field Recommend form block field type Comments
Email Address Text with Email Validator Email address identifying the supporter record
Payment Type

Select or Radio

Must be submitted as bacs_debit

Donation Amount Text, Radio with Input or Select with Input with Donation Amount validator May be entered as a whole number or number with two decimal places. Eg. Twelve dollars may be entered as ’12’ or ‘12.00’. Should not include the currency symbol
Recurring Payment Radio with Y and N values Must equal Y to submit as recurring payment
Recurring Frequency Hidden field with default value


Only MONTHLY is supported. You can use a hidden field with a value of MONTHLY for this

After our May 2023 release, other periods will be supported when using Recurring Start Date in conjunction with Recurring Day

Recurring Day Hidden field

The day of the month when the recurring payment is “pushed” by Engaging Networks to Stripe.

In reality, the payment will be debited around 4 days after (see diagram above).

Note that if using just the Recurring Day, then the first payment will occur in the next period (next month or next year from today’s date). e.g. submitting 20 would mean the first payment is pushed on the 20th of the next month, or year, depending on Frequency.

New feature

After our May 2023 release, you can use the Recurring Start Date in addition to this field to ensure payments start in the same period – see the “How to use Recurring Day and Start Date” section below for more

Recurring Start Date (optional but recommended)

Select with format of yyyy-mm-dd

Use code to populat e- see the “How to use Recurring Day and Start Date” section below for more

New feature

Supported after our May 2023 release

This field works in conjunction with Recurring Day. It denotes when the first payment will be pushed, and after that it will use the Recurring Day field to decide on the next push dates.

Therefore, if you want the payments to be on the 20th of each month from this month, you would have e.g. 2023-06-20 for this field and 20 for Recurring Day

You will probably need to use a Code Block to add possible Start Dates in this field – see the “How to use Recurring Day and Start Date” section below for more information

Payment Currency Hidden field Value of GBP
First Name Text The cardholder’s first name.
Last Name Text The cardholder’s last name.
Address 1 Text The first address line of the cardholder
City Text The address city of the cardholder
Post Code Text The postcode of the

After direct debit submission

When the mandate is initially submitted, you will see a transaction with status set to pending through the Supporter Lookup view.

Stripe Bacs Pending Mandate

After 3 days, this status will update to ‘Success’ once the mandate is cleared. 

At this point, the amount will reset to 0, and the Transaction ID will update to reflect the initial mandate.

Stripe Bacs Mandate Clear

Each payment processed as part of this mandate will then generate a transaction each month. You will also notice an UPDATE transaction in the Transaction History gadget.

Stripe Bacs Update

Stripe Bacs Final FBR

Exporting Data

The transaction types mentioned above with respective statuses will also be reflected in the exported file.

To export your Stripe Bacs transactions, please follow the instructions through finance reports.

For all Stripe Bacs transactions, select ‘Bank payments recurring transactions.’

Stripe Bacs Data Export

Updating the Mandate

Once the mandate is submitted, its details can be edited inside the Engaging Networks dashboard. You will be able to:

  • Update the amount
  • Update day of charge
  • Update frequency

You can also set an end date for the Bacs mandate or skip a number of payments.

How to use Recurring Day and Start Date

These two fields determine when the first payment will be scheduled. You have always need a Recurring Day field on the page but, from our May 2023 release, you can also have a Recurring Start Date on the page too.

What do they do?

The Recurring Day and the Recurring Frequency fields set the schedule, with the first payment starting from the next frequency period. For example, if you set Recurring Day as 20 and Recurring Frequency as MONTHLY, it will make the first payment date as the 20th of next month.

Sometimes this behaviour may be undesirable, because if today is the start of the month, then it may be some weeks before the first payment is taken. To get around this, you can also use the Recurring Start Date field. This will set the first payment date, and from then on it will use the Recurring Day field to determine the subsequent payments.

In this set up, it is recommended that you use a Select for the Recurring Day with some default value. Then you can add a Code Block to the bottom of the page with code in that populates the start date with possible values.

This code can do this for you: https://github.com/EngagingNetworks/page-builder-code-blocks/blob/master/direct-debits-Stripe-start-date-population.html

To use the code:

  1. Ensure there is a Recurring Day and Recurring Start Date field on your page
  2. Make them both Mandatory
  3. Recurring Day should be a text input type, and Recurring Start Date a select input type. You’ll need to add a value to that, so add a date sometime in the future – e.g. label 1 January 2024, value 2024-01-01
  4. Add a Code Block to the bottom of your page
  5. Paste in the code from here
  6. Look at the first portion of the code where it says:
    var numberOfOptions = 3; // the number of choices in the select you want to give, each separated by a month, e.g. 2
    var daysAhead = 15; // the number of days from today we can start a new DD from, e.g. 10
    var forceDayOfMonth = 21; // set to 0 if you are happy with any day of the month, set to 1-28 if you want to force the start date(s) to be on a certain day of the month, e.g. 1
  7. Amend the numbers after the = signs to suit your set up.
    1. numberOfOptions sets how many possible values there are, separated by a month. Use 1 if you only want one option (suitable for annual payments)
    2. daysAhead sets how many days from today that the first possible payment can be
    3. forceDayOfMonth can be used if you want the payments to only be on a certain day of the month. Set this to 0 if you don’t need this functionality
  8. Test the code by previewing the page, and check that the Start Date is populating properly
Updated on November 1, 2023

Was this article helpful?

Need More Help?
Can't find the answer you're looking for?
Contact Support