Follow our tutorials and learn how to connect Gadget and Shopify in just a few minutes!
- Gadget handles the OAuth process for merchants installing your application out of the box. See Shopify OAuth
- All objects in Shopify's API can be synced into your Gadget app as models. Connected models provide data access to any installing store's data, with no rate limit. Connected models can be extended in Gadget with additional fields to store extra information, though these fields will not sync back with Shopify by default.
- Gadget provides an easy-to-use API client for working with the Shopify API in backend code that manages rate limits and authentication. See Accessing the Shopify API
- Missed webhooks from bugs or infrastructure issues are recovered using a daily background sync, as per Shopify's recommended best practices. You can also manually sync your app to Shopify at any time or trigger syncs with the Sync API.
- Historical data (old products, orders, customers, etc) can be easily synced when a shop installs your app
- Gadget provides an embedded Shopify Admin frontend out of the box, as soon as you connect to Shopify in your development environment
- Gadget has easy-to-use facilities for billing your merchants
Currently, Gadget uses Shopify's
2023-10 API version for new connections.
If you are looking to connect Gadget with Shopify, follow the Connecting to Shopify tutorial.
Gadget receives webhooks and syncs data from Shopify for the following models:
|Model Name||Required Scopes||Webhook Topics|
|App||Always available||synced only|
|App Credit||Always available||synced only|
|Shopify App Credits (and other billing resources) are only available to OAuth apps created via the Shopify CLI or in the Shopify Partners dashboard that are marked for Public distribution. To successfully receive webhooks or sync this model, you must mark your app for Public distribution. Find more instructions in the Shopify docs.|
|App Installation||Always available||synced only|
|Shopify Company and its related models are only available for apps installed on Shopify Partners Plus stores. To successfully sync and receive webhooks for these models, you must have access to a Shopify Partners Plus store. Access to these models also grant you access to special fields in Shopify Order and Shopify Draft Order models that are only available for Plus stores only. Find more information in the Shopify docs.|
|Company Address||Sent within Company Location model|
|Company Contact Role||synced only|
|Company Contact Role Assignment||synced only|
|App Purchase One Time||Always available|
|Shopify App Purchase One Time (and other billing resources) are only available to OAuth apps created via the Shopify CLI or in the Shopify Partners dashboard that are marked for Public distribution. To successfully receive webhooks or sync this model, you must mark your app for Public distribution. Find more instructions in the Shopify docs.|
|App Subscription||Always available|
|Shopify App Subscription (and other billing resources) are only available to OAuth apps created via the Shopify CLI or in the Shopify Partners dashboard that are marked for Public distribution. To successfully receive webhooks or sync this model, you must mark your app for Public distribution. Find more instructions in the Shopify docs.|
|App Usage Record||Always available||synced only|
|Shopify blogs support Metafields but do not provide a REST or GraphQL mechanism for syncing them. Gadget does not support Metafields on Shopify Blog models.|
|Shopify blog posts support Metafields but do not provide a REST or GraphQL mechanism for syncing them. Gadget does not support Metafields on Shopify Article models.|
|Gadget only syncs themes and assets that a store owns for each Shopify store, which excludes demo themes. Themes and assets for themes with |
|Gadget syncs the Theme and Asset resources from Shopify using the REST API. Gadget does not sync the |
Gadget recommends avoiding syncing the Asset and Theme model if possible, and instead making API calls directly to Shopify to work with assets using the
Gadget only syncs themes and assets that a store owns for each Shopify store, which excludes demo themes. Themes and assets for themes with
|Balance Transaction||synced only|
|Billing Address||Sent within Checkout model|
|Checkout Applied Gift Card||synced only|
|Checkout Line Item||Sent within Checkout model|
|Checkout Shipping Rate||synced only|
|Shipping Address||Sent within Checkout model|
|Bulk Operation||Always available|
|Carrier Service||synced only|
|Cart Line Item||Sent within Cart model|
|Gadget uses the Collection model to represent both Custom Collections and Smart Collections from Shopify.|
|Customer Address||Sent within Customer model|
|Customer Mergeable||synced only|
|Customer Payment Method|
|Discount Code||synced only|
|Dispute data is only available for Shopify merchants using Shopify Payments.|
|Dispute Evidence||synced only|
|Dispute File Upload||synced only|
|Dispute Evidence Fulfillment||synced only|
|Shopify Domain delete and update webhooks are missing key data, so Gadget does an inline sync of the Domain REST API resource when these webhooks arrive to properly discover updates and deletes.|
|Draft Order Line Item||Sent within Draft Order model|
|Duty||Sent within Order Line Item model|
|Fulfillment Line Item||Sent within Fulfillment model|
|Order Adjustment||Sent within Refund model|
|Order Line Item||Sent within Order model|
|Order Risk||synced only|
|Refund Duty||Sent within Refund model|
|Refund Line Item||Sent within Refund model|
|Shipping Line||Sent within Order model|
|This model tracks files uploaded by the merchant in the Files section of the Shopify Admin. Shopify doesn't expose webhooks for the File resource, so files are only updated in Gadget on sync. Files can be accessed via the |
|Fulfillment Order Line Item||synced only|
|Fulfillment Service||synced only|
|GDPR Request||Always available|
|This model tracks incoming GDPR webhook requests from Shopify to delete merchant or customer data. These GDPR webhooks are required to be supported by Public applications for the Shopify app store, which you can read more about in the Shopify Docs. This model doesn't correspond to an API endpoint within Shopify.|
|Gift Card||synced only|
|This model tracks issued gift cards for a Shopify store. Shopify only allows access to the |
Shopify doesn't offer gift card webhooks, so gift card data is only refreshed on sync.
|Inventory Items are synced using the REST API endpont for Inventory Levels for each Location to get a list of inventory levels, and then using the REST API endpoint to get a list of inventory items for each level.|
|Inventory Levels are synced using the REST API endpoint for Inventory Levels at a Location.|
|Market Region||Sent within Market model|
|Market Web Presence||Sent within Market model|
|Shopify pages support Metafields but do not provide a REST or GraphQL mechanism for syncing them. Gadget does not support Metafields on Shopify Page models.|
|Price Rule||synced only|
|Product Image||Sent within Product model|
|Product Option||Sent within Product model|
|Product Variant||Sent within Product model|
|Script Tag||synced only|
|Selling Plan Group|
|Selling Plan Group Product||Sent within Selling Plan Group model|
|Selling Plan Group Product Variant||Sent within Selling Plan Group model|
|Selling Plan||Sent within Selling Plan Group model|
|Subscription Billing Attempt|
|Subscription Line||synced only|
|Subscription Manual Discount||synced only|
The sync between Shopify and my Gadget app failed.
Do you have any custom code running within the
create action on the Shopify Sync model? A custom action with errors will prevent the sync from completing successfully. Try removing or editing the code within actions and running a manual sync.
Actions aren't updating my records in Shopify.
You need to explicitly call out to the Shopify client in your action to manipulate data in Shopify. See accessing the Shopify API.
Webhooks aren't being registered with Shopify.
If you see that some webhooks aren't being registered even after clicking Register Webhooks on the Installs page, it is possible that your app has not requested access to Protected Customer Data. See here for more details.
How do I make calls back to Gadget from a Shopify storefront?
You can call your Gadget app's API client in the storefront's Shopify theme. To do so, you can use the Direct Script Tag option in the Installation section of your app's API Reference.
How do I make an embedded Shopify app using Gadget?
Gadget supports being used as a backend for an app embedded in the Shopify Admin. You can read the docs for setting up the Gadget app client and Provider and go through the tutorial that walks you through setting up an embedded app with the Shopify CLI and Gadget.
When does Gadget automatically sync my Shopify Connection?
Gadget will fully sync your Shopify Connection on demand when you request a sync from the Connections view. Gadget will also automatically fetch all recent data from Shopify in the background in a scheduled daily sync. To see when your app was last synced with Shopify, you can visit the Connections view or view the Shopify Sync data editor.
For more information on how to build Shopify apps using the Gadget Shopify connection, check out our guide here.