Imports
Bring partners, customers and transaction history with you, with a dry run first and a rollback if you change your mind.
Moving an affiliate program is mostly moving its history. Import brings in your partners, customers and transactions. They can come from a spreadsheet, or straight from the platform you're leaving.
- Every import does a dry run first, so you see what would change before anything is written.
- Every import can be rolled back if you change your mind.
- Your partners' published links keep working through the move.
Links keep working because each imported partner keeps their old referral token. The tracking script also captures the link parameters other platforms use. So a link in a partner's yearly review keeps converting.
To start an import:
- Open Settings, then Import under Program. While setup is still in progress, you can also press Bring an existing program on Home or Getting started.
- Under Where is your program today?, pick a CSV file or your old platform.
- Add your files, or paste your API key.
- Press Dry run and read what it would do.
- Press Run the import.
Sources
- CSV file: any spreadsheet, up to 5 MB per file. The obvious matches are filled in from your headers, and you set the rest.
- Direct from your previous platform: the picker names the affiliate platforms we import from directly.
For a direct import, you paste your own API key from that platform. An API key is a password that lets one piece of software read your account on another. We use it read-only. It's encrypted for the run and removed when the run finishes.
A few platforms need one more detail beside the key. That might be the program id, or the subdomain your account lives on. The form asks for exactly what that platform needs.
Nothing is changed on the other side. So both platforms can run side by side while you switch over.
Say where the file came from
On the CSV step, Which tool did the file come from? lists the tools whose export files we know column by column.
- Pick the tool your file came from.
- That's all. Every column it knows now points at the right field before you reach the mapping step.
You don't have to pick one. Leave it on Not listed and the matching works from your headers, as it always has. Change your answer and the matching is redone from the new one. That works whether you chose before or after adding the file.
A tool is on that list only when we've read its own documented export and know what each column holds. So the list is shorter than the list of tools we can import from.
- A column the tool doesn't name is matched from your header, or left for you.
- Whatever it fills in, you can change on the next step.
- The dry run shows what each column produced before anything is written.
What comes across
There are three kinds of record. Each is its own file, or fetched for you:
- Partners: one row per partner. Email is required. Their referral token keeps their old links working.
- Customers: one row per referred customer, with the partner who referred them. That way recurring commissions keep going to the right person.
- Transactions: one row per payment, with the customer, the partner, the amount and the date. A row with no amount imports as a lead.
Statuses are translated to ours on the way in. Money arrives as proper amounts with a currency.
If your old links live on a subdomain of your own site
Most affiliate tools put the partner's code in the web address as a parameter, like ?ref=jimi. Our script reads those. Nothing to do.
A few tools do it differently. They give partners a link on a subdomain of your own site, with the code as the path, like https://go.your-site.com/jimi. Nothing in that address tells our script who referred the visitor, because the old tool worked that out on its own server before sending the visitor on to you. Then you cancel. The subdomain stops answering, and every link your partners published is dead.
You own that subdomain, so you can fix it in one line. A redirect rule sends anyone who visits one address on to another. Point the subdomain at your own site, and put the code where our script looks for it.
Here's the rule for each of the common hosts. Replace go.your-site.com with the subdomain your old links use, and https://your-site.com with where you want visitors to land.
Vercel, in the redirects array of vercel.json:
{
"source": "/:code",
"has": [{ "type": "host", "value": "go.your-site.com" }],
"destination": "https://your-site.com/?rail=:code",
"permanent": false
}Netlify, in the _redirects file:
https://go.your-site.com/:code https://your-site.com/?rail=:code 302Cloudflare, under Rules, then Redirect Rules, as a dynamic redirect:
If: http.host eq "go.your-site.com"
Then: concat("https://your-site.com/?rail=", substring(http.request.uri.path, 1))
Status: 302nginx, in the server block for that host:
server {
server_name go.your-site.com;
location ~ ^/(.+)$ {
return 302 https://your-site.com/?rail=$1;
}
}Two things to know:
- It's a 302. That's a temporary redirect, so browsers don't cache it and you can change your mind later.
- It sends the code to
rail, our own parameter. That beats any leftover parameter still sitting in the same address.
Run the import first. The rule pays nobody until each partner exists here under the same code their old links use. The import is what creates them.
Check it reconciled
A finished import shows Imported at the top. That only means the run finished. Below the counts, Reconciliation runs three checks:
- Every row has an outcome. Each file's rows are counted as created, updated, unreadable or failed. A row listed twice is created once, then updated by its second line. A payment we already hold for a different partner stays with that partner. An import never moves money between partners.
- Nothing to correct. Unreadable and failed rows are listed with a reason. Download the correction list as a CSV, fix those rows in your file, and import it again. Rows already here are updated, not copied.
- Your site is sending clicks. Imported links with a code in the address work once the tracking script is on your site. Links on a subdomain path still need the redirect rule above.
When all three pass, the panel says Reconciled. It also totals the sales and commissions that came across, one currency at a time. What your old platform had already paid is shown on its own. Compare each figure with your old platform. They should match.
The last line counts imported partners with a payout method. The rest add one in the partner portal, so send them their sign-in link from Partners.
Dry run, run, rollback
Every import does a dry run first. A dry run is a practice pass: it counts what would be created, updated, skipped and failed, and it writes nothing at all.
If some rows would fail or be skipped, a note at the top says how many. Those rows come first in each table, each with its reason, such as "partner not found; import partners first". Then pick one:
- Fix your file and press Dry run again.
- Or run the import anyway. Everything else goes in, and those rows wait for a second pass.
When every checked row would import, the note says that too.
After a run, the import's page lists Rows that didn't import and why, so you can fix those rows in the same file you used and import the whole file again. Partners and customers the first run brought in are matched and updated. Nobody is added twice.
The history table keeps every run with its counts. Import went wrong? Roll back… undoes it. Confirm, and every partner, customer, sale and commission that run created is removed, along with their balances. Rows that already existed and were only updated stay, with what the import changed. One exception: once an imported commission is inside a payout here, or an imported partner has been paid here, the rollback is refused. That money moved, so its record stays.