Importa tus clientes desde Shopify directo a Google Sheets

Google Sheets 20 de mar. de 2024

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.json

Reemplazando las variables por las de tu tienda.

Veamos ahora el paso a paso del script

graph TD A[Definir Variables Importantes] --> B[Generar Encabezado y Opciones] B --> C[Iniciar Iteración de Resultados Paginados] C -->|Obtiene Datos| D[Agregar Datos a Objeto allCustomers] D --> E{Hay Más Páginas?} E -->|Sí| C E -->|No| F[Verificar Si Hay Resultados] F -->|Si Hay Resultados| G[Copiar Cada Cliente en Hoja Customers] F -->|No Hay Resultados| H[Fin del Script] G --> I[Fin del Script]
  1. Definir las variables importantes de nuestro script.
  2. Generar el encabezado y las opciones para realizar la consulta a la API.
  3. 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 array allCustomers.
  4. 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.

Etiquetas

Juan Pablo Traverso

Profesional con más de 25 años de experiencias en diseño, creación y crecimiento de plataformas digitales, principalmente en el área de servicios financieros & ecommerce.