Sync Shopify Orders to Google Sheets: The Complete Guide
Last verified: May 2026
Key takeaways
- There are four ways to get Shopify order data into Google Sheets: manual CSV export, a Shopify App Store connector, a no-code automation platform like Zapier or Make, or a custom Google Apps Script pulling directly from the Shopify Admin REST API.
- Manual exports work for one-off pulls but break down fast — human error rates on manual data entry run between 18% and 40%, so automation is the sensible default for anything you check regularly.
- App Store connectors are the quickest route to automated syncing. Direct API integration gives you the most control but requires development time.
- Two-way sync between Shopify and Google Sheets is genuinely hard to make reliable. Most teams are better off with a one-way read-only export.
- Whichever method you choose, write data to a raw import tab and run your formulas on a separate linked tab. Don't mix the two.
If you're running an e-commerce brand on Shopify, your orders table is one of the most useful data sets you own. Revenue by channel, fulfilment lag, average order value by SKU — it's all sitting in Shopify, locked behind a UI that wasn't built for custom analysis. Google Sheets is where most operations teams actually want that data: shareable, formula-ready, and free to reshape however you like. The question isn't whether to connect them. It's how.
The answer depends on your technical confidence, how often you need fresh data, and how much you want to spend. A founder pulling a one-off sales report has very different needs from a warehouse manager who needs order status updating hourly so the pick queue stays accurate. This guide covers all four real methods — manual export, App Store connector, Zapier or Make, and a custom Apps Script — with the steps to get each one working and the failure modes to watch for.
The upfront effort is worth it. Repetitive manual data work can be cut by 60–95% through automation, which frees your team for decisions rather than data wrangling. For growing brands juggling a complex operations stack, that compounds quickly.
Before you start
- An active Shopify account (any plan gives you CSV exports; API access is available on all plans via custom apps)
- A Google account with access to Google Sheets and, if you're using Apps Script, Google Apps Script
- For direct API integration: a Shopify Partner account to create a custom app and access to Admin API credentials
- For some connector tools: an active subscription to the service (Zapier, Coupler.io, etc.) — free tiers exist on both platforms but often cap run frequency or task volume
- A clear sense of which order fields you actually need — pulling everything makes your sheet unwieldy. Decide upfront whether you need line items, shipping addresses, discount codes, fulfilment status, or some combination
Methods at a glance
| Method | Setup time | Maintenance | Best for |
|---|---|---|---|
| Manual CSV export | 5 minutes | High — repeat every time | One-off reports, audits |
| App Store connector | 15–30 minutes | Low — set and forget | Non-technical teams wanting automated sync |
| Zapier or Make | 30–60 minutes | Low — monitor occasionally | Teams already using these platforms or needing multi-step workflows |
| Custom Apps Script (direct API) | 2–4 hours | Medium — you own the code | Specific field requirements, no third-party data processors |
Method 1: Manual CSV export
This is the baseline. No apps, no API keys, no configuration. It's also the method that breaks down fastest at volume — but for a monthly finance report or a one-time data pull, it's perfectly fine.
- Open your Shopify admin and navigate to Orders in the left-hand sidebar.
- Filter your orders by date range, status, or any other criteria using the filter bar at the top of the orders list. This determines what ends up in your export.
- Click the Export button (top right of the orders list). A dialog will appear asking which orders to export and what format to use.
- Select "Current page" or "All orders matching your search" depending on your filter, then choose CSV for Excel, Numbers, or other spreadsheet programs.
- Click Export orders. Shopify emails the CSV to your account address — large exports can take a few minutes.
- Open Google Sheets, create a new blank spreadsheet, then go to File → Import → Upload and drag in the downloaded CSV. Choose Replace spreadsheet or Insert new sheet as appropriate.
- Verify the data — check that order IDs, totals, and dates look correct. Shopify exports use UTC timestamps, so adjust if your team works in a different timezone.
The obvious problem: you have to repeat steps 1–7 every time you want fresh data. If you're doing this more than once a week, one of the automated methods below will save you serious time.
Method 2: Shopify App Store connector (native app)
Several apps on the Shopify App Store exist specifically to push order data into Google Sheets on a schedule. Apps like OSync and Exportsy both handle this — you configure the fields and sync frequency once, and the app handles the rest. For most non-technical teams, this is the right call.
- Open the Shopify App Store and search for "Google Sheets export" or "Google Sheets sync". Look at two or three options — check their review count, last-updated date, and privacy policy before installing.
- Install your chosen app by clicking Add app and approving the permission scopes it requests. Pay attention to what data access it asks for — an orders export app typically needs
read_ordersscope. Anything broader is worth questioning, given your responsibility for how customer data gets handled by third parties. - Connect your Google account when the app prompts you. Use a dedicated Google Workspace account rather than a personal Gmail if you're handling customer PII.
- Create a new Google Sheet (or open an existing one) and copy its URL or Sheet ID. Paste this into the app's destination field.
- Configure which fields to export — order ID, customer name, email, line items, quantities, totals, fulfilment status, shipping address. Only pull what you'll actually use.
- Set your sync schedule — most apps offer options from every 15 minutes to once daily. Hourly is a reasonable default for operational use; daily is fine for reporting.
- Run a manual sync to test the connection. Check that data appears in the correct columns and that order IDs match what you see in your Shopify admin.
- Lock the import tab in Google Sheets (Right-click the tab → Protect sheet) to prevent accidental edits from being overwritten on the next sync. Do your analysis on a linked second tab.
Method 3: Automation platform (Zapier or Make)
If you're already using Zapier or Make elsewhere in your stack — to trigger purchase orders or update fulfilment partners, for example — adding a Shopify-to-Sheets zap or scenario is a natural extension. The main advantage over App Store connectors is multi-step logic: you can filter by order tag, enrich with external data, or branch based on fulfilment channel before anything hits the sheet.

