How to bulk import members in WordPress
WordPress can bulk-import core users with WP-CLI, but it does not automatically create membership records, levels, subscriptions or custom member fields. For a small list, import users and assign memberships manually; for a large migration, use an importer that maps CSV data to your membership plugin.
- 01Back up the site first
- 02Prepare and clean the CSV
- 03Create membership levels first
- 04Use the manual WordPress route
- 05Run a small test import
- 06Use a membership-aware importer
What you need
- A WordPress membership or LMS plugin with membership records already configured
- Administrator access to WordPress
- A clean CSV file with one row per member
- A backup and, for WP-CLI, SSH or hosting terminal access
Back up the site first
Create a database and file backup before importing anything. Test the backup or use a staging site if the member data is important.
Do not start with the full file. Keep a copy of the original CSV, then prepare a separate working copy so you can undo spreadsheet changes.
Prepare and clean the CSV
Keep one member per row and use a header row. Include a reliable identifier such as user_email, user_login or an existing user ID. Add names, role, membership level, start date, expiry date and custom fields only when your membership plugin supports those fields.
Check for duplicate email addresses, blank required values, invalid email addresses, hidden spaces and spreadsheet dates that have been converted into the wrong format. Save the file as UTF-8 CSV. A common failure is a column shifting because a name or address contains a comma that was not quoted correctly.
Create membership levels first
Set up the membership levels, courses, groups or access rules before importing members. Record the exact names, IDs or slugs that the importer expects.
Decide whether the import should create new WordPress accounts, update existing accounts, assign access to existing users, or all three. Do not assume that a column called “membership” will be understood automatically; the importer must map it to a real membership field.
Use the manual WordPress route
For the core user accounts, administrators with command-line access can use wp user import-csv /path/to/users.csv. The standard CSV can contain fields such as user_login, user_email, display_name and role. Existing users matched by email or login are updated unless you use the option that skips updates.
This route is fine for creating a small number of ordinary WordPress users, but it does not by itself understand membership levels, subscription records, course enrolments or plugin-specific custom fields. You must assign those records through the membership plugin or a custom integration, which makes the manual route slow and easier to get wrong on a large migration.
Run a small test import
Import five to ten representative rows first. Include a new member, an existing user, a member with custom fields and a member with an expiry date if those cases exist in your file.
Check the user account, membership status, protected content, welcome email behaviour and any subscription information before importing the remaining rows. If the importer reports invalid emails or missing fields, fix the CSV rather than repeatedly uploading the same file.
Use a membership-aware importer
For a large Paid Memberships Pro migration, Paid Memberships Pro – Import Members From CSV is the fast route. Install Paid Memberships Pro first, then install and activate its import add-on from the WordPress admin. The add-on is designed to assign membership levels and map supported user fields from a CSV.
Upload the cleaned file, map each column, review the preview and run the import in batches if the site or host has tight time limits. Keep the error log and compare the imported count with the source count. The add-on documentation notes that existing users need a matching user ID, login or email field, so omitting those identifiers can create duplicates instead of updating accounts.
Let Paid Memberships Pro do it
CSV mapping, custom fields, welcome emails, and error logs for Paid Memberships Pro sites; choose it for large member migrations.
Sources
- developer.wordpress.org /cli/commands/user/import-csv/
- paidmembershipspro.com /documentation/add-on-docs/import-members-from-csv-add-on/
Questions
- Can WordPress import members without a plugin?
- WordPress can import ordinary user accounts through WP-CLI, but it has no general built-in admin tool for importing membership levels, subscriptions or course access from CSV. You can create users with <code>wp user import-csv</code>, then assign membership data separately through your membership plugin or custom code. That is practical for a small list, not usually for a full migration.
- What columns should a member CSV contain?
- At minimum, include a unique login or email address and any fields required by your membership plugin. Typical columns include user login, email, first name, last name, role, membership level, start date, expiry date and custom fields. Use the importer’s documented headings rather than inventing names, because similar labels may not map to the same data.
- Why did the import create users but not memberships?
- The import created users but not memberships because a core WordPress user import does not know how your membership plugin stores access. You need a membership-aware importer or a separate assignment step. Also check that membership levels already exist and that the CSV value matches the expected level ID, name or slug exactly.
- How do I avoid duplicate members during an import?
- Use a stable identifier such as the existing user ID, username or email, and test the matching rules with a few rows first. Do not change email addresses or usernames between exports unless you intend to create new accounts. Keep the importer’s update and skip-update options clear, because choosing the wrong one can overwrite existing data or create duplicates.
- Should I send welcome emails during a bulk import?
- Send welcome emails only after the test import confirms that accounts and access are correct. A bulk import can otherwise send incorrect passwords, duplicate notices or messages to users whose records were matched unexpectedly. If the importer supports it, import first without emails, verify the results, then send a controlled onboarding message separately.