We’ve revamped our previous import process and wanted to provide a new tutorial for how to import users from a CSV which includes their membership information. If you’re migrating from another membership solution or taking a formerly offline process online, follow the steps below for a bulletproof import.

Our Import Users From CSV Integration Add On documentation page includes a comprehensive tutorial for importing users. Please review to the docs if you are having any issues before posting comments to this article.

How to Import Users to Your Membership Site

  1. Install and activate Import Users from CSV.
  2. Install and activate the Import Users from CSV Integration Add On.
  3. Set up your CSV for import. Download a sample CSV import template which includes the standard user import fields along with additional fields for the membership information.
  4. Once your CSV is ready for import, go to Users > Import From CSV and follow the instructions on screen. Refer to the Import Users from CSV FAQ for more details on using their plugin.
Tagged . Bookmark the . Last updated: . Titled

Comments (64)

I just tried to use this and have been getting an error message. It says to see the error log for details but that just opens a blank page. I’m importing members over from wishlist and their fields are totally different. I’ve reformatted what I can match up, but it still isn’t working.

Almost 100% of the time, errors with the import are due to data format issues in the import file.

The “Import Members from CSV for Paid Memberships Pro” plugin will provide a fair bit more info about what’s going on than what the Import Users from CSV Integration add-on does..

The Import Members from … plugin is available as a free download from the WordPress.org repository: https://wordpress.org/plugins/pmpro-import-members-from-csv/

My user list only has first_name, last_name, user_email
I’m trying to import and it fails, nothing shows up in the error either.

I’m stumped. I don’ know what I’m doing wrong. I’m working with an excel CSV file


Hi, I have installed and activated both Import Users from CSV and the PMPro add on PMPro Import Users from CSV plugins. I formatted the excel file template as instructed and try to import users, everything is working fine but Billing Information is not importing.

pmpro_bfirstname, pmpro_blastname, pmpro_baddress1… etc are not saving.

Can you please guide me to how to add Billing Information on csv import?


Hmmm. Having columns called pmpro_bfirstname/etc will save those values in user meta. The user meta values are used in a few places and checked if a user checks out again.

However, it looks like our code that generates an order on imports doesn’t use that data in the order it creates. So you won’t see the billing information on the order if you were looking there.

Also note that other plugins have their own idea of “billing address” and if you see blank billing address fields on the edit user page, you might be seeing these.

If you open a thread in our member forums, we can take a note to look into this further to make sure you can import billing addresses fine.

How can I import a user with their custom fields that I made using the Register helper? Here is an example of the field: pmprorh_add_checkout_box(“family”, “Family Members”); //order parameter defaults to one more than the last checkout box
‘ $user_array = array(1=>1,2=>2,3=>3,4=>4,5=>5);
//define the fields
$fields = array();
$fields[] = new PMProRH_Field(
“horse_1”, // input name, will also be used as meta key
“text”, // type of field
“label” => “Horse 1:”,
“size”=>15, // input size
“class”=>”horse”, // custom class
“divclass” => “horse_1”,
“id” => “horse_1”,
“profile”=>true, // show in user profile
“required”=>false, // make this field required
“memberslistcsv” => ‘true’, //display field on export

//add the fields into a new checkout_boxes are of the checkout page
foreach($fields as $field)
“family”, // location on checkout page
$field // PMProRH_Field object
); ‘

Hi nice plugin,
I have an issue thought with the csv file.
When i download form you website. the import works.
Then i cannot modify it and import it anymore.
Best regards

I also included the wp_usermeta table. (So the complete export list is wp_usermeta, wp_users, wp_pmpro_discount_codes, wp_pmpro_discounts_codes_levels, wp_pmpro_discount_codes_uses, wp_pmpro_memberships_categories, wp_pmpro_memberships_pages, wp_pmpro_memberships_users, wp_pmpro_membership_level_metadata, wp_pmpro_membership_levels, and wp_pmpro_membership_orders.)

I did a SQL export with DROP TABLE statements and selected Complete Inserts. I saved that export file.

I then made some changes to some plugins and added some new pages. I made some changes to some of the users.

I imported the saved export file. The plugin and page changes were preserved, but the user info reverted to what it was in the export file.

