See the campaigns behind every payment—refunds included.
One connection adds this tool to your revenue journey—joined with your website, CRM and ad activity from first click to closed-won.
Sign in to install
Integration Details
Built by
Spectacle
Category
Payments
Setup Time
About 5 minutes
Sync Frequency
Real-time
Authentication
OAuth 2.0 (Stripe Connect) or restricted API key
Compatible With
Any Stripe account using Payment Intents
Resources
Overview
Spectacle connects to Stripe in about 5 minutes and attributes every successful payment, and every refund, to the marketing touchpoints that brought the customer in. Stripe records the money. Spectacle records the journey behind it, from first ad click to payment_intent.succeeded, and reports revenue by channel, campaign, and keyword with refunds already subtracted.
At a glance
- Category: Payments
- Setup time: About 5 minutes
- Authentication: OAuth 2.0 (Stripe Connect) or restricted API key
- Stripe plan: Any Stripe account using Payment Intents
- Spectacle plan: All Spectacle plans (Essential, Scale, Enterprise); company-level attribution on Scale and Enterprise
- Direction: Stripe → Spectacle. Revenue then flows Spectacle → ad platforms as conversion value
- Objects:
payment_intent.succeeded,refund.created, Stripe Customer email and metadata - Sync: Near real time, event-driven
- Docs: /docs/stripe
- Marketplace: Stripe App Marketplace
The gap in Stripe's own reporting
Stripe knows your revenue to the cent. It knows nothing about where the customer came from. Stripe's own reporting has 0 marketing dimensions: no channel, no campaign, no keyword, no first touch. The Stripe Dashboard and Sigma can slice revenue by product, country, and payment method, and that is where the questions end.
Ad platforms have the opposite problem. Google Ads and Meta report conversion value from a pixel that fired on a thank-you page, weeks before the money landed and with no idea that a refund followed. So Finance reports one number, Marketing reports another, and the budget conversation runs on the wrong one.
Spectacle sits between them: a first-party tracking snippet on your site, your ad accounts connected for cost, and Stripe's payment events dropped onto the same customer journey as the clicks that preceded them.
What syncs
payment_intent.succeeded: One revenue event on the customer's journey, amount and currency from the intentrefund.created: One negative revenue event, so attributed revenue is net- Payment intent metadata
spectacle_user_id: Matched first: the payment lands on that user's journey - Stripe Customer metadata and email: Fallback match to the person identified on your site with
spectacle.identify()and anemailtrait - Charge
billing_details: Guest checkouts without a Stripe Customer are matched on the billing email - Subscription renewals: Each renewal arrives as a new
payment_intent.succeededand is credited to the original acquisition journey
Disputes, invoices, and Setup Intents are not consumed today; the docs ask you to get in touch if your checkout uses them. The full matching hierarchy lives in the Stripe docs. This page summarizes; Docs is the source of truth.
What you get
- Revenue by campaign, with refunds already subtracted. Every successful payment sits on a journey, so a Google Ads keyword or a LinkedIn campaign gets credited with the net cash that landed in Stripe rather than a pixel value fired on a thank-you page.
- Recurring revenue tied to the acquisition journey. A renewal 11 months after signup arrives with no campaign attached. Spectacle credits it to the journey that acquired the customer, which is how 12-month customer value by channel becomes a report instead of a spreadsheet.
- One reporting currency across markets. Payments in USD, GBP, and EUR are normalized to your workspace currency so a campaign selling in 3 markets has 1 return figure.
- Cost per paying customer by channel. Ad spend from Google, Meta, LinkedIn, and Microsoft Advertising joined to Stripe payments, so a channel that produces cheap trials and no payments shows up as what it is.
- Payments back to ad platforms. Send the first payment, or every payment, as a conversion with value to Google Ads, Meta, and LinkedIn so Smart Bidding optimizes for revenue.
Pairs with
Stripe + Google Ads (payment value as a conversion) · Stripe + Meta Ads · Stripe + HubSpot or Pipedrive for pipeline before payment · Alternative for merchant-of-record billing: Lemon Squeezy
- Connect Stripe. Settings → Integrations → Stripe → Connect. Authorise the connection over Stripe Connect, or paste a restricted API key; no webhook to configure by hand.
- Make customers matchable. Call
spectacle.identify()with theemailtrait at signup, or setspectacle_user_idin the Stripe Customer metadata at creation for the most reliable match. - Revenue lands on journeys. Each
payment_intent.succeededbecomes a revenue event, eachrefund.createda negative one, attributed to the touchpoints inside the customer's journey window.
Step by step with screenshots: Connect Stripe.
- Revenue by campaign, with refunds already subtracted. Every successful payment sits on a journey, so a Google Ads keyword or a LinkedIn campaign gets credited with the net cash that landed in Stripe rather than a pixel value fired on a thank-you page.
- Recurring revenue tied to the acquisition journey. A renewal 11 months after signup arrives with no campaign attached.
- One reporting currency across markets. Payments in USD, GBP, and EUR are normalized to your workspace currency so a campaign selling in 3 markets has 1 return figure.
- Cost per paying customer by channel. Ad spend from Google, Meta, LinkedIn, and Microsoft Advertising joined to Stripe payments, so a channel that produces cheap trials and no payments shows up as what it is.
- Payments back to ad platforms. Send the first payment, or every payment, as a conversion with value to Google Ads, Meta, and LinkedIn so Smart Bidding optimizes for revenue.
See the integration in practice
A subscription business billed through Stripe could see monthly revenue in Stripe and cost per trial in its ad platforms, and nothing in between. With Stripe connected, 12 months of member revenue, renewals included, traced back to the acquisition journey of each customer. The channel with the cheapest trials had the lowest 12-month value per member; the channel Marketing had been asked to cut had the highest. (Anonymized.)
See the campaigns behind every payment—refunds included.
Understand how to connect your tools, improve attribution, and build better reporting across your revenue journey.
Build
Create integrations that connect your platform with Spectacle attribution and reporting workflows.
Learn more
Get listed
Publish your integration in the Spectacle directory and help teams discover new connected workflows.
Learn more
API & Docs
Explore Spectacle APIs, setup guides, and developer documentation to build custom workflows and integrations.
Learn more
FAQ
Does Spectacle integrate with Stripe?
Yes. Spectacle connects to your Stripe account from workspace settings and listens to payment_intent.succeeded and refund.created, turning each into a revenue or negative revenue event on the customer's journey. Setup takes about 5 minutes.
How does Spectacle match a Stripe payment to a website visitor?
In this order: the spectacle_user_id metadata on the payment intent, the same key on the Stripe Customer, the Stripe Customer's email, then the charge's billing email for guest checkouts. The email match needs an email trait on your spectacle.identify() call.
Does Spectacle handle refunds and disputes?
Refunds yes: every refund.created subtracts from attributed revenue, so reports are net. Disputes and chargebacks are not consumed today; if your checkout relies on them, ask support.
Why doesn't my Stripe revenue match the conversion value in Google Ads?
Google Ads counts a pixel value at the moment of conversion, inside its own window and model, and never sees a refund or a renewal. Spectacle takes the amount from Stripe, subtracts refunds, applies one journey window across every channel, and reports one figure that reconciles to your Stripe balance.
Does Spectacle track subscription revenue from Stripe?
Renewals arrive as successful payment intents and are attributed to the journey that acquired the customer. Invoices and subscription objects themselves are not consumed; MRR and plan changes can be sent with spectacle.track() using the mrr, arr, and plan properties.