Use cases

Stripe Alerts for Agencies: Retainers, Invoices, and Cash Flow

Agencies live and die by payment timing. Here's how to alert on invoice paid, catch failed retainer payments, and give your team cash-flow visibility in Slack — without a dashboard to babysit.

The ChargeBell TeamUpdated July 6, 20269 min read

Agencies run on retainers and project invoices, and both hinge on one thing: when the money actually lands. Stripe alerts for agencies close that gap — they tell your team the moment a client invoice is paid, flag a failed retainer charge before it churns, and keep everyone's read on cash flow current without anyone opening the Stripe dashboard. This guide covers which Stripe events map to your billing model, how to route them in Slack, and an honest look at what per-client visibility does and doesn't mean.

Short answer

Alert on `invoice.paid` so you catch retainer payments even when a client pays out-of-band by wire or ACH, and alert on `invoice.payment_failed` so a declined card-on-file gets human follow-up before the account churns. Send the wins to a client-visible channel and the failures to your ops or finance channel. ChargeBell does this in about two minutes — connect Stripe read-only, connect Slack, toggle the invoice alerts on.

Why payment timing is the agency problem

For most businesses a late payment is an annoyance. For an agency it's a staffing and hiring decision. When you're carrying a team against retainer revenue that arrives on the client's schedule, a two-week slip on one big invoice ripples straight into payroll and cash planning.

The data backs up how universal this is. Ignition's 2025 agency report — surveying 273 agency managers and executives across branding, creative, digital, marketing, PR, and web dev — found that 71% say at least one in every four invoices is paid late, and 56% say payments typically arrive two weeks to two months after the due date. Chasing that money is a real job: 84% of agencies spend 3–10+ hours every month following up on overdue payments.

71%

of agencies: 1 in 4 invoices paid late

84%

spend 3–10+ hrs/month chasing payments

63%

report unpredictable cash flow

The volatility compounds. In the same report, 63% of agencies report unpredictable cash flow, and 82% have delayed or cancelled hiring or investments because of it. Payment terms don't cushion the risk much either: only 10% of agencies use retainer-based pricing, just 16% require full payment upfront, and 49% take only a partial advance — so most of the invoice value is still owed after the work ships. Broader surveys put the near-universal version of this bluntly: roughly 97% of agencies regularly deal with late client payments.

None of this is fixed by a notification. But visibility changes your response time. When the moment a payment lands (or fails) shows up in the channel your team already lives in, you stop discovering problems days later in a reconciliation pass. If you want the general version of that argument, see how to monitor Stripe without checking the dashboard.

Match the Stripe event to your billing model

Before you turn on any alert, get clear on how you bill, because Stripe treats two collection methods very differently. This distinction decides what "paid" and "failed" even mean for your account.

  • `charge_automatically` — Stripe auto-charges a saved card each cycle. This is the card-on-file retainer. When the card declines, Stripe's dunning and Smart Retries kick in automatically.
  • `send_invoice` — Stripe emails the client an invoice with a due date, and they pay it manually, usually by ACH or wire. This is the classic agency retainer and project-invoice model. There are no automatic card retries here — collection relies on reminder emails and your follow-up.

That second point matters more than it looks. Stripe's Smart Retries only apply to card payments on automatically-collected invoices. Manually-collected send_invoice invoices — the ones most agencies actually use for retainers — get no card retries at all. So the safety net you might assume Stripe provides doesn't exist for a big chunk of agency billing. A person has to notice and follow up, which is exactly why a real-time alert earns its keep.

Why `invoice.paid` beats `invoice.payment_succeeded`

This is the single most important detail for agencies, and it's easy to get wrong. Stripe fires `invoice.payment_succeeded` only for successful automatic or online card payments. It does not fire when an invoice is marked paid out-of-band — the exact case when a client wires you the money and you (or Stripe) mark the invoice paid manually.

`invoice.paid`, by contrast, fires when a payment attempt succeeds or when an invoice is marked paid out-of-band. Since most agency retainers land by ACH or wire and get reconciled manually, invoice.paid is the correct success event — it catches the money that invoice.payment_succeeded silently misses. Stripe itself recommends invoice.paid as the primary success event to listen to precisely because it covers both online and out-of-band payments.

The one-line rule

If your clients ever pay by wire, ACH, or check and you mark invoices paid manually, alert on `invoice.paid`, not invoice.payment_succeeded. Otherwise you'll never get a Slack ping for your largest, slowest-paying retainers.

The Stripe alerts for agencies worth turning on