So this seems to work. I think I can migrate from a development system to a production system with the following steps:
1) Upgrade the development system with changes to the website.
2) Put the production system in maintenance mode so members cannot make any changes to their membership info.
3) Export the user and membership info from the production site, described by the export procedure above.
4) Put the development site into maintenance mode also.
5) Migrate the development site to the production site. This will overwrite the latest user and member info with obsolete info from the development site.
6) Import the user and membership info from the export file into the production site, restoring the latest user and member info.
7) Take the production site out of maintenance mode.

Note that my site is only a membership management site, not a blog. I do not have any blog content to preserve. (For sites that do, the blog tables would also need to be included in the export file.)

Do you have any feedback on this? It seems to work, but you might know of some situations where data may be lost or corrupted.




What is the best way to migrate from a development site to a production site? The production site has the current membership data, but the development site has a newer version of my website code. If I use my hosting provider’s tool to move the development site to production I will have the new website but it will overwrite my member data. If I first export the member data from the production site the csv format is different than what Import Users from CSV expects (I believe that the fact that you can’t export then import that file is a design flaw). I need to preserve all the member info including their history and their passwords. How can I do this, and occasionally upgrade my website code?



If you’re just updating code (files on the server), then you can backup the live site files and then overwrite them with the dev site files. All of the member info is stored in the database and at the gateways. So if you update the files, PMPro should navigate things if you are upgrading versions, and otherwise all of your data will be fine.

If you need to also update some things from the DB like settings and post content, it’s often best to simply manually redo these changes on the live site. There are also some DB sync tools that will try to synch content and settings without disrupting users. I am not very familiar with them to give a suggestion there.

Exporting and reimporting users can sometimes work. Note that the CSV format of our export is not the same format to import and you’ll need to “massage” the data there. If you’re using other plugins that store user meta, it may not be in our export or in a format that makes it easy to import. And you should be particularly careful if you have members with recurring subscriptions managed by the gateways. You’ll need to make sure that you import the membership_subscription_transaction_id column, and if you have a lot of recurring order data (i.e. monthly subscriptions), note that that wouldn’t be included… the import just creates one dummy order on import to help manage the subscription. So export/import is not really ideal.

Hope this helps. I wish it was easier, but it’s actually complicated based on how the data is stored.

Thanks, Jason, for your quick and thorough reply.

I looked at some of the site migration tools, such as All-in-One WP Migration and Duplicator, and they all seem to move the entire site. I did not see any which could move certain tables (for example, new pages), but not others (such as the membership info). And I don’t think it would even be possible for a general tool to do this because it would have to know, for example, which wp_pmpro tables to move and which to leave alone.

So, can I make an enhancement request to you? There are a lot of sites that have a separate development site which is pushed to production for upgrading. Could you provide an export tool to export all the pmpro data and a matching import tool?

In the meantime, do you think I could use phpMyAdmin to 1) export the wp_users table and all the wp_pmpro tables, 2) push my new site from development to production, then 3) import these tables? Do you see any problem doing this? Besides wp_users, are there other tables you rely on?

Thanks, again, for your help!


Membership Level is not Importing when I use the Free Import Plugin, I have the field name as membership_level and using ID as it’s value. Please help me out. Thanks!

Make sure you have import users from CSV and our addon PMPro Import Users From CSV both enabled. If you’re still having trouble, we’ll have to get more info from you in our member support forum to help you further.

I have imported and also changed manually pmp members but they are not showing up on my site as an active member…… I have 100+ active members and had to reinstall my site. I tried to import the members but like I said they are not showing up as active members. I have the old Mysql and php files from the old site

Hi there,

I’m trying to import 500+ people with a csv file. I want them all to have their profile hidden by default. Added the field pmpromd_hide as suggested elswhere. Tried both with values 0 and 1 but neither of them worked. Do you have another suggestion?


I can’t install directly the Users from CSV plugin by Ulrich Sossou from WordPress.
The button is not activated.
And the plugin is noted out of updated by WordPress.

How can I fix that ?
Can I use another plugin.

I need to import 300 users.

Pending your reply.

ok Thanks.
I installed and activated this plugin import-user-from-csv
I installed and activated the plugin pmpro-import-users-from-csv-master

I use your CSV Import template file to import.
I test with one user.
I add only the membership_id field with the ID of PMP level (here 2).
All the other fields are empty.

When I import the file, I have an empty page.
I go back and I see the list of WP user.
I can see the new user created.
But this user doesn’t have a PMPro level.

How can I fix that, please ?



