Migrating from Dub Partners
Move your Dub Partners affiliate roster onto Rekomi. The self-serve importer reads Dub's open-source CSV schema, extracts slugs from partner_link URLs to preserve ?via= links, and maps Dub's 8-state status vocabulary to Rekomi's 4-state enum.
This guide is for brands switching from Dub Partners to Rekomi. The importer reads Dub's CSV export (sourced directly from the open-source schema), extracts the affiliate slug from each row's partner_link URL, dedupes by email, and maps Dub's eight status values to Rekomi's four.
For most affiliates, existing brand.com/?via=alex links are preserved automatically. Affiliates with multiple Dub short links get a fresh single Rekomi link; preserving the full set requires a custom backfill via Dub's API.
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 | Single column, full name. |
| Status | Status | 8-state Dub vocabulary; mapping below. |
| Tracking slug | partner_link (URL parsed) or link_key (fallback) | Slug extracted from the URL's ?via= or ?ref= query param. |
Dub's CSV export has configurable columns: ID, Name, Email, Country, Status, "Enrolled at", and "Payouts enabled at" are always included; optional columns (Description, Clicks, Leads, Conversions, Sales, Revenue, Commissions, Net Revenue, Website, YouTube, X/Twitter, LinkedIn, Instagram, TikTok) are toggled on at export time. The importer fuzzy-matches case-insensitively and silently ignores columns it doesn't use.
Status mapping
Dub has the most granular status vocabulary of the 5 supported platforms (8 distinct states). The importer collapses to Rekomi's 4-state enum:
Dub Status | Rekomi |
|---|---|
approved | Approved |
invited | Approved (the partner has a usable link) |
pending | Pending |
rejected | Rejected |
declined | Rejected |
archived | Rejected |
deactivated | Banned |
banned | Banned |
| anything else, blank, or missing | Pending |
The match is case-insensitive. The "invited → Approved" mapping is intentional: an invited partner in Dub has been pre-provisioned with a working tracking link, which is closer to Rekomi's Approved (link active) than Pending (no link yet).
How slug preservation works
Dub's tracking URL is brand.com/?via={key} by default (using the via attribution param, same as Rewardful). Rekomi's tracking URL is also brand.com/?via={slug} once you have via in your attribution params - via is one of the 16 defaults, so no extra config is needed.
The importer extracts the slug for each row in two passes:
- Primary: parse the
partner_linkcolumn (e.g.https://brand.com/?via=alex) and extract the value of the?via=or?ref=query param. - Fallback: read the
link_keycolumn directly (Dub's internal short-link key).
Preservation succeeds when:
- The extracted value is a valid alias: 3-64 characters, alphanumeric plus hyphen, no leading or trailing hyphen.
- The slug is not already taken globally.
If both extraction attempts fail (e.g. the row has no partner_link and no link_key), a fresh 12-character random slug is generated; the affiliate's existing Dub link breaks.
Multiple links per partner is a structural mismatch. In Dub, one partner can have many short links each (e.g. dub.sh/alex-blog, dub.sh/alex-yt). Dub's CSV export flattens to one row per partner, picking one of their links as partner_link. The importer creates one Rekomi tracking link per imported affiliate - the affiliate's other Dub links are not preserved. If keeping the full set is critical for your migration, contact support; we can scope a Dub API-side backfill that imports every link.
Step-by-step cutover
1. Export from Dub
In Dub, open Program → Partners. At the top of the partners table, click the ⋮ (kebab) menu and choose Export as CSV. For lists under 1,000 partners, the download starts immediately. For lists over 1,000 partners, Dub emails the CSV asynchronously - check your inbox.
When exporting, leave the default columns selected (ID, Name, Email, Country, Status, Enrolled at, Payouts enabled at). Optionally enable Description and any social columns if you want them in your local archive, though the importer ignores them.
2. Upload the CSV
Open /dashboard/settings/migrate. Pick Dub Partners as the source, select your destination Rekomi campaign, and upload the CSV.
3. Opt into auto-notify (Growth+ only)
Check Notify affiliates after import and compose a personal note. Click Send a sample to myself to fire a preview, then let the bulk dispatch run at 1 email/sec.
4. Swap the tracking snippet
Install Rekomi's tracking snippet, remove Dub's snippet. Since via is one of Rekomi's default attribution params, every existing brand.com/?via=alex link starts attributing to Rekomi from the moment the swap is live.
5. Cancel Dub
Keep Dub active for a 24-48 hour shadow period if you want to compare numbers, then cancel. Note that any Dub short links on the dub.sh domain stop working when Dub is cancelled - affiliates who shared those instead of branded links need to update them.
What is NOT imported
| Data | Status | Workaround |
|---|---|---|
| Multiple short links per partner | Only one preserved | Contact support for a Dub API-side backfill of every link. |
Dub-hosted short links on dub.sh | Domain dependency | Affiliates need to update share links if they used dub.sh; branded brand.com/?via= links keep working via attribution params. |
| Historical clicks, leads, conversions | Not portable | First-party cookie data is platform-specific; new history starts fresh on Rekomi. |
| Historical sales and commissions | Self-serve (Step 2) | Import them via the sales/commissions CSV under Settings, Migrate, Step 2. See Importing history and earnings. |
| Description and social links | Silently ignored | If you need them as affiliate metadata, contact support; affiliate-side custom fields are on the roadmap. |
| Country | Silently ignored | Country detection works automatically from each click via geo-IP. |
| "Enrolled at" / "Payouts enabled at" | Silently ignored | Rekomi creates fresh timestamps on import. |
Common gotchas
My export is taking a long time. Lists over 1,000 partners are emailed async by Dub. Check your account owner's inbox; it usually arrives within 10-15 minutes.
partner_link is empty for some rows. Some Dub partners (especially pending or invited ones) haven't been issued a tracking link yet. The importer falls back to link_key, then to a fresh random slug. The job detail panel lists which rows fell back.
My invited partners landed as Approved. Yes - that's the intentional mapping. An invited partner in Dub has a working link and is closer to Rekomi's Approved state. If you want them as Pending, bulk-reclassify via /dashboard/affiliates after import.
Some affiliates have multiple Dub short links and only one came across. Correct. Dub's CSV is one-row-per-partner. To preserve all links per partner, contact support for a Dub API-side backfill.
My partner links use a custom Dub domain (go.brand.com). Same flow - the slug is still extracted from the ?via= or ?ref= query param. If your custom Dub domain points to a Dub-hosted endpoint rather than brand.com, repoint the DNS to Rekomi after the snippet swap to keep links resolving.
Verifying the import landed clean
After the job completes:
- Open
/dashboard/affiliatesand spot-check 5-10 rows for name + email match. - Confirm one affiliate's tracking link is
brand.com/?via={key}matching the source Dub link. - Check the job detail panel for any rows that fell back to fresh slugs - those affiliates' old Dub links won't work.
- Send a sample notification to yourself.
- Click your own test link with the new snippet live; confirm a click row appears within seconds.
Then fire the bulk auto-notify and cancel Dub.
Importing history and earnings
To bring over each affiliate's past performance, export your sales/commissions CSV from Dub (Program, Commissions, Export as CSV) and upload it under Settings, Migrate, Step 2 (separate from the affiliate roster above).
- Past conversions and commissions are matched to the affiliate by email (or preserved slug) and recorded with the amount and date from your export. Amounts are read as major-unit money; verify the totals on the preview screen.
- Commissions Dub 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.
- If your export includes a customer's Stripe customer/subscription id and your Stripe is connected, existing subscriptions keep paying the same affiliate on renewals.
- 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:
viaand the other 15 default attribution params. - Migrating from other platforms: URL-preservation matrix.
- vs Dub Partners: side-by-side comparison if you are still evaluating.
Migrating from PartnerStack
Move your PartnerStack affiliate roster onto Rekomi. The self-serve importer handles PartnerStack's loosely-documented CSV format via header fuzzy-matching. Tracking links use path-based URLs that need a redirect rule for full preservation; the importer handles roster, status defaults, and notifications.
Migrating from Tolt
Move your Tolt partner roster onto Rekomi with the self-serve CSV importer. Dedupes by email, preserves referral slugs where Tolt exports them, keeps your affiliates' existing ?aff= links attributing, and optionally emails everyone a one-click sign-in invite.