Version 8.0.0

August 25, 2026

Ensure the Craft queue is empty before upgrading. Any pending sync jobs will be unable to update their status after the migration runs.

If you change the Additional Features or Custom Scopes settings after the app is already authorized, you must update the scopes in your Shopify app configuration and then re-authorize the app.

This is primarily a maintenance release, focusing on Shopify API compatibility, authorization, and overall consistency.

Developers should review their templates and extensions for potentially breaking changes to products’ and variants’ shopifyId property. See Upgrading for details.

Store Management

  • Added support for syncing product translations from Shopify. (#215)
  • It’s now possible to view the required API scopes in the plugin settings.
  • It’s now possible to extend the API scopes with opt-in additional features and custom scopes.
  • Added support for Shopify API versions 2026-04 and 2026-07.
  • Product inventory is now synced when Shopify sends inventory_items/update webhooks.

Extensibility

  • Added craft\shopify\auth\OAuthFlow.
  • Added craft\shopify\clients\GraphqlClient.
  • Added craft\shopify\controllers\SettingsController::actionGetScopes().
  • Added craft\shopify\enums\ApiVersion.
  • Added craft\shopify\enums\WebhookTopics.
  • Added craft\shopify\exceptions\InvalidOAuthException.
  • Added craft\shopify\exceptions\ShopifyApiCommunicationException.
  • Added craft\shopify\exceptions\ShopifyApiException.
  • Added craft\shopify\helpers\Metafield.
  • Added craft\shopify\helpers\ShopifyHelper.
  • Added craft\shopify\models\Settings::REQUIRED_SCOPES.
  • Added craft\shopify\models\Settings::getAdditionalFeatures().
  • Added craft\shopify\models\Settings::getAdditionalFeaturesOptions().
  • Added craft\shopify\models\Settings::getCustomScopes().
  • Added craft\shopify\models\Settings::getScopes().
  • Added craft\shopify\models\Settings::setAdditionalFeatures().
  • Added craft\shopify\models\Settings::setCustomScopes().
  • Added craft\shopify\models\Variant::$shopifyGid.
  • Added craft\shopify\services\Api::connect().
  • Added craft\shopify\services\Api::getShopLocalesGql().
  • Added craft\shopify\services\Api::getWebhookTopics().
  • Added craft\shopify\services\BulkOperations::getBulkOperationByShopifyGid().
  • Added craft\shopify\services\Products::deleteProductByShopifyGid().
  • Added craft\shopify\services\Products::deleteShopifyDataByShopifyGid().
  • Added craft\shopify\services\Products::syncProductByShopifyGid().
  • Added craft\shopify\webhooks\WebhookRegistry.
  • craft\shopify\elements\Product::setMetafields() and craft\shopify\models\Variant::setMetafields() now require a list-shaped array of {key, value} objects (or a JSON-encoded string of the same), and throw \InvalidArgumentException for anything else. Previously, an associative key => value map was also accepted without validation.
  • craft\shopify\handlers\Webhook::handle() no longer implements Shopify\Webhooks\Handler, and its $topic argument is now a craft\shopify\enums\WebhookTopics enum instead of a string.
  • craft\shopify\models\Variant::$shopifyId now holds the numeric Shopify ID. The full GID is now available via $shopifyGid.
  • craft\shopify\records\ShopifyData::$shopifyId is now a generated (read-only) column containing the numeric Shopify ID. The full GID is now available via $shopifyGid.
  • craft\shopify\services\Api::getGqlClient() now returns a craft\shopify\clients\GraphqlClient instance instead of Shopify\Clients\Graphql.
  • API and webhook errors are now thrown as craft\shopify\exceptions\ShopifyApiException and craft\shopify\exceptions\InvalidOAuthException, rather than the Shopify\Exception\* classes from the (now-removed) shopify/shopify-api package.
  • Renamed craft\shopify\jobs\ProcessBulkOperationData::$bulkOperationShopifyId to $bulkOperationShopifyGid.
  • Renamed craft\shopify\models\BulkOperation::$shopifyId to $shopifyGid.
  • Deprecated craft\shopify\services\BulkOperations::getBulkOperationByShopifyId(). Use getBulkOperationByShopifyGid() instead.
  • Deprecated craft\shopify\services\Products::deleteProductByShopifyId(). Use deleteProductByShopifyGid() instead.
  • Deprecated craft\shopify\services\Products::deleteShopifyDataByShopifyId(). Use deleteShopifyDataByShopifyGid() instead.
  • Deprecated craft\shopify\services\Products::syncProductByShopifyId(). Use syncProductByShopifyGid() instead.
  • Removed craft\shopify\console\controllers\SyncController::$throttle.
  • Removed craft\shopify\models\Settings::getApiKey(). Use getClientId() instead.
  • Removed craft\shopify\models\Settings::getApiSecretKey(). Use getClientSecret() instead.
  • Removed craft\shopify\models\Settings::setApiKey(). Use setClientId() instead.
  • Removed craft\shopify\models\Settings::setApiSecretKey(). Use setClientSecret() instead.
  • Removed craft\shopify\services\Api::WEBHOOK_TOPICS. Use getWebhookTopics() instead.
  • Removed craft\shopify\services\Api::getSession(). Use connect() instead.
  • Removed craft\shopify\services\Api::initializeContext().

System

  • Shopify for Craft now requires Craft CMS 5.10.7 or later. Craft 4 is no longer supported.
  • The shopify_data table’s shopifyId column has been renamed to shopifyGid. A new shopifyId generated column has been added, set to the numeric ID at the end of the GID.
  • The shopify_bulkoperations table’s shopifyId column has been renamed to shopifyGid.
  • Removed the shopify/shopify-api Composer dependency.
  • Fixed a bug where validation errors for the “Context Pricing Countries” setting weren’t displaying correctly.
  • Fixed a bug where inventory_levels/update webhooks weren’t triggering a product sync.

Version 7.1.4

August 17, 2026
  • It is now possible to view plugin settings as an admin on environments that do not allow admin changes.
  • Fixed a bug where CSRF validation wasn’t being enforced for the settings, product sync, and sync-deletion actions.
  • Fixed a bug where Shopify product element permissions weren’t being enforced.

Version 7.1.3

June 18, 2026
  • Fixed a bug where product titles weren't syncing correctly across sites. (#198, #201)
  • Fixed a PHP error that could occur when running Craft 4. (#218)

Version 7.1.2

June 3, 2026
  • Fixed a PHP error that occurred when editing settings in Craft 4. (#216)

Version 7.1.1

May 12, 2026
  • shopifyId and shopifyGid fields are now available when querying product variants via GraphQL. (#211)

Version 7.1.0

April 8, 2026
  • Added support for querying for products via GraphQL. (#49, #203, #206)
  • Added the totalInventory product query param.
  • Added craft\shopify\elements\Product::$totalInventory.
  • Added craft\shopify\elements\db\ProductQuery::$totalInventory.
  • Added craft\shopify\elements\db\ProductQuery::totalInventory().
  • Added craft\shopify\gql\arguments\elements\Product.
  • Added craft\shopify\gql\interfaces\elements\Product.
  • Added craft\shopify\gql\types\Image.
  • Added craft\shopify\gql\types\Metafield.
  • Added craft\shopify\gql\types\Option.
  • Added craft\shopify\gql\types\Variant.
  • Added craft\shopify\gql\types\elements\Product.

Version 7.0.2

March 24, 2026
  • Fixed a PHP error that could occur when authorizing the Shopify app. (#204)

Version 7.0.1

March 20, 2026
  • Fixed a PHP error that could occur when retrieving products. (#202)

Version 7.0.0

March 19, 2026

Shopify for Craft 7.x uses a new app-based authorization system. Follow the upgrade instructions to get new credentials.

  • Shopify for Craft now requires version 2026-01 of Shopify’s GraphQL Admin API.
  • Shopify for Craft now requires Shopify PHP SDK 6.0 or later.
  • Added support for setting the base webhook and auth URL using the SHOPIFY_PUBLIC_DEV_URL environment variable. (#185)
  • Product conditions can now have a “Template Suffix” rule.
  • Added the “Shopify Sync” permission.
  • Added the templateSuffix product query param.
  • Added craft\shopify\collections\VariantCollection.
  • Added craft\shopify\console\controllers\ApiController.
  • Added craft\shopify\controllers\AuthController.
  • Added craft\shopify\db\Table::ACCESS_TOKENS.
  • Added craft\shopify\elements\conditions\products\TemplateSuffixConditionRule.
  • Added craft\shopify\elements\db\ProductQuery::$templateSuffix.
  • Added craft\shopify\elements\db\ProductQuery::templateSuffix().
  • Added craft\shopify\events\DefineGqlFieldsEvent.
  • Added craft\shopify\events\DefineGqlQueryArgumentsEvent.
  • Added craft\shopify\fieldlayoutelements\MediaField.
  • Added craft\shopify\fieldlayoutelements\MetafieldsField.
  • Added craft\shopify\fieldlayoutelements\OptionsField.
  • Added craft\shopify\fieldlayoutelements\VariantsField.
  • Added craft\shopify\models\Settings::getAuthUrl().
  • Added craft\shopify\models\Settings::getClientId().
  • Added craft\shopify\models\Settings::getClientSecret().
  • Added craft\shopify\models\Settings::setClientId().
  • Added craft\shopify\models\Settings::setClientSecret().
  • Added craft\shopify\models\Variant.
  • Added craft\shopify\records\AccessToken.
  • Added craft\shopify\services\Api::API_ACCESS_TOKEN_ENV_VAR.
  • Added craft\shopify\services\Api::EVENT_DEFINE_GQL_QUERY_ARGUMENTS.
  • Added craft\shopify\services\Api::EVENT_DEFINE_PRODUCT_GQL_FIELDS.
  • Added craft\shopify\services\Api::getAccessToken().
  • Added craft\shopify\services\Api::initializeContext().
  • craft\shopify\elements\Product::getCheapeastVariant() now returns a craft\shopify\models\Variant object.
  • craft\shopify\elements\Product::getDefaultVariant() now returns a craft\shopify\models\Variant object.
  • craft\shopify\elements\Product::getVariants() now returns a collection.
  • Deprecated the --throttle option for shopify/sync commands.
  • Deprecated craft\shopify\models\Settings::getApiKey(). getClientId() should be used instead.
  • Deprecated craft\shopify\models\Settings::getApiSecretKey(). getClientSecret() should be used instead.
  • Deprecated craft\shopify\models\Settings::setApiKey(). setClientId() should be used instead.
  • Deprecated craft\shopify\models\Settings::setApiSecretKey(). setClientSecret() should be used instead.
  • Removed the publishedOnCurrentPublication product query param.
  • Removed craft\shopify\controllers\ProductsController::actionRenderCardHtml().
  • Removed craft\shopify\elements\Product::$publishedOnCurrentPublication.
  • Removed craft\shopify\elements\Product::getBodyHtml().
  • Removed craft\shopify\elements\Product::setBodyHtml().
  • Removed craft\shopify\elements\db\ProductQuery::$publishedOnCurrentPublication.
  • Removed craft\shopify\elements\db\ProductQuery::publishedOnCurrentPublication().
  • Removed craft\shopify\handlers\Product.
  • Removed craft\shopify\helpers\Metafields.
  • Removed craft\shopify\models\Settings::$syncProductMetafields.
  • Removed craft\shopify\models\Settings::$syncVariantMetafields.
  • Removed craft\shopify\services\Products::syncAllProducts().
  • Fixed a bug where product slugs weren’t syncing correctly.

Version 6.1.3

January 19, 2026
  • Fixed a PHP error that could occur when contextual pricing countries aren’t set. (#191)

Version 6.1.2

December 8, 2025
  • Fixed a bug where syncing queue jobs could run indefinitely. (#189)
  • Fixed a bug where syncing products could fail if the sync file had downloaded incorrectly.

Version 6.1.1

November 6, 2025
  • Fixed a bug where file storage could be maxed out when using multiple queue workers.
  • Fixed a bug where contextual pricing countries weren’t being force to be capitalized.

Version 6.1.0

October 24, 2025
  • Shopify for Craft now supports version 2025-07 of Shopify’s GraphQL Admin API.
  • Fixed a PHP error that could occur with missing environment variables. (#178)

Version 6.0.5

September 9, 2025
  • Fixed a bug where Shopify data could be overwritten when syncing products. (#177)

Version 6.0.4.1

August 8, 2025
  • Fixed a PHP error that could occur when upgrading. (#176)

Version 6.0.4

August 8, 2025
  • Fixed a PHP error that occurred when setting the Shopify host name to a non myshopify domain. (#168)
  • Fixed a PHP error that occurred when creating product drafts. (#176)

Version 6.0.3

May 27, 2025
  • Fixed a SQL error that occurred when syncing products on MariaDB. (#166)
  • Fixed a SQL error that could occur when upgrading.

Version 6.0.2

May 19, 2025
  • Fixed a bug where image sort order wasn’t being respected when syncing products. (#161)

Version 6.0.1

April 29, 2025
  • Fixed a PHP error that could occur when viewing Shopify utilities. (#156)
  • Fixed a bug where image was missing from Shopify variant data.

Version 6.0.0

April 17, 2025

After updating, go to ShopifyWebhooks and create the missing webhooks.

  • Shopify for Craft now uses the GraphQL Admin API to interact with Shopify.
  • Shopify now requires Craft CMS 4.15.0+ or 5.0.0+.
  • Data syncing is now done via the queue.
  • Added the shopify/data/reset command.
  • Added craft\shopify\Plugin::getBulkOperation().
  • Added craft\shopify\api\BulkDataBatcher.
  • Added craft\shopify\console\controllers\DataController.
  • Added craft\shopify\controllers\Sync.
  • Added craft\shopify\db\ProductQuery::$publishedOnCurrentPublication.
  • Added craft\shopify\db\ProductQuery::$shopifyGid.
  • Added craft\shopify\db\ProductQuery::$withAll.
  • Added craft\shopify\db\ProductQuery::$withImages.
  • Added craft\shopify\db\ProductQuery::$withMetafields.
  • Added craft\shopify\db\ProductQuery::$withVariants.
  • Added craft\shopify\db\ProductQuery::publishedOnCurrentPublication().
  • Added craft\shopify\db\ProductQuery::shopifyGid().
  • Added craft\shopify\db\ProductQuery::withAll().
  • Added craft\shopify\db\ProductQuery::withImages().
  • Added craft\shopify\db\ProductQuery::withMetafields().
  • Added craft\shopify\db\ProductQuery::withVariants().
  • Added craft\shopify\db\Table::DATA.
  • Added craft\shopify\elements\Product::$publishedOnCurrentPublication.
  • Added craft\shopify\elements\Product::$shopifyGid.
  • Added craft\shopify\elements\Product::getData().
  • Added craft\shopify\elements\Product::getDescriptionHtml().
  • Added craft\shopify\elements\Product::setData().
  • Added craft\shopify\elements\Product::setDescriptionHtml().
  • Added craft\shopify\helpers\Product::shopifyPublishedHtml().
  • Added craft\shopify\helpers\Product::shopifyStatusHtml().
  • Added craft\shopify\jobs\ProcessBulkOperationData.
  • Added craft\shopify\models\BulkOperation.
  • Added craft\shopify\records\BulkOperation.
  • Added craft\shopify\records\ShopifyData.
  • Added craft\shopify\services\Api::WEBHOOK_TOPICS.
  • Added craft\shopify\services\Api::createQuery().
  • Added craft\shopify\services\Api::deleteWebhookById().
  • Added craft\shopify\services\Api::getGqlClient().
  • Added craft\shopify\services\Api::getProductGql().
  • Added craft\shopify\services\Api::getShop().
  • Added craft\shopify\services\Api::getShopGql().
  • Added craft\shopify\services\Api::getShopifyDataByType().
  • Added craft\shopify\services\Api::getWebhooks().
  • Added craft\shopify\services\Api::query().
  • Added craft\shopify\services\BulkOperations.
  • Added craft\shopify\services\Products::deleteShopifyDataByShopifyId().
  • Added craft\shopify\services\Products::eagerLoadImagesForProducts().
  • Added craft\shopify\services\Products::eagerLoadMetafieldsForProducts().
  • Added craft\shopify\services\Products::eagerLoadVariantsForProducts().
  • Added craft\shopify\services\Products::normalizeShopifyGid().
  • craft\shopify\events\ShopifyProductSyncEvent::$source now has a type of array.
  • craft\shopify\services\Products::createOrUpdateProduct() no longer has $metafields and $variants arguments.
  • craft\shopify\services\Products::createOrUpdateProduct()’s $product argument now has a type of array.
  • Renamed craft\shopify\handlers\Product to Webhook.
  • Deprecated craft\shopify\elements\Product::getBodyHtml(). getDescriptionHtml() should be used instead.
  • Deprecated craft\shopify\elements\Product::getShopifyStatusHtml(). craft\shopify\helpers\Product::shopifyStatusHtml() should be used instead.
  • Deprecated craft\shopify\elements\Product::setBodyHtml(). setDescriptionHtml() should be used instead.
  • Deprecated craft\shopify\helpers\Metafields.
  • Deprecated craft\shopify\models\Settings::$syncProductMetafields. Metafields are always included when synchronizing product data.
  • Deprecated craft\shopify\models\Settings::$syncVariantMetafields. Metafields are always included when synchronizing variant data.
  • Deprecated craft\shopify\services\Api::get(). query() should be used instead.
  • Deprecated craft\shopify\services\Api::getAll(). query() should be used instead.
  • Deprecated craft\shopify\services\Api::getAllProducts().
  • Deprecated craft\shopify\services\Api::getClient(). getGqlClient() should be used instead.
  • Deprecated craft\shopify\services\Api::getMetafieldsByIdAndOwnerResource().
  • Deprecated craft\shopify\services\Api::getMetafieldsByProductId().
  • Deprecated craft\shopify\services\Api::getMetafieldsByVariantId().
  • Deprecated craft\shopify\services\Api::getProductByShopifyId().
  • Deprecated craft\shopify\services\Api::getProductIdByInventoryItemId().
  • Deprecated craft\shopify\services\Api::getVariantsByProductId().
  • Removed craft\shopify\db\Table::PRODUCTDATA.
  • Removed craft\shopify\elements\Product::$publishedScope.
  • Removed craft\shopify\elements\db\ProductQuery::$publishedScope.
  • Removed craft\shopify\elements\db\ProductQuery::publishedScope().
  • Removed craft\shopify\jobs\UpdateProductMetadata.
  • Removed craft\shopify\records\ProductData.
  • Removed craft\shopify\services\Api::SHOPIFY_API_VERSION.
  • Removed craft\shopify\services\Products::$sleepSeconds.
  • Removed craft\shopify\services\Products::$throttle.

Version 5.4.1

February 12, 2025
  • Fixed a PHP error that could occur when updating. (#133)

Version 5.4.0

February 6, 2025
  • It is now possible to associate Shopify products with elements imported in Feed Me. (#116)
  • Added craft\shopify\feedme\fields\Products.

Version 5.3.1

January 28, 2025
  • Fixed a PHP error that could occur when trying to create webhooks. (#129)

Version 5.3.0

December 20, 2024
  • Shopify now requires Craft CMS 4.3.0+ or 5.0.0+.
  • Added the “API Version” setting. (#128, #121)
  • Added support for selecting products in Link fields. (Craft 5 only.)
  • Product syncing now uses presentment prices by default. (#122)
  • Added craft\shopify\linktypes\Product.
  • Added craft\shopify\models\Settings::getApiVersion().
  • Added craft\shopify\models\Settings::setApiVersion().
  • Added craft\shopify\services\Api::getMetaFieldClass().
  • Added craft\shopify\services\Api::getProductClass().
  • Added craft\shopify\services\Api::getSupportedApiVersions().
  • Added craft\shopify\services\Api::getVariantClass().
  • Deprecated craft\shopify\services\Api::SHOPIFY_API_VERSION.
  • Fixed a bug where variant column data could be larger than a MySQL TEXT column.

Version 5.2.0

June 18, 2024
  • shopify/sync commands now support a --throttle option.
  • Fixed a bug where syncing Shopify variants would be limited to 50. (#115)
  • Added craft\shopify\console\controllers\SyncController::$throttle.
  • Added craft\shopify\services\Products::$throttle.
  • Added craft\shopify\services\Products::$sleepSeconds.

Version 5.1.2

April 24, 2024
  • Fixed a bug where syncing meta fields would cause Shopify API rate limiting.
  • Fixed a bug where variant meta fields weren’t being unpacked.

Version 5.1.1

April 15, 2024
  • Fixed a PHP error that could occur when syncing products with emojis. (#107)
  • Fixed a PHP error that could occur when syncing products. (#105)

Version 5.1.0

April 3, 2024
  • Added support for syncing variant meta fields. (#99)
  • Added the syncProductMetafields and syncVariantMetafields config settings, which can be enabled to sync meta fields.
  • Added craft\shopify\models\Settings::$syncProductMetafields.
  • Added craft\shopify\models\Settings::$syncVariantMetafields.

Version 5.0.0

March 20, 2024
  • Shopify now requires Craft CMS 5.0.0-beta.10 or later.

Version 4.1.2

April 15, 2024
  • Fixed a PHP error that could occur when syncing products with emojis. (#107)
  • Fixed a PHP error that could occur when syncing products. (#105)

Version 4.1.1

April 9, 2024
  • Fixed a bug where syncing meta fields would cause Shopify API rate limiting.
  • Fixed a bug where variant meta fields weren’t being unpacked.

Version 4.1.0

April 3, 2024
  • Added support for syncing variant meta fields. (#99)
  • Added the syncProductMetafields and syncVariantMetafields config settings, which can be enabled to sync meta fields.
  • Added craft\shopify\models\Settings::$syncProductMetafields.
  • Added craft\shopify\models\Settings::$syncVariantMetafields.

Version 4.0.0

November 2, 2023

After updating, visit your Shopify store and go to SettingsApps and sales channelsDevelop apps → [your app] → Configuration, and update the Webhook version setting to 2023-10.

  • Syncing meta fields is no longer performed via a queue job.
  • Shopify products’ reference handle is now shopifyproduct. (#77)
  • Deprecated craft\shopify\jobs\UpdateProductMetadata.
  • Removed craft\shopify\events\ShopifyProductSyncEvent::$metafields. ShopifyProductSyncEvent::$element->getMetaFields() can be used instead.
  • shopify/shopify-api 5.2.0 or later is now required. (#81, #84)
  • Fixed a bug where routes weren’t saving the chosen template.

Version 3.2.0

June 12, 2023
  • Added support for syncing variant inventory levels. (#61)
  • Added craft\shopify\elements\db\ProductQuery::publishedScope(). (#65)
  • Fixed a PHP error that occurred when saving the plugin settings in headless mode. (#68)
  • Fixed a bug where changes to the product field layout in the project config weren’t applying correctly. (#52)
  • Fixed an error that occurred when installing the plugin on PostgreSQL. (#58)

Version 3.1.1

January 20, 2023
  • Fixed a SQL error that occurred when syncing products with several tags. (#54)
  • Product metadata is now synced via a queue job to avoid the Shopify API rate limiting.

Version 3.1.0

December 14, 2022
  • Added the resave/shopify-products console command. (#47)
  • Products are now automatically re-saved when the “Product URI Format” setting is changed. (#47)
  • The product field layout is now stored in the project config.

Version 3.0.1

November 16, 2022
  • Fixed a PHP error that occurred when saving invalid settings. (#39, #40)
  • Added craft\shopify\elements\Product::getCheapestVariant().
  • Added craft\shopify\elements\Product::getDefaultVariant().

Version 3.0.0.1

November 8, 2022
  • Fixed a namespacing bug.

Version 3.0.0

November 8, 2022
  • Initial release under new management. If you’re upgrading from Shopify Product Fetcher, see Migrating from v2.x.