So I installed the add-on just fine, and used the XLS/CSV template to import about 325 new members. They imported fine, it seems, only they did not get imported as PM Members and are not showing upon that list (they do show up on general WP Users list), despite fact that I included the correct value (1) in the membership_id field.

What can be going wrong and how can I mass update all these users to make them active PM Pro users?

Make sure you are not also importing a membership_enddate in the past cause the importer will see that and immediately cancel the new membership. There was a recent bug where this was happening for blank enddates sometimes that should be fixed. So make sure you are using the latest version of PMPro Import Users From CSV.

I’ll double check that that is working.

If you still need help, we’ll be able to help you quickest through our member forums where we can get more information from you to try to recreate the error you’re having and fix it.

Hi Jason. Yes, I posted this same question on the members forum. Did not include any value in that column. But did try re-importing with a value in the start date, and that did not help. Strange thing is that I inspected the database and there is the value of 1 in the meta field for these subscribers… Happy to move this over to the member forum, or direct on email. Need to get this worked out asap.


I have both all three of the plug ins installed, but when I upload a user, it does not include any membership level information for them.

This is like the info included in my CSV

user_login, user_email, user_pass, display_name, role, membership_id, membership_startdate, membership_enddate,

Username, email@email.co.uk, password, Name name, Customer, 3, 01/10/2014, 07/11/2015,

Thanks in advance for your help.


That looks good to me. Make sure level 3 is really there. Also, make sure to save the file in MS DOC CSV format. Some people have had problems with CSVs created on Mac or Linux. If you need more help, we can help if you post to the member forums. We can get a sample CSV from you and access to the site to test it out for you.

When we export the users from the database – there is no ‘user_pass’ field, but in your document template there is. Does this mean that when we import users their passwords will be reset?

We have also created the necessity for existing users to renew this time upon expiry with Paypal Express. How can we do this without requiring them to sign up again?

Thanks for your help…

Passwords are “hashed” and “salted” in the database, so you can’t export them and import them somewhere else. If you include a user_pass column in your import, it will use that value as the password for the user.

If you are updating users through the import (i.e. they are already in WP and you are checking the “update users if username or email exists” option) then if you leave the user_pass column out or blank it will leave the user’s password alone.

If you are importing users from another system, you generally need to have your users reset their passwords in the new WP site after they are imported. So leave the column out and the import script will give new users a random password. Then send an email like this to your users:

Hi there guys! We have just upgraded our website. Part of this is an upgrade to our user security which requires that everyone reset their passwords. We are sorry about this inconvenience, but know that this all helps to keep your data safe.

Visit here to reset your password: http://yoursite.com/wp-login.php?action=lostpassword

I have another question so once you have your members and you log on from a protected page where do the customers go? what is their homepage. I was expecting when I set up a membership to be passed over to the page I was trying to access but instead I went my WP profile page?

This is not working. The template does not match the membership fields that are created when you actually create a membership, if I cannot upload my current members then I am going to have to ask for my money back. Where are the screen shots? the instructions? I cannot imagine that other people don’t have this requirement.

Sorry for being a clutz but how do you “Install and activate the PMPro add on PMPro Import Users from CSV.” I have never installed an add-on to a plug in before. I went to the link. It gave me a lot of coding, but no instructions on what to do with the coding. Is it to be copied into a file, if so which one and where abouts in the file. Or is there some other way to “actiavate the PMPro addon”? I tried importing without doijng the add-on and nothing happened. Also I have about 10 other columns of information about members. I presume they will get imported from the CSV file when I get the thing working.

Hi, some questions:
1. If the users already exist in the wordpress DB as users, and in PMPro is that OK, or do the users need to be deleted first?

2. Will this send an email to the members when I run the import? If so – how to i disable that?

3. What is expected in the “membership_start_date”? There are 2 dates for our members:
a. When they first joined (may be 20 years ago)
b. When they last renewed (sometime in the last year normally)

1. That’s okay. Import Users From CSV has an option to update users that already exists. Check that box on import.

2. Import CSV also has an option on whether or not to do that.

3. PMPro tracks the membership start date as the date they got that level. You’d probably want to use the first joined date.

I am using this and when I come to import everything is coming over fine except that it is showing Expires: No instead of the expiry/renewal date. I have got the membership_cycle_period as Year, and start dates and end dates both in this format: eg 2014-07-01. I’ve got membership status set as active, and membership_id’s set at 1. Could you help? I was hoping to go live today, but this has stopped me in my tracks!

