🔓 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, product lists always current

Lisa Granqvist Partner Workflow Automation Expert

Your product sheet is never quite right. Someone exported a CSV last week, variants changed yesterday, and now you’re planning a promo on numbers you don’t fully trust. It’s the kind of small mess that quietly creates bigger ones.

Ecommerce managers feel it first, because they live inside price lists and inventory checks. But marketing leads building campaigns and agency owners reporting on catalogs run into the same wall. This Shopify Sheets sync keeps your Google Sheet current automatically, so planning doesn’t depend on “who exported it last.”

Below you’ll see how the workflow pulls products from Shopify, writes clean rows into Google Sheets, and keeps going even when you have a big catalog with lots of pages.

How This Automation Works

See how this solves the problem:

n8n Workflow Template: Shopify to Google Sheets, product lists always current

The Challenge: Keeping product sheets accurate

Manual exports sound simple until you’re doing them constantly. A new variant gets added, a price changes for a weekend sale, tags get cleaned up for a collection page, and your “source of truth” spreadsheet instantly becomes yesterday’s news. Then you’re stuck cross-checking Shopify screens against rows, fixing mistakes one by one, and second-guessing every number in your report. Worse, spreadsheets tend to spread across a team. Once an old export is shared, it keeps getting reused.

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

  • You end up exporting CSVs repeatedly, and it’s never at the right moment.
  • Variant-level details (like SKUs, prices, and inventory) get missed or pasted into the wrong columns.
  • Large catalogs become a chore because exports, filters, and “did we grab everything?” checks take forever.
  • Teams make decisions from stale sheets, which means promos, ads, and merchandising plans drift off reality.

The Fix: Shopify product data synced into Google Sheets

This workflow runs on a schedule (hourly, daily, whatever you choose) and pulls your Shopify product data using GraphQL. It doesn’t just grab a shallow list. It collects useful fields like product title, description, tags, variants, images, and inventory-related details so your sheet can support real work: promo planning, catalog audits, pricing reviews, and quick analysis. If you have a lot of products, it keeps going page by page using a cursor, so it doesn’t start over each run or time out halfway through. Finally, it writes the results into a dedicated Google Sheet tab, while storing cursor details in a second tab to keep the sync reliable over time.

The workflow starts with a scheduled trigger, checks the last saved cursor, then fetches the next batch of Shopify products. It formats the response into spreadsheet-ready rows and appends them in Google Sheets. If there are more pages to fetch, it waits briefly and continues until it’s done.

What Changes: Before vs. After

Real-World Impact

Say you refresh a product sheet three times a week for pricing checks, collection work, and promo planning. A typical manual cycle is about 30 minutes to export, download, clean columns, and re-share (longer if variants get messy), which is roughly 1.5 hours a week. With this workflow, the “work” is picking a schedule and letting it run; the actual effort is closer to 5 minutes to review the sheet and spot issues. Over a month, that’s a few hours back, plus fewer “wait, is this the latest?” moments.

Requirements

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Shopify Admin access to generate API credentials
  • Google Sheets to store products and cursor state
  • Shopify Admin API access token (create an app in Shopify admin)

Skill level: Intermediate. You’ll connect Shopify + Google credentials and paste a GraphQL query, but you won’t be writing a full app.

Need help implementing this? Talk to an automation expert (free 15-minute consultation).

The Workflow Flow

Scheduled run. A schedule trigger starts the sync on your cadence, like every morning or every hour during busy seasons.

Cursor check. Google Sheets is used not only for the product table, but also for a small “cursor” sheet that stores where the last run left off. If there’s no cursor yet, the workflow performs an initial Shopify fetch.

Fetch and format. Shopify is queried via GraphQL, the results are split into row-friendly structures, and fields are normalized so Google Sheets receives consistent columns (titles, tags, descriptions, prices, variants, images, inventory details).

Write and continue. The first row is appended, then the rest of the batch is appended. If Shopify indicates there are more pages, the workflow saves the next cursor, waits briefly, and repeats until the catalog is captured.

You can easily modify the schedule and the fields you store to match your reporting needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Scheduled Trigger

Set the workflow to run on a schedule and initialize the batch size used for pagination.

  1. Open Scheduled Run Trigger and set the schedule rule to run daily at 7 (as shown in rule → interval → triggerAtHour).
  2. Connect Scheduled Run Trigger to Set Batch Limit.
  3. In Set Batch Limit, set batchsize to 100 using fields → values → numberValue.
  4. Connect Set Batch Limit to Fetch Last Cursor to look up the prior pagination cursor.
Tip: Keep the batch size aligned with Shopify API limits to avoid throttling.

Step 2: Connect Google Sheets

Set up Google Sheets nodes to read the last cursor, append product data, and update the cursor tracker sheet.

  1. Open Fetch Last Cursor and select the sheet named Curser and the document ID [YOUR_ID].
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Fetch Last Cursor.
  3. In Append First Product Row, set documentId to [YOUR_ID] and sheetName to gid=0 (Sheet1).
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Append First Product Row, Append Product Rows, and Update Cursor Sheet.
  5. In Update Cursor Sheet, confirm operation is update and the tracker columns include tracker with cursor and endCursor as ={{ $json.data.products.pageInfo.endCursor }}.
⚠️ Common Pitfall: Replace all [YOUR_ID] placeholders with the actual Google Sheet IDs or the workflow will fail to write data.

