Send Stripe refunds to Slack
A weekly look at money going back to customers, posted where support and finance already talk. Stripe goes into your data warehouse first, where refunds are read next to the charges and disputes, and only then reaches Slack.
Stripe Endpoints
14 Stripe endpoints you can import. Each lands in its own table in your data warehouse.
Balance transactions
Every movement of money through the Stripe balance: charges, refunds, disputes, fees, payouts, adjustments.
16 fieldsTime seriesCharges
One row per charge attempt: amount, outcome, card details, who paid and which invoice or payment intent it belongs to.
33 fieldsTime seriesCustomers
Every customer object: identity, billing country, delinquency and balance.
17 fieldsDisputes
One row per dispute (chargeback) with its status and evidence deadline.
14 fieldsTime seriesEvents
The audit trail: every change Stripe recorded (invoice.paid, customer.subscription.updated, charge.refunded, …) with the id of the object it concerns.
11 fieldsTime seriesInvoice line items
Every line on every invoice: what was billed, for which price and product, for which period.
19 fieldsInvoices
One row per invoice with amounts, status and period.
31 fieldsTime seriesPayment intents
One row per payment attempt lifecycle: how much was asked for, how much was received, and where it stands.
22 fieldsTime seriesPayouts
One row per transfer from the Stripe balance to the bank account: amount, arrival date, status.
18 fieldsTime seriesPrices
Every price (plan) of every product, active or not, with amount, currency and billing interval.
17 fieldsProducts
The catalogue: every product, active or not.
13 fieldsRefunds
One row per refund: how much was returned on which charge, why, and the balance transaction that reversed the money.
13 fieldsTime seriesSubscription items
The lines of every subscription: which price, how many units.
14 fieldsSubscriptions
One row per subscription in any status (status=all), full refresh every run so cancellations and past-due states are current.
23 fields
Why Stripe does not post refunds straight to Slack
Stripe can notify you of a refund, but one at a time and without the charge behind it. A weekly message needs the refunds grouped by reason and read beside disputes, which means the data analyst joins them in a warehouse first.
- A refund event is a single record, not a week
- Slack channels are quoted in meetings, so every figure needs one definition
- The data analyst links refunds to charges and disputes and controls what the message says
Step 1: Load Stripe into your data warehouse first
Create a Data Mart with Stripe as the source and choose where the data lands. The Stripe connector is a custom connector built in OWOX Data Marts, and the data goes into any popular data warehouse.
- Refunds is one of 14 endpoints; each refund names its charge
- Authorize with a restricted Stripe API key that has read access
- Open the Stripe connector for your data warehouse below
Step 2: Link Stripe refunds to charges and disputes
In your data warehouse the model joins Refunds and Disputes on charge, so money returned by refund and by dispute is read against what was taken.
- Refunds, charges and disputes join on charge
- reason separates requested refunds from duplicate and fraudulent ones
- One definition of returned money serves the channel and the close
Step 3: Send Stripe reports to Slack
Create a Slack destination in OWOX with the email address of the channel that should get the report, then add a report to the published Stripe Data Mart. The message is Markdown, and Preview shows how it looks in Slack.
- Slack gives every channel an email address, and OWOX posts to it
- Type / in the message to place the Refunds table: created, amount, reason, status
- Create & Run sends the first report at once
Step 4: Add a short Stripe analysis under the report in Slack
Write two or three lines under the table in the same message. Add a trigger on the Triggers tab, for example every Monday morning, and the channel gets a fresh run each week.
- The lines read reason and status from the report, with no figure from outside it
- The table is filled from a new run of the Data Mart before every send
- A report with a send condition posts only when the result is not empty
Step 5: Reuse Stripe refunds beyond Slack
The same Data Mart works in OWOX, where your assistant for data can read it. Ask about any report, then get the result in Google Sheets or Excel in one click.
- Ask which reason accounts for most refunds
- Change the report once and the next post reads the change
- 0.41.0Dates from Google Sheets arrive as dates, not text
- 0.41.0Rotating a connector key is one change: Sources share reusable Credentials
- 0.40.0Connecting a plan from Google Sheets takes fewer guesses
- 0.39.0Reload a year of history in one backfill, not twelve
- 0.39.0Long Facebook Ads imports no longer fail on a corrupted response
Why OWOX for Stripe in Slack
A refund notification pings once. OWOX posts the week's refunds, grouped and joined, in the channel where the answer gets decided.
- Refunds with their cause. Each refund joins its charge and any dispute before it is posted.
- You own the data. Stripe lands in your own data warehouse, in tables you control before anything reaches Slack.
- Slack stays simple. Paste the channel email address once; no Slack app to build and no token to renew.
- Posts only when it matters. Set a report to send only when the result is not empty.
- One place to fix. When Stripe changes its API, you update the connector, not your Slack setup.
You are booked. The invitation is on its way to , with the calendar invite and the meeting link.