You don't need all thirteen alert types ChargeBell offers. For an agency, a tight set covers the whole payment lifecycle without noise:

  • Invoice paid — the confirmation your retainer or project payment actually cleared. Off by default in ChargeBell, so turn it on deliberately. This is the one agencies care about most.
  • Payment failed — critical. A declined card-on-file retainer needs human follow-up before it becomes churn. This one bypasses quiet hours and can prefix @channel.
  • Payment recovered — the resolution ping, so you know a previously-failed retainer went through and can stop chasing it.
  • Payment received — for agencies that also take one-off card payments (deposits, ad-hoc project fees) outside the invoice flow.
  • Refund sent and dispute created — the risk events. Disputes are critical and bypass quiet hours. See how to send Stripe dispute alerts to Slack and how to send Stripe refund alerts to Slack.

The failed-payment alert deserves its own emphasis. Because manually-collected invoices get no automatic retries, a failure on a send_invoice retainer is genuinely stuck until someone acts. Getting that into Slack the moment it happens is the difference between a same-day follow-up and finding out at month-end. For the setup mechanics, see how to send failed payment alerts to Slack.

What the alerts look like

ChargeBell writes each alert in plain English with the numbers already computed — the amount, the customer, the invoice, and the context — not raw webhook JSON you have to decode. Here's the win agencies wait for:

#client-billing
ChargeBellApp

Invoice paid — $4,500.00 from Acme Co.

Invoice #INV-2043 · Monthly retainer

Paid via ACH · Customer: acme-co

And the one that saves an account — a failed card-on-file retainer, routed to the team that follows up:

#billing-ops
⚠️
ChargeBellApp

⚠️ Payment failed — $2,000.00 from Northwind Studios

Invoice #INV-2051 · Card declined (insufficient funds)

Customer: northwind · Follow up before it churns

Because ChargeBell computes net-after-fees, customer name, and MRR impact for you, nobody on the team has to open Stripe to understand what happened. For more on what a good alert carries, see what a payment alert should include.

The honest truth about "per-client visibility"

Agencies often ask for a per-client dashboard — one place showing each client's payment status side by side. ChargeBell is not that, and it's worth being precise so you set it up correctly.

One org per connected Stripe account

ChargeBell connects one organization to one Stripe account. It does not aggregate multiple clients' separate Stripe accounts into a multi-client dashboard, and Stripe stays your source of truth. What ChargeBell gives you is real-time alerting and routing across the activity in that one connected account.

So when an agency bills all of its clients through its own single Stripe account (the common case — clients are customers in your Stripe, each with their own invoices), "per-client visibility" means routing and filtering those alerts by client. You can send each alert type to a specific Slack channel — retainer wins to #client-billing, failures and risk to #billing-ops — and use ChargeBell's minimum-amount threshold to keep small charges out of the channel your leads watch. What you don't get is a per-client channel toggle keyed to each customer automatically; you organize by event type and destination channel, not by a separate dashboard per client.

If your clients each run their own separate Stripe accounts that you manage, ChargeBell can't merge those into one view — that's outside what a single read-only connection does. Being clear about this up front saves disappointment. For how teams typically split channels, see which Stripe alerts go to finance, support, and founders.

A practical starting point you can set up in a couple of minutes:

  1. 1

    Connect Stripe (read-only)

    One-click Stripe Connect OAuth. ChargeBell can see payment events and can never move money, issue refunds, or edit anything in your account.

  2. 2

    Connect Slack and pick channels

    Add the app and choose your channels — say #client-billing for wins and #billing-ops for problems. ChargeBell only posts to channels you pick.

  3. 3

    Turn on invoice paid

    It's off by default, so enable it explicitly. This is the retainer confirmation and covers out-of-band ACH/wire payments via invoice.paid. Route it to #client-billing.

  4. 4

    Route failures and risk to ops

    Send payment failed, dispute created, and refund sent to #billing-ops. Failed payments and disputes are critical — they bypass quiet hours, and you can add an @channel prefix.

  5. 5

    Set a minimum amount and quiet hours

    Use the minimum-amount threshold (Any / $10 / $50 / $100 / $250) so tiny charges don't clutter the win channel, and set quiet hours so overnight noise waits for morning — while critical failures still come through.

  6. 6

    Send a test alert

    Confirm the setup before a real invoice lands. You'll get your first alert before your coffee cools.

On the Pro plan, the daily and weekly digests give principals a standing read on cash flow — yesterday's net revenue, new subscribers, MRR movement, and the next payout — without asking anyone to pull a report.

How this compares to the built-in and DIY options