Step 3: Connect Shopify GraphQL

Configure the Shopify GraphQL nodes to fetch initial and paginated product data.

  1. Open Initial Shopify Fetch and set endpoint to https://test-store-collection.myshopify.com/admin/api/2024-01/graphql.json.
  2. Set the query in Initial Shopify Fetch to the provided GraphQL with first: 1.
  3. Credential Required: Connect your httpHeaderAuth credentials in Initial Shopify Fetch and Retrieve Shopify Items.
  4. In Retrieve Shopify Items, confirm endpoint is https://test-store.myshopify.com/admin/api/2024-01/graphql.json and the query uses {{$json.batchsize}} and {{$json.endCursor}}.

Step 4: Set Up Cursor & Pagination Logic

Control pagination using the cursor, branch logic, and a delay between requests.

  1. Connect Fetch Last Cursor to Branch on Cursor and keep the condition ={{ $json.endCursor }} with the empty operator.
  2. Route the “empty” branch to Initial Shopify Fetch and the other branch to Merge Cursor Data.
  3. In Merge Cursor Data, keep the provided JavaScript that merges outputs from Set Batch Limit, Fetch Last Cursor, and Initial Shopify Fetch.
  4. Configure Assign Next Cursor to set endCursor as ={{ $('Retrieve Shopify Items').item.json.data.products.pageInfo.endCursor }} and =batchsize as ={{ $('Merge Cursor Data').item.json.batchsize }}.
  5. Set Delay Interval to unit seconds and amount 10, then connect it to Assign Next Cursor to throttle pagination.
  6. In Verify More Pages, keep the boolean condition ={{ $json.data.products.pageInfo.hasNextPage }} to branch to Delay Interval or finish at Idle Step.
Tip: Idle Step is a no-op endpoint that safely ends the workflow when no more pages are available.

Step 5: Configure Product Row Appends

Split Shopify results into individual items and append them to Google Sheets.

  1. In Divide Results, keep the Python code that iterates through data.products.edges and outputs one product per item.
  2. Ensure Retrieve Shopify Items outputs to both Divide Results and Validate Cursor Present in parallel.
  3. In Append Product Rows, map columns using expressions like ={{ $json.data.product.title }}, ={{ $json.data.product.tags }}, and ={{ $json.data.product.variants.edges[0].node.price }}.
  4. In Append First Product Row, map fields using the first edge: ={{ $json.data.products.edges[0].node.title }} and similar fields for tags, price, and description.
  5. Route Validate Cursor Present to Update Cursor Sheet to store ={{ $json.data.products.pageInfo.endCursor }} after each fetch.
⚠️ Common Pitfall: The column name descreption is misspelled in the sheet schema—keep it consistent with your Google Sheet headers or the append will fail.

Step 6: Test and Activate Your Workflow

Run the workflow end-to-end, confirm Sheets updates, then activate it for scheduled syncing.

  1. Manually execute Scheduled Run Trigger and confirm Set Batch Limit outputs a batchsize of 100.
  2. Verify that Retrieve Shopify Items runs and that Retrieve Shopify Items outputs to Divide Results and Validate Cursor Present in parallel.
  3. Check Google Sheets to confirm rows were added by Append First Product Row and Append Product Rows, and that Update Cursor Sheet wrote the latest cursor.
  4. When successful, toggle the workflow Active to allow scheduled runs at the configured hour.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Watch Out For

  • Shopify credentials can expire or lack the right scopes. If it fails, check your custom app settings in Shopify Admin and confirm the Admin API permissions first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Common Questions

How quickly can I implement this Shopify Sheets sync automation?

Usually about an hour if you already have Shopify and Google access.

Can non-technical teams implement this Shopify Sheets sync?

Yes, but someone needs to be comfortable with connecting credentials and copying a GraphQL query. No coding is required beyond basic configuration.

Is n8n free to use for this Shopify Sheets sync 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 usage (usually negligible for scheduled catalog pulls).

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.

How do I adapt this Shopify Sheets sync solution to my specific challenges?

You can change what gets written to the sheet by editing the “Edit Fields (Set)” and the row-mapping logic in “Divide Results.” Common tweaks include pulling only active products, adding vendor/product type columns, saving compare-at price, or splitting variants into a separate tab. If your catalog is huge, adjust “Set Batch Limit” so each run fetches smaller chunks.

Why is my Shopify connection failing in this workflow?

Most of the time it’s an expired access token or missing Admin API scopes on your Shopify custom app. Regenerate the token, then update the header auth in your GraphQL node in n8n. Also check that your shop domain is correct and you’re hitting the right API version. If it starts failing only on larger runs, you may be getting rate limited, so lower the batch limit or keep the built-in wait in place.

What’s the capacity of this Shopify Sheets sync solution?

It can handle large catalogs because it paginates with cursors, so it keeps fetching until it reaches the end.

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

Often, yes. Zapier and Make are great for simple event-based zaps, but product catalog pulls get tricky fast because pagination, cursor state, batching, and retries matter. n8n handles branching logic cleanly, and you can self-host if you want to run a lot of scheduled syncs without watching task counts. The tradeoff is setup: you’ll spend a bit more time getting GraphQL and the sheet mapping right. If you want someone to sanity-check your setup, Talk to an automation expert.

Once your product sheet stays current on its own, planning gets a lot simpler. The workflow handles the repetitive updates, and you stop treating spreadsheets like a liability.

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