Shopify field mapping
Shopify product status to feed inclusion
product.status + publications
no direct equivalent
Deciding which products belong in a feed is a mapping in its own right, and it is not answered by status alone. A product can be active and unpublished, published and out of stock, or active with one variant that should never be advertised.
The Shopify side
- API field
- product.status + publications
- Called
- Product status, and sales channel availability
- Found at
- Product → Status, and Product → Publishing / Sales channels
Before and after
Real values on the left as Shopify stores them, on the right as a channel needs them.
| In Shopify | In the feed | Note |
|---|---|---|
| status active, published to online store | included | The only combination that guarantees a live page. |
| status active, not published | excluded | No live page. The URL exists and returns a 404. |
| status draft | excluded | Not live, though the handle still yields a plausible URL. |
| status archived | excluded | Retired product. Keeping it in the feed advertises something you no longer sell. |
| active, tag "feed:exclude" | excluded | An explicit exclusion visible to anyone in the admin. |
| active, quantity 0, policy deny | included as out_of_stock | Keeps the item and its history for when stock returns. |
The transformation, step by step
-
Exclude anything not active
Draft and archived products have no live page, so their URLs return a 404 to the channel. The URL is still constructible from the handle, which is exactly why this has to be an explicit check rather than an assumption.
-
Check publication to the online store, not just status
An active product that is not published to the online store has no page either. Status and publication are separate settings, and an active-but-unpublished product is the most common source of 404s in a Shopify feed.
-
Respect the sales channel where the store uses one
Stores that install a channel app publish deliberately to it, and that publication is a real signal of intent. Feeding products the merchant excluded from a channel overrides a decision someone made on purpose.
-
Apply your own exclusions on top
Gift cards, sample products, spare parts, staff-only items and test products are all active, published and unsuitable. A tag or collection driving exclusions makes the decision visible in the admin rather than buried in a feed configuration.
-
Decide whether to exclude or mark out-of-stock items
Sending them as out_of_stock keeps the item's history and lets it return quickly. Excluding them removes them entirely and restarts that history when it comes back. The first is usually right for temporary stockouts, the second for discontinued lines.
What goes wrong
Active does not mean published
The two settings are independent, and a product can be active while published to nothing. The feed builds a URL, the channel fetches a 404, and the error report says the landing page is unavailable rather than pointing at a publication setting.
Excluding out-of-stock items loses their history
Dropping a row removes the item from the channel. When the stock returns, it comes back as a new item with no accumulated history, which is a real cost for a temporary stockout. Sending out_of_stock keeps the identity.
Gift cards reach feeds constantly
A gift card is an active, published, purchasable product with a price and often an image, so nothing about it looks unsuitable to a generator. It is not a physical product and does not belong in a shopping feed.
Variant-level exclusions have nowhere to live
Shopify has no per-variant status, so a single unsellable size cannot be excluded through a Shopify setting. It has to come from a variant metafield or from an inventory rule, or the whole product goes.
How feedlab maps it
feedlab includes a product only when it is active and published, applies tag and collection exclusions on top, and sends temporarily unavailable items as out_of_stock rather than dropping them so their history survives. The preview shows the count excluded by each rule, which is where an over-broad exclusion becomes obvious.
Frequently asked questions
Which Shopify products should be in a feed?
Active products published to the online store, minus anything you deliberately exclude such as gift cards, samples and test products. Status alone is not enough, because an active product can be published to nothing.
Why is my channel reporting 404s for products that exist?
They are almost certainly active but unpublished. The handle still produces a valid-looking URL, so the feed includes them and the page does not exist.
Should out-of-stock products be removed from the feed?
Usually not. Sending out_of_stock keeps the item and its performance history for when stock returns. Removal makes sense for discontinued lines rather than temporary stockouts.
How do I exclude a single variant?
Shopify has no per-variant status, so it has to come from a variant metafield or an inventory rule. Otherwise the choice is between the whole product and none of it.
Errors this mapping causes
Attributes involved
- availability The availability attribute tells a channel whether an item can be bought right now, using a fixed vocabulary rather than a stock count. On Shopify it cannot be read from inventory quantity alone, because a variant that does not track inventory or that allows overselling is purchasable at zero quantity.
- link The link attribute is the URL a shopper is sent to after clicking a listing, and the page the channel crawls to verify that the feed is telling the truth about price and availability. On a multi-market Shopify store it must point at the market-specific storefront URL, not the primary domain.
Related concepts
Primary sources
Channel specifications change. These are the official documents this page is based on.