Importa tus clientes desde Shopify directo a Google Sheets
En dos post anteriores ya hemos visto como conectarnos a Shopify, obtener datos y mostrarlos en una hoja de Google Sheets (Importa Data de Shopify a Google Sheets sin herramientas de pago) y también como filtrar los resultados agregando parámetros a la consulta (Agrega parámetros a tu query de importación de datos de Google Sheets a Shopify).
En este post veremos como extender todo estos, trayéndonos toda nuestra lista de clientes desde Shopify junto a sus datos, completando una hoja con estos en Google Sheets, de esta manera podemos luego trabajar localmente los datos y generar gráficos, tablas dinámicas, filtros o lo que necesitemos.
La API customers de Shopify
Para este ejemplo utilizaremos la API customers de Shopify, la que nos permite traer un listado de todos los clientes.
Es importante saber que cuando consultamos esta API, no podemos traer más de 250 clientes a la vez por límites de la API, si nuestra tienda tiene más de 250 clientes, debemos considerar que los resultados vendrán paginados y debemos ir consultando cada página hasta completar nuestra consulta.
Como en los ejemplos de los post anteriores, te recomendamos realizar una consulta a esta API vía postman para que te familiarices con la información que retorna, para esto puedes hacerlo con el método GET a la URL:
https://{{tu_clave_api}}:{{tu_token_acceso_privado}}@{{tu-tienda.myshopify.com}}/admin/api/2021-10/customers.jsonReemplazando las variables por las de tu tienda.
Veamos ahora el paso a paso del script
- Definir las variables importantes de nuestro script.
- Generar el encabezado y las opciones para realizar la consulta a la API.
- Iterar a través de los resultados paginados. Para esto utilizamos un bucle
while
que itera a través de todas las páginas de clientes disponibles, concatenando cada lote de clientes a nuestro arrayallCustomers
. - Si tengo resultados, mapeamos los datos de los clientes y los insertamos en la hoja (un cliente por cada fila). Finalmente, establecemos los encabezados correspondientes para cada columna.
Script para importar todos tus clientes de Shopify a Google Sheets
Antes de ejecutar este script recuerda:
- Reemplazar los marcadores de posición en el script con los valores propios de tu tienda, como tu ID, API y token de acceso.
- Asegúrate de que existe la hoja de Google Sheets con el nombre correcto (
Customers
en este ejemplo) antes de ejecutar el script.
function fetchShopifyCustomers() {
var baseUrl = 'https://[tu-tienda].myshopify.com/admin/api/2021-10/customers.json';
var params = '?limit=250'; // Ajusta el límite aquí, hasta un máximo de 250.
var shopUrl = baseUrl + params;
var username = '[tu-clave-api]'; // CLAVE API
var password = '[tu-token-de-acceso-privado]'; // Token de acceso privado
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Customers");
sheet.clear(); // Limpia la hoja antes de añadir nuevos datos
var headers = {
"Authorization": "Basic " + Utilities.base64Encode(username + ':' + password)
};
var options = {
"method": "get",
"headers": headers,
"muteHttpExceptions": true
};
var allCustomers = [];
var hasNextPage = true;
try {
while(hasNextPage) {
var response = UrlFetchApp.fetch(shopUrl, options);
var text = response.getContentText();
var data = JSON.parse(text);
allCustomers = allCustomers.concat(data.customers);
var linkHeader = response.getHeaders()['Link'];
if (linkHeader) {
var nextLink = linkHeader.split(',').find(s => s.includes('rel="next"'));
if (nextLink) {
var matches = nextLink.match(/<(.*?)>; rel="next"/);
if (matches) {
shopUrl = matches[1]; // URL de la próxima página
} else {
hasNextPage = false; // No más páginas
}
} else {
hasNextPage = false; // No más páginas
}
} else {
hasNextPage = false; // No más páginas
}
}
var values = allCustomers.map(function(customer) {
return [
customer.email,
customer.first_name,
customer.last_name,
customer.default_address ? customer.default_address.country : "",
customer.phone,
customer.created_at,
customer.updated_at,
customer.accepts_marketing,
customer.tags
];
});
if (values.length > 0) {
sheet.getRange(2, 1, values.length, values[0].length).setValues(values);
sheet.getRange(1, 1, 1, 9).setValues([["Email", "First Name", "Last Name", "Country", "Phone", "Created At", "Updated At", "Accepts Marketing", "Tags"]]);
}
} catch (e) {
Logger.log("Error fetching customer data: " + e.toString());
}
}
Comentarios finales
Este último post nos muestra como obtener una gran cantidad de datos de Shopify, generalmente esto se realiza con herramientas pagadas y aquí hemos visto que podemos obtener estos datos de manera gratuita utilizando las capacidades de Apps Script.