Docs
Sign In

The Migration Center

The Migration Center is where your old platform's data becomes a live TrainOS academy. You upload your exports, correct anything that needs correcting, decide who is on which plan, connect each member to the card they already pay with, and then promote all of it to your real roster in one move.

Open it at www.trainos.site/dashboard/migration-center and bookmark it — a migration usually runs over several sittings, and it picks up exactly where you left off. Owners and admins can use it; see Roles & permissions.

www.trainos.site/dashboard/migration-center
Migration Center
Import members and payment data from your previous gym management platform.
Start a New Migration
Migrate your members, payment history, and subscriptions to TrainOS.
New Migration
The Migration Center home. One migration runs at a time, and finished ones stay listed.

Before you start

Connect your Stripe account first. The wizard has a Payments step for it, and plans, customer matching, and subscriptions all run through that account — see Connect payments.

Your academy runs one migration at a time. While one is open it shows as Active Migration with a Continue button, and completed migrations stay listed underneath with a Done badge.

Start a migration

Click New Migration, then pick your old platform on the Source step.

MindBody runs end to end today: upload the two CSV exports and every step after that is built around them. For any other platform, pick it, then book a migration call or email [email protected] and we will run the import with you.

The wizard has eight steps, plus the finished screen:

1

Source

Which platform you are coming from.

2

Import

Upload your CSV exports.

3

Review

Preview and edit everything you imported.

4

Payments

Connect your payment provider.

5

Plans

Create membership plans and assign members to them.

6

Customers

Match Stripe customers to members.

7

Subscriptions

Create each member's subscription in Stripe.

8

Finalize

Complete the migration and collect your claim codes.

The stepper across the top is clickable, so you can jump back to any step to check or change something. Your progress is saved as you go.

Upload your member and sales files

On the Import step, drag your files onto the upload box or click it to choose them. Files are CSV, up to 5 MB each. For MindBody that is Exported Memberships (your member list) and Exported Transactions (your sales history) — Migrating from MindBody has the export steps.

Each upload reports what it did: how many records are new, how many were updated, and what share of your transactions attached to a member.

Fixed something in a file and want to send it again? Upload it — a row with a BarcodeID is matched on it and updated in place. A row with no BarcodeID is added again each time, so keep BarcodeID in your file if you plan to re-upload. Upload order does not matter either: transactions attach to their members as soon as both files are in.

Nothing you upload touches your live roster. Everything sits in staging until you complete the migration at the end. When both files are in, click Continue to Review.

What each column means

TrainOS finds these columns whatever way they are capitalized in your file. Any other column your export happens to include is ignored.

Your member file

Client NameThe member's name. This is the one column a row needs — rows without a name are skipped.
Email AddressTheir email, used for the member record and as a fallback when matching Stripe customers.
PhoneTheir phone number.
Belt RankThe belt your old system had on file. Kept for reference in Review — the rank your member actually gets comes from the rank picker there. If the column is absent, the member defaults to white.
BarcodeIDYour old platform's client ID. TrainOS keeps it as the member's source ID, uses it to match Stripe customers, attaches transactions with it, and matches on it when you re-upload a file.
StatusActive or suspended becomes Active in TrainOS. Anything else becomes Inactive.
Joined OnThe date they joined, as M/D/YYYY.
Membership TierFree text. Feeds the plan suggestions on the Plans step.
Pricing OptionFree text. Also feeds plan suggestions — members sharing a tier and pricing option become one suggested plan.
Next AutoPay DateWhen they next pay. This becomes the first billing date of their TrainOS subscription.
Next AutoPay AmountWhat they next pay. Used to suggest the price of the plan they belong on.

Your sales file

Sale IDThe transaction's ID. Required, and what a re-upload matches on so nothing doubles up.
Sale DateWhen the sale happened.
Client IDThe buyer's client ID. TrainOS matches it against BarcodeID to attach the transaction to the right member.
ClientThe name on the transaction.
Item nameWhat was sold.
Item TotalThe amount. Required, and negative totals come across as refunds, so your history keeps its shape.

Transactions with no matching member

A transaction whose client ID does not match anyone still imports, and still counts toward your revenue history. It is not attached to a member profile.

Review and fix your data

The Review step is your member list before it is real, and everything on it is editable. Open any row to change the name, email, phone, stripes, status, membership tier, pricing option, next payment date, next payment amount, and the member's rank (rank system and level). The imported belt sits alongside as a read-only reference.

Add MemberAdd someone by hand who was not in the export — a member who joined after it was taken, for example.
ExcludeA per-row switch that keeps a member out of everything downstream — plans, matching, subscriptions, and the final import — without deleting the row.
Bump Past-DueMoves every next payment date that has already passed forward by whole months, keeping the day of the month, so nobody is billed for a cycle your old platform already collected.
Reset TableClears all staged members (or all staged transactions) so you can upload a clean export and start the staging over.

Setting each member's rank

Pick each member's rank system and level in Review so they are ranked from day one. Anyone left blank finalizes as Unranked, and you can promote them any time from your roster. See Ranks & promotions.

Create plans and assign members

The Plans step has two tabs: Assign to Members and Create Plans & Coupons.

Click Auto-Suggest Plans and TrainOS reads your import: it groups your active members by membership tier and pricing option, takes the median next payment amount in each group, and suggests a plan named after the tier and option with that price. Click Create Plan on a suggestion to open the normal create-plan dialog with the name and price already filled in.

Plans you create here are real membership plans, live in your academy immediately — the same ones covered in Membership plans. That is deliberate: a migration can run for weeks, and your plans are ready for organic signups the whole time. Coupons work the same way, for anyone whose price needs a discount attached.

On Assign to Members, give each member their plan and, if they need one, their coupon. Selections save as you make them. Tick several members and use the toolbar to assign a plan to all of them at once. The list shows every active, included member who has a next payment date — those are the members the wizard can start subscriptions for.

Match members to Stripe customers

The Customers step connects each member to the Stripe customer holding the card they already pay with. TrainOS matches to customers that already exist in your Stripe account and never creates new ones, which is why the card transfer runs first — see Transfer cards to Stripe.

Click Refresh Stripe Customers to pull in the current list, including everything your old processor has just delivered. Then click Auto-Match, which works down three keys in order:

1

BarcodeID

For MindBody migrations, the BarcodeID from your export against the BarcodeID stored on the Stripe customer. It is an exact match, which is why TrainOS tries it first, and capitalization does not matter.

2

Email

The member's email address against the Stripe customer's email.

3

Name

The member's name against the Stripe customer's name.

If a key is shared by more than one Stripe customer — two customers on the same email, say — Auto-Match leaves that one for you rather than guessing. Everything it did not match is one click away: open Match on the member's row, search the customer list by name, email, Stripe ID, or any of the customer's own fields, and pick the right one. Each Stripe customer is assigned to one member, and if you deliberately want two members on one customer — a parent paying for two kids — TrainOS asks you to confirm and then allows it.

The step shows three lists as you work: matched members, unmatched members, and Stripe customers nobody is using yet. Once subscriptions have been created, matching locks, so that a live subscription is never separated from the customer paying for it.

Create the subscriptions

The Subscriptions step turns your matches into real Stripe subscriptions.

Click Prepare Subscriptions to line them up. Every active, included member who has a matched Stripe customer, an assigned plan, and a next payment date gets one, with their billing anchored to that next payment date. If the date has already gone by, TrainOS rolls it forward by whole months and keeps the day of the month, so nobody pays twice for a cycle your old platform already collected.

Then click Create Subscriptions. They are created in Stripe in small batches, and the screen keeps count as it goes. Each subscription runs as a free trial until its billing date, so the first charge lands on the member's normal day and not a moment earlier. Anything that fails can be retried from the same screen.

Three things to handle before you click Create:

Cancel the old subscriptionsCancel your members' subscriptions on your old platform first, so nobody is billed by both systems. TrainOS reminds you here and asks you to confirm it at the end.
Turn off Stripe's trial emailStripe can send a trial-ending reminder 7 days before billing starts. Migrated members do not need it — switch it off in your Stripe billing email settings before you create anything.
Check the card warningsIf a matched Stripe customer's card is expired or missing, TrainOS says so here. Collect a new card from those members and the first charge goes through cleanly.
Where to switch off Stripe's trial-ending emailOne setting in your Stripe dashboard, before you create subscriptions.

Open dashboard.stripe.com/settings/billing/automatic and turn off the trial-ending reminder. The Subscriptions step links straight to the same page.

Complete the migration

The Finalize step opens with a checklist of where things stand: members imported, plans assigned, customers matched, subscriptions created. Members imported is the one that has to be ticked — the rest are there so you can see what you are about to finish with. If any subscription is still being created, finish those first and come back.

Click Complete Migration, confirm, and TrainOS promotes the whole staging area into your academy at once:

Member recordsEvery included member becomes a real member on your roster, with the status from your import and an 8-digit claim code of their own.
Profiles and ranksNames, emails, phone numbers, and birthdays land on each profile, and any rank you set in Review is applied.
Cards and subscriptionsEach matched Stripe customer is linked to their member, and every subscription you created becomes a live TrainOS subscription.
Payment historyYour imported transactions become payment history, refunds included.

Completing a migration is a one-way step, so give the checklist a read first. From then on your migrated members are ordinary members — edited from Members, billed from Payments, exactly like everyone who signs up from here on.

Hand out the claim codes

The finished screen shows your new members with their claim codes, and a Download CSV button that gives you the whole list as a file with each member's name, email, and code.

Send each member their code. They enter it in the TrainOS app to claim their profile, which links their login to the record you just imported and brings their history with it — see Claim a profile with a member code. Their subscription is already running either way; claiming is how they get the app, the schedule, and their own progress.

See also