Skip to main content

Shopify integration

Masto Control can connect to a Shopify store to sync product data, photos, and inventory, and to import paid orders as sales.

Connecting

On a Shopify-type sales channel, click Connect Shopify. This runs Shopify's standard OAuth flow — you'll be redirected to Shopify to approve access, then back into Masto Control. No manual API token copying is needed.

Behind the scenes, Masto Control requests an expiring access token plus a refresh token (Shopify's current requirement — non-expiring tokens were deprecated). Tokens are refreshed automatically before they expire; you don't need to reconnect periodically. If a connection ever does go stale, use Reconnect Shopify on the same channel.

A manual Admin API access token field exists as a fallback for older custom-app setups, but OAuth via Connect Shopify is the supported path.

Picking a location

Inventory sync needs to know which Shopify location to publish stock to. Use Fetch Shopify locations to pull the list from your store and select one. This is required before inventory sync will do anything.

What syncs, and how to control it

Under the channel's Shopify settings, toggle independently:

  • Sync product data — choose which fields to push: title, description, product type, price
  • Sync product photos — pushes photos from the BOM card's description/photos tab; already-synced photos aren't re-uploaded on every sync (tracked per image, so you don't end up with duplicate photos piling up in Shopify)
  • Sync inventory — publishes available finished-goods stock to the selected location
  • Import orders — paid Shopify orders are received via a signed webhook and recorded as sales-channel activity, feeding analytics

Manual vs. automatic sync

You can trigger Sync products now / Sync inventory now at any time, or turn on automatic background sync to run on a recurring schedule (every 15 minutes by default) without you having to remember to click anything.

Linking products

Before product or inventory sync can work for a given BOM card, it needs to know which Shopify product/variant it corresponds to. Use Fetch Shopify products to load your store's catalog into the link picker, then either:

  • Pick the matching product/variant manually, or
  • Use Auto-match by SKU to link everything whose SKU matches automatically

A link can be linked (product + variant + inventory item all set), partial (some but not all), or not linked.

Webhooks & security

Inbound order webhooks are verified against Shopify's HMAC signature before being processed — unsigned or tampered requests are rejected. Masto Control's Shopify app also implements Shopify's mandatory GDPR compliance webhooks (customer data requests, customer redaction, shop redaction) automatically; there's nothing to configure for these.

Troubleshooting

  • "Fetch Shopify locations" or sync fails with an authorization error → use Reconnect Shopify to re-run OAuth and get a fresh token.
  • Inventory sync does nothing → check that a location is selected and that the product link has an inventory item ID (not just a product/variant ID).
  • Photos look duplicated in Shopify → this was a known issue with sync re-uploading every photo on every run; it's fixed, but photos uploaded before the fix may need manual cleanup in Shopify admin.