Skip to main content

Shopify

This page contains the setup guide and reference information for Shopify.

Prerequisites

  • Your Shopify store name
  • Your Shopify login details or API password

Features

FeatureSupported?
Full Refresh SyncYes
Incremental - Append SyncYes
NamespacesNo

The Shopify source supports both Full Refresh and Incremental syncs. You can choose to copy only the new or updated data, or all rows in the tables and columns you set up for replication, every time a sync is run.

Daspire can sync data for the Shopify API.

Setup guide

Using API password to set up

  1. Go to https://admin.shopify.com/store/YOURSTORE, click Settings from the side menu. Shopify Store Settings

  2. Click Apps and sales channels from the side menu. Then click Develop apps. Shopify Develop Apps

  3. Click Create an app to create a private application. Shopify Create an App

  4. Enter your App name and select the appropriate App developer. Shopify Create an App

  5. Open the App you just created, click Configuration. Then click Configure in Admin API integration. Shopify Config

  6. In Admin API access scopes, select the resources you want to allow access to. Daspire only needs read-level access. Once you're done, click Save.

Note: The UI will show all possible data sources and will show errors when syncing if it doesn't have permissions to access a resource.

Shopify Access Scopes

  1. Once you have assigned the APP relevant access scope, click the API credentials tab, and then click Install app. Shopify API Credentials

  2. Once the app is installed, your Admin API access token will show, copy it. Your API access token starts with shpat_. You'll use as the api_password for the integration Shopify API Access Token

  3. You're ready to set up Shopify in Daspire!

Set up Shopify in Daspire

  1. Select Shopify from the Source list.

  2. Enter a Source Name.

  3. Enter your Shopify Store Name.

  4. Using OAuth 2.0, Authenticate your Shopify account or using API password, enter your API password.

  5. Enter Replication Start Date - the date you would like to replicate data from.

  6. Click Save & Test.

Output schema

The source keeps the existing core streams and adds an opt-in GraphQL expansion. Shopify scopes determine which expanded streams appear during discovery; a missing scope hides only the affected streams. If a previously selected expanded stream is no longer authorized or available, the sync fails clearly instead of silently omitting that stream. Daspire also probes store capabilities before exposing B2B, catalog, price-list, and gift-card streams.

AreaStreams
Store and salesshop, products, customers, orders, transactions, tender_transactions, order_refunds, order_risks, draft_orders, abandoned_checkouts
Fulfillmentfulfillments, fulfillment_orders, fulfillment_events
Discounts and contentprice_rules, discount_codes, pages
Collectionscustom_collections, collects, collections, collection_products
Product and inventoryproduct_variants, product_media, inventory_items, inventory_levels
Custom datametafields (shop), product_metafields, variant_metafields, order_metafields, customer_metafields, collection_metafields, metaobjects
Shopify Paymentsbalance_transactions, payouts, disputes
Returnsreturns, return_line_items, reverse_fulfillments
Markets and catalogsmarkets, catalogs, publications, price_lists
Gift cardsgift_cards, gift_card_transactions
B2Bcompanies, company_locations

Expanded streams use the GraphQL Admin API and Bulk Operations. Bulk result files are processed as JSONL and can resume from the stored operation ID and record offset. A production read drains every selected stream in bounded batches; the batch size limits memory use, not the total records or streams copied by the job.

Directly filterable expanded streams support incremental sync: inventory_items, product_variants, collections, balance_transactions, companies, and company_locations. Nested, partitioned, capability-shaped, or lifecycle-mutable streams use full refresh so a child timestamp, one partition, or an immutable creation date cannot silently hide later changes: inventory_levels, product_media, collection_products, the five owner-metafield streams, metaobjects, payouts, disputes, returns, return_line_items, reverse_fulfillments, fulfillment_events, markets, catalogs, publications, price_lists, gift_cards, and gift_card_transactions.

Production routing recognizes all 46 streams in the 0.1.0 connector. Existing sources remain compatible because GraphQL discovery is still opt-in per source; only enable the expansion after the source token has the required scopes and the selected catalog is ready to use the added streams.

Access scopes for expanded streams

StreamsRequired read scopes
Inventoryread_inventory
Product, media, collections, catalogs, and price listsread_products; variants also use read_inventory; catalogs also require read_publications because the stream includes publication links
Owner metafieldsThe read scope for the owner resource: read_products, read_orders, or read_customers
Metaobjectsread_metaobjects; configure the metaobject types to replicate
Shopify Paymentsread_shopify_payments_accounts, read_shopify_payments_payouts, and/or read_shopify_payments_disputes, depending on the selected stream; dispute order links also use read_orders
Returnsread_orders and read_returns
Fulfillment eventsread_orders plus the three scopes available to a standard app: read_assigned_fulfillment_orders, read_merchant_managed_fulfillment_orders, and read_third_party_fulfillment_orders. The stream is hidden or fails closed unless all three are granted. Marketplace-channel-only fulfillment orders are not included because that separate scope requires a marketplace-channel app approval.
Markets and publicationsread_markets and read_publications; publication catalog links also require read_products or read_product_listings
Gift cardsread_gift_cards; card customer/order links use read_customers and read_orders, and transaction history also requires read_gift_card_transactions (Shopify approval may be required)
B2Bread_companies or read_customers; the store must have B2B access, which discovery verifies with a capability probe

Existing OAuth connections do not gain newly requested scopes automatically. Enable GraphQL and Bulk streams before starting OAuth so Daspire requests the standard expansion scopes, then re-authenticate the source before selecting expanded streams. Legacy OAuth continues to request only the original scopes while the expansion is disabled. For gift cards or the dedicated company scope, select the approved entries under Optional restricted read scopes before starting OAuth. API-password/custom-app connections must add the corresponding read scopes and reinstall or update the app token.

For the original REST incremental child streams, keep their parent streams selected when practical. In particular, sync refunds, risks, and transactions with orders, and sync discount codes with price_rules.

Data type mapping

Integration TypeDaspire Type
stringstring
numbernumber
arrayarray
objectobject
booleanboolean

Performance considerations

Shopify has some rate limit restrictions. Typically, there should not be issues with throttling or exceeding the rate limits but in some edge cases, user can receive the warning message as follows:

Caught retryable error '<some_error> or null' after <some_number> tries. Waiting <some_number> seconds then retrying..."

This is expected when the source hits the 429 - Rate Limit Exceeded HTTP Error. With the given error message, the sync operation still goes on, but will require more time to finish.

Troubleshooting

Max number of tables that can be synced at a time is 6,000. We advise you to adjust your settings if it fails to fetch schema due to max number of tables reached.