> For the complete documentation index, see [llms.txt](https://docs.violet.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.violet.io/ecom-platforms/shopify/sales-channel/troubleshooting.md).

# Troubleshooting & FAQ

Common issues with Shopify sales channel publishing (symptoms, causes, and resolutions) plus frequently asked questions for partners and the solutions team.

This page is for channel partners and the Violet solutions team. It assumes the concepts on [Sales Channel Publishing on Shopify](/ecom-platforms/shopify/sales-channel.md).

## Symptom → cause → resolution

<details>

<summary>The merchant connected, but their catalog is empty</summary>

**Most likely cause.** No products have been published to the channel yet. A new channel starts with none of the merchant's products, and this is the expected state immediately after connection.

**Resolution.** Walk the merchant through making their first products available, using the merchant-facing instructions in the [Merchant Help Center](https://merchant-help.violet.io/). This is the most common ticket on this feature. Front-load it in merchant onboarding rather than handling it reactively.

</details>

<details>

<summary>The channel doesn't appear in the merchant's Shopify admin</summary>

**Possible causes, in order of likelihood.**

1. The merchant connected before the feature was enabled for the channel and hasn't reconnected. They keep full-catalog syncing until they re-authorize.
2. The app's `channel_config` extension isn't deployed and released, so Shopify rejected channel creation.
3. The app's specification handle doesn't match the handle in the deployed extension.
4. The app is missing the `read_publications` scope, so the publication couldn't be identified.

**Resolution.** Confirm the prerequisites in [Enablement & Rollout](/ecom-platforms/shopify/sales-channel/enablement.md#prerequisites), then have the merchant reconnect. Reconnecting is safe and repairs partially provisioned connections without creating a duplicate channel.

</details>

<details>

<summary>The merchant published a product, but it never arrived</summary>

**Check in this order.**

1. **Shopify status.** Draft products sync but are never available for purchase; Archived products are archived in Violet. The product must be Active.
2. **Channel catalog rules.** Collection filters, excluded collections, excluded tags, and excluded vendors still apply on top of publication filtering. A published product matching an exclusion rule is correctly withheld.
3. **Which channel was ticked.** On a store connected to several Violet channels, it's easy to publish to the wrong one.
4. **Elapsed time.** Sync is event-driven and usually takes seconds, but is not instantaneous.

</details>

<details>

<summary>The merchant unpublished a product, but it's still being sold</summary>

**Most likely cause.** A missed publication event. Violet's scheduled catalog validation does not currently re-verify publication membership, so an unpublish that occurs during an extended webhook interruption may not be reflected until the product is next modified.

**Second cause.** The channel's integration is reading `status` or `available` rather than `publishing_status`. Unpublishing updates only `publishing_status`, so the other two keep describing the product as it is in the merchant's store, usually still `AVAILABLE`, since it is still selling there.

**Resolution.** Trigger a product re-sync for the affected product. If it recurs across products, check that the integration reads `publishing_status`. See [Unpublishing is an update, not a deletion](/ecom-platforms/shopify/sales-channel/catalog-sync.md#unpublishing-is-an-update-not-a-deletion).

</details>

<details>

<summary>The merchant is enabled for the feature but still syncing their whole catalog</summary>

**Cause.** The merchant-level setting is on, but no channel is provisioned for *this particular* app. This happens on stores connected to several Violet channels, where one connection is provisioned and another isn't.

**Resolution.** Have the merchant reconnect the affected channel. Provisioning is per connection, and reconnecting repairs the missing one without touching the others.

</details>

## FAQ

<details>

<summary>Does enabling this change anything for merchants already connected?</summary>

No. Existing merchants keep full-catalog syncing until they reconnect. Enabling the feature on an app does not retroactively scope anyone's catalog.

</details>

<details>

<summary>Can we migrate existing merchants in bulk?</summary>

No. Channel creation requires Shopify permissions that a merchant only grants by re-authorizing, so migration is necessarily merchant-initiated. Plan a reconnection campaign.

</details>

<details>

<summary>Can Violet publish the merchant's products to the channel for them?</summary>

Not today. Product selection is entirely merchant-driven, and there is no backfill that publishes an existing catalog to a new channel. Merchants must make the first selection themselves.

</details>

<details>

<summary>If a merchant unpublishes everything, is their connection broken?</summary>

No. It's a valid state: an empty publication means an empty catalog. The connection stays healthy and the catalog repopulates as soon as they publish something.

</details>

<details>

<summary>Does unpublishing a product affect orders already placed for it?</summary>

No. Existing orders, fulfillment, and refunds are unaffected.

</details>

<details>

<summary>Can a merchant share different products with different Violet channels?</summary>

Yes. Each connected app has its own channel and its own product selection.

</details>

<details>

<summary>What happens if we turn the feature off for a merchant?</summary>

They revert to full-catalog syncing and their catalog expands back to their whole store. Confirm this is what the merchant expects before doing it.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.violet.io/ecom-platforms/shopify/sales-channel/troubleshooting.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
