1
0
mirror of synced 2025-12-23 21:03:15 -05:00

Docs: Update Source Shopify docs (#31348)

Co-authored-by: katmarkham <40400595+katmarkham@users.noreply.github.com>
This commit is contained in:
Christo Grabowski
2023-11-08 16:56:53 -05:00
committed by GitHub
parent 4f9b877bee
commit 67dc33e11b
2 changed files with 144 additions and 161 deletions

View File

@@ -1,74 +1,105 @@
# Shopify
This page contains the setup guide and reference information for the Shopify source connector.
<HideInUI>
This page contains the setup guide and reference information for the [Shopify](https://www.shopify.com/) source connector.
</HideInUI>
## Prerequisites
* An active [Shopify store](https://www.shopify.com).
* If you are syncing data from a store that you do not own, you will need to [request access to your client's store](https://help.shopify.com/en/partners/dashboard/managing-stores/request-access#request-access) (not required for account owners).
<!-- env:oss -->
* For **Airbyte Open Source** users: A custom Shopify application with [`read_` scopes enabled](#scopes-required-for-custom-app).
<!-- /env:oss -->
## Setup guide
This connector supports the `OAuth2.0` and `API Password` (for private applications) athentication methods.
This connector supports **OAuth2.0** and **API Password** (for private applications) authentication methods.
### Connect using OAuth2.0 (for Cloud users only)
1. Click `Authenticate your Shopify account` to start the autentication.
2. Click `Install` to install the Airbyte application.
3. Log in to your account, if you are not already logged in.
4. Select the store you want to sync and review the consent.
5. Click on `Install` to finish the Installation.
6. Reveiew the `Shop Name` field for the chosen store for a sync.
7. Set the `Start Date` as the starting point for your data replication. Any data created before this date will not be synced.
8. Click `Test and Save` to finish the source set up.
<!-- env:cloud -->
:::note
For existing **Airbyte Cloud** customers, if you are currently using the **API Password** authentication method, please switch to **OAuth2.0**, as the API Password will be deprecated shortly. This change will not affect **Airbyte Open Source** connections.
:::
### Connect using `API PASSWORD` option (for OSS users)
1. Name your source.
2. Enter your Store name. You can find this in your URL when logged in to Shopify or within the Store details section of your Settings.
3. Enter your Admin API access token. To set up the access token, you will need to set up a custom application. See instructions below on creating a custom app.
4. Click Set up source
### Airbyte Cloud
## Creating a Custom App
Authentication to the Shopify API requies a [custom application](https://help.shopify.com/en/manual/apps/app-types/custom-apps). Follow these instructions to create a custom app and find your Admin API Access Token.
#### Connect using OAuth2.0
1. Navigate to Settings > App and sales channels > Develop apps > Create an app
2. Name your new app
3. Select **Configure Admin API scopes**
4. Tick all the scopes prefixed with `read_` (e.g. `read_locations`,`read_price_rules`, etc ) and save. See below for the full list of scopes to allow.
5. Click **Install app** to give this app access to your data.
6. Once installed, go to **API Credentials** to copy the **Admin API Access Token**.
1. Select a **Source name**.
2. Click **Authenticate your Shopify account**.
3. Click **Install** to install the Airbyte application.
4. Log in to your account, if you are not already logged in.
5. Select the store you want to sync and review the consent form. Click **Install app** to finish the installation.
6. The **Shopify Store** field will be automatically filled based on the store you selected. Confirm the value is accurate.
7. (Optional) You may set a **Replication Start Date** as the starting point for your data replication. Any data created before this date will not be synced. Defaults to January 1st, 2020.
8. Click **Set up source** and wait for the connection test to complete.
<!-- /env:cloud -->
You're ready to set up Shopify in Airbyte!
<!-- env:oss -->
### Airbyte Open Source
### Scopes Required for Custom App
#### Create a custom app
Add the following scopes to your custom app to ensure Airbyte can sync all available data. To see a list of streams this source supports, see our full [Shopify documentation](https://docs.airbyte.com/integrations/sources/shopify/).
Authentication to the Shopify API requires a [custom application](https://help.shopify.com/en/manual/apps/app-types/custom-apps). Follow these instructions to create a custom app and find your Admin API Access Token.
- `read_analytics`
- `read_assigned_fulfillment_orders`
- `read_gdpr_data_request`
- `read_locations`
- `read_price_rules`
- `read_product_listings`
- `read_products`
- `read_reports`
- `read_resource_feedbacks`
- `read_script_tags`
- `read_shipping`
- `read_locales`
- `read_shopify_payments_accounts`
- `read_shopify_payments_bank_accounts`
- `read_shopify_payments_disputes`
- `read_shopify_payments_payouts`
- `read_content`
- `read_themes`
- `read_third_party_fulfillment_orders`
- `read_translations`
- `read_customers`
- `read_discounts`
- `read_draft_orders`
- `read_fulfillments`
- `read_gift_cards`
- `read_inventory`
- `read_legal_policies`
- `read_marketing_events`
- `read_merchant_managed_fulfillment_orders`
- `read_online_store_pages`
- `read_order_edits`
- `read_orders`
1. Log in to your Shopify account.
2. In the dashboard, navigate to **Settings** > **App and sales channels** > **Develop apps** > **Create an app**.
3. Select a name for your new app.
4. Select **Configure Admin API scopes**.
5. Grant access to the [following list of scopes](#scopes-required-for-custom-app). Only select scopes prefixed with `read_`, not `write_` (e.g. `read_locations`,`read_price_rules`, etc ).
6. Click **Install app** to give this app access to your data.
7. Once installed, go to **API Credentials** to copy the **Admin API Access Token**. You are now ready to set up the source in Airbyte!
#### Connect using API Password
1. Enter a **Source name**.
2. Enter your **Shopify Store** name. You can find this in your URL when logged in to Shopify or within the Store details section of your Settings.
3. For **API Password**, enter your custom application's Admin API access token.
4. (Optional) You may set a **Replication Start Date** as the starting point for your data replication. Any data created before this date will not be synced. Please note that this defaults to January 1st, 2020.
5. Click **Set up source** and wait for the connection test to complete.
### Custom app scopes
Add the following scopes to your custom app to ensure Airbyte can sync all available data. For more information on access scopes, see the [Shopify docs](https://shopify.dev/docs/api/usage/access-scopes).
* `read_analytics`
* `read_assigned_fulfillment_orders`
* `read_content`
* `read_customers`
* `read_discounts`
* `read_draft_orders`
* `read_fulfillments`
* `read_gdpr_data_request`
* `read_gift_cards`
* `read_inventory`
* `read_legal_policies`
* `read_locations`
* `read_locales`
* `read_marketing_events`
* `read_merchant_managed_fulfillment_orders`
* `read_online_store_pages`
* `read_order_edits`
* `read_orders`
* `read_price_rules`
* `read_product_listings`
* `read_products`
* `read_reports`
* `read_resource_feedbacks`
* `read_script_tags`
* `read_shipping`
* `read_shopify_payments_accounts`
* `read_shopify_payments_bank_accounts`
* `read_shopify_payments_disputes`
* `read_shopify_payments_payouts`
* `read_themes`
* `read_third_party_fulfillment_orders`
* `read_translations`
<!-- env:oss -->
<HideInUI>
## Supported sync modes
@@ -76,64 +107,48 @@ The Shopify source supports both Full Refresh and Incremental syncs. You can cho
This source can sync data for the [Shopify REST API](https://shopify.dev/api/admin-rest) and the [Shopify GraphQl API](https://shopify.dev/api/admin-graphql).
## Troubleshooting tips
* If you faced with `access` errors while using the `OAuth2.0`, please make sure you've followed this [Shopify Article](https://help.shopify.com/en/partners/dashboard/managing-stores/request-access#request-access) to request the access to the Client's store first, once the access is granted, you should be able to proceed with `OAuth2.0` authentication method.
* Check out common troubleshooting issues for the Shopify source connector on our Airbyte Forum [here](https://github.com/airbytehq/airbyte/discussions).
## Supported Streams
This Source is capable of syncing the following core Streams:
## Supported streams
- [Abandoned Checkouts](https://shopify.dev/api/admin-rest/2022-01/resources/abandoned-checkouts#top)
- [Articles](https://shopify.dev/api/admin-rest/2022-01/resources/article)
- [Blogs](https://shopify.dev/api/admin-rest/2022-01/resources/blog)
- [Abandoned Checkouts](https://shopify.dev/api/admin-rest/2022-01/resources/abandoned-checkouts#top)
- [Collects](https://shopify.dev/api/admin-rest/2022-01/resources/collect#top)
- [Collections](https://shopify.dev/api/admin-rest/2022-01/resources/collection)
- [Countries](https://shopify.dev/docs/api/admin-rest/2023-04/resources/country)
- [Custom Collections](https://shopify.dev/api/admin-rest/2022-01/resources/customcollection#top)
- [CustomerAddress](https://shopify.dev/docs/api/admin-rest/2023-04/resources/customer-address)
- [CustomerSavedSearch](https://shopify.dev/docs/api/admin-rest/2023-04/resources/customersavedsearch)
- [Smart Collections](https://shopify.dev/api/admin-rest/2022-01/resources/smartcollection)
- [Customers](https://shopify.dev/api/admin-rest/2022-01/resources/customer#top)
- [Customer Address](https://shopify.dev/docs/api/admin-rest/2023-04/resources/customer-address)
- [Customer Saved Search](https://shopify.dev/docs/api/admin-rest/2023-04/resources/customersavedsearch)
- [Draft Orders](https://shopify.dev/api/admin-rest/2022-01/resources/draftorder#top)
- [Discount Codes](https://shopify.dev/api/admin-rest/2022-01/resources/discountcode#top)
- [Disputes](https://shopify.dev/docs/api/admin-rest/2023-07/resources/dispute)
- [Fulfillments](https://shopify.dev/api/admin-rest/2022-01/resources/fulfillment)
- [Fulfillment Orders](https://shopify.dev/api/admin-rest/2022-01/resources/fulfillmentorder)
- [Inventory Items](https://shopify.dev/api/admin-rest/2022-01/resources/inventoryItem)
- [Inventory Levels](https://shopify.dev/api/admin-rest/2021-01/resources/inventorylevel)
- [Locations](https://shopify.dev/api/admin-rest/2022-01/resources/location)
- [Metafields](https://shopify.dev/api/admin-rest/2022-01/resources/metafield#top)
- [Orders](https://shopify.dev/api/admin-rest/2022-01/resources/order#top)
- [Orders Refunds](https://shopify.dev/api/admin-rest/2022-01/resources/refund#top)
- [Orders Risks](https://shopify.dev/api/admin-rest/2022-01/resources/order-risk#top)
- [Order Refunds](https://shopify.dev/api/admin-rest/2022-01/resources/refund#top)
- [Order Risks](https://shopify.dev/api/admin-rest/2022-01/resources/order-risk#top)
- [Pages](https://shopify.dev/api/admin-rest/2022-01/resources/page#top)
- [Price Rules](https://shopify.dev/api/admin-rest/2022-01/resources/pricerule#top)
- [Products](https://shopify.dev/api/admin-rest/2022-01/resources/product#top)
- [Products (GraphQL)](https://shopify.dev/api/admin-graphql/2022-10/queries/products)
- [Product Images](https://shopify.dev/api/admin-rest/2022-01/resources/product-image)
- [Product Variants](https://shopify.dev/api/admin-rest/2022-01/resources/product-variant)
- [Shop](https://shopify.dev/api/admin-rest/2022-01/resources/shop)
- [Smart Collections](https://shopify.dev/api/admin-rest/2022-01/resources/smartcollection)
- [Transactions](https://shopify.dev/api/admin-rest/2022-01/resources/transaction#top)
- [Tender Transactions](https://shopify.dev/api/admin-rest/2022-01/resources/tendertransaction)
- [Pages](https://shopify.dev/api/admin-rest/2022-01/resources/page#top)
- [Price Rules](https://shopify.dev/api/admin-rest/2022-01/resources/pricerule#top)
- [Locations](https://shopify.dev/api/admin-rest/2022-01/resources/location)
- [InventoryItems](https://shopify.dev/api/admin-rest/2022-01/resources/inventoryItem)
- [InventoryLevels](https://shopify.dev/api/admin-rest/2021-01/resources/inventorylevel)
- [Fulfillment Orders](https://shopify.dev/api/admin-rest/2022-01/resources/fulfillmentorder)
- [Fulfillments](https://shopify.dev/api/admin-rest/2022-01/resources/fulfillment)
- [Shop](https://shopify.dev/api/admin-rest/2022-01/resources/shop)
### Stream sync recommendations
## Capturing deleted records
For better experience with `Incremental Refresh` the following is recommended:
The connector captures deletions for records in the `Articles`, `Blogs`, `CustomCollections`, `Orders`, `Pages`, `PriceRules` and `Products` streams.
- `Order Refunds`, `Order Risks`, `Transactions` should be synced along with `Orders` stream.
- `Discount Codes` should be synced along with `Price Rules` stream.
If child streams are synced alone from the parent stream - the full sync will take place, and the records are filtered out afterwards.
## Capturing Deleted Records
The connector captures deletions for records in the `Articles`, `Blogs`, `CustomCollections`, `Orders`, `Pages`, `PriceRules` and `Products` streams.
When a record is deleted, the connector outputs a record with the `ID` of that record and the `deleted_at`, `deleted_message`, and `deleted_description` fields filled out. No other fields are filled out for the deleted records.
Check the following Shopify documentation for more information about the [Retrieving Deleted Records](https://shopify.dev/docs/api/admin-rest/2023-07/resources/event)
When a record is deleted, the connector outputs a record with the `ID` of that record and the `deleted_at`, `deleted_message`, and `deleted_description` fields filled out. No other fields are filled out for the deleted records.
Check the following Shopify documentation for more information about [retrieving deleted records](https://shopify.dev/docs/api/admin-rest/2023-07/resources/event).
## Data type mapping
@@ -153,15 +168,43 @@ Check the following Shopify documentation for more information about the [Retrie
| Incremental - Append Sync | Yes |
| Namespaces | No |
## Performance considerations
## Limitations & Troubleshooting
Shopify has some [rate limit restrictions](https://shopify.dev/concepts/about-apis/rate-limits). 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:
<details>
<summary>
Expand to see details about Shopify connector limitations and troubleshooting
</summary>
### Connector limitations
#### Rate limiting
Shopify has some [rate limit restrictions](https://shopify.dev/concepts/about-apis/rate-limits). Typically, there should not be issues with throttling or exceeding the rate limits but, in some edge cases, you may encounter the following warning message:
```text
"Caught retryable error '<some_error> or null' after <some_number> tries. Waiting <some_number> seconds then retrying..."
"Caught retryable error '<some_error> or null' after <some_number> tries.
Waiting <some_number> seconds then retrying..."
```
This is expected when the connector hits the 429 - Rate Limit Exceeded HTTP Error. With given error message the sync operation is still goes on, but will require more time to finish.
This is expected when the connector hits a `429 - Rate Limit Exceeded` HTTP Error. The sync operation will continue successfully after a short backoff period.
#### Incremental sync recommendations
For the smoothest experience with Incremental Refresh sync mode, the following is recommended:
- The `Order Refunds`, `Order Risks`, `Transactions` should be synced along with `Orders` stream.
- `Discount Codes` should be synced along with `Price Rules` stream.
If a child stream is synced independently of its parent stream, a full sync will occur, followed by a filtering out of records. This process may be less efficient compared to syncing child streams alongside their respective parent streams.
### Troubleshooting
* If you encounter access errors while using **OAuth2.0** authentication, please make sure you've followed this [Shopify Article](https://help.shopify.com/en/partners/dashboard/managing-stores/request-access#request-access) to request the access to the client's store first. Once the access is granted, you should be able to proceed with **OAuth2.0** authentication.
* Check out common troubleshooting issues for the Shopify source connector on our Airbyte Forum [here](https://github.com/airbytehq/airbyte/discussions).
</details>
## Changelog
@@ -221,4 +264,6 @@ This is expected when the connector hits the 429 - Rate Limit Exceeded HTTP Erro
| 0.1.6 | 2021-06-24 | [4009](https://github.com/airbytehq/airbyte/pull/4009) | Added pages, price rules and discount codes streams |
| 0.1.5 | 2021-06-10 | [3973](https://github.com/airbytehq/airbyte/pull/3973) | Added `AIRBYTE_ENTRYPOINT` for Kubernetes support |
| 0.1.4 | 2021-06-09 | [3926](https://github.com/airbytehq/airbyte/pull/3926) | New attributes to Orders schema |
| 0.1.3 | 2021-06-08 | [3787](https://github.com/airbytehq/airbyte/pull/3787) | Added Native Shopify Source Connector |
| 0.1.3 | 2021-06-08 | [3787](https://github.com/airbytehq/airbyte/pull/3787) | Added Native Shopify Source Connector |
</HideInUI>