Rekomi Docs
For brandsInstall tracking
Brands

Install on Teachable

Paste the Rekomi loader in Teachable's Head Code Snippets for click capture, then record sales through your own Stripe account with lead capture, or a server-to-server relay on Teachable:Pay. Heads up that Teachable's head snippets don't run on the checkout subdomain, so affiliate links need to route through your marketing pages first.

Teachable logo

Teachable's install is one step plus a conversion choice: a head code snippet on your school subdomain captures the affiliate click, and the sale itself is recorded through your payment platform: your own Stripe account (plus lead capture for attribution) or a server-to-server relay on Teachable:Pay. One critical detail: Teachable's head snippets do not run on sso.teachable.com or the checkout itself, so affiliate links have to route through a Teachable marketing page (course sales page) before the buyer hits checkout, not directly into a checkout URL.

Prerequisites

You need Teachable's Builder plan or higher; lower plans do not expose the Site > Code Snippets section needed for the head install. If you are on a plan without that section, capture clicks and leads on a marketing site you control and route affiliate links there.

Install the head script

Step 1. In Teachable admin, navigate to Site > Code Snippets and paste into the Head Code Snippets section.

Step 2. Paste the Rekomi loader:

<script async src="https://api.rekomi.com/api/v1/r/loader.js" data-program-id="YOUR_PROGRAM_ID"></script>

Save. Copy the snippet with your program ID already filled in from Setup > Install in Rekomi.

Teachable's head code snippets do NOT execute on sso.teachable.com (the login/checkout subdomain). If an affiliate sends a visitor directly to a Teachable checkout URL, the loader never runs, the click is never captured, and attribution fails silently.

Solution: Every affiliate link points to a Teachable marketing page (your course sales page, your school homepage, a custom landing page) where the loader DOES run. The buyer clicks through to checkout from there, and the referral carries through the same browser session.

In Rekomi's affiliate dashboard, the default tracking URLs route to your school's main domain (e.g., https://courses.yourbrand.com/?via=SLUG), not to a checkout URL. Affiliates copy this link directly. Do not rewrite the destination to a checkout URL for "shortcut" reasons; it breaks attribution.

Record the conversion

The head script above only captures the affiliate click, and a click alone does not attribute a sale. There is no thank-you-page snippet to paste: the browser convert() call that older setups used for sales was removed, and today convert() records leads, which is part of the working path below. How the sale is recorded depends on your billing mode.

Stripe billing (your own Stripe account). If you run Teachable on your own Stripe account (Settings > Payments), connect Stripe in Rekomi (Setup > Connect payment gateway, at /dashboard/setup/connect-sales) and sales, refunds, and cancellations record automatically. One scope note: the Stripe rail records subscription and invoice events, so products billed as real Stripe subscriptions (memberships, payment plans) always land; a course Teachable charges as a bare one-time card payment generates no Stripe invoice and may not. Place a test order for each product type and check the Sales page; anything that doesn't appear needs the S2S relay described below, or a lead-based campaign instead. Crediting a first-time buyer takes one more piece: Teachable's checkout cannot stamp Rekomi metadata onto the Stripe payment, so attribution relies on matching the checkout email against a lead recorded in the last 90 days. Capture that lead with window.Rekomi.convert({ email: "the-signup-email" }) from a page you control, or relay a signup webhook from your backend to POST /api/tracking/lead. See Track leads and signups.

Teachable:Pay (server-to-server). On Teachable:Pay, Teachable is the merchant of record, so there is no Stripe account of yours for Rekomi to read. Record sales by subscribing to Teachable's purchase webhook (admin > Settings > Webhooks) and relaying each purchase from your own backend to Rekomi's server-to-server endpoint. See the server-to-server tracking guide for the payload fields and signature. Attribute each sale by the referral you captured on the landing page and passed through with the order; without it the relay cannot credit an affiliate. S2S and a live Stripe connection are mutually exclusive: the endpoint returns 409 while Stripe is connected, so this path applies when Stripe is not.

Refund handling depends on your billing mode

Teachable supports two billing modes, and the refund flow differs.

Teachable:Pay (Merchant of Record, US-only). Teachable is the merchant; refunds do NOT fire charge.refunded on your Stripe (you don't have one connected for this mode). To clawback commissions on refunds, subscribe to Teachable's refund webhook (admin > Settings > Webhooks) and forward refund events to Rekomi's /api/tracking/refund endpoint with the matching externalEventId from the original conversion.

Stripe Connect billing. Refunds fire charge.refunded to Rekomi's Stripe webhook listener and the clawback is automatic. No Teachable-side webhook relay needed.

To check which mode you are on: Teachable admin > Settings > Payments. Teachable:Pay is the default for US schools; Stripe Connect requires explicit setup with your own Stripe account.

Quirks worth knowing

Head snippets do not run on the checkout subdomain. This is the single most common install bug. Always route affiliate links to a school-domain marketing page, not a checkout URL, so the click (and the lead) is captured before the buyer hits checkout.

Custom domain vs *.teachable.com. If you are on a custom domain (e.g., courses.yourbrand.com), the loader runs there as expected. If you serve directly from *.teachable.com, the same applies. The exclusion is only sso.teachable.com and the bare checkout subdomain.

Teachable coupons are invisible to Rekomi. Rekomi coupon codes only attribute when redeemed as real Stripe promotion codes at a checkout running on your Rekomi-connected Stripe. Teachable's discount codes are platform-native and never surface to Rekomi, so creating a matching code in Teachable does nothing for attribution. Use lead capture (own Stripe) or the S2S relay (Teachable:Pay) instead.

Sales tax handling. When you relay sales over server-to-server, send the amount your commission is based on. If your commission base is the net (excluding sales tax / VAT), relay the net amount; if commission is on the gross, relay the gross. Be consistent across every relayed sale.

Troubleshooting

No conversion is recorded after a Teachable purchase. First check: does the affiliate link route to a school marketing page (not a direct checkout URL) so the click is captured? Then confirm your conversion path is wired up: your own Stripe is connected in Rekomi, or your Teachable:Pay purchase webhook is reaching your relay.

Wrong amount on the commission. If you relay sales over server-to-server, the amount you send does not match what your commission should be based on (because of a sale, promo code, or plan tier). Send the actual paid amount from the purchase webhook payload.

Refunds do not clawback on Teachable:Pay. Teachable:Pay does not route refunds through your Stripe, so the standard Stripe webhook rail does not fire. Set up the Teachable webhook relay (see "Refund handling depends on your billing mode" above) to /api/tracking/refund.

Click captured but no commission lands. The referral was missing at the moment of purchase. The visitor probably reached a Teachable checkout URL directly (bypassing your marketing pages), so no click was captured. Audit your link routing to confirm every affiliate link starts on a page where the loader runs. On your own Stripe, also confirm a lead with the buyer's email was recorded before checkout.