Sorry for your hiccup here! The membership_cycle_period isn’t necessary if the membership is not recurring. Although that shouldn’t be the hangup. Try converting your date column to MM/DD/YYYY format (again that shouldn’t be a problem as it should be encoded as a timestamp). For status, “active” is not a valid option (try success). That field is only needed for checking the gateway IPN/Webhook. Or you can remove that column as well.

Thank you so much for the quick response. I redid the dates in my test file as you suggested and it all looks to be working correctly now. Will be going live tomorrow afternoon – wish me luck 😉

Wow – I’m quite happy about this!
Wondering about a couple of fields:
1) membership_status – does PMP have just active and expired? What are the metadata’s for those ? I have a huge list of currently expired members that I want in the site, so that we can start automating the process – so it would be great to bring them in!

2) membership_cycle_period – I assume this is for quarterly/bi-annualy types – so if I have a membership that is every 3 months, what would that cycle number be?

3) membership_stardate – can I backdate the membership start date as far as I want? (i.e 10 year +)

Many thanks! Looking forward to this working out!

Thanks Natasha. Some notes:

Status: The field can be anything in the dropdown if you locate an order in your Memberships admin and edit it. Options are: cancelled, refunded, review, success, token. Its more a field set by your gateway when the IPN / Webhook API processes.

Cycle Period: This is anything in the dropdown when you add/edit a level. Options are: Day, Week, Month, Year. This field works in conjunction with the membership_cycle_number. So for quarterly you could set membership_cycle_number to 3 and membership_cycle_period to Month. “$x every 3 Months”.

Membership Start Date: Yes – the membership start date can be as far back as you want to go. This will become your “Joined” column value in the Memberships Admin “Members List” page.

Thank you for the clarification. Somewhere between last week and today my system is being a bit glitchy and no new members will import. It will bring in the first or second person in the list, but the page goes to a white screen and shows no ‘success’ message. I think this may be a larger hosting/connection issue ? I have tried importing the example import.csv that was provide and it only imports the first name – that likely means a larger issue with my website connection you think?

What type of emails does a user import send out? Is there a way to send an email out to all users letting them know they have switched to a new service? Is it possible to customize what that email says?

I believe this is an option of the Import Users From CSV plugin. We typically disable the new user email and then manually send an email (via MailChimp etc) to all members with a link to the reset password page to set their password. You can also have IUFCSV send user/pass on impmort.

Is a key/legend that gives more information about what each of the fields in the template relate to? I’m migrating from another plugin that doesn’t have an export feature so I’m trying to figure out which information I need to enter manually into this csv template. Somethings are obvious (like user name) but others don’t necessarily match the data I can find in my current plugin.

Its best to complete most fields to preserve as much information about the membership billing profile as possible. If you are migrating from a system that doesn’t provide this data, you may be able to merge your WordPress Users export with an export of payment details from your gateway – including mapping the subscriptions IDs to the user (this piece is key to maintain synchronization if you are using PayPal and a member cancels their subscription profile at the gateway or on your site).

How can we get the critical info thefeministbreeder asked for above? It seems really obvious that there should be some explanation of what each of the fields stands for. I’d rather get it right the first time than import everything into the wrong columns and have to figure out how to fix it. Said columns include: role membership_id membership_code_id membership_initial_payment membership_billing_amount membership_cycle_number membership_cycle_period membership_billing_limit membership_trial_amount membership_trial_limit membership_status membership_startdate membership_enddate membership_subscription_transaction_id membership_gateway membership_payment_transaction_id membership_affiliate_id

What does each mean, and what are potential values for each field? I know some will depend on the situation, but someone please buy me a vowel.

Is there a way to export member information? I have a club membership site that exports the membership information in a csv file to pass onto a publisher who then mails out a printed magazine. They would like to transition to PMPro, this is one of the missing pieces of the puzzle. With the present membership plugin I have created a custom plugin that pulls from the tables where the information is held, so having a hint as to how to implement this might be all I need. 🙂

Thanks Jason. I have not installed PMPro as of yet, and could find any information regarding export in PMPro documentation. The ability to export is core to implementing a new membership plugin for the website. I just wanted to make sure there was a fairly straightforward way of getting information out as well as managing it inside the web application. Looks like there is both.

Leave a Reply

For faster support related to issues on your specific site please open a ticket in our members support area.

Your email address will not be published. Required fields are marked *