What connecting Stripe does
The tracking script tells you who visited and what they did. Stripe tells you who paid. Connecting the two is what turns a traffic report into a revenue report: every successful charge becomes a server-verified revenue event, tied to the visitor and the contact behind it, so the Overview, your funnels and your attribution report show money rather than a browser-side guess.
Four things arrive from one connection:
- Revenue from successful charges, recorded net — refunds and disputes come back out as negative adjustments, so the
revenuemetric is what you actually kept. - Subscription facts on the contact: status, plan, trial and churn, which is what moves a paying person to the Customer stage in the CRM.
- Lifetime value on each contact, grossed up by charges and netted down by refunds.
- Agent tools. Stripe connects through its own hosted MCP server, so the Assistant and your own MCP endpoint can inspect payments when you ask about them.
Connect it
1. In Stripe, open Developers → API keys and create a restricted key. Give it read access to the resources the revenue sync walks: Charges, Customers, Payment Intents, Subscriptions, Checkout Sessions, Refunds and Disputes. A key without refunds, disputes or sessions still works — that part of the sync is simply skipped.
2. In BusinessMCP, open Connections and expand the Stripe card. It sits under Recommended integrations, and the search box finds it too.
3. Leave the preset server URL (https://mcp.stripe.com) as it is, paste the restricted key into the Bearer token field, and click Connect.
The key is stored server-side in your workspace vault. It never reaches the browser or the model. If you run several products from one Stripe account, connect the key of the account this workspace sells from — the key is account-scoped, so the right key is what keeps another project’s revenue out of your numbers.
Carry the visitor id into checkout
Revenue attributes to a journey when the payment carries the anonymous visitor id the tracker minted. There are three ways it gets there, from zero effort to a line of code:
- Stripe Payment Links and hosted Checkout links — automatic. When a visitor clicks a link to a
stripe.comhost on your site, the tracker appends their visitor id asclient_reference_id. Stripe keeps it on the Checkout Session, and the sync uses it to stitch the buyer’s email to their browsing journey. Turning off email auto-capture withdata-autolead="false"also turns this off. - A custom checkout — one line. Read the id with
window.mcph.getVisitorId()in the browser and pass it to your server when you create the payment. Put it in the Checkout Session’sclient_reference_id, or inmetadata.mcph_sidon the PaymentIntent or charge. - No id at all — the email fallback. If a charge carries no id, we match the buyer’s email to a contact you already hold and use that contact’s visitor history. A buyer who signed up or filled a form first is covered this way.
A payment that carries the id inherits that visitor’s channel, campaign and landing page, which is what lets the attribution report say which source produced the money rather than only which produced the visit. See Install the tracking script for the rest of the JavaScript API.
What lands, and when
Stripe is polled, not webhooked: the revenue sync walks your account every six hours. The first run reaches back 30 days so the dashboard is not empty on day one; after that it picks up where the previous run stopped, and a charge it has already recorded is never counted twice.
Revenue is recorded only from charges that succeeded. A Checkout Session on its own adds identity, never money — it is how a Stripe-first buyer attaches to their journey, while the charge is what counts.
If you sell through a merchant of record instead — Paddle, Lemon Squeezy or Chargebee — those arrive by webhook rather than polling. See Managed connectors for their cards.
Verify it worked
- The Stripe card shows connected, and the Test action succeeds.
- After the next sync, the Revenue figure on the Overview reflects your Stripe charges for the window.
- Open a contact who paid: their stage reads Customer and their lifetime value includes the payment.
- Ask the Assistant "how much revenue did we make this month, and from which channel?" — it should answer from your real numbers and name the channel.
If revenue appears but every sale reads as Direct, the payments are not carrying a visitor id. Check that your checkout links point at a stripe.com host, or pass getVisitorId() into your custom checkout as above.
Frequently asked questions
Do I need a Stripe webhook?
No. We poll your Stripe account with the restricted key you connect, so there is no endpoint to register and no signing secret to manage. The trade-off is timing: revenue arrives on the next sync rather than the second a charge succeeds.
What if a payment has no visitor id on it?
It still counts. The charge is recorded as revenue and we try the buyer’s email against contacts you already hold, so a customer who identified earlier still inherits their journey. Only a payment with neither a visitor id nor a known email stays unattributed.
Can I use my full secret key?
Please do not. Create a restricted key with read access instead. It is scoped to one Stripe account, you can revoke it on its own at any time, and it cannot move money.
Keep going
Turn your company into one AI-ready data platform on a single hosted MCP endpoint.