WooCommerce no trae un exportador de clientes en el core (a diferencia de Shopify o PrestaShop). Necesitas plugin, WP CLI o entrar directamente a la base de datos. Estas son las tres vías, con sus pros y contras.

Opción 1: plugin gratis (recomendado para <10.000 clientes)

El más solvente es "Advanced Order Export For WooCommerce" (de AlgolPlus) — gratis, sin nag screens agresivos, exporta también pedidos si lo necesitas.

Instalación:

  1. WordPress admin → Plugins → Add New.
  2. Busca "Advanced Order Export For WooCommerce" y actívalo.
  3. Ve a WooCommerce → Export Orders.
  4. En "Format" elige CSV. En "Fields" cambia el modo a "Customers only" y selecciona first_name, last_name, email, phone, city, country, total_spent, order_count, last_order_date.
  5. Filtros: si quieres solo clientes que hayan comprado, marca "Only completed orders". Fecha desde/hasta si te interesa un rango.
  6. Preview para asegurarte de que no está vacío, luego Export.

Ventaja: te descarga solo clientes con al menos un pedido válido. Ideal para email marketing (evitas exportar los que se registraron pero nunca compraron).

Si prefieres otro plugin, "Users Insights" y "Import Export WordPress Users" también sirven. Evita los que se saltan filtros de estado del pedido — te acaban dando basura.

Opción 2: WP CLI (rápido para bases medianas)

Si tu hosting tiene WP CLI (SiteGround, Kinsta, WP Engine, y muchos VPS), es la vía más limpia:

wp user list --role=customer --format=csv \
  --fields=ID,user_email,user_registered,display_name \
  > customers.csv

Para incluir metadatos de WooCommerce (billing address, teléfono, total spent), necesitas cruzar con wp_usermeta. Un one-liner completo:

wp db query "
SELECT
  u.ID,
  u.user_email,
  u.user_registered,
  MAX(CASE WHEN um.meta_key='billing_first_name' THEN um.meta_value END) AS first_name,
  MAX(CASE WHEN um.meta_key='billing_last_name'  THEN um.meta_value END) AS last_name,
  MAX(CASE WHEN um.meta_key='billing_phone'      THEN um.meta_value END) AS phone,
  MAX(CASE WHEN um.meta_key='billing_city'       THEN um.meta_value END) AS city,
  MAX(CASE WHEN um.meta_key='billing_country'    THEN um.meta_value END) AS country
FROM wp_users u
LEFT JOIN wp_usermeta um ON um.user_id = u.ID
GROUP BY u.ID
" > customers.csv

Ajusta el prefijo wp_ si tu instalación usa otro (mira wp-config.php, línea \$table_prefix).

Opción 3: SQL desde phpMyAdmin (para bases grandes o si no tienes WP CLI)

Misma lógica que Opción 2, sin CLI. La query cambia si necesitas incluir stats de compra:

SELECT
  u.ID,
  u.user_email,
  u.user_registered,
  MAX(CASE WHEN um.meta_key='billing_first_name' THEN um.meta_value END) AS first_name,
  MAX(CASE WHEN um.meta_key='billing_last_name'  THEN um.meta_value END) AS last_name,
  MAX(CASE WHEN um.meta_key='billing_phone'      THEN um.meta_value END) AS phone,
  (SELECT COUNT(*) FROM wp_posts p
     WHERE p.post_type='shop_order'
       AND p.post_status IN ('wc-completed','wc-processing')
       AND p.ID IN (SELECT post_id FROM wp_postmeta WHERE meta_key='_customer_user' AND meta_value=u.ID)
  ) AS total_orders
FROM wp_users u
LEFT JOIN wp_usermeta um ON um.user_id = u.ID
GROUP BY u.ID
HAVING total_orders > 0;

Aviso: en WooCommerce 8.2+ con HPOS (High Performance Order Storage) activo, los pedidos están en wp_wc_orders en lugar de wp_posts. Comprueba antes con SHOW TABLES LIKE 'wp_wc_orders'.

En phpMyAdmin: pestaña Export → CSV → UTF-8 → separador , → strings entre ".

Errores comunes al exportar de WooCommerce

Clientes duplicados por invitado (guest checkout) — WooCommerce por defecto permite comprar sin registrarse. Los guests NO están en wp_users, solo en la meta del pedido. Si necesitas incluirlos, cambia el enfoque: exporta desde wp_postmeta con meta_key = '_billing_email'. Prevé duplicados masivos porque un guest que compró 3 veces aparece 3 veces.

Metadatos vacíos — no todos los clientes tienen billing_phone o billing_country (depende del checkout de tu tienda). Filtra por IS NOT NULL en tu importador o rellena vacíos.

Emails con espacios al final — bug clásico de importaciones antiguas. Antes de subir a Mailchimp/Klaviyo, aplica TRIM(email) en Sheets o usa un script.

Users con role distinto de "customer" — administradores, editores, shop_managers. Filtra por user.roles (WP CLI) o hazlo directo WHERE u.ID IN (SELECT user_id FROM wp_usermeta WHERE meta_key='wp_capabilities' AND meta_value LIKE '%customer%').

Qué revisar antes de importar en otra herramienta

Un CSV de WooCommerce arrastra 3 problemas que se ven poco pero cuestan mucho:

  • Emails muertos — tiendas WooCommerce llevan tiempo online (media 6+ años); una parte importante de la lista ya no responde a nada. Verificarlo antes de importar te ahorra pagar por ellos en Mailchimp/Klaviyo.
  • Duplicados guest + registered — el mismo cliente compró una vez como invitado y otra registrado; en el CSV aparecen dos veces con casi los mismos datos.
  • Emails de spam registrations — WooCommerce sin captcha en el registro acumula bots con dominios raros (.ru, .xyz, ProtonMail vía Tor).

Pásalo por ClearRows antes de importar. Gratis, 30 segundos, te dice cuántos hay de cada tipo y con qué proveedor de email marketing estás pagando de más.

Preguntas frecuentes

¿Cuál es el límite de tamaño para el export desde plugin? Depende del PHP max_execution_time y memory_limit de tu hosting. En hostings compartidos típicos (30s / 128MB), no pases de 5-10.000 clientes. En VPS o hosting cloud puedes llegar a 100.000+ sin problema.

¿El export incluye los que se dieron de baja del newsletter? Sí, WooCommerce no tiene un flag de "unsubscribed" por defecto — eso lo gestiona tu herramienta de email marketing. Todos los clientes registrados salen en el export.

¿Puedo exportar solo clientes con LTV > X€? Con la Opción 3 SQL sí, añadiendo HAVING SUM(order_total) > 100. También puedes hacerlo después en Sheets si el CSV incluye total_spent.

¿WooCommerce Bookings/Subscriptions exportan por separado? Sí. Los clientes están en wp_users igual, pero los pedidos de suscripción están en wp_posts con post_type = 'shop_subscription'. Ajusta la query si necesitas esa dimensión.


Lo que viene después del export

Ya tienes el CSV. Antes de subirlo a Mailchimp, Klaviyo o Brevo, mira qué te llevas.

Analiza tu CSV en ClearRows gratis en 30 segundos →

Sin registro, sin tarjeta, tu archivo se elimina en 24h.

ClearRows — Barcelona. Datos limpios, ventas reales.