Stripe integration
Connect Stripe to see plan, MRR, LTV, payment status, and recent invoices for every customer in the inbox.
What it does
Connect Stripe and every conversation gets a Stripe context panel showing the customer's plan, MRR, lifetime value, and payment status. Agents can see at a glance whether they're talking to a $9/month plan or a $9,000/month plan, and whether their last payment failed.
It's read-only. We pull data, we don't write. No risk of Ochre charging the wrong card or canceling a subscription. Even if our token were somehow exposed, a malicious actor couldn't use it to make changes.
Stripe is the source of truth for all of these fields. We listen to Stripe's webhooks and update our cached view from those events; if Stripe says the subscription is past_due, the panel says past_due.
Setup
- Go to Settings → Integrations → Stripe.
- Click Connect Stripe.
- You'll be redirected to Stripe's Connect flow. Log in if you're not already.
- Authorize Ochre's read access to your account.
- You'll be redirected back. Connection complete.
Stripe Connect (the OAuth flow) is the right pattern here. It's how Stripe expects third-party apps to integrate, and it gets you a token scoped to your account, not a global API key you'd have to manage.
After install, Ochre starts a backfill: we pull every existing customer in your Stripe account and link or create end user records. Backfill runs in the background and typically completes within an hour for accounts with under 10,000 customers.
What you see
On every conversation, the Stripe panel shows:
- Plan. The active subscription's product and price.
- MRR. Monthly recurring revenue from this customer.
- LTV. Total revenue collected over the customer's lifetime.
- Payment status.
active,past_due,canceled,trialing, etc.
Click anything to open the corresponding record in Stripe.
Matching customers
We match Stripe customers to Ochre end users by email. When a new conversation comes in, we look up the sender's email in Stripe and link if found. If a customer has multiple Stripe customer records (test mode versus live, or multiple accounts), we prefer live mode.
Customers without a Stripe match show a "No Stripe customer found" panel. Agents can manually link if needed.
This is also the lazy-match path: if Stripe's backfill hasn't reached a customer yet but they email in, the matcher catches them on first inbound message.
Live updates
We listen to Stripe webhooks for customer.*, subscription.*, and invoice.* events, so the panel reflects current state, not stale snapshots. A subscription canceled an hour ago shows as canceled. An invoice that just failed shows as failed.
Using Stripe data in routing
Stripe fields are available in Routing rules:
- "If MRR > $1,000, assign to senior agent."
- "If status is
past_due, prioritize and tag billing." - "If on trial, route to onboarding."
The AI agent also has access to Stripe context when drafting replies, so it can address billing-related questions accurately.
Re-syncing
If something looks stale, use the Re-sync now button on the Stripe integration page. Useful after you've migrated customer data in Stripe or after a bulk update.
Disconnecting
Disconnecting clears the encrypted OAuth token and marks the integration inactive. The Stripe panel disappears from conversations. End user records are not deleted (they keep the email and conversation history) but the Stripe-derived fields go stale and stop updating.
To remove Ochre's access on Stripe's side too, go to Stripe Dashboard → Settings → Connected Accounts and revoke. See Disconnecting integrations.
Permissions and security
Our Stripe Connect token has only read_only scope. We can read customers, subscriptions, invoices, prices, and products. We cannot create charges, refund, modify subscriptions, or write any data. See Integration permissions.
The token is stored encrypted at rest and only readable through a server-side helper that checks the caller is an Owner or Admin of the workspace.
What's next
- Build Routing rules using Stripe fields.
- Connect HubSpot integration for CRM context.
Was this article helpful?