Search Over 30,000 FREE Plugins from the Official WordPress Plugin Directory Repository

Import users from CSV with meta

A plugin to import users using CSV files to WP database automatically including custom user meta

Clean and easy-to-use Import users plugin. It includes custom user meta to be included automatically from a CSV file and delimitation auto-detector. It also is able to send a mail to each user imported and all the meta data imported is ready to edit into user profile.

  • Import CSV file with users directly to your WordPress
  • Import thousends of users in only some seconds
  • You can also import meta-data like data from WooCommerce customers using the correct meta_keys
  • Send a mail to every new user
  • Use your own
  • You can also update data of each user
  • Assing a role
  • Create a cron task to import users periodically
  • Edit the metadata (you will be able to edit the metadata imported using metakeys directly in the profile of each user)
  • Read our documentation
  • Ask anything in support forum, we try to give the best support

In Codection we have more plugins, please take a look to them.

Author codection
Contributors hornero, carazo
Tags csv, custom, delimiter, editor, fields, import, importer, insert, meta, meta-data, profile, update, user, user-meta, users
  1. import-users-from-csv-with-meta screenshot 1

    Plugin link from dashboard

  2. import-users-from-csv-with-meta screenshot 2

    Plugin page

  3. import-users-from-csv-with-meta screenshot 3

    CSV file structure

  4. import-users-from-csv-with-meta screenshot 4

    Users imported

  5. import-users-from-csv-with-meta screenshot 5

    Extra profile information (user meta)


  • Install Import users from CSV with meta automatically through the WordPress Dashboard or by uploading the ZIP file in the plugins directory.
  • Then, after the package is uploaded and extracted, click Activate Plugin.

Now going through the points above, you should now see a new Import users from CSV menu item under Tool menu in the sidebar of the admin panel, see figure below of how it looks like.

Plugin link from dashboard

