Install on Bubble
Settings SEO/metatags Header field for the install. Sales record through your own Stripe account via Stripe Connect, coupon codes, or a server-to-server relay from your Stripe webhook.
Bubble treats <script>, <meta>, and <link> as the only valid head tags in its Settings > SEO/metatags > "Script/meta tags in Header" field. Anything else (notably <noscript>) gets repositioned to <body> by the browser automatically. That's fine for our install, the <noscript> fallback fires its 1x1 pixel correctly from <body>. The head script captures the affiliate click; the sale is recorded through your own Stripe account (Bubble's Stripe plugin runs charges on it), not from a page snippet.
Install the head script
In the Bubble editor: Settings > SEO/metatags > Script/meta tags in Header.
Paste:
<script async src="https://api.rekomi.com/api/v1/r/loader.js" data-program-id="YOUR_PROGRAM_ID"></script>
<noscript>
<img src="https://api.rekomi.com/api/v1/r/c.gif" width="1" height="1" alt="" referrerpolicy="no-referrer-when-downgrade" />
</noscript>Save and Deploy to live. Your program ID is pre-filled into the snippet in Rekomi under Setup > Install (choose Bubble).
Record conversions
Bubble's Stripe plugin (and custom Stripe API workflows) run charges through your own Stripe account, so there is no thank-you-page snippet to add. Pick one of these paths:
Stripe Connect (recommended). Connect Stripe once in Rekomi under Setup > Connect payment gateway. Rekomi then records every subscription, charge, refund, and cancellation automatically through your Stripe webhooks, matching the affiliate click the head script captured. To attribute a specific sale, carry the referral into Checkout: read the affiliate's id in your Bubble workflow via window.Rekomi.ready(r => ...) (it exposes r.affiliate.id) and pass it into the Stripe Checkout Session's subscription metadata as rekomi_affiliate_id when you create the subscription. The slug from window.Rekomi.getReferral() also works, passed as rekomi_affiliate_slug; Rekomi reads both keys. Selling through Stripe Payment Links instead? Use per-affiliate coupon codes; see Install on Stripe.
Coupon codes (no code). Create per-affiliate coupon codes under Campaign > Coupons. When a buyer redeems an affiliate's code at checkout, Rekomi credits that affiliate. Nothing to add on the success page.
Server-to-server (most durable). If you'd rather record the sale server-side (survives ad-blockers and analytics blockers), have your Stripe webhook backend POST to Rekomi's /api/tracking/s2s endpoint with HMAC when the subscription becomes active. S2S and a Rekomi-connected Stripe are mutually exclusive: while Stripe is connected, S2S calls are rejected with a 409, so pick one path and stick with it.
See the S2S tracking API reference for the HMAC pattern, and the Install on Stripe doc for Stripe-side webhook configuration.
Quirks worth knowing
Valid head tags only. Bubble's "Script/meta tags in Header" field accepts <script>, <meta>, and <link> only. Other elements get auto-relocated to <body> by the browser. Don't try to install via comments or block-level elements, they get stripped.
<noscript> ends up in <body>. That's by browser design (not a Bubble bug). The 1x1 pixel fallback inside <noscript> still fires correctly from <body> for JS-disabled visitors.
Head tag placement. Install the loader through Settings > SEO/metatags > "Script/meta tags in Header" (global) rather than a per-page HTML element, so the affiliate click is captured on every public page. The page Settings > "Page HTML Header" field also renders in <head> if you need a page-specific script, but the site-wide slot is the right home for the loader.
Live vs Development mode. Bubble has separate Development and Live deployment modes. The head script in Settings > SEO/metatags applies to both, but you have to Deploy to push to Live after editing.
Let Stripe confirm the sale. Because the sale is recorded through your Stripe account (not a page snippet), you never risk crediting a click that didn't convert. The commission lands only when Stripe reports the subscription or charge as paid.
Refunds
If you use Bubble's Stripe plugin on a Stripe account connected to Rekomi, refunds and cancellations claw back the commission automatically through the Stripe webhook rail. No Bubble-side configuration is needed. If you record sales through the server-to-server relay instead, forward your Stripe charge.refunded event to Rekomi's /api/tracking/refund from the same backend.
Troubleshooting
Sale completes in Stripe but no conversion lands in Rekomi. If you use Stripe Connect, confirm Stripe is connected under Setup > Connect payment gateway and that recent events show in Stripe's webhook deliveries dashboard. If you attribute by metadata, confirm your workflow stamped the affiliate id (from window.Rekomi.ready) into the Checkout Session's subscription metadata as rekomi_affiliate_id, or the slug from getReferral() as rekomi_affiliate_slug.
Affiliate credited on the wrong sale. Two affiliates' codes or referrals collided. If you rely on coupon codes, make sure each affiliate has a unique code under Campaign > Coupons.
Click never registers. The visitor reached signup via a path that bypassed your Rekomi-bearing pages. Confirm the head script is in Settings > SEO/metatags (global), and that affiliates send traffic to a public Bubble page where the head install loads. You can confirm a captured referral in the browser console with window.Rekomi.getReferral().
Related
- No-code and non-Stripe checkout tracking
- S2S tracking API reference
- Install on Stripe, for Stripe webhook configuration
Install on Squarespace
Code Injection Header field on the Core plan or higher. Squarespace Commerce runs on your own Stripe so attribution works automatically once the head script is in place.
Install on Carrd
Hidden Embed element with Location set to Head on Pro Standard or higher, or the Pro Plus site-wide Code field. Carrd's single-page nature means the cookie persists naturally.