# Recover the Direct Debit signups that never got finished

> See everyone who started setting up a Direct Debit and stopped, ranked by the money at stake, and send each one a fresh link without chasing twice.

- Workflow type: app
- Services: GoCardless, Gmail
- Categories: Finance, Operations
- Published: 2026-08-22

## What it does

- Builds a live queue of everyone who began Direct Debit setup and never completed it, plus customers already on file who have no working Direct Debit at all.
- Shows how many days each person has been stuck, which step they dropped out at, and the recurring revenue sitting behind them, worst first.
- Creates a brand new signup link on demand and drops it into a ready-to-review chase email in your Gmail drafts, or cancels a request that is clearly dead.
- Remembers who you already chased and when, with a snooze and a one-chase-a-week limit, so nobody hears from you twice.
- A "Draft this week's chases" button hands the whole backlog to an assistant that writes a personal email for each person and lists them in the app for you to review.

## What you'll need

- A GoCardless account where you can create an access token with read and write access (live or sandbox both work)
- A Gmail account for the chase drafts
- Customers or signups already in GoCardless, so the queue has something to show
- Nothing else to install, and no spreadsheet to maintain

## Prompt

Build me an app for chasing the people who started setting up a Direct Debit in GoCardless and never finished. This is silent lost revenue that nobody currently looks at, so the app has to make the whole backlog visible on one screen and let a human work it row by row.

The main screen is a queue of stalled signups, assembled from two sources. First, use List Billing Requests to pull billing requests and treat any request that is neither fulfilled nor cancelled as abandoned, calling Get Billing Request when a row needs the detail behind it, such as which stage it reached, the payer name and email, and the linked customer. Second, use List Customers together with List Mandates to find customers who exist but have no active mandate at all, including mandates sitting in pending_customer_approval or pending_submission, which are the stalled states. A mandate with status active means that payer is done and does not belong in the queue.

Each row shows the payer name and email, how many days it has been stalled counted from when the billing request or mandate was created, which stage it died at written in plain language rather than raw status codes, and the subscription value at stake if one was going to be attached, pulled with List Subscriptions for the linked customer. Sort the queue worst first, meaning highest value at stake and longest stalled float to the top, and let me filter by how long a row has been stuck.

From a row I can do three things. Generate a fresh hosted signup link, using Create Billing Request Flow followed by Initialise Billing Request Flow, and show me the URL to copy. Drop that link into a chase email as a Gmail draft with Create a Draft, addressed to the payer, with the link inline and a subject and body I can edit before sending. Or cancel a request that is clearly dead with Cancel Billing Request, behind a confirmation step.

The app remembers, per payer, who has already been chased and when, so each row shows the last chase date and how many chases they have had. Add a snooze so I can push a row out of the queue for a chosen number of days. Enforce a cooldown of one chase per payer per week: if someone was chased inside the last seven days, the chase actions on that row are disabled with the reason shown, rather than hidden.

Add a "Draft this week's chases" button that kicks off a background agent. It works through everyone stalled more than seven days who has not been chased in the last week, and for each person it looks at how far they actually got and writes a personalized email referencing that stage, whether they never opened the link, entered their details but never confirmed the bank mandate, or have a customer record and never started at all. For each one it generates a fresh signup link, creates the email as a Gmail draft, and records the chase against that payer. The agent's output lands back in the app as a review list showing each person, the stage it referenced, and the draft it wrote, so a human can read them all and send from Gmail.

Two rules to bake in. Hosted signup links expire, so the app must always generate a brand new flow rather than reuse or store an old link for later. Every chase, whether I write it or the agent does, gets its own fresh link created at the moment of drafting. And anyone who has since completed setup drops off the queue automatically on refresh: re-check the billing request status and the customer's mandates each time the queue loads, so fulfilled requests and active mandates disappear on their own without anyone ticking them off.

## How to customize

- Change what counts as stalled. Seven days is the default cut-off for the bulk drafting button, but a shorter window suits faster sales cycles.
- Rewrite the chase email wording and subject line, including how gently it nudges someone who got most of the way through.
- Adjust the cooldown and snooze. One chase per person per week is the default, and you can lengthen it or snooze individual rows for as long as you like.
- Choose whether customers who never started at all appear alongside the half-finished signups, or only the ones who actually began.

## FAQ

### Will people who already finished setting up still show in the queue?

No. Every time the queue loads it re-checks each person against GoCardless, so anyone whose setup completed or whose Direct Debit is now active drops off on their own. You never have to tick anyone off a list.

### Does it send the chase emails automatically?

No. Everything lands in your Gmail drafts, including the ones written by the assistant. A person reads each draft and decides whether to send it, so nothing goes out that you have not seen.

### What happens if the signup link I sent has already expired?

Hosted signup links expire, so the app never reuses an old one. A brand new link is created at the moment each email is drafted, which means whatever you send is always fresh and valid.

### Can someone end up getting chased twice in the same week?

No. The app keeps a record per person of when they were last chased, and blocks the chase actions on that row until the cooldown passes. You can also snooze anyone for a set number of days.

### How does it know how much money is at stake?

It looks up any subscription linked to that customer and shows the recurring value that would start collecting once their Direct Debit is live, which is what lets the queue sort the biggest losses to the top.

### Do I need a particular GoCardless plan for this?

No. It works with any GoCardless account where you can create an access token from the Developers section of the dashboard, and it works against the sandbox if you want to try it first.

Use this prompt in General Input: https://www.generalinput.com/prompts/recover-the-direct-debit-signups-that-never-got-finished