If you get any error after following through the steps above please contact us through item support comments so we can get back to you with possible helps in installing the plugin and more.

  • German translation fixed thanks to @barcelo
  • System compatibility updated



  • Plugin can now import serialized data.
  • New filter added: $data[$i] = apply_filters( 'pre_acui_import_single_user_single_data', $data[$i], $headers[$i], $i); now you can manage each single data for each user, maybe easier to use than pre_acui_import_single_user_data

  • Now you can automatically rename file after move it. Then you won't lost any file you have imported (thanks to @charlesgodwin)

  • Password bug fixed. Now it works as it should (like it is explained in documentation)

  • From now we are going to keep old versions available in repository
  • We don't delete loaded columns (and fields) when you deactivate the plugin
  • Password is not auto generated when updating user in order to avoid problems (missing password column and update create new passwords and use to create problems)

  • Now you can set the email to empty in each row thanks to @sternhagel

  • German language added thanks to Wolfgang Kleinrath
  • Added conditional to avoid error on mail sending

  • Now you can choose if you want to not assign a role to users when you are making an import cron

  • Now you can choose if you want to assign to some user the posts of the users that can be deleted in cron task

  • French translation added thanks to @momo-fr


  • Plugin now is localized using i18n thanks to code provided by Toni Ginard @toniginard

  • Bug fixed in cron import, nonce conditional check, thanks to Ville Kokkala for showing the bug



  • Thanks to Bruce MacPherson we can now choose if we don't want update users roles when importing data if user exist
  • Clearer English thanks to Bruce MacPherson


  • Thanks to Jason Lewis we can now choose if we don't want update users when importing data if user exist


  • Important security fixes added thanks to

  • New filter added, thanks to @burton-nerd

  • Renamed function to avoid collisions thanks to the message of Jason Lewis

  • Fix for the last one, we set true where it was false and vice versa

  • We try to make it clear to choose if mails (the one we talked in are being sent or not

  • Automatic WordPress emails sending deactivated by default when user is created or updated, thanks to Peter Gariepy

  • wpautop added again


  • user_pass can be imported directly hashed thanks to Bad Yogi


  • Now you can move file after cron, thanks to Yme Brugts for supporting this new feature


  • New hook added, thanks to borkenkaefer



  • New feature thanks to Ken Hagen - V3 Insurance Partners LLC, now you can import users directly with his ID or update it using his user ID, please read documentation tab for more information about it
  • New hooks added thank to the idea of borkenkaefer, in the future we will include more and better hooks (actions and filters)
  • Compatibility with New User Approve fixed



  • Checkbox included in order to avoid sending mail accidentally on password change or user updated.

  • Documentation updated.

  • Autoparagraph in email text to solve problem about all text in the same line.
  • Tested up to 4.5.1

  • Bug in delete_user_meta solved thanks for telling us lizzy2surge

  • Bug in HTML mails solved



  • Bug detected in mailer settings, thanks to Carlos (


  • Include code changed, after BuddyPress adaptations we break the SMTP settings when activating


  • Labels for mail sending were creating some misunderstandings, we have changed it


  • Deleted var_dump message to debug left accidentally


  • BuddyPress fix in some installation to avoid a fatal error


  • Now you have to select at least a role, we want to prevent the problem of "No roles selected"
  • You can import now BuddyPress fields with this plugin thanks to André Ihlar


  • Email template has an own custom tab thanks to Amanda Ruggles
  • Email can be sent when you are doing a cron import thanks to Amanda Ruggles


  • Now you can choose if you want to send the email to all users or only to creted users (not to the updated one) thanks to Remy Medranda
  • Compatibility with New User Approve ( included thanks to Remy Medranda


  • Metadata can be sent in the mail thanks to Remy Medranda


  • Bad link fixed and new links added to the plugin


  • Capability changed from manage_options to create_users, this is a better capatibily to this plugin


  • Bug solved when opening tabs, it were opened in incorrect target
  • Documentation for WooCommerce integration included


  • Bug solved when saving path to file in Cron Import (thanks to Robert Zantow for reporting)
  • New tabs included: Shop and Need help
  • Banner background from updated





  • New GUI based on tabs easier to use
  • Thanks to Michael Lancey ( Mckenzie Chase Management, Inc. ) we can now provide all this new features:
  • File can now be refered using a path and not only uploading.
  • You can now create a scheduled event to import users regularly.


  • Bugs detected and solved thanks to a message from Periu Lane and others users, the problem was a var bad named.


  • Default action for empty values now is: leave old value, in this way we prevent unintentional deletions of meta data.
  • Included donate link in plugin.


  • Thanks to Carmine Morra ( for reporting problems with


p> and <br/> tags in body of emails.


  • Thanks to Matthijs Mons: now this plugin is able to work with Allow Multiple Accounts ( and allow the possibility of register/update users with same email instead as using thme in this case as a secondary reference to the user as the username.


  • Now options that are only useful if some other plugin is activated, they will only show when those plugins were activated
  • Thanks to Carmine Morra ( for supporting the next two big features:
  • New role manager: instead of using a select list, you can choose roles now using checkboxes and you can choose more than one role per user
  • SMTP server: you can send now from your WordPress directly or using a external SMTP server (almost all SMTP config and SMTP sending logic are based in the original one from WP Mail SMTP - When the plugin finish sending mail, reset the phpmailer to his previous state, so it won't break another SMTP mail plugin.
  • And this little one, you can use email in mail body to send to users their email (as it existed before: loginurl, username, password)


  • Thanks to idealien, if we use username to update users, the email can be updated as the rest of the data and metadata of the user and we silence the email changing message generated by core.


  • Thanks to Mitch ( mitch AT themilkmob DOT org ) for reporting the bug, now headers do not appears twice.


  • Thanks to Adam Hunkapiller ( of ) have supported all this new functionalities.
  • You can choose the mail from and the from name of the mail sent.
  • Mail from, from name, mail subject and mail body are now saved in the system and reused anytime you used the plugin in order to make the mail sent easier.
  • You can include all this fields in the mail: "user_nicename", "user_url", "display_name", "nickname", "first_name", "last_name", "description", "jabber", "aim", "yim", "user_registered" if you used it in the CSV and you indicate it the mail body in this way FIELD_NAME, for example: first_name


  • Due to some support threads, we have add a different background-color and color in rows that are problematic: the email was found in the system but the username is not the same


  • Thanks to Peri Lane for supporting the new functionality which make possible to activate users at the same time they are being importing. Activate users as WP Members plugin ( consider a user is activated


  • Thanks to Kristopher Hutchison we have add an option to choose what you want to do with empty cells: 1) delete the meta-data or 2) ignore it and do not update, previous to this version, the plugin update the value to empty string

  • Previous version does not appear as updated in repository, with this version we try to fix it

  • In WordPress Network, admins can now use the plugin and not only superadmins. Thanks to @jephperro

  • Solved some typos. Thanks to Jonathan Lampe

  • JS bug fixed, thanks to Jess C


  • List of old CSV files created in order to prevent security problems.
  • Created a button to delete this files directly in the plugin, you can delete one by one or you can do a bulk delete.



  • After upload, CSV file is deleted in order to prevent security issues.


  • Thanks to idealien for telling us that we should check also if user exist using email (in addition to user login). Now we do this double check to prevent problems with users that exists but was registered using another user login. In the table we show this difference, the login is not changed, but all the rest of data is updated.


  • Bug in image fixed
  • Title changed


  • Warning with sends_mail parameter fixed
  • Button to donate included


  • Screenshot updated, now it has the correct format. Thank to gmsb for telling us the problem with screenshout outdated


  • Thanks to @jRausell for solving a bug with a count and an array


  • WooCommerce fields integration into profile
  • Duplicate fields detection into profile
  • Thanks to @derwentx to give us the code to make possible to include this new features


  • This is the biggest update in the history of this plugin: mails and passwords generation have been added.
  • Thanks to @jRausell to give us code to start with mail sending functionality. We have improved it and now it is available for everyone.
  • Mails are customizable and you can choose
  • Passwords are also generated, please read carefully the documentation in order to avoid passwords lost in user updates.


  • Extra format check done at the start of each row.


  • Thanks to twmoore3rd we have created a system to detect email collisions, username collision are not detected because plugin update metadata in this case


  • Thanks to Graham May we have fixed a problem when meta keys have a blank space and also we have improved plugin security using filter_input() and filter_input_array() functions instead of $_POSTs


  • From this version, plugin can both insert new users and update new ones. Thanks to Nick Gallop from Weston Graphics.


  • Donation button added.


  • Fixed problems with \n, \r and \n\r inside CSV fields. Thanks to Ted Stresen-Reuter for his help. We have changed our way to parse CSV files, now we use SplFileObject and we can solve this problem.
  • Not yet


  • Import users from a CSV easily
  • And also extra profile information with the user meta data (included in the CSV with your custom fields)
  • Just upload the CSV file (one included as example)
  • All your users will be created/updated with the updated information, and of course including the user meta
  • Autodetect delimiter compatible with comma ,, semicolon ; and bar |


Once the plugin is installed you can use it. Go to Tools menu and there, there will be a section called Insert users from CSV. Just choose your CSV file and go!

**CSV generation**

You can generate CSV file with all users inside it, using a standar spreadsheet software like: Microsoft Excel, LibreOffice Calc, OpenOffice Calc or Gnumeric.

You have to create the file filled with information (or take it from another database) and you will only have to choose CSV file when you "Save as..." the file. As example, a CSV file is included with the plugin.

**Some considerations**

Plugin will automatically detect:

  • Charset and set it to UTF-8 to prevent problems with non-ASCII characters.
  • It also will auto detect line-ending to prevent problems with different OS.
  • Finally, it will detect the delimiter being used in CSV file ("," or ";" or "|")




  • From this version, plugin can both insert new users and update new ones. Thanks to Nick Gallop from Weston Graphics.


  • Donation button added.


  • Fixed problems with \n, \r and \n\r inside CSV fields. Thanks to Ted Stresen-Reuter for his help. We have changed our way to parse CSV files, now we use SplFileObject and we can solve this problem.



  • You can import now user_registered but always in the correct format Y-m-d H:i:s



  • Problem solved appeared in 1.1.3: sometimes array was not correctly managed.


  • As fgetscsv() have problems with non UTF8 characters we changed it and now we had problems with commas inside fields, so we have rewritten it using str_getcsv() and declaring the function in case your current PHP version doesn't support it.


  • fgetscsv() have problems with non UTF8 characters, so we have changed it for fgetcsv() thanks to a hebrew user who had problems.


  • Some bugs found and solved managing custom columns after 1.1.0 upgrade.
  • If you have problems/bugs about custom headers, you should deactivate the plugin and then activate it and upload a CSV file with the correct headers again in order to solve some problems.


  • WordPress user profile default info is now saved correctly, the new fields are: "user_nicename", "user_url", "display_name", "nickname", "first_name", "last_name", "description", "jabber", "aim" and "yim"
  • New CSV example created.
  • Documentation adapted to new functionality.


  • Bug with some UTF-8 strings, fixed.


  • The list of roles is generated reading all the roles avaible in the system, instead of being the default always.


  • Issue: admin/super_admin change role when file is too large. Two checks done to avoid it.


  • Issue: Problems detecting extension solved (array('csv' => 'text/csv') added)


  • Issue: Existing users role change, fixed


  • First release

Requires WordPress version: 3.4 or higher

Compatible up to: 4.7.2

Last Updated 08 Feb 2017

Date Added: 14 Jul 2014

Plugin Homepage


4.8 stars
80 ratings


Not Enough Data

Works: 0
Broken: 0