# Catch duplicate Braintree charges before they become chargebacks

> Every four hours we scan your Braintree payments for accidental double charges, reverse the clear-cut ones, and flag the rest in Slack for approval.

- Workflow type: agent
- Services: Braintree, Slack Bot, HubSpot
- Categories: Finance, Operations
- Published: 2026-08-14

## What it does

- Scans the last 24 hours of Braintree payments every four hours and groups together charges that look like the same customer paying the same amount twice
- Weighs the evidence before acting, so a genuine repeat purchase or a payment on its normal recurring cadence is left alone while a true double submit gets caught
- Posts a Slack summary to your billing channel with the customer name and email, the amount, both charge IDs, how far apart they landed, and a confidence rating
- Automatically reverses the clear-cut duplicates under a dollar limit you set, leaves anything larger for a person to approve, and logs a note on the customer's HubSpot record either way

## What you'll need

- A Braintree account with permission to view transactions and issue refunds
- A Slack workspace and a billing channel for the alerts to land in
- A HubSpot account, if you want the duplicate and its refund status logged on the customer record
- A dollar figure in mind for what can be refunded automatically versus what needs a human to approve

## Prompt

Every four hours, scan my Braintree account for accidental duplicate charges and get them reversed before they turn into chargebacks. This matters because issuing banks treat a double charge as a merchant error, so it usually comes back as a chargeback with fees attached rather than a simple refund, and customers tend to dispute with their bank instead of contacting support. The whole point is to catch and fix these within hours.

Start by using Braintree Search Transactions to pull every successful transaction from the last 24 hours. Cluster those transactions by customer, amount, and payment method, and flag any cluster where two or more near-identical charges landed within a short window of each other. Default that window to 60 minutes and make it easy for me to change.

For each suspected cluster, use Braintree Search Customers to attach the customer's name and email address so the alert is readable by a human without anyone having to go look up an ID.

Judge each cluster rather than blindly refunding it. An identical amount plus a matching order ID a few minutes apart is a real double submit, typically caused by a payment system retrying a charge, a shopper clicking buy twice on a slow checkout page, or a pre-authorization hold being converted to a charge incorrectly. On the other hand, distinct order IDs, a genuine restock or repeat purchase, and payments arriving on a normal recurring cadence that is visible in the customer's own transaction history should all be left alone. Give every cluster a confidence rating and a recommended action.

Because the scan runs every four hours across a 24 hour lookback, the same pair of charges will show up on several consecutive runs. Skip any cluster where one of the charges has already been voided or refunded, and do not re-alert or re-reverse a pair that an earlier run already handled.

Post a summary to my billing channel in Slack listing every suspected duplicate, with the customer name and email, the amount, both transaction IDs, the time gap between the two charges, the confidence rating, and the recommended action. If the scan finds nothing, keep it to a short all clear rather than a full empty report.

Then auto-reverse only the high confidence duplicates whose amount falls below a configurable dollar threshold, using Braintree Reverse Transaction, which voids or refunds automatically depending on whether the charge has already settled. That distinction is worth preserving: voiding a charge that has not settled yet means it never appears on the customer's statement at all. Always reverse the later charge in the pair and leave the original alone. Anything above the threshold, and anything below high confidence, stays in Slack for a human to approve instead.

Finally, for each duplicate, use HubSpot Search Contacts to find the contact by email address, then use HubSpot Create Note to log a note against that contact recording the duplicate charge, both transaction IDs, the amount, and whether it was reversed automatically or is still awaiting approval. That way support can see the duplicate and its refund status immediately if the customer calls in.

## How to customize

- Change the time window that counts as a duplicate. By default two matching charges landing within 60 minutes of each other are treated as suspicious.
- Set the dollar amount above which a refund waits for human approval in Slack instead of going out automatically. Set it to zero if you want to approve every single one.
- Adjust how often the scan runs and which Slack channel gets the alert.

## FAQ

### Will it refund a customer who genuinely bought the same thing twice?

That is exactly what it is built to avoid. Before recommending anything it looks at whether the two charges share an order reference, whether the amounts and payment method match exactly, and how the customer normally buys from you. Two purchases with different order references, a restock, or a payment arriving on its usual recurring cadence get left alone. Only clear-cut double submits are refunded automatically, and only under the dollar limit you set.

### What happens if the duplicate charge has already gone through?

Both cases are handled. If the charge has not settled yet it gets cancelled outright, so it never appears on the customer's statement at all. If it has already settled, it gets refunded instead. You do not have to work out which situation you are in.

### Do I have to let it issue refunds on its own?

No. The dollar threshold controls this completely. Set it low, or to zero, and every suspected duplicate is simply reported to Slack with a recommendation for someone on your team to approve. The detection, the summary, and the customer record note all still run.

### Why not just wait for the customer to tell us?

Most people call their bank instead of your support team. Banks treat duplicate charges as a merchant error, so they usually come back as chargebacks with fees attached rather than as a simple refund you control. Catching the double charge within a few hours means you refund it on your own terms.

### Do I need HubSpot for this to work?

No. The HubSpot note is the final step, there so your support team can see the duplicate and whether it was already refunded if the customer ever calls in. If you do not use HubSpot you can drop that step and the scanning, the Slack alert, and the refunds all still work.

Use this prompt in General Input: https://www.generalinput.com/prompts/catch-duplicate-braintree-charges-before-they-become-chargebacks