🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Shopify to Google Sheets, customer lists always ready

Lisa Granqvist Partner Workflow Automation Expert

Your customer list is always “somewhere.” In Shopify. In an old CSV. In someone’s inbox. And the moment you actually need it, you’re copying, filtering, fixing columns, and hoping you didn’t miss a chunk of customers.

This Shopify Sheets export problem hits Shopify store owners first, honestly. But marketers building email audiences and ops leads keeping systems in sync deal with the same mess. This workflow keeps a clean Google Sheet updated, and it also produces a Squarespace Contacts-ready CSV without you babysitting the export.

Below you’ll see how the automation works, what you get out of it, and the small setup details that prevent the usual “why is my data missing?” surprises.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Shopify to Google Sheets, customer lists always ready

The Problem: Customer exports that never stay complete

Exporting Shopify customers sounds simple until you do it more than once. You export today, someone imports that CSV into another tool tomorrow, and by next week your list is already stale. Worse, Shopify customer exports can become unreliable if you’re doing it manually during busy weeks, or if you assume “page 1” means you got everyone (Shopify uses cursor-based pagination, not page numbers). Then you spend an afternoon comparing counts, hunting duplicates, and reformatting columns to match whatever platform you’re importing into next.

It adds up fast. Here’s where it usually breaks down.

  • Manual exports get forgotten, so campaigns and imports run on outdated customer lists.
  • You end up missing customers because pagination is handled differently than “normal” page-by-page exports.
  • Columns rarely match what downstream tools expect, which means constant cleanup before every import.
  • Someone tweaks a spreadsheet format “just this once,” and suddenly your process depends on tribal knowledge.

The Solution: Export Shopify customers to Google Sheets (and a ready CSV)

This n8n workflow pulls all customers from Shopify using the Shopify Admin REST API, then writes them into a Google Sheets spreadsheet in a consistent structure. Because n8n doesn’t include a built-in “Shopify Customers” action, the workflow uses an HTTP Request step and handles Shopify’s cursor-based pagination automatically. That means it keeps fetching the next batch until there isn’t a “next page” link anymore, instead of stopping early. Once customers are collected, the workflow expands each record, maps the fields you actually care about (like email and name), updates your sheet, and finally generates a CSV file formatted specifically for Squarespace Contacts imports.

The workflow starts on a schedule or with a manual run. It then fetches customers in chunks (50 by default, up to 250), follows Shopify’s page_info cursor from response headers, and merges the results into one clean dataset. At the end, Google Sheets becomes your “always ready” list, and the CSV export is there when you need to upload to Squarespace.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you refresh your customer list twice a week for email segmentation and a Squarespace contact upload. Manually, it’s usually 20 minutes to export, another 30 minutes to clean columns and remove noise, then 10 minutes to prep a “separate” CSV for Squarespace, so about an hour per refresh. With this workflow, you trigger it (or schedule it), wait a few minutes for Shopify pagination to finish, and your Google Sheet updates automatically while the Squarespace-ready CSV is generated from the same run. That’s roughly 2 hours back every week, without the “did we get everyone?” stress.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Shopify Admin REST API access to fetch customer records
  • Google Sheets to store and share the customer list
  • Shopify API key (get it from your Shopify admin app settings)

Skill level: Intermediate. You’ll paste credentials, confirm permissions, and tweak a few request parameters like fields and limits.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A scheduled run or manual trigger kicks things off. You can run it on demand when you’re about to import, or schedule it weekly so your customer sheet is always current.

Shopify customers are pulled in paginated batches. The HTTP Request node calls the Shopify Admin REST API and includes response headers, because the “next page” cursor lives there. A small parsing step extracts page_info and keeps looping until Shopify stops returning a next link.

Customer records are expanded and normalized. Each customer is split into individual rows, fields are mapped into the columns you want, and the workflow merges batch results so you’re not juggling partial exports.

Google Sheets updates, then a CSV is generated. The workflow writes the cleaned customer list into your spreadsheet, and also converts the mapped fields into a CSV file that matches Squarespace Contacts import expectations (email, first name, last name, with any extra ID field ignored).

You can easily modify which customer fields you pull to match what your team actually uses, then keep the output structure stable for imports and syncing. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Schedule Trigger

Set up the workflow triggers so you can run the sync on demand or on a schedule.

  1. Add and keep Manual Run Starter for on-demand testing and manual runs.
  2. Configure Scheduled Run Trigger with your preferred interval in the Rule settings.
  3. Confirm that both Manual Run Starter and Scheduled Run Trigger connect into Retrieve Customer Records.

You can keep both triggers active—use Manual Run Starter for testing and Scheduled Run Trigger for production runs.

Step 2: Connect Shopify and Configure Customer Retrieval

Pull customer data from Shopify using the HTTP request node.

  1. Open Retrieve Customer Records and set URL to https://{your-store}.myshopify.com/admin/api/2025-01/customers.json.
  2. Enable Send Query and set query parameters: limit to 250, fields to id,email,first_name,last_name, and a dynamic parameter name of {{ $json.page_info ? "page_info" : "status" }} with value {{ $json.page_info ? $json.page_info : 'any' }}.
  3. Credential Required: Connect your shopifyAccessTokenApi credentials in Retrieve Customer Records.

