# Sales Channel with Contextual Product Feeds - "Not Compatible with Markets" Warning

Hello!

We’ve built a sales channel app that uses contextual product feeds to sync products for Canadian merchants. We use cart permalinks to direct users to the products on the merchant’s shop.

We are aiming to achieve a uni-directional product sync (Shopify → our platform).

I have read through the sales channel documentation here: Apps as sales channels .

After reading through the docs, I understand there are multiple way to ‘sync’ products and inventory levels. From what I can tell, the best option for our use-case would be to use contextual product feeds. However, it seems this requires using some features from Shopify Markets which are in developer preview, and result in a warning message when a shop installs our app:

“Unsupported features: This app is not compatible with Markets, which may affect how some features work and lead to incorrect behavior. Contact (App Name) for more information.”

Implementation

I’d like to double check that I’m understanding how things work here. This is our current implementation:

  1. Shop installs the app and goes through a simple onboarding flow
  2. Subscribe to market webhooks [MARKETS_CREATE ,MARKETS_UPDATE , MARKETS_DELETE]
  3. Subscribe to product feed webhooks [PRODUCT_FEEDS_FULL_SYNC, PRODUCT_FEEDS_FULL_SYNC_FINISH, PRODUCT_FEEDS_INCREMENTAL_SYNC, PRODUCT_FEEDS_UPDATE]
  4. Query markets, and create a product feed for CA-EN (Canada/English)

From here, we listen on the following webhooks to keep products/inventory levels up-to-date for products published to our sales channel:

PRODUCT_FEEDS_FULL_SYNC
PRODUCT_FEEDS_INCREMENTAL_SYNC
PRODUCT_FEEDS_UPDATE
INVENTORY_LEVELS_UPDATE

Since the inventory_levels/update event only provides an inventory_item_id, and not a variant_id, we must also query for the inventory item information when receiving a new product in the product_feeds/* events. For this, we maintain a variant-to-inventory mapping in our db.

These message are then processed by the webhook handlers in the Shopify app, and passed into a queue for our inventory service consumer which applies some additional processing and stores the changes as our source-of-truth for our synced inventory.

Shopify → App Webhook Handler → Queue → Inventory Service

So this means our Shopify App receives the webhooks, and acts as a gateway (linking variants/inventory items) and sends out an enriched message which is handled by the Inventory Service (which never actually calls the Shopify API) and acts as a single source of truth for the inventory.

API Version: 2025-07
App type: Embedded saes channel app
Framework: Remix (Shopify template)

Questions:

  1. Does our architecture follow recommendations/best practices? I feel like I’m missing something here
  2. If yes, are we able to opt-in or remove the Markets compatibility warning
1 Like

Hey @epplerdev thanks for sharing the details here, from what I can tell, your architecture using contextual product feeds and a queued webhook pipeline looks alright, I don’t believe it would be against any of our recommendations.

That install warning typically appears when an app uses unsupported or preview-only resources though, s it’s possible that’s why you’re seeing that pop up there. It’s also best to subscribe to PRODUCT_FEEDS_FULL_SYNC_FINISH and schedule periodic productFullSync reconciliation to catch any missed events. If you haven’t already, you may need to fill out the form listed here to have that compatibility warning removed:

That said, just to clarify to make sure I’m understanding correctly, your actual Inventory Service doesn’t call the Shopify API to change inventory levels that are stored on the Shopify end of things, but your app does ( basically routing any changes from the Inventory app through the middleware there to ensure things are synced on both services)?

That doesn’t seem to be against any of our reccomendations either, but I just wanted to confirm so I can share any further guidance - hope this helps!