There are one-click importers for 18 affiliate plugins — AffiliateWP, SliceWP, YITH WooCommerce Affiliates, Affiliates (itthinx), Affiliates Manager, FluentAffiliate, WC Affiliate, Affiliate for WooCommerce, AffiliatePress, Affiliate Pro for WooCommerce, Coupon Affiliates, Easy Affiliate, iDevAffiliate, Solid Affiliate, SUMO Affiliates, Ultimate Affiliate Pro, Webkul WooCommerce Affiliate and WP Affiliate Manager — plus a universal CSV import for anything else, including hosted services with no database to read: PartnerStack, Rewardful, Tapfiliate, FirstPromoter, LeadDyno, Refersion and Post Affiliate Pro all export a CSV that this maps by column header rather than a fixed schema, so a differently-named export still matches.
Why the CSV path matches by header, not by vendor#
None of the seven hosted services offers a database to read, and none of their export formats is documented anywhere you could check against. Rather than shipping a named preset per service — seven sets of column headers nobody has verified, that would silently pick nothing and create nothing the moment a vendor renamed a column — the CSV importer matches on what a column is called. “Payout email”, “payment email”, “PayPal email” and “PayPal” all resolve to the same field, and the longer, more specific synonyms are checked first, so “payout email” is not caught by the plain “email” that identifies the account instead. A CSV from a service the plugin has never heard of still imports correctly as long as its headers are recognisable words.
Before you start#
Back up the database. An import writes real rows into your programme, and the tidiest way to undo one is to restore.
Running it#
Open Squad Affiliate → Migration. The tool lists which supported plugins it detects on your site, and a dry run reports how many affiliates, referrals and clicks it would create, skip or fail — without writing anything — so you see the shape of the import before you commit it.
Every row is matched against a WordPress user, resolved from the source’s own user ID where the source is WordPress-native, or by email otherwise. A user who is already an affiliate is skipped whole rather than updated, which is what makes a re-run safe: run it twice and the second run creates nothing new, and a partial import can be finished by running it again rather than restarted from scratch.
The survey: what was found, and what has nowhere to go#
Every source plugin holds more than affiliates and referrals — commission history, clicks, payouts already made, coupon links, its own settings. The migration screen runs a survey before it imports anything, and reports three things about each piece of data it finds on the old plugin: what exists, what will be carried over, and what exists but has nowhere to go in this plugin’s shape. That third list is deliberate — a migration screen that says “Import” without saying what it leaves behind is how people discover the gap after switching, once the old plugin is already gone and there’s nothing left to check against.
What comes across#
- Affiliates — the WordPress user, their status and their commission rate. A blank rate in the source imports as no rate at all, so the affiliate earns your programme default rather than silently earning zero.
- Referrals, for the seven sources where a commission table was found and mapped: AffiliateWP, SliceWP, YITH WooCommerce Affiliates, Affiliates (itthinx), Affiliates Manager, FluentAffiliate and WC Affiliate. A referral’s own status carries over, so a commission the old plugin already marked paid arrives paid — it is not queued to be paid again.
- Click history, for the same seven sources, if you ask for it. It is what makes a conversion rate mean something the day after the move rather than a month later, once enough new clicks have landed to make one up from scratch.
What does not come across#
- Payout batches. The referral’s own paid/unpaid status comes across, but the batch that grouped a set of payments together is a filing artefact from the old plugin and is not recreated — there is nothing to reconcile it against once the source plugin is gone.
- Coupon-to-affiliate links, even on sources that had them (Coupon Affiliates, Affiliate for WooCommerce). The migration screen tells you they were found and left behind, so re-attach any coupon that still matters to the affiliate it belongs to.
- Visit IP addresses. A click’s URL, referrer and campaign import; the IP does not, because there is no consent record for it from the old system and nothing on the reports screen needs it.
- Any other custom field or setting the source plugin invented for itself — the migration screen lists what it found and could not place, so nothing is lost silently.
The 11 sources without a mapped commission table#
Affiliate for WooCommerce, AffiliatePress, Affiliate Pro for WooCommerce, Coupon Affiliates, Easy Affiliate, iDevAffiliate, Solid Affiliate, SUMO Affiliates, Ultimate Affiliate Pro, Webkul WooCommerce Affiliate and WP Affiliate Manager import affiliates and nothing else — no referral history, no click history. That is worth knowing before you commit to a re-run being “safe”: for these eleven, the affiliate roster comes across cleanly, but a programme’s earnings history on the old plugin stays on the old plugin unless you export it yourself first. If reporting continuity matters more than a clean cutover, run both plugins in parallel for a billing cycle before switching off the old one.
Afterwards#
Check a handful of affiliates against the old plugin before you deactivate it, particularly anyone with an unpaid balance. Then leave both plugins inactive rather than deleting the old one for a cycle or two — a deleted plugin’s tables are the wrong thing to want back.