Migrating from PromoteKit
Move your PromoteKit program onto Rekomi with one API pull. Rekomi imports your affiliates (with ?via= referral codes, payout emails, and click counts), your signed-up leads, and your commission history directly from PromoteKit's API.
This guide is for brands switching from PromoteKit to Rekomi. PromoteKit is a Stripe-native affiliate platform for SaaS. The primary path is a one-key API pull: paste your PromoteKit API key and Rekomi imports your affiliate roster (with each affiliate's ?via= referral code, payout email, and lifetime click count), your signed-up leads, and your commission history in one run.
Most teams complete the cutover in a single afternoon. Migration is on Starter or higher; auto-notify is on Growth or higher.
Import via API (recommended)
PromoteKit's dashboard exports are payout files only (PayPal and Wise mass-payment shapes), so the API pull is the complete migration path. PromoteKit's API is available on their Pro plan or higher; the Free plan has no API key.
- In PromoteKit, open Settings → API Keys and copy your API key.
- Open
/dashboard/settings/migrate, pick PromoteKit, choose your target Rekomi campaign, and paste the key. It is used once, in memory, and never stored, logged, or shown again. - Leave the Import leads and Import commission history toggles on (or switch either off) and click Pull from PromoteKit.

What the pull imports:
- Affiliates: email, first and last name, payout email (PayPal or Wise), and status. PromoteKit models status as two booleans: banned affiliates import as Banned, approved affiliates as Approved, and unapproved applications as Pending.
- Referral codes: each affiliate's first link code (the
?via=value) is preserved as their Rekomi slug when it passes the standard slug checks (3-64 characters, letters, digits, and hyphens, not already taken). Links carrying the preserved code keep working unchanged, sinceviais one of Rekomi's built-in attribution params. Affiliates with several PromoteKit links get one Rekomi link; the import summary reports how many that affected. - Click counts: each affiliate's lifetime
clicksaggregate carries over into their Rekomi click counter, so leaderboards and EPC math don't reset to zero. - Leads: referrals in PromoteKit's
signed_upstate (signed up via an affiliate, never started paying) import as zero-money lead records attributed to their affiliate, with the customer email and, when present, the Stripe customer id, which rides along for recurring attribution. - Commission history: commissions with the sale amount, commission amount, per-row currency, and date. PromoteKit reports money in decimal major units ("99.0" means $99.00); Rekomi converts with the currency's real minor-unit scale, so zero-decimal currencies like JPY stay correct. Rows PromoteKit marked
paidimport with a paid date; everything imports as settled, locked history: nothing becomes payable from the API pull.
What the pull cannot import: payable balances (use the Step 2 CSV flow with its preview if you want open balances made payable), promo-code (coupon) attribution rails (mint fresh Rekomi coupon codes instead), campaign structure, and click-level logs (PromoteKit only exposes aggregates). Each list is fetched up to 5,000 rows; the result tells you if a fetch was cut off.
Re-running the pull is safe: affiliates dedupe by email and history rows dedupe on PromoteKit's own ids.
The CSV fallback
There is no roster export in PromoteKit's dashboard, but a support-provided or API-derived file works with the CSV importer below.
What the CSV importer brings across
| Field | Source column | Notes |
|---|---|---|
email | Required. Lowercased + trimmed. Primary dedup key. | |
| Full name | name, or first_name + last_name | If name is present it wins; otherwise the two parts are joined with a space. |
| Status | approved + banned booleans, or status | See mapping table below. |
| Payout email | payout_email or paypal_email | Optional. Preserved as the affiliate's payout destination when present. |
| Tracking slug | ref_code, referral_code, code, or ?via= extracted from a link column | See How slug preservation works. |
| Click count | clicks or click_count | Optional lifetime aggregate. |
Status mapping
PromoteKit models affiliate status as two booleans rather than an enum:
| PromoteKit | Rekomi |
|---|---|
banned = true | Banned |
approved = true (not banned) | Approved |
approved = false | Pending |
| neither readable | Pending |
PromoteKit campaigns can require approval (approval_needed), so an unapproved affiliate is treated as a pending application. You can reclassify any row with the bulk-status action in /dashboard/affiliates after import.
How slug preservation works
PromoteKit's referral links use the ?via= query parameter, for example brand.com?via=alex. via is one of Rekomi's built-in attribution params and works out of the box, so your affiliates' ?via= links keep attributing on Rekomi the moment you swap the tracking snippet, wherever the code was preserved as the slug (the conditions below).
The importer preserves the slug itself when:
- The pull (or file) carries the affiliate's link code.
- That value is a valid alias: 3-64 characters, alphanumeric plus hyphen, no leading or trailing hyphen.
- The slug is not already taken in the global Rekomi namespace (slugs are platform-wide unique, not per-org).
When all three hold, the affiliate keeps their exact slug. Otherwise they get a fresh 12-character random slug; their account still imports cleanly.
Step-by-step cutover
1. Run the API pull
Copy your API key from Settings → API Keys in PromoteKit and run the pull under /dashboard/settings/migrate (see Import via API above). One run brings your roster, referral codes, leads, and history.
2. Attribution params: nothing to configure for via
via is one of Rekomi's built-in attribution params and is always recognized, so existing PromoteKit links resolve to the right affiliate on Rekomi with zero configuration.
3. Check the import result
The import runs synchronously and shows a row-by-row result: imported, skipped (duplicate or missing email), or errored. Every job is listed under Import history with a per-row detail panel and an Undo button.
4. Opt into auto-notify (Growth+ only)
Check Notify affiliates after import and compose a short personal note. Click Send a sample to myself to preview before the throttled bulk send (one email per second).
5. Swap the tracking snippet
Install Rekomi's tracking snippet on your marketing site, then remove PromoteKit's script tag and its Stripe metadata stamping. The moment the new snippet is live, every existing brand.com?via=alex link attributes to Rekomi instead of PromoteKit. Keep PromoteKit active for a 24-48 hour shadow period if you want belt-and-suspenders confidence; then cancel.
What is NOT imported
| Data | Status | Workaround |
|---|---|---|
| Historical click counts | API pull only | Lifetime clicks aggregates import via the API pull; click-level logs are not portable. |
| Leads | API pull only | PromoteKit has no referrals export; the pull brings signed_up referrals as zero-money lead records. |
| Promo-code attribution | Not imported | PromoteKit's coupon rail rides on Stripe promotion codes; mint fresh Rekomi coupon codes instead. |
| Which balances are open | Partially | Everything imports as locked history; PromoteKit's paid flag decides which rows carry a paid date. Making open balances payable needs the Step 2 CSV flow with its preview. |
| Custom commission rules | Not imported | Configure Rekomi's commission models directly. |
Common gotchas
My PromoteKit plan has no API key. API access starts on PromoteKit's Pro plan. On the Free plan, ask PromoteKit support for a data export and use the CSV fallback, or upgrade for one month to run the pull.
An affiliate had several links. They import once with their first link's code; links using that preserved code keep attributing, while links carrying their other codes stop resolving after cutover (a recognized param name cannot resolve an unregistered code).
Refund adjustments. Negative commission rows (refund adjustments) are skipped on import rather than imported as negative history.
Verifying the import landed clean
- Open
/dashboard/affiliatesand spot-check 3-5 rows against the PromoteKit source. - Open one affiliate's detail page and confirm the preserved
?via=slug (or a fresh slug otherwise). - Click an affiliate's existing
?via=link with the new snippet installed; confirm a click row appears under that affiliate within a few seconds. - Send a sample notification to yourself before firing the bulk send.
Importing history and earnings
The API pull already imports your commission history (and leads) as locked, settled records. Use the Step 2 CSV flow instead when you want open balances made payable on Rekomi: only the CSV flow previews the exact unpaid balance and asks you to authorize it. A Step 2 file for PromoteKit uses the generic columns (affiliate email, amount, commission, currency, date, paid). See the migrations overview for the full reference.
Where to go next
- Tracking and attribution: the
viaparam, cookie window, and stickiness. - Migrating from other platforms: the broader URL-preservation matrix.
- Plans and trials: what each tier includes and how the 14-day free trial behaves.
Migrating from impact.com
Move your impact.com partner roster onto Rekomi. Rekomi pulls partners, up to 3 years of conversion history, and lifetime click totals via the impact.com Advertiser API; nothing to export.
Migrating from LeadDyno
Move your LeadDyno program onto Rekomi with one API pull. Rekomi imports your affiliates (with ?afmc= codes, PayPal emails, and lifetime visitor counts), your Registered leads, and your commission history directly from LeadDyno's API.