Title: Import and export users and customers
Author: Javier Carazo
Published: <strong>July 14, 2014</strong>
Last modified: July 29, 2026

---

Search plugins

![](https://ps.w.org/import-users-from-csv-with-meta/assets/banner-772x250.png?rev
=1307543)

![](https://ps.w.org/import-users-from-csv-with-meta/assets/icon-256x256.png?rev
=1174343)

# Import and export users and customers

 By [Javier Carazo](https://profiles.wordpress.org/carazo/)

[Download](https://downloads.wordpress.org/plugin/import-users-from-csv-with-meta.2.4.8.zip)

 * [Details](https://wordpress.org/plugins/import-users-from-csv-with-meta/#description)
 * [Reviews](https://wordpress.org/plugins/import-users-from-csv-with-meta/#reviews)
 *  [Installation](https://wordpress.org/plugins/import-users-from-csv-with-meta/#installation)
 * [Development](https://wordpress.org/plugins/import-users-from-csv-with-meta/#developers)

 [Support](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/)

## Description

**Try it out on your free dummy site: Click here => [https://demo.tastewp.com/import-users-from-csv-with-meta](https://demo.tastewp.com/import-users-from-csv-with-meta)**

Import, export and migrate WordPress users and WooCommerce customers from a CSV 
file. Bulk-create or update thousands of users in seconds, schedule automatic recurring
imports from a local file or URL, and carry over roles, passwords and any custom
meta field. Works with WooCommerce, BuddyPress, Advanced Custom Fields, Paid Membership
Pro, WooCommerce Memberships, WooCommerce Subscriptions and many more.

 * Import CSV file with users directly to your WordPress or customers into WooCommerce
 * Import thousands of users or customers in only some seconds
 * Export users or customers to a CSV file, filtering by role or registered date
 * You can also import meta-data like data from WooCommerce customers
 * You can assign roles while importing.
 * Send a mail to every new user, this mails can be saved as templates and are fully
   customizable, before sending you can test it
 * You can also update users if the user is already in your WordPress
 * 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)
 * Extend the plugin using the hooks we provide
 * Compatible with WPML [read the documentation](https://wpml.org/documentation/plugins-compatibility/import-users-from-csv-with-meta-and-wpml/)
   to see how you can translate the front-end import and export users page and send
   translated email notifications to users

Moreover this plugin is compatible with many other plugins to be able to import 
and include them data, subscriptions, memberships, etc. Take a look:

 * WooCommerce: to import the customer data
 * WooCommerce Memberships: to import memberships
 * WooCommerce Subscriptions: to create subscriptions associated with users while
   they are being imported
 * BuddyPress: to import custom BuddyPress avatars, fields, groups and roles
 * Advanced Custom Fields: to import data to the fields you define there
 * Paid Membership Pro: to import memberships, included compatibility with PMPro
   version 3
 * Indeed Ultimate Membership Pro: to import memberships
 * Paid Member Subscriptions: to import memberships
 * Allow Multiple Accounts: plugin will allow the same rules importing than this
   plugin
 * Groups: to assign users to groups while importing
 * New User Approve: you can import users and approbe/wait for approve them
 * Users Group: to assign users to groups while importing
 * WP LMS Course: to enroll users in the courses while importing
 * WP Members: to import memberships
 * WP Users Group: to assign users to groups while importing
 * WooCommerce Membership by RightPress: to create memberships while users are being
   imported
 * WP Private Content Plus: To import and export the groups to which users are assigned

If you have some problem or doubt:

 * Read our documentation
 * Ask anything in support forum, we try to give the best support

### **Common use cases**

 * Migrate users from one WordPress site to another
 * Bulk create or update WooCommerce customers from a spreadsheet
 * Sync users automatically from an external CRM or ERP via CSV
 * Onboard members to a membership site (Paid Membership Pro, WooCommerce Memberships)
 * Periodically import subscribers or students from an external list
 * Import users from the frontend using a shortcode

### **Usage**

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

### Other plugins by Codection

 * [RedSys Gateway for WooCommerce Pro](https://codection.com/producto/redsys-gateway-for-woocommerce)(
   premium)
 * [Ceca Gateway for WooCommerce Pro](https://codection.com/producto/ceca-gateway-for-woocommerce-pro/)(
   premium)
 * [RedSys Gateway for Contact Form 7](https://codection.com/producto/redsys-gateway-for-contact-form-7/)(
   premium)
 * [Ceca Gateway for Contact Form 7](https://codection.com/producto/ceca-gateway-for-contact-form-7/)(
   premium)
 * [RedSys & Bizum Gateway for Gravity Forms](https://codection.com/plugin/redsys-bizum-gateway-for-gravity-forms/)(
   premium)
 * [RedSys & Bizum Gateway for WPForms](https://codection.com/plugin/redsys-gateway-for-wpforms/)(
   premium)
 * [RedSys & Bizum for GiveWP](https://codection.com/plugin/redsys-bizum-for-givewp/)(
   premium)
 * [RedSys Link Generator](https://codection.com/plugin/redsys-link-generator/) (
   premium)
 * [RedSys & Bizum Gateway for EDD Pro](https://codection.com/plugin/redsys-gateway-for-edd-pro/)(
   premium)
 * [RedSys Gateway for WP Booking Calendar Pro](https://codection.com/producto/redsys-gateway-for-wp-booking-calendar-pro/)(
   premium)
 * [Clean Login](https://wordpress.org/plugins/clean-login/) (free)
 * [Products Restricted Users for WooCommerce](https://wordpress.org/plugins/woo-products-restricted-users/)(
   free)
 * [First payment date for WooCommerce Subscriptions](https://wordpress.org/plugins/first-payment-date-for-woocommerce-subscriptions/)(
   free)
 * [Payment Schedule for WooCommerce Subscriptions](https://import-wp.com/payment-schedule-for-woocommerce-subscriptions)(
   premium)

## Screenshots

[⌊Import dialog⌉⌊Import dialog⌉[

Import dialog

[⌊Recurring import dialog⌉⌊Recurring import dialog⌉[

Recurring import dialog

[⌊Export dialog⌉⌊Export dialog⌉[

Export dialog

[⌊File sample⌉⌊File sample⌉[

File sample

[⌊Extra profile information (user meta)⌉⌊Extra profile information (user meta)⌉[

Extra profile information (user meta)

## Installation

### **Installation**

 * Install **Import and export users and customers** 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.

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.

Please read documentation before start using this plugin.

## FAQ

### Can I import users from an Excel or LibreOffice file?

The plugin natively supports CSV files. If you need to import directly from Excel(
XLSX, XLS) or LibreOffice (ODS) files without converting them first, the [File Formats Addon](https://import-wp.com/plugins/file-formats-addon/)
adds support for those formats.

### What format should my CSV file be?

You should fill the first two columns with the next values: Username, Email.

The next columns are totally customizable and you can use whatever you want. All
rows must contains same columns. User profile will be adapted to the kind of data
you have selected. If you want to disable the extra profile information, please 
deactivate this plugin after make the import.

### Can I import users by their WordPress ID?

You can use a column called id in order to make inserts or updates of an user using
the ID used by WordPress in the wp_users table. We have two different cases:

 * If id doesn’t exist in your users table: WordPress core does not allow us insert
   it, so it will throw an error of kind: invalid_user_id
 * If id exists: plugin check if username is the same, if yes, it will update the
   data, if not, it ignores the cell to avoid problems

### Passwords

We can use a column called “Password” to manage a string that contains user passwords.
We have different options for this case:

 * If you don’t create a column for passwords: passwords will be generated automatically
 * If you create a column for passwords: if cell is empty, password won’t be updated;
   if cell has a value, it will be used

### Serialized data

Plugin can import serialized data. You have to use the serialized string directly
in the CSV cell in order the plugin will be able to understand it as an serialized
data instead as any other string.

### Lists

Plugin can import lists as an array. Use this separator: :: two colons, inside the
cell in order to split the string in a list of items.

### WordPress default profile data

You can use those labels if you want to set data adapted to the WordPress default
user columns (the ones who use the function wp_update_user)

 * user_nicename: A string that contains a URL-friendly name for the user. The default
   is the user’s username.
 * user_url: A string containing the user’s URL for the user’s web site.
 * display_name: A string that will be shown on the site. Defaults to user’s username.
   It is likely that you will want to change this, for both appearance and security
   through * obscurity (that is if you don’t use and delete the default admin user).
 * nickname: The user’s nickname, defaults to the user’s username.
 * first_name: The user’s first name.
 * last_name: The user’s last name.
 * description: A string containing content about the user.
 * jabber: User’s Jabber account.
 * aim: User’s AOL IM account.
 * yim: User’s Yahoo IM account.
 * user_registered: Using the WordPress format for this kind of data Y-m-d H:i:s.

### Multiple imports

You can upload as many files as you want, but all must have the same columns. If
you upload another file, the columns will change to the form of last file uploaded.

### Export

You can export a file with all your users data using “Export” tab. There you will
be able to find some filters and options to prepare your export.

### Hooks: actions and filter

If you want to extend this plugin or use this plugin with any other, [here you have a list with all hooks available in the plugin](https://codection.com/import-users-csv-meta/listado-de-hooks-de-import-and-exports-users-and-customers/).

### This plugin saved me a lot of time and work. Where can I donate?

Thanks, donations help us to continue improving our plugins and allow us to give
the best support in the forums [Donate Here via PayPal.](https://codection.com/go/donate-import-users-from-csv-with-meta/)

### I’m not sure I will be able to import all users with correct data and roles. Will you do it for me?

Of course! In Codection we help you to import, migrate, synchronized, update or 
any other operation you will need to do with your users. Contact us at contacto@
codection.com for more information.

### Free and premium support

You can get:

 * Free support [in WordPress forums](https://wordpress.org/support/plugin/import-users-from-csv-with-meta)
 * Premium support [writing directly to contacto@codection.com](https://wordpress.org/plugins/import-users-from-csv-with-meta/contacto@codection.com?output_format=md).

### Customizations, addons, develops…

[Write us directly to contacto@codection.com](https://wordpress.org/plugins/import-users-from-csv-with-meta/contacto@codection.com?output_format=md).

### Can I migrate users from another WordPress site?

Yes. Export users from your old site using the Export tab, then import the resulting
CSV into your new site. Hashed passwords can be transferred using the user_pass 
column so users keep their existing passwords without needing to reset them.

### Can I bulk create WooCommerce customers?

Yes. Add WooCommerce billing and shipping fields as columns in your CSV (e.g. billing_first_name,
billing_email, shipping_address_1) and the plugin will populate them automatically
when importing users with the customer role.

### Can I import users with custom fields (ACF, BuddyPress, etc.)?

Yes. The plugin has addons for Advanced Custom Fields, BuddyPress/BuddyBoss, Paid
Membership Pro, WooCommerce Memberships, WooCommerce Subscriptions and many others.
Custom meta fields not covered by an addon can still be imported by using the meta
key as the column header.

### Can I import users without an email address?

By default WordPress requires an email for every user. If you need to import users
without one, the [Allow No Email Addon](https://import-wp.com/plugins/allow-no-email-addon/)
removes that requirement.

### Can I update existing users without creating duplicates?

Yes. The plugin checks for existing users by username and email before inserting.
If a match is found the user is updated instead of created. You can also control
whether passwords and roles are overwritten on update.

### Can I schedule automatic exports?

Scheduled exports are available via the [Recurring Export Addon](https://import-wp.com/plugins/recurring-export-addon/).
It lets you configure periodic CSV exports of your users or WooCommerce customers
and send them to a file path or remote destination automatically.

### Can I schedule automatic imports?

Yes. The Recurring Import tab lets you configure a periodic import from a file path
or URL. The plugin will fetch and process the CSV automatically at the chosen interval(
hourly, daily, weekly, etc.) without any manual action.

The free version supports one recurring import task. If you need multiple simultaneous
scheduled imports — each with its own file, interval, role and settings — the [Recurring Import Addon](https://import-wp.com/plugins/recurring-import-addon/)
removes that limitation.

### Can I sync users from an external system or CRM?

Yes. Point the recurring import at a URL that your external system generates and
the plugin will pull and process it on every scheduled run, keeping your WordPress
users in sync automatically.

### How can I report security bugs?

You can report security bugs through the Patchstack Vulnerability Disclosure Program.
The Patchstack team help validate, triage and handle any security vulnerabilities.
[Report a security vulnerability.](https://patchstack.com/database/vdp/import-users-from-csv-with-meta)

## Reviews

![](https://secure.gravatar.com/avatar/556c2b1807d9e3435fe5bb7573a12337b6644b8317f1a834ffafce422650c009?
s=60&d=retro&r=g)

### 󠀁[Does the job](https://wordpress.org/support/topic/does-the-job-1095/)󠁿

 [kentsmythe](https://profiles.wordpress.org/kentsmythe/) June 8, 2026 1 reply

The plugin did exactly what I needed. Support was quick and friendly. Solved my 
one issue immediately.

![](https://secure.gravatar.com/avatar/7160cd6500153b16c91f50d6c3ca28c0ba86c701936a2b18167d1348430bd49b?
s=60&d=retro&r=g)

### 󠀁[Simple to use, gives you what you need](https://wordpress.org/support/topic/simple-to-use-gives-you-what-you-need/)󠁿

 [pendle666](https://profiles.wordpress.org/pendle666/) May 28, 2026 1 reply

I was having an issue with some settings for users, and all I wanted was a list 
of all my users and what each setting was. Although it gave me loads of columns,
I found what I was looking for and was able to do my changes without having to look
at each individual user.

![](https://secure.gravatar.com/avatar/09d2cb8e8b41f83a28ae77068281debae46d8eaed20f49f792443d0f24e88bcd?
s=60&d=retro&r=g)

### 󠀁[Great plugin, great support](https://wordpress.org/support/topic/great-plugin-great-support-2050/)󠁿

 [felixsh](https://profiles.wordpress.org/felixsh/) May 12, 2026 1 reply

This plugin is very useful and works well for our user import workflow.The developer
was very helpful, responsive, and open to feedback. It is great to see that the 
plugin is actively maintained and improved. Looking forward to using it in the future.
Thanks Javier! 🙂

![](https://secure.gravatar.com/avatar/ce7de2aeeaf07a90fd1debf7f64532afc00a104b7785f5026d9d7bbccc66eddc?
s=60&d=retro&r=g)

### 󠀁[Still working great after many years](https://wordpress.org/support/topic/still-working-great-after-many-years/)󠁿

 [wpnovice2](https://profiles.wordpress.org/wpnovice2/) September 11, 2025 1 reply

I’ve used this for years, importing classlists and updating classlists each term
with my courses. Lots of detailed options, I haven’t tried them all, but the ones
I have used have all worked well, especially related to user roles and custom fields.

![](https://secure.gravatar.com/avatar/1fca11611076a5635b6454e6d073bf3593128bb37880802c88ee82d57821097c?
s=60&d=retro&r=g)

### 󠀁[Successfully imported 1000+ users!](https://wordpress.org/support/topic/successfully-imported-1000-users/)󠁿

 [Arischvaran Puvanesvaran](https://profiles.wordpress.org/arisch24/) June 25, 2025
1 reply

Used this on a client site, since WP All Import Export free version is actually 
not “free” at all. It even managed to import the custom roles that I created using
the Members plugin. Thanks for the great work!

![](https://secure.gravatar.com/avatar/4f663381455397bdc46cb4f585145f1ea9d2cbe24686ffabdc07ab5b567c86e6?
s=60&d=retro&r=g)

### 󠀁[Seamlessly imported (and edited) 900+ users with many custom fields!](https://wordpress.org/support/topic/seamlessly-imported-and-edited-900-users-with-many-custom-fields/)󠁿

 [Paolo Beccari](https://profiles.wordpress.org/paolobeccari/) June 17, 2025 1 reply

I had to transfer 900+ users of an old website (not WP), furthermore the target 
project is full of custom fields, extra user roles and further data. After exporting
some test users on a CSV file I checked and edited all the field names in order 
to match my new WP website structure.The final import of all 900+ users was quick
and precise.Everything smooth like oil. Anything you can imagine to export on a 
CSV file can be easily imported into WP, you just need to be very precise and careful
with the names of the columns you need to import.Just remember: username and email
columns MUST be the first ones in any import file!

 [ Read all 256 reviews ](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/)

## Contributors & Developers

“Import and export users and customers” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ Javier Carazo ](https://profiles.wordpress.org/carazo/)

“Import and export users and customers” has been translated into 9 locales. Thank
you to [the translators](https://translate.wordpress.org/projects/wp-plugins/import-users-from-csv-with-meta/contributors)
for their contributions.

[Translate “Import and export users and customers” into your language.](https://translate.wordpress.org/projects/wp-plugins/import-users-from-csv-with-meta)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/import-users-from-csv-with-meta/),
check out the [SVN repository](https://plugins.svn.wordpress.org/import-users-from-csv-with-meta/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/import-users-from-csv-with-meta/)
by [RSS](https://plugins.trac.wordpress.org/log/import-users-from-csv-with-meta/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.4.8

 * Fix: email matching during import (`maybe_update_email()`) now normalizes both
   the stored and CSV emails with `strtolower(trim())` before comparing, so a case
   difference (e.g. `John.Doe@Example.com` vs `john.doe@example.com`) no longer 
   triggers a false “email changed” event, unnecessary `wp_update_user()` calls,
   or duplicate account creation
 * Improvement: when the plugin creates a new account because the CSV email didn’t
   match an existing user (the `create` update-emails option), the new account’s
   username is now derived from the row’s `first_name`/`last_name` when available(
   e.g. `JohnDoe`, with `JohnDoe2`, `JohnDoe3`… on collision) instead of always 
   falling back to an opaque `duplicated_username_XXXXXX` login
 * Improvement: the BuddyPress/BuddyBoss `bp_member_type` CSV column is now matched
   case-insensitively against the header row, consistent with how `password`/`user_pass`
   are already matched
 * Docs: documented the BuddyPress/BuddyBoss `bp_member_type` (Profile Type) import/
   export column, which was previously undocumented in the in-plugin help text

#### 2.4.7

 * Fix: the `role` column now correctly trims leading/trailing spaces from each 
   comma-separated value (e.g. `executive_member, tracker_exclude`). The previous
   code called `array_walk( $roles_cells, 'trim' )`, which is a no-op because `trim()`
   does not modify its argument by reference, so roles with a stray space (as commonly
   added by spreadsheet tools like Google Sheets) were silently treated as invalid
   and ignored
 * Fix: the Groups add-on (`group_id`/`group_name` columns) now also trims each 
   comma-separated value before matching it against an existing group, avoiding 
   the same issue when assigning multiple groups per user

#### 2.4.6

 * Security fix: custom profile field values (Tools > Show fields in profile) are
   now sanitized with `sanitize_text_field()` before being stored as user meta in`
   save_extra_user_profile_fields()`, closing a stored XSS vector where a low-privileged
   user (e.g. Subscriber) could stash an HTML/JS payload in a custom column (reported
   by Luca Laytynher (LyT))
 * Security fix: the CSV export “Some values have been altered” results notice now
   escapes the user id, column key and value with `esc_html()` before being rendered,
   preventing a stored XSS payload from executing in the administrator’s browser
   via `export.js`‘s `.html()` insertion (reported by Luca Laytynher (LyT))

#### 2.4.5

 * Security fix: the BuddyPress/BuddyBoss `bp_avatar` CSV import no longer falls
   back to a raw `file_get_contents()` call for values that are neither a numeric
   attachment ID nor an `http(s)` URL, closing an arbitrary local file read / PHP
   stream wrapper vector (e.g. `file:///etc/passwd`, `php://filter`) (reported by
   Binesh Madharapu)
 * Security fix: the `bp_avatar` remote URL fetch now disables automatic redirect
   following and re-validates every redirect hop against the same SSRF blocklist
   used for the initial URL, preventing an attacker-hosted URL from bypassing the
   gate via a 3xx redirect to an internal or cloud metadata address (reported by
   Binesh Madharapu)

#### 2.4.4

 * Security fix: the BuddyPress/BuddyBoss `bp_avatar` CSV import now also rejects
   link-local (`169.254.0.0/16`), carrier-grade NAT (`100.64.0.0/10`, `198.18.0.0/
   15`) and other private IP ranges after resolving the URL’s host, closing the 
   remaining part of the SSRF where `wp_safe_remote_get()` alone still allowed requests
   to the cloud metadata endpoint `169.254.169.254` (reported by Binesh Madharapu)

#### 2.4.3

 * Security fix: the BuddyPress/BuddyBoss `bp_avatar` CSV import now fetches remote
   URLs with `wp_safe_remote_get()` instead of `file_get_contents()`, preventing
   a Server-Side Request Forgery that let an admin-supplied URL make the server 
   request internal hosts, cloud metadata endpoints, or scan internal ports (reported
   by Binesh Madharapu)
 * Security fix: the manual importer’s `path_to_file` field (Tools > Import and 
   export users and customers) now requires a local path to have a `.csv` extension
   and to resolve inside the WordPress uploads directory, closing an arbitrary file
   read that allowed reading server files such as `/etc/hosts`, logs or config files(
   reported by Centesiman)

#### 2.4.2

 * Security fix: added `current_user_can('promote_users')` check (plus filtering
   against the actor’s editable roles) before applying any role during import, preventing
   a user with only `create_users` from creating or promoting an account to Administrator
 * Security fix: added `current_user_can('edit_user', $user_id)` check before the
   raw `user_pass` hash and any other `wp_users` core field (e.g. `user_email`) 
   reach the database for an existing user during import
 * Security fix: added `current_user_can('edit_user', $user_id)` check before an
   existing user’s email is changed via `wp_update_user()` when updating users by
   matching username

#### 2.4.1

 * Security fix: the `acui_email_template_selected` AJAX handler now requires `edit_others_posts`(
   filterable via `acui_capability`) and verifies the requested post’s `post_type`
   is `acui_email_template`, preventing a low-privilege authenticated user (e.g.
   Subscriber) from using the endpoint to read the title/content of arbitrary posts,
   including drafts and private posts, by ID
 * Security fix: added the same capability check to `acui_refresh_enable_email_templates`
   AJAX handler
 * Security fix: the `codection-security` AJAX nonce is no longer generated on admin
   screens the current user isn’t allowed to act on

#### 2.4

 * Security fix: added `current_user_can('edit_user', $user_id)` check before every`
   wp_set_password()` call during import, preventing a user with `create_users` 
   access from resetting passwords of accounts they are not authorised to edit
 * Security fix: DataTables (2.2.2) and Select2 (4.1.0-rc.0) are now bundled locally
   in the plugin’s assets directory instead of being loaded from external CDNs, 
   eliminating the dependency on cdn.datatables.net and cdn.jsdelivr.net in wp-admin

#### 2.3.9

 * Fixed fatal error “array_intersect(): Argument #1 must be of type array, bool
   given” in async cron step 2+ when the roles_appeared transient had expired

#### 2.3.8

 * Fixed batch import stopping after 99 users instead of 100 in the first step (
   header row was counted against the batch limit)
 * Fixed “Row does not have the same columns as the header” errors in steps 2+ when
   transient data was lost (cache flush, plugin conflict): header is now re-read
   from the CSV file as a fallback
 * Fixed PHP warnings for undefined array keys “errors” in helper.php (line 211)
   and foreach on bool in helper.php (line 362) caused by expired transients returning
   false

#### 2.3.7

 * Fixed fatal error in Advanced Custom Fields addon when a multiple-value field
   already arrives as an array instead of a string (explode() type error)

#### 2.3.6

 * Redesigned the Log tab: import results are now shown as visual summary cards (
   Processed / Created / Updated / Deleted / Issues) at the top of the page
 * Unified the live import view and the Log tab: both now use the same card layout
   so the experience is consistent
 * The Issues card turns amber in real time while errors are found during import
 * Errors, warnings and notices are displayed in a collapsible section with colour-
   coded badges per type (error, warning, notice)
 * The import rows table is now collapsed by default in the Log tab to keep the 
   page clean; DataTables initialises lazily when the section is expanded
 * Backward-compatible: existing logs stored in the old format continue to render
   correctly

#### 2.3.5

 * Fixed a bug where the export shortcode ignored the columns attribute when field
   names contained spaces (e.g. BuddyBoss xProfile fields with multi-word names)

#### 2.3.4

 * Log tab now has two sub-tabs: Backend (last manual import) and Recurring (last
   recurring import)
 * Recurring import results are now saved separately and displayed independently
   from manual import results
 * Log options use autoload false to avoid loading large HTML on every page load
 * Added self-healing mechanism: if the recurring import task is dropped from Action
   Scheduler (e.g. after a database cleanup or plugin update), it is automatically
   rescheduled on the next admin page load

#### 2.3.3

 * Improved compatibility with PHP 8.x
 * New checkbox in every user to exclude from export

#### 2.3.2

 * Improved date visualization
 * Recurring import health status now shows whether an import task is currently 
   running in the background

#### 2.3.1

 * Fixed an error in cron execution

#### 2.3

 * Ready for WordPress 7.0
 * UI improved
 * New settings in cron tab

#### 2.2.3

 * Fixed a cron execution issue where the user who configured the cron task was 
   not the one executing the cron import

#### 2.2.2

 * Security issues fixed

#### 2.2.1

 * Added a health status sidebar to the Cron tab showing whether the task is registered
   in Action Scheduler, the next scheduled run time, and the outcome of the last
   execution

#### 2.2

 * New “Execution log” sub-tab under Import  Recurring that shows the history of
   the last 100 recurring import executions (date, file, users created/updated/deleted/
   ignored, errors, steps)
 * Fixed a bug where download errors from URL-based CSV files showed an undefined
   variable instead of the actual error message
 * Fixed recurring import incorrectly allowing email updates on existing users due
   to a mismatched form key (`allow_update_emails` vs `update_emails_existing_users`)
 * Fixed `maybe_enable_wordpress_core_emails` never actually re-enabling the filters,
   because anonymous closures cannot be removed with `remove_filter`
 * Fixed batch transients being shared across concurrent imports (manual + cron 
   running simultaneously could corrupt each other’s data); each cron execution 
   now uses an isolated session key
 * Increased batch transient TTL from 15 to 60 minutes to reduce the risk of expiry
   on large imports
 * Added null-safety guards when loading batch transients in step 2+, preventing
   fatal errors if a transient had expired
 * The `ignored` user count is now tracked in the results array and propagated correctly
   across batch steps

#### 2.1.1

 * Fixed a bug that prevented the “Apply only to users previously imported by this
   plugin” option from being saved
 * Fixed a problem with the width of a select field

#### 2.1

 * Redesigned admin UI: import and export tabs reorganised with secondary navigation,
   accordion-style import form, and improved sidebar
 * New option to apply “users not present in CSV” actions only to users previously
   imported by this plugin

#### 2.0.10

 * Fixed an error in standard import

#### 2.0.9

 * Fixed two security issues

#### 2.0.8

 * Fixed an issue when choosing to move the file after import in the cron tab

#### 2.0.7

 * An issue with the cron import task has been resolved; now, each step processes
   100 rows or runs for 29 seconds by default

#### 2.0.6

 * Fixed an error, included a file in the trunk

#### 2.0.5

 * Fixed an issue where Action Scheduler hooks interfered with automatic imports
   and plugin deactivation

#### 2.0.4

 * Included a way to change time limit and batch size from wp-config without generating
   an error

#### 2.0.3

 * Fixed a problem showing errors, warnings and notices when the CSV file was small

#### 2.0.2

 * Fixed a problem in cron import
 * The plugin will now never change the password of the user uploading the file,
   to prevent the user from accidentally being logged out

#### 2.0.1

 * Improved compatibility with PHP 8.x
 * New hooks added

#### 2.0

 * Importing is now performed in steps, allowing files of any size to be processed.
 * Datatables have been added to some tables to improve the UX.
 * The Action Scheduler library has been updated to the latest version.
 * Hooks that did not follow the acui_ naming pattern have been renamed to comply
   with it.
 * When selecting columns to export, any extra spaces between column names are ignored
   to prevent issues when retrieving the meta key.
 * Improved security.

#### 1.29.7

 * Ready for WordPress 6.9

#### 1.29.6

 * Fixed a warning

#### 1.29.5

 * New hooks added to allow to define users that should never be deleted or their
   role changed

#### 1.29.4

 * Documentation improved

#### 1.29.3

 * Fixed a problem when exporting in the frontend
 * Fixed a problem when saving settings of the export in the backend

#### 1.29.2

 * Fixed a problem when deleting users

#### 1.29.1

 * Fixed a problem when exporting in the frontend

#### 1.29

 * Fixed a problem when exporting a huge list of users when the process was stopped
   without finishing and an attempt was made to restart
 * Improved the performance of the export
 * Improved compatibility with latest versions of PHP

#### 1.28.6

 * Bug fixed, included the new file in the repository

#### 1.28.5

 * Ready for WordPress 6.8
 * Improved GUI with a new tab with the old CSV uploaded info

#### 1.28.4

 * Fixed the export when selecting alphabetical order
 * Fixed a fatal error in certain imports using certain roles
 * Fixed a problem selecting no_role

#### 1.28.3

 * You can now choose to delete or change the role of users that do not appear in
   the CSV but only of the role(s) that have appeared in the import

#### 1.28.2

 * Fixed the export in the frontend using the shortcode when there is no role parameter

#### 1.28.1

 * Fixed a problem with select2 enqueue
 * Fixed the export in the frontend using the shortcode

#### 1.28

 * The export dialog now allows the use of several roles
 * Improved role selection interface on user import page

#### 1.27.16

 * PMPro addon now import startdate and enddate with hours, minutes and seconds 
   if needed

#### 1.27.15

 * Including the possibility of changing field names when exporting fields

#### 1.27.14

 * Fixed a problem with long exports created in the previous version

#### 1.27.13

 * The name of the exported file has been anonymized so that no attacker can brute
   force the file while it is being generated and before it is downloaded to obtain
   information

#### 1.27.12

 * Fixed the Melapress Login Security plugin, included compatibility with version
   2.0

#### 1.27.11

 * Fixed a bug that throws an error when trying to import an incomplete class to
   a user meta

#### 1.27.10

 * Fixed a bug that creates a warning

#### 1.27.9

 * Two new buttons have been added to the user window to access import and export
   directly

#### 1.27.8

 * Fixed another problem with the Melapress Login Security addon

#### 1.27.7

 * Ready for WordPress 6.7
 * Fixed a problem in the link of email template in main import tab
 * Action Scheduler now is only loaded if it is necessary
 * Fixed another problem with the Melapress Login Security addon

#### 1.27.6

 * Fixed a problem with the Melapress Login Security addon

#### 1.27.5

 * More variables sanitized

#### 1.27.4

 * Fixed a problem with some roles that were able to execute in backend but not 
   using the shortcode in frontend
 * Every export has an unique filename

#### 1.27.3

 * Fixed some warnings

#### 1.27.2

 * Improved the way the cron result log is shown
 * Fixed some typos

#### 1.27.1

 * New version of ActionScheduler included

#### 1.27

 * Improved many messages of the plugin, thanks to the great help from Pierre Darmon
   who has completely revised the plugin’s messages and helped us to make it more
   understandable and professional, for us non-native English speakers.
 * Fixed a problem that could create errors when trying to export data when there
   was a saved object

#### 1.26.10

 * Improved the compatibility with Google Docs/Drive spreadsheet exported as CSV

#### 1.26.9

 * CSVs are now never saved as WordPress attachments, even if they are later deleted,
   they are now read directly from temporary paths

#### 1.26.8

 * Ready for WordPress 6.6
 * Fixed a problem when the first row of an CSV contains symbols like :: that makes
   the plugin think this is an array

#### 1.26.7

 * Included new sanitization checks

#### 1.26.6.1

 * Readme updated

#### 1.26.6

 * Fixed a problem changing roles of users not present in current CSV using standard
   import
 * Included new checks

#### 1.26.5

 * New hooks added to improve extensibility with emails
 * Improved documentation in the BuddyPress/BuddyBoss addon

#### 1.26.4

 * Improved the BuddyPress/BuddyBoss addon to include a mechanism to facilitate 
   the calculation of the visibility of user fields that have been imported new

#### 1.26.3

 * We now use unserialize with the allowed_classes flag set to false instead of 
   maybe_unserialize to avoid any possibility of PHP code execution from CSV

#### 1.26.2

 * Improved usability with some links

#### 1.26.1

 * Ready for WordPress 6.5

#### 1.26

 * Included compatibility with version 3 of Paid Membership Pro
 * Included a new filter to filter a specific data in the export: acui_export_data_
   $key where $key is the specific value of the column for that value.

#### 1.25.2

 * Including a conditional check to prevent WooCommerce from being declared active
   if it is not active because it has been forcefully deactivated

#### 1.25.1

 * On the home page, for importing users we now show the buttons to start the process
   or save the settings at the top, to facilitate cases where the same options are
   used repeatedly

#### 1.25

 * You can now use multiple user download buttons on the front end. Each with its
   own options.

#### 1.24.8

 * Changed the way charsets are converted
 * Fixed a problem in select2 selector with AJAX call
 * Fixed an issue when passing the value of which user to assign tickets to when
   users are deleted

#### 1.24.7

 * Cron call using endpoint of REST-API now can only be done by users that can create
   users

#### 1.24.6

 * Included new options in the shortcode to export users

#### 1.24.5

 * Fixed a problem with a preg_match detecting commas

#### 1.24.4

 * Improved the way input strings are treated to UTF-8
 * Variables displayed in the shortcode are cleaned up before printing to allow 
   only correct values for them

#### 1.24.3

 * In the cron settings, when it comes to URLs or paths, if it comes to paths and
   any with a different ending than “.csv” is included, we return a blank string
   to avoid problems

#### 1.24.2

 * Fixed a problem when choosing to delete users not present in the CSV that caused
   more users to be deleted than it should

#### 1.24.1

 * Improved multisite support, multiple roles can now be added to sites instead 
   of just one as before

#### 1.24

 * Included ActionScheduler for cron task
 * Added the word ‘all’ to use in the column named ‘blogs’ in multisite installation,
   users it will be added to all the blogs in the network
 * Rewritten a large part of the user importer to improve the code and make it more
   modular and maintainable.
 * Improved compatibility with PHP 8.2
 * Fixed typos

#### 1.23.5

 * Ready for WordPress 6.4
 * New shortcode import-users, we keep the old one, import-users-from-csv-with-meta,
   to assure compatibility
 * Fixed an issue with the export users shortcode not working when the theme did
   not load jQuery in the front end
 * Including the possibility to choose a comma-separated list of user roles when
   using the export in the front end using a shortcode

#### 1.23.4

 * Replaced the blanks in the label identifiers in the “Custom profile fields” with
   underscores to make the generated identifiers valid, the identifiers are also
   converted to lowers
 * New option in export tab that allow you to export arrays as separated list of
   values, separated by commas; it will only work with: 1 dimension arrays with 
   correlative indexes that does not contain inside any WP_Error object
 * Save settings problem in Export tab fixed

#### 1.23.3

 * Export preferences are now saved when an export is executed
 * New button to save export preferences without having to run an export

#### 1.23.2

 * Fixed a problem that caused that in certain installations with some data when
   exporting, an error appeared that stopped the process.

#### 1.23.1

 * The plugin now supports reading external files directly created from Google Drive
   using export CSV option in URL

#### 1.23

 * The plugin now supports reading external files using a URL when a path is chosen
   for importing

#### 1.22.9

 * BuddyPress/BuddyBoss documentation improved
 * Advanced Custom Fields (ACF) addon now includes the ability of uploading images

#### 1.22.8

 * Fix a problem when importing BuddyPress/BuddyBoss data in some installation where
   the class BP_Groups_Member did not exists
 * New hook to be able to update users without mail

#### 1.22.7

 * Fix a problem when exporting users that ignores the convert timestamp to dates
   setting thanks to @little_bird for reporting
 * Improved the use of the ACUI_Helper with new methods that call directly the instance

#### 1.22.6

 * Now when you create a customer importing it, it will also appear in wc_customer_lookup
   table
 * Ready for WordPress 6.3

#### 1.22.5

 * Removed a duplicated hook thanks to @ko31
 * Ready for WordPress 6.2.2

#### 1.22.4

 * Fixed a bug in export when all columns were selected

#### 1.22.3

 * When choosing columns to export, the spaces at the beginning and end of each 
   chosen column are now removed to avoid problems such as “user_login, user_email”
   not returning data in the second column because the ” user_email” column did 
   not exist as such.

#### 1.22.2

 * Fixed a problem that appeared when you chose to delete users not present in the
   CSV and at the same time checked do not update users. Users that already existed
   were not updated and were not marked not to delete, so they were deleted incorrectly.

#### 1.22.1

 * Addon for MelaPress Login Security improved
 * Transient with users created, updated, deleted and ignored added after import

#### 1.22

 * Ready for WordPress 6.2
 * New addon for MelaPress Login Security, now when a user is registered and this
   plugin is activated, if the option of “Reset password in first login” of the 
   MelaPress Login Security is activated, it will be applied the same for new users
   imported as it were created manually
 * Changed delimiter to import checkbox values in BuddyPress/BuddyBoss, instead 
   of using commas, now the delimiter is ## to avoid problems with values that include
   commas

#### 1.21.7

 * New filter added to allow to override the default roles that cannot be updated
   by the plugin
 * Fixed problem that makes appears title “Extra profile information” when there
   were no fields to show

#### 1.21.6

 * Changed the way that BuddyBoss is detected in BuddyPress Addon to avoid problems
   with paths

#### 1.21.5

 * New hooks added in documentation
 * Documentation tab improved

#### 1.21.4

 * Included a new way to manage the passwordreseturl wildcard in emails

#### 1.21.3

 * Fixed warning about not defined default value in settings class
 * Now the date filter when exporting users is inclusive, so that the days selected
   in the search are included in the search and not excluded as before
 * Fixed a problem in export that sometimes generate problems different number of
   columns in headers and in every user
 * Fixed a problem with the keys to reset password of users included in the emails

#### 1.21.2

 * Improved compatibility with ACF, now the fields of type image or file, generate
   in the export a new field, with the suffix _url where to show the url of the 
   content and not only the identifier of the attachment in the database as before
   that was not representative.
 * Improved user interface

#### 1.21.1

 * Fixed a problem when sending email content, which caused the password to always
   appear as if it had not been changed even though it really had

#### 1.21

 * Export results included after export is done, including if some value has been
   altered because it can contains some spreadsheet formula characters at the beginning
 * You can use now all the wildcards in subjects that were available in body
 * Fixed some issues when exporting data using filtered columns, now source_user_id
   is filled correctly

#### 1.20.6

 * Fixed a problem with BuddyBoss when exporting users if groups were getting used

#### 1.20.5

 * Improved the way the plugin sanitize values when exporting data to avoid any 
   formula (for spreadsheets) to be exported

#### 1.20.4

 * Improved error handling to avoid the use of wp_die in some error handling and
   allow for better UX.

#### 1.20.3.1

 * When choosing a file to import in the frontend import, the name of the file appears,
   this is something that was lost in yesterday’s graphical improvement of this 
   part of the import

#### 1.20.3

 * Changed the way the button to choose files in the import from front end is displayed
   to make it easier to apply styles to it
 * Improved error detection when importing users from the front end

#### 1.20.2

 * Improved section on forcing password reset, including new explanations in the
   documentation and a tool to reset user data in case a redirection loop problem
   is encountered

#### 1.20.1

 * Fixed an issue that caused the new import screen to be displayed as part of the
   import results screen
 * Improved the way this plugin displays with the other WordPress export tools
 * Notice improved when an email exists in the system with other username

#### 1.20

 * New settings API in plugin
 * Settings API working in backend import (in other tabs it will be working in next
   versions)
 * Fixed a mispelling in texts
 * New hook to manage if a email is sent to an user (https://wordpress.org/support/
   topic/stop-sending-mail-for-a-specific-role/#post-15932034)

#### 1.19.3.1

 * Added a message when an email already exists in the system but is used by a different
   user than the one indicated in the CSV
 * Fixed error in documentation when WooCommerce Subscriptions was active

#### 1.19.3

 * Now you can choose to delete roles when importing (creating or updating) users
 * Fixed problem with select2.js in homepage tab

#### 1.19.2.7

 * Fixed issue in BuddyPress integration when exporting data

#### 1.19.2.6

 * Default values in select change to user the “safer” choice when assigning default
   values

#### 1.19.2.5

 * Ready for WordPress 6.0
 * Fixed a problem when no selecting a default role (https://wordpress.org/support/
   topic/default-role-and-update/#post-15626130) and roles was not being updated
 * Roles are now translated when showing

#### 1.19.2.4

 * Fixed a notice in the new user page if you are using custom fields created by
   the plugin

#### 1.19.2.3

 * Improved the WooCommerce addon when working with force reset new password

#### 1.19.2.2

 * Fixed an issue in the export function when using the BuddyPress addon and not
   all columns are exported.

#### 1.19.2.1

 * Escaped all exists to prevent any XSS execution after CSV import

#### 1.19.2

 * New hooks added to override the button text in both shortcodes import and export
 * New addon for WP Private Content Plus to import and export the groups to which
   users are assigned
 * Revised WPML support

#### 1.19.1.10

 * New hook added in export before deleting the file from the server

#### 1.19.1.9

 * Improved some labels to avoid misunderstandings with email options, thanks to@
   blakemiller

#### 1.19.1.8

 * Fixed warnings in “Meta keys” tab

#### 1.19.1.7

 * New hooks added to homepage tab to include more options using addons

#### 1.19.1.6

 * New hooks to filter username and password of every users being imported

#### 1.19.1.5

 * Improved BuddyBoss compatibility, now when we include class-bp-xprofile-group.
   php, we check if BuddyPress is the plugin active or BuddyBoss

#### 1.19.1.4

 * Changed appearence of some buttons in the right panel
 * Included new strings to localize

#### 1.19.1.3

 * Improved ACF addon, now you can use relationships with IDs in addition to slugs

#### 1.19.1.2

 * Fixed fatal error

#### 1.19.1.1

 * Fixed warning in screen with import results
 * Ko-fi donation link added

#### 1.19.1

 * Export now allow to choose which columns export also in “Export” tab and not 
   only in frontend

#### 1.19

 * New class to create diffent HTML elements to standarize plugin code
 * Different fixes in export function to avoid errors
 * New secondary tab section prepared

#### 1.18.4.4

 * Force version update

#### 1.18.4.3

 * New hook added: do_action( ‘acui_after_import_users’, $users_created, $users_updated,
   $users_deleted, $users_ignored ); with 3 variables passed with a list of user
   IDs with users created, updated, deleted and ignored in the process
 * Fixed bad error thrown when empty role was selected in error

#### 1.18.4.2

 * Fixed bug in batch_exporter when using PHP 8

#### 1.18.4.1

 * Fixed bug in batch_exporter that could create fatal errors on executing

#### 1.18.4

 * Improved problem when deleting users, if errors happens but they are notices,
   we can delete now. Many of the users who have problems with deleting users not
   present in CSV, was created by the old conditional that checked any kind of error(
   including notices).

#### 1.18.3

 * Problem solved converting data that has a format date but that is not wanted 
   to be converted, to timestamps when exporting
 * Fixed problems in standard import, in very big databases, there was a problem
   creating the list of users to assign deleted posts, now this list is created 
   and managed using select2 and AJAX to improve performance and usability

#### 1.18.2.3

 * Problem solved converting timestamps when exporting
 * If an error raise in the server while exporting, instead only showing the error
   in the console, we throws an alert to improve user experience

#### 1.18.2.2

 * Included a note to prevent misunderstandings when testing emails

#### 1.18.2.1

 * Tested up to 5.8.1
 * Fixed problem with roles export

#### 1.18.2

 * New hooks added to manage extra profile fields
 * Problem solved in BuddyPress addon

#### 1.18.1

 * Fixed problem after 1.18 when exporting users

#### 1.18

 * Export in backend and frontend now works using step by step process using client
   calls to avoid gateway timeouts and other kind of timing limits in very long 
   process
 * …

## Commercial plugin

This plugin is free but offers additional paid commercial upgrades or support. [View support](https://import-wp.com/)

## Meta

 *  Version **2.4.8**
 *  Last updated **3 days ago**
 *  Active installations **70,000+**
 *  WordPress version ** 5.5 or higher **
 *  Tested up to **7.0.2**
 *  Languages
 * [English (US)](https://wordpress.org/plugins/import-users-from-csv-with-meta/),
   [German](https://de.wordpress.org/plugins/import-users-from-csv-with-meta/), 
   [German (Austria)](https://de-at.wordpress.org/plugins/import-users-from-csv-with-meta/),
   [Japanese](https://ja.wordpress.org/plugins/import-users-from-csv-with-meta/),
   [Spanish (Argentina)](https://es-ar.wordpress.org/plugins/import-users-from-csv-with-meta/),
   [Spanish (Colombia)](https://es-co.wordpress.org/plugins/import-users-from-csv-with-meta/),
   [Spanish (Ecuador)](https://es-ec.wordpress.org/plugins/import-users-from-csv-with-meta/),
   [Spanish (Mexico)](https://es-mx.wordpress.org/plugins/import-users-from-csv-with-meta/),
   [Spanish (Spain)](https://es.wordpress.org/plugins/import-users-from-csv-with-meta/),
   and [Spanish (Venezuela)](https://ve.wordpress.org/plugins/import-users-from-csv-with-meta/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/import-users-from-csv-with-meta)
 * Tags
 * [bulk import](https://wordpress.org/plugins/tags/bulk-import/)[csv](https://wordpress.org/plugins/tags/csv/)
   [export users](https://wordpress.org/plugins/tags/export-users/)[import users](https://wordpress.org/plugins/tags/import-users/)
   [migrate users](https://wordpress.org/plugins/tags/migrate-users/)
 *  [Advanced View](https://wordpress.org/plugins/import-users-from-csv-with-meta/advanced/)

## Ratings

 4.7 out of 5 stars.

 *  [  225 5-star reviews     ](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/?filter=5)
 *  [  8 4-star reviews     ](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/?filter=4)
 *  [  9 3-star reviews     ](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/?filter=3)
 *  [  3 2-star reviews     ](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/?filter=2)
 *  [  11 1-star reviews     ](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/reviews/)

## Contributors

 *   [ Javier Carazo ](https://profiles.wordpress.org/carazo/)

## Support

Issues resolved in last two months:

     4 out of 4

 [View support forum](https://wordpress.org/support/plugin/import-users-from-csv-with-meta/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://codection.com/go/donate-import-users-from-csv-with-meta/)