Discord action

Send Stripe events to Discord without Zapier

Drop a Discord step into any Stripe Workflow. Templated messages, channel routing, idempotent delivery. Runs inside the Stripe Dashboard with a flat monthly fee.

Free trial · From $19/mo · No credit card required

The problem

Every team running Stripe wants a ka-ching channel in Discord. The standard playbook is to wire a Zapier zap from a Stripe webhook to a Discord webhook, pay per task, and pray it doesn't double-fire on a 5xx. It works, until it doesn't: duplicate pings on retry, rate-limit drops, no templating beyond what Zapier's UI gives you, and a separate bill that scales linearly with revenue events.

If you want to send Stripe events to Discord properly, you want it to live next to the billing data, dedupe on Stripe's invocation id, and cost a flat fee no matter how loud your week gets. That's what the Discord action does. You add it as a step in the Stripe Workflow builder, point it at a channel webhook, write a JSONata-templated message body, and ship. No external account, no per-task meter, no orphaned automation in someone else's dashboard.

How send stripe events to discord works

  1. 1

    Install Outbound from the Marketplace

    One click from the Stripe App Marketplace. The Discord action shows up immediately as a step type in the Workflow builder. No separate account, no API keys to copy around.
  2. 2

    Add a Discord webhook URL

    Create a webhook in your Discord server settings, paste the URL into the action config. Outbound stores it encrypted at rest. You can configure one webhook per workflow or share across many.
  3. 3

    Template the message with JSONata

    Reference any field on the triggering Stripe event: {{customer.email}}, {{invoice.amount_paid}}, {{charge.dispute.reason}}. JSONata gives you conditionals, arithmetic, and currency formatting without leaving the field.
  4. 4

    Publish the workflow

    Stripe handles the trigger plumbing. Outbound handles delivery, retries, and dedup. The execution log shows every Discord post, status code, and which Stripe invocation it matched.
trigger:
  event: invoice.paid
steps:
  - action: outbound.discord
    config:
      webhook_url: ${DISCORD_WEBHOOK}
      content: |
        ka-ching — {{customer.email}} just paid
        amount: ${{invoice.amount_paid / 100}}
        plan: {{invoice.lines.data[0].description}}
        link: https://dashboard.stripe.com/invoices/{{invoice.id}}
      username: stripe-bot

Example workflow configuration

Screenshot of the Stripe Workflow builder showing a Discord action step. The right-hand config panel shows fields for webhook URL, message content with JSONata template placeholders like customer.email and invoice.amount_paid, and a username override. A small Outbound logo sits in the step header.

The Discord action sits alongside Stripe's native Slack step in the Workflow builder.

Outbound vs Zapier

OutboundZapier
Lives inside the Stripe Dashboard
Pricing modelFrom $19/mo flat$29.99/mo + per-task fees
Idempotent on Stripe invocation id
Setup time≈2 minutes10-20 minutes
Templating languageJSONataZapier formatter steps
Execution log scoped to one Stripe account
Separate vendor account required

Frequently asked questions

Does this support Discord threads or just channels?+
Channels are first-class via the webhook URL. To post into a specific thread, append ?thread_id= to the webhook URL — Discord supports it natively and Outbound passes it through. We do not currently create threads for you, but that’s on the roadmap.
What happens if Discord rate-limits us?+
Discord returns a 429 with a retry-after header. Outbound respects it, queues the message, and retries after the indicated delay. The execution log shows the rate-limit event so you can see if you’re consistently hitting the ceiling.
Can I send rich embeds, not just plain content?+
Yes. The action accepts the full Discord webhook payload schema — content, embeds, username, avatar_url, allowed_mentions. Everything is JSONata-templated, so an embed title can pull from {{invoice.id}} and a color can be conditional on amount.
How do I avoid duplicate pings on retry?+
Stripe Workflows re-fires the whole invocation on a 5xx. Outbound dedupes on the Stripe invocation id before posting to Discord, so even if your workflow re-runs, the Discord message goes out exactly once.
Can I route different events to different channels?+
Yes. Either build separate workflows per channel, or use one workflow with a conditional step before the Discord action. The webhook_url field is itself JSONata-templated, so it can resolve based on event type or amount thresholds.