Migrating from Rewardful
Move your Rewardful affiliate roster onto Rekomi in an afternoon. Self-serve CSV import preserves every existing ?via= link, auto-notify rolls out fresh sign-in invites, and the 5-step cutover keeps active affiliates uninterrupted.
This guide is for brands switching from Rewardful to Rekomi. The self-serve importer reads Rewardful's standard CSV export, dedupes by email, preserves the existing affiliate slug so every brand.com/?via=alex link keeps working, and optionally emails every imported affiliate a one-click sign-in invite.
Most teams complete the cutover in a single afternoon. Migration is on Starter or higher; auto-notify is on Growth or higher.
What the 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 | status | See mapping table below. |
| PayPal email | paypal_email | Optional. Preserved as the affiliate's payout destination. |
| Tracking slug | token (primary) or ?via= extracted from link | If both are missing, a fresh 12-character random slug is generated. |
Anything else in the affiliate CSV (campaign ids, custom fields, sales totals) is silently ignored by the roster importer. To bring over historical sales and commissions, use the separate Referrals CSV in Step 2 (see Importing history and earnings).
Status mapping
Rewardful's status vocabulary maps to Rekomi's 4-state enum:
Rewardful status | Rekomi |
|---|---|
active, approved | Approved |
pending | Pending |
rejected | Rejected |
banned | Banned |
| anything else, blank, or missing | Pending |
The match is case-insensitive. Approved imports get an ApprovedAt timestamp set to the import time so payout eligibility math works correctly.
How slug preservation works
This is the part that matters for most Rewardful migrations: your affiliates do not need to share new links.
Rewardful's tracking URL is brand.com/?via={token}. Rekomi's default tracking URL is also brand.com/?via={slug} once you configure via in attribution params. The importer reads the token column from every CSV row and tries to register that exact string as the new affiliate's Rekomi slug.
The slug is preserved iff:
- The
tokenvalue 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).
If both conditions hold, every existing brand.com/?via=alex link keeps working on Rekomi the moment you swap the tracking snippet. If the token field is missing on a row, the importer falls back to extracting the slug from the link column (it parses out the ?via= query param). If both are missing, the affiliate gets a fresh 12-character random slug - their old link breaks, but their account is still imported.
Collisions are logged per-row in the import job result. If the same token exists across two Rewardful workspaces being migrated into one Rekomi org, the second arrival falls back to a fresh slug. You can see which slugs were preserved versus regenerated in the job detail panel.
Step-by-step cutover
1. Export from Rewardful
In Rewardful, open Account → Affiliates → Export. You get an immediate CSV download. Save it locally.
2. Set your attribution param to via (or add it to your custom list)
via is one of Rekomi's 16 built-in attribution params and works out of the box. If you have already swapped to a different param (e.g. ref), open /dashboard/settings/attribution and add via to your custom list before importing. This is what makes the imported links resolve to the right affiliates.
3. Upload the CSV
Open /dashboard/settings/migrate. Pick Rewardful as the source, select your destination Rekomi campaign, and upload the CSV. The importer runs synchronously and shows a row-by-row result: imported, skipped (duplicate or missing email), or errored (parse failure).
4. Opt into auto-notify (Growth+ only)
Check Notify affiliates after import and compose a short personal note in the rich-text editor (~500 visible characters). The note renders inside a brand-accent blockquote at the top of every notification email, above a single Claim your account button that takes the affiliate to a pre-filled Clerk sign-up.
Click Send a sample to myself to fire a preview to your own verified email before the bulk send kicks off. The bulk dispatch is throttled to one email per second with up to 200ms jitter; a 500-row import takes about 8 minutes end to end.
5. Swap the tracking snippet
Install Rekomi's tracking snippet on your marketing site, then remove the Rewardful snippet. The moment the new snippet is live, every existing brand.com/?via=alex link attributes to Rekomi instead of Rewardful. Your affiliates do not need to know about the change.
Keep Rewardful active for a 24-48 hour shadow period to compare the two sides if you want belt-and-suspenders confidence; then cancel Rewardful.
What is NOT imported
| Data | Status | Workaround |
|---|---|---|
| Historical clicks | Not portable | First-party cookie data is platform-specific; new click history starts fresh on Rekomi. |
| Historical sales and commissions | Self-serve (Step 2) | Import them via the Referrals CSV under Settings, Migrate, Step 2. See Importing history and earnings above. |
| Campaign structure | Not imported | Create your campaigns in Rekomi first; map imported affiliates to them at upload time. |
| Custom commission rules | Not imported | Configure Rekomi's commission models directly; they are more expressive than Rewardful's. |
Historical sales and commissions are no longer white-glove only: import them yourself via Step 2 (paid rows lock as history, unpaid pay out only if you authorize it).
Common gotchas
The token column is missing from my export. Older Rewardful exports omit token; the importer falls back to parsing ?via= out of the link column automatically. No action needed.
An affiliate's slug collided with another org's. Globally rare but possible. The row gets a fresh random slug; the affiliate's old link breaks. They are still imported and can be notified normally; just include a "your new link is at /a in your dashboard" note in your auto-notify message.
My affiliates use ?ref= not ?via=. Add ref to your attribution params before importing. The importer extracts both ?via= and ?ref= from the link column when token is empty.
I have archived Rewardful affiliates. They come across as Approved by default if status is missing. Use the bulk-status action in /dashboard/affiliates after import to mark them Rejected or Banned in one pass.
Verifying the import landed clean
After the import job completes:
- Open
/dashboard/affiliatesand spot-check 3-5 rows. Confirm name, email, and status match the Rewardful source. - Open one affiliate's detail page and confirm the tracking link is
brand.com/?via={original-token}. - Send a sample notification to yourself and confirm the Claim your account button lands on the pre-filled Clerk sign-up.
- Click your own affiliate test link with the new snippet installed; confirm a click row appears under that affiliate within a few seconds.
If steps 1-4 all pass, fire the bulk auto-notify and cancel Rewardful when comfortable.
Importing history and earnings
To bring over each affiliate's past performance, export your Referrals CSV from Rewardful (Account, Referrals, Export) and upload it under Settings, Migrate, Step 2 (separate from the affiliate roster above). Rewardful's referrals export is the richest of any source: it includes customer email, stripe_customer_id, sale amount, commission, state, and created date.
- Past conversions and commissions are matched to the affiliate by email (or preserved slug) and recorded with the amount and date from your export.
- Commissions Rewardful already paid import as locked history (shown in lifetime totals, never paid again). Commissions still owed are queued for a Rekomi payout only if you authorize it on the preview screen.
- Because Rewardful exports the
stripe_customer_id, existing subscriptions keep paying the same affiliate on renewals once your Stripe account is connected. - A dry-run preview shows what will import (and exactly how much, if anything, Rekomi would pay) before you commit. Re-running is safe. Voided and refunded rows are skipped.
See the migrations overview for the full reference.
Where to go next
- Tracking and attribution: customize the attribution params, configure cookie window and stickiness.
- Migrating from other platforms: the broader URL-preservation matrix if you also have affiliates on other platforms.
- Plans and trials: see what each tier includes and how the 14-day free trial behaves.
- vs Rewardful: side-by-side feature comparison if you are still evaluating.
Migrations from other platforms
Move your affiliate roster onto Rekomi from Rewardful, Tapfiliate, FirstPromoter, PartnerStack, Dub Partners, or Tolt. Self-serve CSV importers for all six with slug preservation and optional auto-notify.
Migrating from Tapfiliate
Move your Tapfiliate affiliate roster onto Rekomi. Self-serve CSV import preserves every existing referral code so ?ref= links keep working, with the gotcha that Tapfiliate emails the export rather than offering a direct download.