Create Linear issue from Stripe events
Turn disputes, failed payments, and cancellations into triaged Linear issues. The right team, the right project, the right assignee, filed the moment the Stripe event fires.
Free trial · From $19/mo · No credit card required
The problem
Disputes don't wait. A chargeback at 11pm Friday needs to be sitting in front of whoever owns Trust & Safety on Monday morning, not in someone's inbox. The usual answer is a Zapier zap that calls Linear's API off a Stripe webhook. It looks fine in a demo. In production it loses attachments, posts duplicate issues when something retries, and ends up in a Linear project nobody's opened in six months.
The Linear action treats this as the workflow it actually is. Configure the team, the project, the label set, a default assignee, and JSONata-templated title and description. When the Stripe event fires, the issue appears in Linear with the dispute reason, customer email, invoice link, amount, evidence due date, and a back-link to the Stripe Dashboard. Outbound dedupes on the Stripe invocation id, so one event produces one issue even on retry.
How the Linear action works
- 1
Connect Linear via OAuth
Click Connect Linear during Outbound install. Choose the workspace and which teams to expose. The token is stored scoped, and Outbound reads your teams, projects, labels, and members so the config UI offers them as dropdowns. - 2
Configure team, project, labels
Pick the team to file into, the project (or none), labels to apply, priority, and a default assignee. Each one can be a static choice or a JSONata expression that resolves against the Stripe event at run time. - 3
Template title and description
Use JSONata to compose a useful title (e.g., Dispute on {{charge.dispute.amount}} from {{customer.email}}) and a Markdown description with the evidence link, dispute reason, and a back-link to the Stripe Dashboard. - 4
Publish the workflow
Drop the Linear action onto any Stripe Workflow. The issue lands in Linear within a few seconds of the Stripe event, already scoped and assigned. The execution log shows the Linear issue identifier so you can jump straight to it.
trigger:
event: charge.dispute.created
steps:
- action: outbound.linear
config:
team: trust-safety
project: disputes
labels: [dispute, urgent]
priority: 1
assignee_email: ops-rotation@acme.com
title: "Dispute ${{charge.dispute.amount / 100}} — {{customer.email}}"
description: |
Reason: {{charge.dispute.reason}}
Evidence due: {{$fromMillis(charge.dispute.evidence_details.due_by * 1000)}}
Stripe: https://dashboard.stripe.com/disputes/{{charge.dispute.id}}Example workflow configuration
Screenshot of the Linear action panel inside the Stripe Workflow builder. Shows dropdown selectors for team, project, label chips, a priority selector, an assignee picker showing team member avatars, and JSONata-templated title and description fields with placeholders highlighted in cyan.
Outbound vs Zapier
| Outbound | Zapier | |
|---|---|---|
| Lives inside the Stripe Dashboard | — | |
| Pricing model | From $19/mo flat | Per-task billing |
| Idempotent on Stripe invocation id | — | |
| Dynamic team/project/assignee via templating | limited | |
| Setup time | ≈3 minutes | 15–25 minutes |
| Back-link to Stripe Dashboard built in | — | |
| Separate vendor account required | — |
Frequently asked questions
Can I assign the issue based on the dispute reason or amount?+
What happens if the same dispute fires the webhook twice?+
Can I add comments to an existing issue instead of creating a new one?+
Does it support sub-issues or relations?+
Which Stripe events make sense to wire to Linear?+
Related integrations
Send Stripe events to Discord
Pair with Linear: Linear for the tracked work, Discord for the noisy alert that gets the team's attention.
Send Stripe events through Resend
Companion action: notify the customer about the failed payment while you file the internal Linear issue.
Trigger Stripe from Linear
Coming with Inbound: close a Linear issue and trigger a Stripe refund or credit.