A Simple and Complete Guide for Store Owners
If your store is using WP Swing Subscriptions and you want to switch to WooCommerce Subscriptions, this guide explains everything in clear and simple English. You will learn how migration works, what steps to follow, what problems you should avoid, and what to check before you go live. This article is written for regular store owners, not developers, but it also includes sample code and advanced tips for those who need them.
The goal is to help you move your subscribers in a safe and clean way without losing revenue or breaking renewal payments.
Why Many Stores Move Away From WP Swing
WP Swing Subscriptions is a cheaper solution, but it has several limits when a store starts to grow. WooCommerce Subscriptions is more stable, has better support, and works with more plugins and gateways.
Below are the most common reasons store owners decide to migrate.
Main reasons to switch
- More stable renewals
- Better support and updates
- Works better with Stripe and PayPal
- Easier to customize
- Fewer errors with scheduled payments
- Better integration with memberships and LMS plugins
Most of the problems store owners report with WP Swing Subscriptions are related to failed renewals, wrong next payment dates, and customer complaints. When money is involved, you want a stable and safe system.
How Migration Works
Migrating subscriptions is not the same as moving normal products. Subscriptions have start dates, renewal dates, unpaid orders, payment tokens, and links to customers. Because of this, the migration process needs to be very careful.
Here is the basic outline of how migration is done.
- Export all subscription data from WP Swing
- Clean and correct the data
- Map the fields to WooCommerce Subscriptions
- Import the data using a special importer or a custom script
- Test renewals
- Disable WP Swing and activate WooCommerce Subscriptions
- Watch renewals for a few days
Now we go deeper into each step.
Step 1: Export Data From WP Swing
WP Swing allows subscription export to CSV. You will need these fields:
| Field name | Why it is needed |
|---|---|
| user ID | To match the subscription with the customer |
| product ID | To know what product the customer is subscribed to |
| start date | Needed for correct billing history |
| next payment date | Needed so WooCommerce can create the next renewal |
| billing cycle | Month, week, year |
| subscription status | Active, canceled, paused |
| order IDs | Useful for history but not always required |
| payment method | Needed for renewals |
Make sure to check that all exported rows have valid dates and correct user IDs.
Step 2: Clean the Exported File
Most stores need some cleanup before importing the data into WooCommerce Subscriptions. Common issues include:
- Invalid dates
- Missing user accounts
- Old or deleted product IDs
- Wrong status values
- Incomplete payment method information
You can fix most of these issues using Google Sheets or Excel.
For example, if some start dates are empty, you can set a default date like the date of the first parent order.
Step 3: Map WP Swing Fields to WooCommerce Fields
WooCommerce Subscriptions stores data differently.
You need to match the WP Swing fields to WooCommerce meta fields.
Here is a useful mapping table:
| WP Swing field | WooCommerce Subscriptions field |
|---|---|
| subscription_id | post_id (created by importer) |
| start_date | _schedule_start |
| next_payment_date | _schedule_next_payment |
| billing_period | _billing_period |
| billing_interval | _billing_interval |
| status | post_status |
| user_id | _customer_user |
| product_id | order line item |
If you do not map fields correctly, the subscription may import but renewals will break.
Step 4: Importing the Subscriptions
There are two ways to import:
1. Using a prepared CSV importer
Works only for basic cases. Good for small stores.
2. Using a custom script
This is the safest way for large stores or stores with many legacy subscriptions.
Here is a simple example code snippet that creates a subscription programmatically:
$subscription = wcs_create_subscription( array(
'customer_id' => $customer_id,
'start_date' => $start_date,
'next_payment' => $next_payment,
) );
$subscription->add_product( $product, 1, array(
'total' => $price,
) );
$subscription->update_status( 'active' );
Below is an example of adding item meta:
$items = $subscription->get_items();
foreach ( $items as $item_id => $item ) {
wc_add_order_item_meta( $item_id, '_billing_period', $period );
wc_add_order_item_meta( $item_id, '_billing_interval', $interval );
}
This code needs to be customized for each store depending on the exported data.
Step 5: Testing Renewals
Testing renewals is the most important part. Here is what you should test before going live.
Test checklist
- Does the subscription show the correct next payment date
- Can Stripe or PayPal renew it
- Is the customer charged correctly
- Do renewal emails work
- Does the subscription change status after renewal
To test Stripe renewals, you can use:
Test card: 4242 4242 4242 4242
Expiration: Any future date
CVC: Any 3 digits
Step 6: Switching From WP Swing to WooCommerce Subscriptions
Once you are sure all subscriptions have been imported correctly:
- Disable WP Swing Subscriptions
- Enable WooCommerce Subscriptions
- Check your cron events
- Refresh permalinks
You do not want both plugins active at the same time because they may conflict.
Step 7: Monitoring After Migration
For the first 7 days, watch renewal logs.
WooCommerce Subscriptions logs can be found in:
WooCommerce → Status → Logs → subscription logs
If you see errors like:
Renewal payment failed due to missing token
this means that some payment methods need manual update from the customer.
You can send them a simple message:
“Please log in and update your card details so your subscription continues without interruption.”
Common Problems During Migration
Here are the issues most stores run into.
Missing payment tokens
Stripe stores card data as tokens. These are usually not migrated and customers must update their cards.
Wrong timezones
If the timezone is wrong, the renewal date may shift by one day.
Old or deleted products
If a product no longer exists, you must create a new one and map it.
Duplicate subscriptions
If you import twice, you may have duplicates. You can write a script to detect duplicates by email address.
Example:
$subs = wcs_get_users_subscriptions( $user_id );
if ( count( $subs ) > 1 ) {
// handle duplicates
}
FAQ Section
1. What is the safest way to migrate subscriptions from WP Swing to WooCommerce Subscriptions?
The safest way to move subscriptions from WP Swing to WooCommerce Subscriptions is a slow and controlled process where you check every step before importing anything into your live store. Most problems happen when people rush and try to import everything at once without testing.
A safe process looks like this. First, export all subscription data from WP Swing into a clean CSV file. Second, open that file in Google Sheets or Excel and fix everything that looks wrong, such as missing dates, wrong periods, or user accounts that no longer exist. Third, map every field from the CSV to the fields used by WooCommerce Subscriptions. They do not use the same structure, so this step is very important.
Once the data is ready, try importing only a few subscriptions on a test site. Turn on WooCommerce Subscriptions and renew one or two orders to see if the dates and payments work. When you confirm that renewals run correctly, import the rest of the subscriptions. Finally, monitor renewal logs for several days to make sure nothing breaks.
This slower approach may take longer, but it keeps your revenue safe and prevents failed payments or angry customers.
2. Do customers lose their saved payment methods during migration?
In most cases, yes, customers will lose their saved card details because payment gateways store these details as secure tokens that belong to the original plugin. These payment tokens usually cannot be copied from WP Swing to WooCommerce Subscriptions because they were created with a different data structure and a different plugin key.
This means Stripe or PayPal will not recognize those tokens after the migration. As a result, when the next renewal date arrives, WooCommerce Subscriptions will try to charge the customer but will fail because the card token is missing.
The easiest way to handle this is to notify customers in advance. You can tell them that your store is upgrading to a safer subscription system and that they will need to update their payment method once. When they log in, they can enter their card again, and WooCommerce Subscriptions will save a fresh token that works for future renewals.
Usually, over 90 percent of customers update their card within two or three days if you send a polite reminder. It is a normal part of any subscription system migration.
3. Can I migrate subscriptions without losing any revenue?
Yes, you can migrate subscriptions without losing money, but only if you plan the process carefully and test everything before you switch systems. The most important part is making sure that your next payment dates and billing intervals are correct. If these dates are wrong, customers might be charged too early, too late, or not at all.
To protect your revenue, follow these steps. First, make sure every subscription in your CSV has the correct next payment date. This date tells WooCommerce when to generate the next renewal order. Second, run a test migration on a staging site and trigger a renewal manually. See if the order is created and paid correctly. Third, once you import everything into your live site, check the subscription logs for at least one week. If you see any errors, correct them right away.
If you do this, the migration will be smooth and no customers will miss a payment cycle. The only exception is if payment tokens cannot be transferred, in which case you should remind customers to update their card.
4. Can I migrate expired or canceled subscriptions, or should I skip them?
You can migrate expired, canceled, or even paused subscriptions. In fact, it is useful to migrate them because they create a full and correct history inside WooCommerce Subscriptions. This history helps you understand customer lifetime value, churn rate, and past billing patterns.
Expired subscriptions also help identify customers who might want to resubscribe later. If customers see their old subscription in their account, they can renew it with a single click.
If you skip these older subscriptions, your reports may look incomplete. Also, WooCommerce Subscriptions may treat returning customers as new subscribers, which can lead to confusion.
Therefore, it is best to migrate all subscription records, even the old ones, as long as the data is clean and correct.
5. Do I need to recreate parent orders or can WooCommerce generate new renewals automatically?
You do not need to recreate old parent orders for most migrations. WooCommerce Subscriptions can generate new renewal orders automatically as long as the next payment date, billing period, and customer data are correct.
Parent orders are mostly used for history and reports. They show what the customer originally bought and how the subscription was created. If these orders exist in your store, WooCommerce will link the subscription to them. If they do not exist, the subscription will still work fine, but the history will be shorter.
The important part is not the parent order. The important part is the next payment date. As long as this date is valid, WooCommerce Subscriptions will create a new renewal order at the correct time.
If you want a perfect record, you can recreate parent orders using a script, but this is optional and usually not needed for normal store operations.
6. How long does a full migration take?
The time needed depends on the size of your store and the quality of your data. Small stores with fewer than 50 subscriptions can finish the migration in one or two hours, including testing. Medium stores with 100 to 500 subscriptions may need one or two days. Stores with more than 1000 subscriptions may need one week of preparation, cleanup, mapping, importing, and testing.
The most time is spent on data cleanup. If your export file contains missing dates, duplicate user records, or invalid values, you will spend more time fixing it. If everything is clean, the migration is fast.
Testing also takes time. You should test on a staging site, run a renewal, and then test again on the live site before disabling WP Swing.
So the full timeline usually looks like this:
Day 1: Export, cleanup, mapping
Day 2: Test import on staging
Day 3: Live import and verification
Days 4 to 7: Renewal monitoring
With a careful plan, the process is stress-free and predictable.
7. Will email notifications from WooCommerce Subscriptions work correctly after migration?
Yes, email notifications will work, but only if the subscriptions are imported with correct dates and statuses. WooCommerce Subscriptions uses these values to decide when to send each email, such as renewal reminders or payment failure notices.
If the next payment date is missing or wrong, the emails may not send on schedule. If the status is wrong, such as setting a subscription to on-hold when it should be active, then the wrong email may be sent.
The best way to confirm that emails work is to test a renewal after the import. When WooCommerce generates a renewal order, it will also send the correct email. You can also use the Email Test tool inside WooCommerce settings to check whether your templates are correct.
Make sure your SMTP service (such as SendGrid, Mailgun, Brevo, or WP Mail SMTP) is working, since WooCommerce depends on it for sending emails reliably.
8. Can I migrate subscriptions that include coupon discounts or special prices?
Yes, you can migrate subscriptions that include discounts, trial periods, or custom pricing. You only need to make sure that the correct price is applied when you add the subscription item in the import process.
In a CSV import, you can set a custom price for the line item by using the price field. In a custom script, you can use something like this:
$subscription->add_product( $product, 1, array(
'total' => $discounted_price
) );
WooCommerce Subscriptions will respect this price for future renewals.
If the discount is meant to apply only once, you may need an extra line item meta field to stop the discount after the first renewal.
Always test one discounted subscription after importing to make sure the logic behaves the way you expect.
9. Can I run WP Swing Subscriptions and WooCommerce Subscriptions at the same time?
No, you should not run both plugins at the same time. They both try to manage subscriptions, and they use different database structures. If both are active, they may create duplicate scheduled events, renewals may fail, and customer accounts may show incorrect subscription data.
The correct process is to finish the import, verify that everything works, then disable WP Swing before enabling WooCommerce Subscriptions. This ensures that there is no conflict and that only one plugin is in charge of renewals.
Running both at once can also cause confusion for customers because they may see two subscriptions for the same product. It can also lead to double charges if both plugins try to renew on the same date.
Always keep only one subscription system active.
Summary

Moving from WP Swing Subscriptions to WooCommerce Subscriptions is a smart step for any store that depends on recurring payments. With careful mapping, clean data, and good testing, you can move all of your subscribers without losing revenue.