This is a complete guide for migrating from other membership plugins, LMS platforms, or moving your BricksMembers site to a new server.
Migration Scenarios
Before you start, identify which scenario applies to you:
Scenario A: WordPress Plugin Migration
You’re already using WordPress with another membership or LMS plugin and want to switch to BricksMembers.
What you have:
- WordPress posts/custom post types with content
- Users with membership levels
- Possibly taxonomies (categories) organizing content
- Custom fields (ACF, meta boxes, LMS plugins etc.)
Migration strategy:
- Keep existing posts by matching post type slugs in BricksMembers content structures
- Use Content Migration tools to convert taxonomies and fields to BRM structures
- Use CSV export / import for users
Scenario B: External Platform Migration
You’re migrating from a platform like Teachable, Kajabi, Thinkific, or Podia.
Migration strategy:
- Create content structures first
- Manually create posts using BricksMembers Structure interface
- Use CSV Import for users
Scenario C: Server Migration
You’re moving an existing BricksMembers site to a new server with a different database type.
Migration strategy:
- Export BRM data before migration
- Import BRM data after migration
- Rebuild indexes
Migrating from WordPress Plugins
Two Migration Approaches
You have two ways to migrate from another WordPress plugin:
Approach A: Match Post Type Slugs (Recommended)
Best for: Plugins that use custom post types (LearnDash, LifterLMS, etc.)
Pros: Keep all existing content, faster migration
Cons: Need to reconnect parent relationships
Approach B: Convert Taxonomies to Structure Posts
Best for: Plugins that use taxonomies for hierarchy (categories for courses/modules)
Pros: Automatically preserves parent-child relationships
Cons: Converts terms to posts (more complex)
Most users should use Approach A. Use Approach B only if your old plugin heavily relies on taxonomies for structure.
Approach A: Match Post Type Slugs
Key Insight: When you create a BricksMembers content structure, you choose the post type slug for each level. If you use the same post type slugs as your old plugin, your existing posts stay intact and become part of the BricksMembers structure automatically.
Steps:
- Find your old plugin’s post type slugs:
- Go to the post edit screen in WordPress adminLook at the URL:
post_type=sfwd-courses(the bold part is your post type slug)Common examples: LearnDash usessfwd-courses,sfwd-lessons,sfwd-topicWrite them down – you’ll need them in step 4
- Go to the post edit screen in WordPress adminLook at the URL:
- Go to BricksMembers → Content Structures
- Click Add New Structure (read our Content Structures Doc for more information)
- Use the SAME post type slugs from your old plugin (from step 1)
- Optionally, add a custom permalink slug for cleaner URLs
- Click Create Structure
Result: All your existing content is now part of the BricksMembers structure! You should still migrate custom fields for maximum compatibility with BricksMembers though. Read further down below how to do that.
⚠️ Important: Don’t deactivate your old plugin yet! Keep it active until you’ve verified everything works. BricksMembers uses the posts, but the old plugin might have data you need.
What If Post Type Slugs Don’t Match?
If you use different post type slugs, BricksMembers will create NEW empty post types. Your old posts won’t appear. To fix this, you have two options:
- Recommended: Delete the new structure and recreate it with matching slugs
- Advanced: Use a plugin like Post Type Switcher to migrate posts to the new post types (more complex, not recommended for beginners)
Understanding Parent Relationships After Migration
Important: When you match post type slugs, your posts exist but parent-child relationships are not automatically connected. Here’s what happens:
- Top-level posts (courses) appear normally in the structure UI (Structure name in the WP sidebar eg. “Courses”)
- Child posts (lessons, modules) exist but aren’t connected to parents
- In the Structure UI, you’ll see top-level posts but child posts won’t appear under them
Why? Different plugins store parent relationships differently (taxonomies, ACF fields, custom tables, etc.). BricksMembers uses _brm_parent_level_X meta fields.
Solutions: Choose the method that fits your old plugin:
Solution 1: Assign Parent Based on Relationship Field (Automatic)
If your old plugin used relationship fields to store parent connections, this tool automatically reconnects them.
Compatible with:
- ✅ ACF (Advanced Custom Fields) – Relationship and Post Object fields
- ✅ Meta Box Relationships – MB_Relationships API
- ✅ Toolset – Legacy relationship pairs
- ✅ JetEngine – Relations
- ✅ Posts 2 Posts (P2P) – Connections
- ✅ Generic post meta – Any field storing parent post IDs – just try if it works with your content
Steps:
- Go to BricksMembers → Content Migration
- Find Assign Parent Based on Relationship Field card
- Select Target (Child) Post Type (e.g., “Lesson”)
- Select Parent Post Type (e.g., “Module”)
- The tool automatically detects relationship fields from your plugins
- Select the detected Relationship Field
- Check “Dry Run” and click Run to preview
- Review how many connections will be made
- Uncheck “Dry Run” and click Run to connect parents
- Repeat for each level (e.g., Modules → Courses)
Result: All parent-child relationships are automatically reconnected based on your old plugin’s data!
Solution 2: Content Hierarchy Page (Manual Bulk Assignment)
If your old plugin didn’t use relationship fields, or BricksMembers doesn’t detect them:
- Go to BricksMembers → Content Hierarchy
- Select your structure
- Select the Target Level (child posts that need parents)
- Posts are automatically grouped for easier selection
- Optional: Group posts using the next dropdown fields
- Select posts (or select all in a group)
- Choose the parent from the dropdown
- Click Assign Parent
- Repeat for different groups
Tip: This is useful when you have logical groupings based on categories etc..
Solution 3: Structure UI Quick Assignment
The fastest way to assign parents for individual posts or small batches:
- Click on the name of the content structure (eg. Courses) in the WordPress admin sidebar
- Click the Edit Mode button in the top right
- Scroll down to see Unassigned [Level Name] groups (e.g., “Unassigned Lessons (42)”)
- Click to expand the unassigned group
- For each post, click the Assign Parent button
- A popup appears with all available parent posts
- Select the parent from the dropdown
- Click Assign Parent in the popup
- The post moves under its parent in the tree (you can assign multiple posts)
- When done, click Save Edits to commit all changes
Important: Changes are staged locally until you click “Save Edits”. You can assign parents to multiple posts before saving.
Tip: This works great for:
- Small sites with few unassigned posts
- If the options don’t work
- Final cleanup after bulk assignment
- Fixing individual posts that got missed
- Assigning multiple posts before triggering recomputation
Migrate Custom Fields
If your old plugin stored data in custom fields (video URLs, durations, etc.), use the Field Migration tool.
- Go to BricksMembers → Content Migration
- Find the Field Migration card
- Select target post types
- Map old fields to new BRM fields (e.g.,
_old_video_url→brm_video_url) - Check “Dry Run” and click Run to preview
- Uncheck “Dry Run” and click Run to migrate
- If there are any important custom fields that BricksMembers does not have a native field for, you can use plugins like Advanced Custom Fields or custom php code (ChatGPT creates that for you easily) to add those fields to BricksMembers content structure post types.
Approach B: Convert Taxonomies to Structure Posts
If your old plugin or custom solution used taxonomies (categories) for course/module organization, use the Term to Structure Migration tool.
Example: Categories like “WordPress Basics”, “Advanced WordPress” become Course posts.
- First, create your BricksMembers structure (choose NEW post type slugs)
- Go to BricksMembers → Content Migration
- Find Term to Structure Migration card
- Select the Taxonomy to migrate (e.g., “course_category”)
- Select Target Post Type (e.g., “Course” from your structure)
- Map term meta fields if needed (video URLs, etc.)
- Check “Dry Run” and click Run to preview
- Uncheck “Dry Run” and click Run to migrate
What happens:
- Each term creates a new post
- Parent-child relationships are preserved automatically
- Mapped term meta is migrated to post meta
- Original terms remain (optionally remove them after verification)
Migrate Users
- Export users from your old plugin to CSV
- Create matching user levels in BricksMembers → User Levels
- Go to BricksMembers → CSV Import/Export
- Configure column mapping – read our User Level Management Doc on how to do that
- Map level values (e.g., “Premium” in CSV → “Premium Member” in BRM)
- Check “Dry Run” and import to test
- Uncheck “Dry Run” and import to save
Protect Content
Assign required levels to your content using Bulk Assignment:
- Go to BricksMembers → Bulk Assign
- Choose a method (by post type, taxonomy, structure, etc.)
- Select posts and levels
- Click Add User Level(s)
Migrating from External Platforms
If you’re migrating from Teachable, Kajabi, or similar platforms, you’ll need to manually recreate your content.
Step 1: Export Data
Export from your old platform:
- User list (CSV with emails, names, membership status)
- Course outline (list of courses, modules, lessons)
Step 2: Create Content Structure
- Go to BricksMembers → Content Structures
- Click Add New Structure
- Plan your hierarchy (e.g., Course → Module → Lesson)
- Set post type slugs
- Click Create Structure
Step 3: Create Content Using Structure Interface
Use the Structure interface with Quick Add and Quick Edit for fast content creation:
- Go to BricksMembers → Content Structures
- Click Edit Mode
- Use Add New [Course] (in the header) and + [Post Type] buttons to create courses, modules, and lessons
- Use Quick Edit to add video URLs and content without page reloads
- Click Save Edits
Why Quick Edit? It’s 10x faster than editing posts in WordPress admin. All fields are in one place, no page reloads, and you stay in context.
Important Tip: After adding a few posts, save the edits to be safe. But instead of clicking the save edits button, hover over it and click on No Recompute to save time.
On a live site, recomputes are needed after doing any changes in the edit mode to ensure all content structure, progress, and drip data works correctly. But when setting up a new site, you only need to trigger those after the very last changes.
To do so, simply use the Save Edits button after your last round of edits, and all computations will happen directly. Alternatively, you can trigger them using the maintenance tools section under BricksMembers → Settings → Maintenance → Content Navigation Updates → Run.
They are important. Don’t leave them out or you will run into issues!
Step 4: Import Users
Follow the same CSV import process as WordPress plugin migration (see Part 1 above).
Moving Your Site to a New Server
When moving your BricksMembers site between servers with different database types (MySQL ↔ MariaDB or to lower DB versions), you need to export and import BRM data as there could be compatibility issues.
Why Database Compatibility Matters
BricksMembers uses advanced database features that differ between MySQL 8.0.35, older MySQL versions, and MariaDB. When you migrate with standard tools, the brm_post_data table may fail to import, losing important data.
The best way to handle that is to simply check the MySQL version of your new host. Set it to at least 8.0.35 or 8.1 and you should be save. If you experience issues, it’s likely MariaDB. In that case do as follows:
The Solution: Database Table Export/Import
Step 1: Export BRM Data (Before Migration)
- On your OLD site, go to BricksMembers → Content Migration
- Scroll to the Database Table Export/Import card
- Click Export Database Table
- A JSON file downloads automatically
Step 2: Migrate Your Site
Use any migration tool (WPVivid, All-in-One WP Migration, Duplicator, UpdraftPlus, manual backup/restore).
Step 3: Verify Database Compatibility
After migrating between different database types (MySQL ↔ MariaDB), verify your database is detected correctly:
- Go to BricksMembers → Settings → Maintenance
- Find the Database Environment Doctor tool at the top
- Click Run Database Checks
- Review the results:
- Table Status: All tables should show green checkmarks
- If any issues are found, click Apply Safe Fixes
Why this matters: Different database types use different indexing strategies. Running the Database Environment Doctor ensures BricksMembers adapts to your new database correctly.
Step 4: Import BRM Data (After Migration)
- On your NEW site, activate BricksMembers
- Go to BricksMembers → Content Migration
- Scroll to Database Table Export/Import card
- Click Select JSON File and choose the exported file
- Check “Replace existing data”
- Click Import Database Table
- Wait for success message
Done! Your site is migrated with all BricksMembers data intact. The database table import automatically recreated indexes optimized for your new database type.
Tips for Smooth Migration
Test on Staging First
Always test your migration on a staging site first. This lets you:
- Verify post type slug matching works correctly
- Test CSV imports without affecting real users
- Practice the workflow so production migration is smooth
- Identify issues before they affect your live site
Common Plugin-Specific Tips
From LearnDash
- Post types:
sfwd-courses,sfwd-lessons,sfwd-topic,sfwd-quiz - Parent relationships: LearnDash uses
course_idandlesson_idmeta fields – use Assign Parent Based on Relationship Field tool to reconnect - Video fields: LearnDash stores video URLs in
_sfwd-videosmeta field - User levels: Export from LearnDash’s user reports, map course enrollment to BRM levels
From LifterLMS
- Post types:
course,lesson,llms_membership - Parent relationships: LifterLMS uses
_llms_parent_courseand_llms_parent_sectionmeta fields – compatible with relationship field tool - Video fields: Stored in
_video_embedmeta field - User levels: Export student enrollments, map to BRM levels
From MemberPress
- Post types: Uses standard WordPress posts/pages with access rules
- Strategy: Create BRM structure using standard post types, export membership levels to CSV
- User levels: Export from MemberPress → Members page
Common Migration Issues
Posts Don’t Appear After Creating Structure
Problem: Created structure but old posts don’t show up.
Solution:
- Verify post type slugs match EXACTLY (case-sensitive)
- Check that posts are published by clicking Show Hidden button
CSV Import Shows “No Users Imported”
Problem: CSV import completes but no users are added.
Solution:
- Verify CSV has header row with column names
- Check email column name matches your configuration
- Ensure emails are valid (no spaces, proper format)
- Use “Dry Run” to see detailed error messages
Field Migration Doesn’t Copy Data
Problem: Ran field migration but data didn’t transfer.
Solution:
- Verify source field names are correct (check with a plugin like Advanced Custom Fields)
- Check if old plugin stores data in a different format (serialized, JSON, etc.)
- Use “Dry Run” to preview what will be migrated
- Some plugins use custom tables instead of post meta—these require manual export/import
Child Posts Don’t Appear in Structure
Problem: Created structure with matching post type slugs. Top-level posts appear, but lessons/modules don’t show under their parents.
Cause: Parent relationships aren’t connected. Your old plugin stored relationships differently than BricksMembers.
Solution:
- If your old plugin used ACF, Toolset, JetEngine, Meta Box, or P2P for relationships:
- Go to BricksMembers → Content Migration
- Use Assign Parent Based on Relationship Field tool
- It automatically detects and reconnects relationships
- If you’re not sure or it doesn’t detect relationships:
- Go to BricksMembers → Content Hierarchy
- Use bulk assignment to connect posts to parents
- Group by taxonomy or other criteria for easier selection
- For small sites or fine-tuning:
- Use Content Hierarchy page for manual assignment, or use arrow buttons in structure editor to reorder posts after parents are assigned
Migration Checklist
Before Migration
- ✅ Create staging site for testing
- ✅ Note down old plugin’s post type slugs
- ✅ Document old plugin’s custom field names (for field migration)
- ✅ Export users to CSV
- ✅ Export BRM data (if server migration BRM to BRM)
- ✅ Take full site backup
During Migration
- ✅ Install BricksMembers and activate license
- ✅ If server migration (BRM to BRM): Run Database Environment Doctor (Settings → Maintenance)
- ✅ Create matching content structure (use same post type slugs!)
- ✅ Create matching user levels
- ✅ Connect parent posts
- ✅ Run field migration (if needed) with Dry Run first
- ✅ Configure CSV import column mapping
- ✅ Run CSV import with Dry Run first
- ✅ Import actual users
- ✅ Bulk assign required levels to content
- ✅ Test with sample user accounts (different membership levels)
After Migration
- ✅ Verify all posts appear in structures
- ✅ Check that custom fields migrated correctly
- ✅ Test access control with each membership level
- ✅ Verify user levels assigned correctly
- ✅ Test navigation between posts (prev/next buttons)
- ✅ Check progress tracking works (if enabled)
- ✅ Test drip content rules (if enabled)
- ✅ Clear and test all caches (site cache, CDN, object cache)
- ✅ Deactivate old plugin (after confirming everything works)
- ✅ Monitor for user support requests in first week
Need Help?
If you encounter issues during migration:
- Check the troubleshooting sections above
- Ask in our Facebook Community
- Contact support with details about your old plugin/platform
