Getting started · Shopify

Connect a Shopify store to ShopSheets

Shopify uses a per-merchant custom app flow rather than a global OAuth dialog. Each store creates its own custom app inside Shopify admin, then ShopSheets handles the OAuth dance on the merchant's behalf. Plan ~5 minutes per store.

Why is Shopify different? The other platforms (Meta, Google Ads, TikTok, Klaviyo, Xero) authorize through one shared ShopSheets app. Shopify requires either app-store review OR a per-merchant custom app. We use the custom-app path so you can onboard any store immediately without waiting on Shopify review.

1. In Shopify admin, enable custom app development

Open the merchant's Shopify admin and navigate to:

Settings → Apps and sales channels → Develop apps

If this is the first custom app on the store, click Allow custom app development and confirm the warning. (Only the store owner can enable this — not staff accounts.)

2. Create a new custom app

Click Create an app. Name it something recognizable like ShopSheets. Click Create app.

3. Configure Admin API scopes

On the app page, go to Configuration → Admin API integration → Configure. Enable these read-only scopes:

  • read_orders
  • read_products
  • read_customers
  • read_analytics
  • read_reports

Save. ShopSheets only reads — no scope grants write or admin permissions, and we never modify the store.

4. Set the App URL + Redirect URL

Still on the Configuration tab, scroll to the URLs section and paste these values exactly:

App URL
https://api-production-1a09.up.railway.app/shopify/install
Redirect URL
https://api-production-1a09.up.railway.app/shopify/callback

These point at our backend that handles the OAuth dance for the merchant. Save the configuration.

5. Reveal the API credentials

Switch to the API credentials tab on the app. You'll see two values you need to copy:

  • Client ID — visible by default
  • Client secret — click reveal once. After this you can't see it again, only rotate it.

Keep both copied somewhere safe for the next step. You also need the store's shop domain — anything like your-store.myshopify.com (we'll normalize whatever you paste).

6. Add the connection in ShopSheets

In the ShopSheets sidebar, click + Add Connection (Dev). Pick Shopify as the provider and fill in:

  • Connection name — anything internal-friendly (e.g. the brand name)
  • Shop domain — the .myshopify.com URL
  • Client ID — from step 5
  • Client secret — from step 5

Click Save. ShopSheets stores the credentials on the connection and immediately redirects to the Shopify install URL.

7. Approve on Shopify (the merchant's consent)

You'll land on the merchant's Shopify consent screen. Either approve directly if you have admin access, or send the install URL to the store owner so they can approve. The URL looks like:

https://api-production-1a09.up.railway.app/shopify/install?shop=<shop>.myshopify.com

On approval, Shopify redirects to our backend, we exchange the code for an access token, and the connection is patched with the real credentials. You're done.

8. Verify it worked

Back on the Dashboard, your new Shopify connection should show up under the Shopify platform group with a recent Last synced timestamp. Open the Google Sheets sidebar and run a Shopify query — you should see real order data within a few seconds.

Troubleshooting

  • "The redirect_uri does not match" — the URLs in step 4 must match exactly, character for character. No trailing slashes, no extra paths.
  • "App not installed" — the merchant clicked the install URL but didn't finish approving. Re-send them the URL.
  • Missing data on queries — the custom app may be missing one of the read scopes from step 3. Edit the app config in Shopify, add the missing scope, and the merchant has to re-approve.
  • 403 / unauthorized — the access token may have been rotated in Shopify. Delete the connection in ShopSheets and start over from step 6.
Open the Add Connection (Dev) page