Daily Paddle refund and chargeback review in Slack and Sheets

By General Input

Every weekday morning, yesterday's refunds and chargebacks are checked against each customer's history so only the unusual ones reach your team.

Integrations

  • Paddle
  • Slack Bot
  • Google Sheets

Type

Agentic Task

Categories

  • Finance
  • Operations

Every weekday at 7am, review the previous day's Paddle refunds, credits and chargebacks, and tell me only about the ones that genuinely look unusual. Run this on a schedule rather than on individual refund events, because the value here comes from comparing each refund against that customer's payment history and against the rest of the day, which needs the whole day's picture rather than one event at a time.

Start with Paddle List Adjustments to pull every adjustment created during the previous calendar day, covering refunds, credits and chargebacks. Adjustments are paginated and default to only 10 per page with a maximum of 50, so request the largest page size and keep following meta.pagination.next until has_more is false. If you stop after the first page you will silently review only the first handful of refunds, which defeats the entire purpose of the check.

For each adjustment, use Paddle Get Transaction on the linked transaction to get the amount, the currency and the product or price that was refunded, and Paddle Get Customer to get the customer's name and email. Then use Paddle List Transactions filtered to that same customer to pull their payment history, so you can see how much they have paid overall, when their first payment was, and whether they have been refunded before.

Paddle returns monetary amounts as strings in the currency's smallest unit, so "5000" means $50.00 USD. Convert every amount into normal major units before comparing it to any threshold or writing it into a report, otherwise a $50 threshold gets compared against 5000 and almost everything looks like a large refund. Watch for zero-decimal currencies such as JPY, where the smallest unit is already the major unit and no division is needed.

Flag a case only when it meets at least one of these criteria: a single refund above a threshold I can set, defaulting to $200 and easy for me to change; any chargeback at all, regardless of size; any customer with more than one refund in the trailing ninety days; and any customer who refunded within fourteen days of their very first payment. Everything else is normal business and should not be flagged. Be strict about this, since a report that flags everything is one I will stop reading.

Post the flagged cases to my finance channel using the Slack Bot Send a Message operation, as one line per case containing the refund amount, the customer, the product, the reason stated on the adjustment, and the specific reason it was flagged, for example "flagged: chargeback" or "flagged: second refund in 90 days" or "flagged: refunded 3 days after first payment". Keep it scannable rather than writing a long narrative, and group chargebacks at the top since those are the most urgent.

Separately, append every adjustment from the day, flagged or not, to a tab in my Google Sheet using Google Sheets Append Values, one row each with the date, the adjustment type, the amount in major units, the currency, the customer name and email, the product, the stated reason, and whether it was flagged along with why. This gives me a running record I can audit later and use to spot slower patterns that a single day would never reveal.

If nothing met the flag criteria, still post a single line to the finance channel saying the review ran and found nothing unusual, including how many adjustments were reviewed. Staying silent is not acceptable, because I would have no way to tell the difference between a clean day and a workflow that failed to run. Append the day's adjustments to the sheet even when nothing is flagged.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensStop cold emails to anyone with a live deal in PipedriveLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasoniMessage campaign console with pre-flight checks and delivery board