RekomiRekomiBlogPricing
Rekomi Docs
Rekomi Docs
Welcome to Rekomi
Quickstart for brandsPlans and trialsIntegrationsStripe Connect (sales tracking)Organization settingsTeam managementNotifications

Campaigns and commissions

CampaignsCommission modelsPay per click or lead (CPC & CPL)Coupon-code attributionSub-affiliate recruitingTracking and attribution

Affiliates

Recruit affiliatesManage affiliatesAI co-pilotApply to the curated network

Money flow

SalesPayoutsMulti-currencyTax formsReports

Email

Sending domainBroadcasts
For brands
|Brands|

Stripe Connect (sales tracking)

Connect your Stripe account once and Rekomi tracks every sale and refund automatically. How the OAuth connect works, how attribution pairs with click tracking, and a technical overview of the webhook rail.

Stripe Connect is the default and simplest way to feed sales into Rekomi. You authorize Rekomi to read your Stripe account once, and from then on every paid checkout and every refund flows into Rekomi automatically. No thank-you-page snippet for the sale event, no per-sale reconciliation, no spreadsheet at month end.

This is what most brands use, because if your billing already runs through Stripe, the conversion backend is one click.

Manage it from inside Stripe. The Rekomi app for Stripe puts attribution, commission approvals, and payout status directly in your Stripe Dashboard (view it on the Stripe App Marketplace). Same native tracking, different entry point.

The two halves of tracking

This is the one thing worth understanding up front, because it explains why connecting Stripe is not always the only step:

  1. The sale signal (Stripe Connect). Connecting your Stripe account tells Rekomi that a sale happened, its amount, currency, and whether it was later refunded.
  2. Attribution (click tracking or coupons). Connecting Stripe does not, on its own, tell Rekomi which affiliate to credit. That identity rides along on the sale, and it gets there in one of two ways:
    • the click cookie set by the tracking snippet, forwarded into the Stripe Checkout Session as client_reference_id (see Install on Stripe), or
    • a coupon code the affiliate shares, which Stripe records on the sale.

So Stripe Connect is the conversion backend, and the snippet or coupons are the attribution layer. That is why onboarding marks "Connect payment processor" as done once Stripe is linked, but still walks you through installing the snippet: the snippet is what names the affiliate. A sale that arrives with no client_reference_id and no affiliate coupon is recorded by Stripe but simply has no one to credit.

How to connect

In setup, the Connect payment processor step (/dashboard/setup/connect-sales) has a "Connect Stripe" button — connecting Stripe there sets up both conversion tracking and one-click affiliate payouts. You can also reach it later from your settings.

Click it and you are sent to Stripe's hosted consent screen, where you pick the Stripe account you already use to bill customers (the same "Sign in with Stripe" flow you have seen on Rewardful, PartnerStack, or FirstPromoter). Approve, and Stripe sends you back to the dashboard with the account linked.

Status after connecting:

  • Not connected: no Stripe account linked yet.
  • Connected: Rekomi is receiving your sale and refund events. The dashboard shows the connected account id (acct_...).

One Stripe account links to exactly one Rekomi organization. If you reconnect a different Stripe account later, Rekomi releases its access to the old one automatically.

What Rekomi does with your events

Once connected, Stripe delivers your account's events to Rekomi over Stripe's own Connect rail. Rekomi reacts to:

  • Sales (Checkout completion and successful invoice payments): if the sale carries an affiliate (via client_reference_id, subscription metadata, or a coupon), Rekomi records a conversion and the commission lands on that affiliate's ledger.
  • Refunds (charge.refunded, customer.subscription.deleted): Rekomi reverses the commission proportionally and updates the affiliate's pending balance the same day. There is no "mark as refunded" button because Stripe is the source of truth. See Tracking and attribution.

Duplicate event deliveries are no-ops: each Stripe event id is processed once.

What Rekomi can and cannot see

Connecting grants Rekomi read access to your account's billing activity (charges, invoices, subscriptions, refunds) and, for the default payout method, the ability to route transfers to your affiliates. Rekomi does not see your customers' card numbers and does not move money out of your account for tracking, only for payouts you explicitly run. You can revoke access at any time (see Disconnect below).

Disconnect and reconnect