⚠️ Common Pitfall: If {your-store} is not replaced with your Shopify subdomain, the request will fail with a 404.

Step 3: Set Up Pagination Processing

Handle Shopify pagination so all customer pages are collected.

  1. In Validate Pagination Link, confirm the condition checks {{ $json.headers.link }} with Operator set to notContains and Value set to rel="next".
  2. Keep the true/false branches from Validate Pagination Link connected to Combine Batch Results and Parse Pagination Token respectively.
  3. In Parse Pagination Token, use the provided JavaScript to extract the page_info query parameter from the link header.
  4. In Map Pagination Parameter, set page_info to {{ $json.page_info }} and keep it connected back to Retrieve Customer Records.
  5. Confirm Combine Batch Results collects all pages using the loop over Retrieve Customer Records outputs.

Ensure Retrieve Customer Records is set to return a full response so the headers.link field is available for pagination.

Step 4: Configure Customer List Expansion and Output Actions

Split the customer array into individual items and send data to your spreadsheet and CSV output.

  1. In Expand Customer List, set Field to Split Out to body.customers.
  2. Note the parallel execution: Expand Customer List outputs to both Update Customer Spreadsheet and Map Customer Fields in parallel.
  3. In Update Customer Spreadsheet, set Operation to appendOrUpdate, map columns to {{ $json.last_name }}, {{ $json.first_name }}, {{ $json.email }}, and {{ $json.id }}, and use Shopify Customer ID as the matching column.
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Update Customer Spreadsheet.
  5. In Map Customer Fields, set Email address to {{ $json['Email address'] }}, First name to {{ $json['First name'] }}, and Last name to {{ $json['Last name'] }}.
  6. In Generate Contacts CSV, keep Header Row set to false.

⚠️ Common Pitfall: If your Google Sheet column headers do not exactly match Email address, First name, Last name, and Shopify Customer ID, the update will fail or mis-map data.

Step 5: Test and Activate Your Workflow

Verify the data flow and activate the scheduled sync.

  1. Click Execute Workflow using Manual Run Starter to run a full sync.
  2. Confirm that Retrieve Customer Records returns data and that Expand Customer List emits individual customer items.
  3. Verify updates appear in your Google Sheet from Update Customer Spreadsheet and that Generate Contacts CSV outputs a file item.
  4. Activate the workflow so Scheduled Run Trigger runs automatically on your defined interval.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Shopify credentials can expire or lack the right scopes. If calls fail, check your Shopify app permissions and the API key used in the HTTP Request node first.
  • If you’re using Wait nodes or external processing, timing can vary. Pagination runs can take longer on big stores, so increase any waits if downstream steps run before the customer list is fully merged.
  • Google Sheets updates can look “wrong” when the sheet structure changes. If someone adds headers or reorders columns, fix the sheet template and then re-run so the mapping still matches your intended output.

Frequently Asked Questions

How long does it take to set up this Shopify Sheets export automation?

About 30 minutes if your Shopify and Google credentials are ready.

Do I need coding skills to automate Shopify customer exports?

No coding required. You will mostly paste credentials and confirm the fields you want Shopify to return.

Is n8n free to use for this Shopify Sheets export workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Shopify API access (usually included with your Shopify plan unless your app setup is restricted).

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Shopify Sheets export workflow for a Squarespace-only CSV?

Yes, and it’s a common tweak. You can adjust the “fields” parameter in the Shopify HTTP Request so you only pull what you need, then update the “Map Customer Fields” step so the CSV contains just Email Address, First Name, and Last Name in the order Squarespace expects. If you want to keep a richer Google Sheet while still generating a minimal CSV, keep the sheet mapping broader and make the CSV mapping stricter.

Why is my Shopify connection failing in this workflow?

Most of the time it’s an auth issue: an expired API key, the wrong Admin API access token, or missing scopes for reading customers. Double-check the credentials inside the HTTP Request node and confirm the app in Shopify is allowed to read customer data. If it fails only on larger runs, Shopify rate limits can also be the culprit, so slowing the loop or reducing the “limit” per request can stabilize it.

How many customers can this Shopify Sheets export automation handle?

A typical Shopify store with a few thousand customers is fine, and bigger lists work too since pagination is built in. On n8n Cloud, your monthly execution limit depends on the plan (Starter is usually plenty for scheduled exports). If you self-host, there’s no hard execution cap, so it mostly comes down to your server and how frequently you run it.

Is this Shopify Sheets export automation better than using Zapier or Make?

Often, yes, because the hard part here is pagination and data shaping, not a simple two-step sync. n8n lets you loop through cursor-based pages, merge batches, and control the exact output without paying extra for “advanced” branching. You also get the option to self-host, which matters if you run this a lot. Zapier or Make can be fine for smaller, simple pulls, but they tend to get awkward when you need to reliably fetch every record. Talk to an automation expert if you want a quick recommendation for your setup.

Once this is running, your customer list stops being a recurring task. It’s just there, clean and ready, whenever you need to segment, import, or sync.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal