Skip to content
WordPress → Tools → FMS Migration/wp-admin/tools.php?page=fms-migration-assistant60 minCannot be undone

Step 2: Data ​

Copy the members and the content rules into FMS. The site keeps running normally throughout.

Import the Stripe subscriptions first ​

Members who pay through Stripe come from Stripe itself, not from the export. Do this for every connected account before the member export, or their rows in the export have nothing to attach to.

In the admin portal go to Settings → Connections. Press Manage → on each Stripe account. The account's page has an Import existing subscriptions section.

  1. Press Preview import. It reads the account and shows a preview.
  2. Map every price it lists to a plan. Import stays grey until every price is mapped.
  3. Press Import N subscription(s). It runs in the background. You can leave the page.
  4. If it says Paused, read the reason and press Resume from page N. It carries on from the page it stopped at.
Past-due members and rows FMS already owns

A member whose card is failing on the day is imported with a grace window, so they keep reading while Stripe retries. Stripe's own outcome settles them. The section counts them under Past due, in grace, not as errors. Rows marked Held by FMS are already under FMS control and are left alone.

Full detail: Connections.

Fill the invoice history ​

Once every account is imported, open Settings → Consolidation, section Invoice history backfill. Only owners can run it.

  1. Press Preview (no writes). It runs in the background and shows its progress.
  2. Read which customers match nobody.
  3. Press Run backfill. You can leave the page while it runs.

If FMS restarts or someone cancels it, run it again. It only adds what is still missing. Full detail: Consolidation.

Export the members ​

Press Export. It works through the site in batches of a thousand with a progress bar, then offers Download JSON.

One tick box decides whether free Community members are included. They usually are.

Members billed through Stripe are always included, as link-only rows. FMS uses them to attach the WordPress login to the member the Stripe import created, even when the two addresses differ. They never create a membership. That includes Stripe-billed team members and team admins. A team admin's row carries the team's size, and FMS sizes their Stripe team to it.

The file also carries notes for FMS. They give the site's timezone, which the old plugin's dates were converted from. They also list any members left out because their level matches no FMS plan. The export needs FMS Member Gate 0.52.0 or later for both.

Do not open the file to check it

It is large and it contains every member's email address. Download it, import it, delete it.

Import into FMS ​

In the admin portal go to Members and press Import from WordPress. Use card 1, Members and memberships — the WordPress export. Full detail: Import and verify members.

  1. Choose the file.
  2. Read the grey From the export file box: the timezone, and any members not in this file.
  3. Press Preview. Nothing is written. You get counts of what would be created.
  4. Check Stripe-billed members. unmatched Stripe customers must be 0.
  5. Read any yellow box about grants that have already ended. See below.
  6. When it says Looks clean — press Import to apply., press Import and confirm.

Unmatched Stripe customers

A count above zero means a Stripe account has not been imported yet, or the old plugin holds a stale customer id. Run the Stripe import for that account, then preview this file again. Address mismatches are fine: the member keeps their Stripe address and the note tells you who.

Grants that have already ended

A box saying some grants have already ended means their end date in the file is in the past. Within an hour of importing, FMS's expiry check acts on each one:

PlanWhat happens
A paid planDrops to Community. One Mailchimp update each.
CommunityThe membership is cancelled.

Open Examples to see who. If the dates are wrong, fix them in the old system and export again. Otherwise this is expected.

A yellow box: "Fix these before applying"

The preview lists people whose website sign-in would be refused or is unclear. That is an address on two rows, a website account on two rows, an address FMS already links to another website account, or two FMS members whose addresses differ only by capital letters. Importing still works. Afterwards, settle each person on their member page, under Website account.

The import is safe to repeat. Running it twice does not create anyone twice, and it never touches Stripe or Mailchimp. A repeat also moves a changed end date across.

Verify every member ​

Still on card 1, with the same file chosen:

  1. Press Verify. Nothing is written. Every row lands in one box, such as In place, Missing or End date differs.
  2. Open Rows in each yellow box. Fix the cause, export again and import again.
  3. Repeat until it says PMPro and FMS agree — every row is in place or served by FMS.

End the members PMPro removed ​

Importing only adds. When the old plugin has cancelled a free or bank-transfer member, or removed a seat, the card lists them under held members the file no longer carries.

Ends memberships

Reconcile absent members… ends their free and bank-transfer memberships and their own seats. It never touches a Stripe-billed membership or a member already handed over. Read the list and the dialog first. Steps: End the members PMPro removed.

Keep the newsletter opt-outs ​

Members who left a newsletter in Mailchimp keep that choice only if FMS records it before its first re-sync. Export the Mailchimp audience as a CSV, then use card 2 on Members → Import from WordPress, Newsletter unsubscribes — the Mailchimp audience export. Press Preview, read the lists, then Apply. Steps: Keep members' newsletter opt-outs.

Everyone the imports create arrives On PMPro. The old plugin keeps serving them until the morning everyone is handed over on the Migration page. Run both imports again that morning, before the hand-over. A repeat import leaves members already handed over to FMS as they are.

Sync the content restrictions ​

Back in the assistant, press Sync. It copies the old plugin's per-post rules so FMS gates exactly the same articles. Tick the box to remove stale rules that no longer match anything.

Then it handles categories the old plugin locked. Every article in one gets its own rule, in batches of a thousand. The summary ends with a line such as 6 PMPro category rule(s) on 2 categories flattened onto 140 post(s), 35 of which had no per-post rule (0 members-only, now paid-only). The 35 are articles that would have gone public without this step.

Run it again on the day

Articles added to a locked category after the sync have no rule. Press Sync again just before you deactivate the old plugin. See Tools and buttons.

Verify before going on ​

  • Every Stripe account's page on Connections shows Imported under Import existing subscriptions
  • Member count in FMS is close to the site's active membership count
  • The bulk import preview showed 0 unmatched Stripe customers and said Looks clean
  • Verify says PMPro and FMS agree, with no members the file no longer carries
  • Newsletter opt-outs applied, and a second Preview shows 0 opt-outs to record
  • Spot-check five members: right plan, right status
  • Restrictions sync reports a sensible number of posts
  • Its category line matches the categories you know were locked
  • Consolidation finds nothing alarming

Next: step 3, Cutover.

Internal staff guide. Screenshots come from the rehearsal rig and never show real members. Project status (for developers and admins).