Stripe to Notion database, no glue code
Append a row to any Notion database when a Stripe event fires. Customer logs, refunds journal, churn reasons — all live, templated, and idempotent.
Free trial · From $19/mo · No credit card required
The problem
Every team builds the same Notion database eventually. A customers table. A refunds journal. A churn-reasons log. Then they spend a Saturday gluing Stripe to Notion: a Zapier zap, a Make scenario, or a webhook handler running on a $5 box somewhere. The stripe to notion database pipe is fragile. Property names mismatch, dates come in as strings, the rich text field expects an array of objects, and your Zap silently fails at 3am when a property gets renamed.
The Notion action does this properly. You point it at a database by id, map Stripe event fields to Notion properties with JSONata, and Outbound handles the property typing, retries on 5xx, and dedup. It lives in the same dashboard as the billing data. No drift, no separate account, no per-task billing meter spinning every time you book revenue.
How stripe to notion database works
- 1
Connect Notion via OAuth
Install Outbound, click Connect Notion, pick which workspace and which databases to expose. Outbound stores the integration token encrypted and scoped to only the pages you allowed. - 2
Pick a database and map properties
The action config lists every property on the database with its Notion type. Map each one to a JSONata expression against the Stripe event — {{customer.email}}, {{invoice.amount_paid / 100}}, today's date, anything. - 3
Add it to a workflow
Drop the Notion action into any Stripe Workflow. The trigger event provides the fields, the property mapping resolves them, Outbound posts the row. Each invocation appends exactly one row. - 4
Watch the execution log
Every append shows up in Outbound's execution log inside the Stripe Dashboard with the Notion page id, the timing, and any property errors. No flipping between tabs to debug.
{
"trigger": "customer.subscription.created",
"action": "outbound.notion",
"database_id": "a1b2c3d4-...",
"properties": {
"Email": "{{customer.email}}",
"Plan": "{{items.data[0].price.nickname}}",
"MRR": "{{items.data[0].price.unit_amount / 100}}",
"Started": "{{$fromMillis(created * 1000)}}",
"Source": "Stripe"
}
}Example workflow configuration
Screenshot of the Notion action config panel inside the Stripe Workflow builder. Shows a database picker dropdown with a customer's workspace databases listed, a property mapping grid with Notion property names on the left and JSONata expression inputs on the right, and a small connection status indicator showing Notion is authenticated.
Outbound vs Zapier
| Outbound | Zapier | |
|---|---|---|
| Lives inside the Stripe Dashboard | — | |
| Pricing model | From $19/mo flat | $29.99/mo + per-task fees |
| Notion property type checking before write | — | |
| Idempotent on Stripe invocation id | — | |
| Setup time | ≈3 minutes | 15-30 minutes |
| Templating language | JSONata | Zapier formatter steps |
| OAuth-scoped database access | true |
Frequently asked questions
Can I update an existing Notion row instead of appending?+
What Notion property types are supported?+
What if my Notion property names change?+
Does it count against my Notion API rate limits?+
Can multiple workflows write to the same database?+
Related integrations
Stripe to your own Postgres
When Notion isn't enough and you want the data in your own warehouse with full SQL access.
Send Stripe events to Discord
Pair with Notion: Notion as the durable log, Discord as the realtime alert channel.
Trigger Stripe workflows from Notion
Coming with Inbound: edit a Notion row and kick off a Stripe action.