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.
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.
What does this prompt do?
- 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 do I need to use this?
- 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
How can I customize it?
- 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.
FAQs
Will it refund a customer who genuinely bought the same thing twice?
What happens if the duplicate charge has already gone through?
Do I have to let it issue refunds on its own?
Why not just wait for the customer to tell us?
Do I need HubSpot for this to work?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Catch double charges before your customers do.
Set this up once and every accidental duplicate gets spotted, reversed, and logged on the customer record before it can turn into a dispute.