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:
- WordPress admin → Plugins → Add New.
- Busca "Advanced Order Export For WooCommerce" y actívalo.
- Ve a WooCommerce → Export Orders.
- 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. - Filtros: si quieres solo clientes que hayan comprado, marca "Only completed orders". Fecha desde/hasta si te interesa un rango.
- 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.