Stripe's own account email notifications are coarse: a single global toggle turns successful-payment emails on or off for everyone, and failed-card emails are a separate on/off setting. There's no way to route different events to different people or Slack channels from Stripe's email settings, and emails don't sit in the channel where your team coordinates.

Stripe Workflows for Slack is more capable — it can trigger on invoices and payments, use custom templates, and route to different channels via branching logic. But every workflow is built by hand in the Stripe Dashboard, and per-client channel routing means maintaining branching conditions keyed on customer for every client. Zapier offers per-event Stripe→Slack templates, but multi-event routing means several Zaps to build and maintain, and its task-based pricing climbs with volume — the busier your billing month, the bigger the bill. See ChargeBell vs Zapier and ChargeBell vs Stripe's built-in notifications for the full breakdown.

CriterionChargeBellStripe emailsStripe Workflows
Alerts land in Slack
Catches out-of-band (invoice.paid) payments
Route events to different channels
Plain-English amounts (net after fees, customer)
Works without building workflows
Quiet hours + critical-alert bypass
PricingFlat $24/moIncludedIncluded
Stripe emails and Stripe Workflows are Stripe's own tools; Workflows is powerful but requires building each workflow by hand in the Dashboard.

ChargeBell for agency billing

Strengths

  • Alerts on invoice.paid, so out-of-band ACH/wire retainers aren't missed
  • Per-alert channel routing — wins to one channel, failures to another
  • Plain-English messages with amount, customer, and invoice already filled in
  • Flat $24/mo regardless of how many clients or invoices you run

Trade-offs

  • One org per connected Stripe account — not a multi-client dashboard
  • Stripe → Slack (and webhooks) only, not general automation
  • Per-client organization is by channel routing, not a customer-keyed view

Key takeaways

  • Alert on invoice.paid, not invoice.payment_succeeded — it's the only event that catches manually-marked ACH/wire retainer payments.
  • Manually-collected (send_invoice) invoices get no automatic Stripe card retries, so a real-time failed-payment alert is your safety net.
  • Route wins and failures to separate Slack channels; failed payments and disputes are critical and bypass quiet hours.
  • "Per-client visibility" means routing alerts by channel within one connected Stripe account — ChargeBell is not a multi-client dashboard.
  • It's a flat $24/mo (100 free alerts/mo, 7-day history) — cost doesn't rise with your billing volume.

Know the moment a client invoice is paid

Connect Stripe read-only, connect Slack, turn on invoice paid, and send a test alert. Free plan, no card needed.

Start freeFree plan · no card needed

Frequently asked questions

Which Stripe event should agencies alert on for paid invoices?

Alert on invoice.paid. It fires both when a payment attempt succeeds and when an invoice is marked paid out-of-band — the case when a client pays by wire or ACH and the invoice is reconciled manually. invoice.payment_succeeded only fires for automatic online card payments and misses those out-of-band retainer payments entirely.

Can ChargeBell give me a per-client dashboard for all my agency clients?

No. ChargeBell connects one organization to one Stripe account and is not a multi-client dashboard. If you bill all clients through your own single Stripe account, you get per-client visibility by routing and filtering alerts by channel. If your clients each run their own separate Stripe accounts, ChargeBell can't merge them into one view.

Do manually-collected agency invoices get automatic payment retries in Stripe?

No. Stripe's Smart Retries and dunning apply only to card payments on automatically-collected invoices. Manually-collected send_invoice invoices — the common agency retainer model paid by ACH or wire — get reminder emails but no automatic card retries, so a failed payment sits until a person follows up. That's why a real-time failed-payment alert matters.

How should an agency route Stripe alerts in Slack?

Send wins like invoice paid and payment received to a client-facing or billing channel, and send failures, disputes, and refunds to your ops or finance channel. ChargeBell supports per-alert channel routing, a minimum-amount threshold to keep small charges out, and quiet hours — while critical failed-payment and dispute alerts still come through immediately.

Does ChargeBell need write access to my Stripe account?

No. ChargeBell connects through official Stripe Connect OAuth in read-only mode. It can see payment events to send alerts, but it can never move money, issue refunds, edit customers, or change anything in your Stripe account. You can disconnect in one click, and your data is deleted with the disconnection.

How much does ChargeBell cost for an agency?

The free plan is $0 for 100 alerts a month with 7-day history and every alert type. Pro is $24/month, or $240/year (two months free), and adds unlimited alerts, daily and weekly digests, full history, and same-day human help. The price is flat regardless of how many clients or invoices you process.