Notion action

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. 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. 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. 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. 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.

Map Stripe event fields to Notion properties with full type checking and JSONata templating.

Outbound vs Zapier

OutboundZapier
Lives inside the Stripe Dashboard
Pricing modelFrom $19/mo flat$29.99/mo + per-task fees
Notion property type checking before write
Idempotent on Stripe invocation id
Setup time≈3 minutes15-30 minutes
Templating languageJSONataZapier formatter steps
OAuth-scoped database accesstrue

Frequently asked questions

Can I update an existing Notion row instead of appending?+
Append is the default and what most setups want. To update, configure the action with an upsert key — a JSONata expression like {{customer.id}} — and Outbound will look up an existing row by that property and update it instead of creating a new one.
What Notion property types are supported?+
All of them: title, rich text, number, select, multi-select, date, checkbox, url, email, phone, relation, status. Files and people properties are write-by-reference. Formula and rollup properties are read-only on Notion's side, so they're shown but greyed out.
What if my Notion property names change?+
Outbound reads the database schema each time you open the config and validates on save. If a property is renamed in Notion, the action will surface a validation error on the next workflow publish rather than failing silently at run time.
Does it count against my Notion API rate limits?+
Yes — every append is one Notion API request. Notion's limit is roughly 3 requests per second per integration. Outbound queues internally and respects 429s, so a burst from Stripe won't tip you over.
Can multiple workflows write to the same database?+
Yes. The integration token is workspace-scoped, so any workflow you build can target any allowed database. Each workflow gets its own property mapping, so the same database can serve as a generic event log with different fields per source.