- Log in to Zapier or Make and create a new Zap (Zapier) or Scenario (Make).
- Set the trigger to Shopify → New Order (or Order Paid / Order Fulfilled depending on when you want the row created). Connect your Shopify store by entering your store URL and authorising the connection.
- Add a Filter step if needed — for example, only pass through orders with a specific tag, fulfilment service, or minimum order value. This keeps your sheet clean if you're running multiple channels.
- Add a Google Sheets action — choose Create Spreadsheet Row. Connect your Google account and select the target spreadsheet and worksheet tab.
- Map the fields: drag Shopify trigger fields (order ID, created-at timestamp, total price, line item names, quantities, customer email) into the corresponding Sheets columns. Name your columns in row 1 first so the mapper can reference them.
- Test the Zap or Scenario using a real or test order. Check that the row appears correctly and that number formatting is preserved — Zapier occasionally passes totals as strings, which breaks SUM formulas.
- Turn the automation on and monitor it for the first 48 hours. Check the task history in Zapier or the execution log in Make to confirm orders are flowing through without errors.
One honest caveat: trigger-based approaches like this miss orders if the automation disconnects or if your plan's task limit is hit. Set up failure alerts in your automation platform — both Zapier and Make can email you on task failures. And if your brand processes large order volumes, keep an eye on your monthly task count before committing to a plan tier.
Method 4: Custom integration with Google Apps Script (direct API)
This is the most flexible option — and the one that keeps your customer data entirely within Google's infrastructure rather than routing it through a third-party SaaS. You write a script in Google Apps Script that calls the Shopify Admin REST API, parses the response, and writes rows to your sheet. More work upfront, but worth it if you have specific field requirements, need pagination handling for large order volumes, or have security policies that restrict third-party processors.
- Create a custom Shopify app by going to your Shopify admin → Settings → Apps and sales channels → Develop apps. Click Create an app, name it something descriptive (e.g. "Sheets Order Sync"), and configure the Admin API scopes — you need at minimum
read_orders. Install the app to get your API access token. - Open your Google Sheet, then go to Extensions → Apps Script. This opens the Apps Script editor tied to your spreadsheet.
- Write a fetch function that calls the Shopify Orders endpoint. The base URL follows the pattern
https://{store}.myshopify.com/admin/api/2025-01/orders.json— replace the API version with the current stable release. Pass your access token in theX-Shopify-Access-Tokenheader. The Admin REST API reference lists all available query parameters, includingcreated_at_min,status, andlimit. - Handle pagination using Shopify's
Linkresponse header — the API returns a maximum of 250 orders per call, so you'll need to loop through pages for any store with meaningful order history. Parse thenextcursor from the header and re-call until it's absent. - Parse the JSON response and map fields to an array of row arrays — one inner array per order. Decide here whether to flatten line items (one row per item) or summarise them (one row per order). Both work; one-row-per-order is usually easier for revenue dashboards.
- Write to the sheet using the Sheets API — in Apps Script this is simply
sheet.getRange(...).setValues(rows). Write to a raw import tab, not the tab your formulas reference. - Add a time-based trigger in Apps Script (Triggers → Add trigger → Time-driven) to run your function on a schedule — hourly or every 6 hours covers most operational use cases.
- Store your API token securely using
PropertiesService.getScriptProperties().setProperty('SHOPIFY_TOKEN', '...')rather than hardcoding it in the script body. Retrieve it at runtime withgetProperty().
This takes a few hours to build correctly, but you own the entire thing. No subscription to cancel, no third party with access to your customer emails, and you can wire in exactly the logic your receiving and fulfilment workflows need. Want to pull inventory data alongside orders later? Same pattern, different endpoint.
Common errors and how to fix them
Manual exports produce inconsistent data over time
When different people manually download and paste CSVs, they pull different date ranges, use different filters, and paste into different columns. The sheet becomes unreliable within weeks. Fix it structurally: either commit to one automated method or — if manual export is genuinely unavoidable — document the exact filter settings and import procedure in a tab at the front of the sheet. Treat it like a protocol, not a casual task.
Automated sync disconnects and silently misses orders
OAuth tokens expire. Plans run out of tasks. Shopify API credentials get rotated after a security review. Any of these can break your sync without an obvious error message in the sheet. The fix is monitoring, not paranoia — set up failure alerts in your automation platform, and add a simple check to your sheet: a formula that flags if no new rows have arrived in the last 24 hours (something like =IF(MAX(A:A) < NOW()-1, "SYNC STALE", "OK") in a dashboard cell).
Imported data overwrites sheet formulas
This is the most common sheet-management mistake. You build a formula in column H, the next sync writes raw data over it, and it's gone. The fix is a two-tab architecture: a raw tab that the import writes to (protected, no formulas), and a working tab that uses IMPORTRANGE or direct cell references to pull from raw and applies all your calculations there. The import never touches your formulas.
Two-way sync is unreliable
Every few months someone asks whether they can update fulfilment status in the sheet and have it write back to Shopify. Technically possible with Apps Script and the Admin API's write endpoints — but genuinely difficult to make reliable. Conflict resolution (what happens when Shopify and the sheet both change the same order simultaneously) is a hard problem. Most brands are better off keeping the sheet read-only and making updates directly in Shopify or their fulfilment system.
Frequently Asked Questions
How do I automatically export orders from Shopify to Google Sheets?
The fastest route is a Shopify App Store connector — install an app like OSync or Exportsy, connect your Google account, point it at a sheet, and set a sync schedule. If you'd rather not use a dedicated app, Zapier and Make both support a "New Shopify Order → Add Google Sheets row" workflow with no coding required.
Can you connect Shopify to Google Sheets without an app?
Yes. Google Apps Script can call the Shopify Admin REST API directly — no App Store app and no third-party automation platform needed. You write a script in the Apps Script editor (built into Google Sheets under Extensions), authenticate with a Shopify custom app token, and schedule it to run on a timer. It takes a few hours to build but keeps your customer data within Google's infrastructure.
How do I create a live sales dashboard in Google Sheets from Shopify data?
Set up an automated import (connector app, Zapier, or Apps Script) writing raw order data to a locked import tab, then build your dashboard on a second tab using SUMIF, PIVOTTABLE, or QUERY functions referencing that raw tab. Refresh frequency depends on your sync schedule — Apps Script time triggers can run as often as every hour, which is enough for an operational sales view.
Which method should you use?
Start with the simplest method that meets your actual requirements. Need a one-off data pull? Do the manual CSV export and move on. Need daily or hourly updates and you're not technical? An App Store connector is the right answer — set up in under 30 minutes, and it handles edge cases you'd otherwise have to code around. Already running Zapier or Make for other parts of your operations stack? Add the Shopify-to-Sheets workflow there rather than introducing another tool. And if you have data security requirements, specific field logic, or just prefer to own your infrastructure, invest the time in Apps Script — you'll build something more tailored than any off-the-shelf connector, and you won't be paying a monthly subscription for it five years from now.
Whatever method you land on: protect your formulas with the two-tab architecture, set up sync failure alerts, and resist the temptation to build two-way sync unless you genuinely need it. Clean one-way order data flowing into a well-structured sheet is far more useful than a fragile bidirectional setup that breaks every few weeks.