Stripe alerts for agencies: retainers, invoices, and Slack
Agency billing runs on invoices that clients pay on their own schedule. This guide maps Stripe's invoice and payment events to Slack channels, and covers what invoice.paid does and does not prove.
The ChargeBell Team
Updated October 1, 2026. 9 min read.

Stripe alerts for agencies need to answer one question fast. Did the client pay the invoice? An invoice.paid alert in Slack tells the account lead when Stripe marks a retainer or project invoice paid. A failed payment alert tells billing ops when a card on file declines. Neither proves that a wire or ACH transfer reached your bank, so this guide also covers where reconciliation fits.
Short answer
Turn on ChargeBell's invoice paid alert for invoice.paid. It is off by default. Keep the critical payment failed alert on for payment_intent.payment_failed. ChargeBell does not map invoice.payment_failed, so watch that event in Stripe or another tool. Post both to internal billing channels, and check any invoice a teammate marked paid against the bank statement.
Why agencies feel late payments more than most businesses
An agency pays its team every month whether or not clients pay on time. When one large retainer slips two weeks, the gap shows up in payroll and in the decision to hire the next designer.
Ignition's 2025 agency survey asked 273 agency managers and executives about billing. 71% said at least one in four invoices is paid late. 56% said late payments arrive two weeks to two months after the due date, and 84% spend three or more hours a month chasing them. These are self-reported answers, not a measured rate for every agency.
71%
say 1 in 4 invoices is paid late
84%
spend 3+ hours a month chasing payments
63%
report unpredictable cash flow
The same survey found 63% with unpredictable cash flow and 82% delaying or canceling hiring or investments. Your own aging report is the better guide for when to follow up. An alert shows you a status change in Stripe. It does not tell you the money is in the bank.
What an alert changes is how soon someone notices. A paid invoice or a declined card appears in the channel the team already reads, instead of turning up days later in a reconciliation pass. The general case is in how to monitor Stripe without checking the dashboard.
Match the Stripe event to how you bill clients
Stripe invoices use one of two collection methods. Which one you use decides what "paid" and "failed" mean on your account.
- `charge_automatically`. Stripe charges a saved card each cycle. This is the card-on-file retainer. When the card declines, Stripe's retry settings for automatic collection apply.
- `send_invoice`. Stripe emails the client an invoice with a due date, and the client pays it by card, ACH, or wire. Most agency retainers and project invoices work this way. Stripe does not retry these. Collection depends on reminder emails and your own follow-up.
Stripe's Smart Retries only apply to card payments on automatically collected invoices. A send_invoice invoice gets no automatic card retries. If most of your clients pay by emailed invoice, nobody at Stripe is chasing the late ones. A person on your team has to notice, and a Slack alert is how they notice.
Use `invoice.paid`, not `invoice.payment_succeeded`
Stripe sends `invoice.payment_succeeded` only when a payment attempt succeeds. It does not fire when an invoice is marked paid out of band. That is the usual agency case, where a client wires the money and someone marks the invoice paid.
`invoice.paid` fires on a successful payment attempt and also when an invoice is marked paid out of band. It catches the status change that invoice.payment_succeeded misses. When a teammate marks a wire invoice paid, the event only means Stripe's status changed. Confirm the deposit separately. Stripe lists both events in its subscription invoice events guide.
The rule for manually marked invoices
Use `invoice.paid` to see that an invoice closed. Then check the payment method and the bank record before you close the receivable.
Which Stripe alerts for agencies to turn on in Slack
An agency does not need every ChargeBell alert type. These five cover retainer billing:
- Invoice paid. Stripe marked a retainer or project invoice paid. It is off by default in ChargeBell, so turn it on and reconcile out-of-band payments.
- Payment failed. A card-on-file retainer declined. This alert is critical, so it skips quiet hours and can start with
@channel. - Payment recovered. A payment that failed earlier went through. The person following up can stop.
- Payment received. Covers one-off card payments outside the invoice flow, such as deposits or ad hoc project fees.
- Refund sent and dispute created. Disputes are critical and skip quiet hours. Setup details are in Stripe dispute alerts in Slack and Stripe refund alerts in Slack.
ChargeBell's payment failed alert comes from payment_intent.payment_failed. Some send_invoice failures never create that event, for example when the invoice has no stored payment method. Watch invoice.payment_failed in Stripe for those. The full setup is in how to send failed payment alerts to Slack.
What the alerts look like in Slack
These examples use sample customers and ChargeBell's current message layout. Each one links to the record in Stripe.
ChargeBellAPP
✅ Invoice INV-2043 paid: $4,500.00
acme@example.com
View invoice in Stripe
A declined card-on-file retainer goes to the people who follow up:
ChargeBellAPP
⚠️ A $2,000.00 payment didn't go through
northwind@example.com · card declined
Check Stripe to see if it will be retried.
Each message tells the owner which Stripe record to open. It does not prove a wire cleared, and fee, net, and MRR fields only appear when Stripe data supports them. What a payment alert should include explains which fields are always present and which are conditional.
What per-client visibility means with one Stripe account
Agencies often ask for a dashboard that shows each client's payment status side by side. ChargeBell does not build that view.
One org per connected Stripe account
ChargeBell connects one organization to one Stripe account. It does not combine several clients' Stripe accounts into one dashboard. It sends real-time alerts for activity in the account you connect, and Stripe stays the source of truth.
Most agencies bill every client from their own Stripe account, with each client as a customer. In that setup, per-client visibility comes from the alert text and the channel it lands in. Send invoice paid to #client-billing and failures and disputes to #billing-ops. The minimum amount filter keeps small charges out of the channel your account leads read. ChargeBell routes by alert type, not by customer, so it cannot give each client its own channel automatically.
If each client has a separate Stripe account that you manage, ChargeBell cannot merge them. A single read-only connection sees one account. For channel splits that work for most teams, see which Stripe alerts go to finance, support, and founders.
A ChargeBell setup for an agency
This takes a few minutes in the Stripe Slack integration:
- 1
Connect Stripe read-only
ChargeBell uses Stripe Connect OAuth. It reads payment events and cannot move money, issue refunds, or edit anything in your account.
- 2
Connect Slack and pick channels
Add the Slack app and choose channels, for example #client-billing for paid invoices and #billing-ops for problems. ChargeBell only posts to channels you choose.
- 3
Turn on invoice paid
It is off by default. It covers invoices Stripe marks paid, including out-of-band payments. Send it to #client-billing and check manual payments against the bank.
- 4
Send failures and risk to billing ops
Route payment failed, dispute created, and refund sent to #billing-ops. Failed payments and disputes are critical. They skip quiet hours and can include an @channel mention.
- 5
Set a minimum amount and quiet hours
The minimum amount filter has five settings: Any, $10, $50, $100, and $250. Quiet hours hold routine alerts overnight and post them in the morning. Critical alerts still arrive right away.
- 6
Send a test alert
Check that the message lands in the right channel before a real client invoice is paid.
The daily digest posts yesterday's net revenue, activity counts, MRR, and the next payout. The weekly digest posts MRR movement. Agency principals get a cash summary without asking anyone to pull a report.
How this compares to Stripe emails, Stripe Workflows, and Zapier
Stripe's account emails have one toggle for successful payment emails and a separate toggle for failed card emails. You cannot send different events to different people or Slack channels from those settings.
Stripe Workflows can post to Slack on invoice and payment events, with custom templates and branching. You build each workflow by hand in the Dashboard, and routing per client means a branch condition for every client. Zapier has Stripe to Slack templates, but each event route is its own Zap, and Zapier bills by task, so a heavy billing month costs more. Details are in ChargeBell vs Zapier and ChargeBell vs Stripe's built-in notifications.
| Criterion | ChargeBell | Stripe emails | Stripe Workflows |
|---|---|---|---|
| Alerts land in Slack | |||
| Catches invoices marked paid out of band (invoice.paid) | |||
| Route events to different channels | |||
| Formatted amount and customer, with fee and net when available | |||
| Works without building workflows | |||
| Quiet hours with critical alerts still delivered | |||
| Pricing | Flat $24/mo | Included | Included |
ChargeBell for agency billing
Strengths
- Alerts on invoice.paid, so ACH and wire retainers marked paid show up in Slack
- Each alert type can go to its own channel
- Messages include the amount, customer, and a link to the invoice
- Flat $24/mo no matter how many clients or invoices you bill
Trade-offs
- One org per connected Stripe account, with no multi-client dashboard
- Sends Stripe events to Slack only, with no general automation
- Routes by alert type, not by client
- Does not alert on invoice.payment_failed
Key takeaways
- Alert on invoice.paid. invoice.payment_succeeded misses invoices marked paid by hand after an ACH or wire.
- An invoice.paid alert shows a status change in Stripe. Check the bank before you treat it as cash received.
- send_invoice invoices get no automatic card retries. Watch invoice.payment_failed in Stripe, since ChargeBell only alerts on failed PaymentIntents.
- Put paid invoices and failures in separate Slack channels. Failed payments and disputes are critical and skip quiet hours.
- ChargeBell sees one Stripe account. Per-client visibility comes from alert text and channel routing, not a client dashboard.
Set up the alert
Frequently asked questions
Which Stripe event should agencies alert on for paid invoices?
Use invoice.paid. It fires after a successful payment attempt and when an invoice is marked paid out of band. invoice.payment_succeeded does not fire for the out-of-band case. A manually marked invoice does not prove a wire or ACH transfer cleared, so check the bank record before closing it.
Can ChargeBell show a dashboard of all my agency clients?
No. ChargeBell connects one organization to one Stripe account and has no multi-client dashboard. If you bill every client from your own Stripe account, each alert names the customer and you can route alert types to different channels. If each client has a separate Stripe account, ChargeBell cannot combine them.
Does Stripe retry failed payments on manually collected agency invoices?
No. Stripe's automatic card retries apply to invoices with automatic collection, not send_invoice invoices. Those rely on reminder emails and your own follow-up. ChargeBell does not map invoice.payment_failed, so watch that event in Stripe or another integration.
How should an agency route Stripe alerts in Slack?
Send invoice paid and payment received to a billing channel your account leads read. Send payment failed, disputes, and refunds to a billing ops or finance channel. ChargeBell supports a channel per alert type, a minimum amount filter, and quiet hours. Failed payment and dispute alerts skip quiet hours.
Does ChargeBell need write access to my Stripe account?
No. ChargeBell connects through Stripe Connect OAuth in read-only mode. It reads payment events to send alerts and cannot move money, issue refunds, or edit customers. Disconnecting clears the stored Stripe access token and stops new alerts. Historical records follow the Privacy Policy.
How much does ChargeBell cost for an agency?
The free plan is $0 for 50 real-time alerts a month, with every alert type, daily and weekly digests, and full history. Pro is $24 a month or $240 a year and removes the alert limit. The price does not change with the number of clients or invoices.