Disconnecting revokes Rekomi's access to your Stripe account through Stripe's own OAuth deauthorize. Your Stripe account itself is untouched; Rekomi simply stops receiving new events. Sales already recorded stay on the affiliate ledgers.

To switch to a different Stripe account, just connect the new one. Rekomi deauthorizes the previous account as part of the swap so you are never left with a stale grant.

When Stripe Connect is not the right backend

Stripe Connect is the best fit when your sales run through Stripe. If they do not, or you cannot connect, use one of the alternatives. They are mutually compatible; pick what matches where your sales originate:

  • Server-to-server tracking: your backend posts each conversion to Rekomi directly. Best for mobile in-app purchases, custom checkout, or non-Stripe billing.
  • Coupon codes: each affiliate gets a unique code; redemptions attribute automatically. Works with or without Stripe Connect, and needs no code on your site.
  • Browser pixel: for non-Stripe checkouts where you cannot run server-side code (Webflow, Memberstack, Lemon Squeezy, ConvertKit Commerce).

Technical overview

For developers and the technically curious, here is what happens under the hood.

Connect (OAuth)

POST /api/integrations/stripe/authorize builds a Stripe Connect OAuth URL (https://connect.stripe.com/oauth/authorize, response_type=code, scope=read_write) and redirects the brand to it. The state parameter is an encrypted, signed token (ASP.NET Data Protection) bound to your organization and a single-use, 10-minute nonce, so the callback cannot be replayed or swapped across organizations.

The callback GET /api/integrations/stripe/oauth/callback validates that state, exchanges the authorization code for the connected account id (acct_...) via Stripe's OAuth token endpoint, and stores it on your organization. A unique index guarantees one Stripe account maps to one organization; a re-connect first deauthorizes the prior account to avoid orphaned grants.

Environments without a platform Connect client id fall back to a legacy Account Links flow that provisions a fresh Standard account, but production uses OAuth so brands link the Stripe account they already have.

Event ingestion (the webhook rail)

Rekomi exposes a single Stripe webhook endpoint that verifies each delivery against two platform-level signing secrets: one for Rekomi's own platform billing and one for the Connect application webhook that carries your account's events. Because verification is against platform secrets, you do not configure a Stripe webhook of your own for Rekomi to receive sales. Connecting via OAuth is what enrolls your account into the Connect webhook stream.

This is only about Rekomi receiving events from Stripe. If you want Rekomi to push conversions back out to your own systems (to mirror attribution, sync to a data warehouse, etc.), that is a separate, optional Rekomi feature: see outbound webhooks and Zapier. Every coupon, link, and S2S conversion is also visible in your dashboard with a "Source" tag regardless, so most brands need no integration at all.

For a connected-account event, Stripe sets the event's account field to your acct_.... Rekomi resolves your organization by matching that against the stored connected account id, then routes the event to conversion or refund handling. Signatures are checked with a 300-second replay tolerance, and processed event ids are deduplicated, so retries and replays are safe.

Attribution precedence

When a sale event arrives, Rekomi resolves the affiliate in this order:

  1. client_reference_id on the Checkout Session (canonical; works across Subscription, Payment, and Setup modes).
  2. subscription_data.metadata.rekomi_affiliate_slug (a backup that fires for subscription mode).
  3. The Stripe promotion_code on the sale, matched to the affiliate who owns that coupon.

If none resolve, the sale has no attributable affiliate and no commission is created. This is why the click snippet (which stamps client_reference_id) or coupons are required alongside Stripe Connect, not optional polish.

Related

  • Install on Stripe: stamping client_reference_id onto your Checkout Sessions and Payment Links (the attribution half)
  • Tracking and attribution: the full model across all sources
  • Payouts: how the same Stripe connection routes affiliate transfers
  • Coupon-code attribution

Integrations

Connect Stripe, Paddle, Braintree, Shopify, Lemon Squeezy, Chargebee, Polar, Recurly, Gumroad, Creem, or Dodo Payments for native sales tracking, run payouts through Stripe, and use Zapier for no-code automations across 8,000+ apps.

Organization settings

Profile, brand color, timezone, API keys, audit log, webhooks.

On this page

The two halves of trackingHow to connectWhat Rekomi does with your eventsWhat Rekomi can and cannot seeDisconnect and reconnectWhen Stripe Connect is not the right backendTechnical overviewConnect (OAuth)Event ingestion (the webhook rail)Attribution precedenceRelated