Skip to content
feedlab Request early access

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.

Example transformations for Shopify product status to feed inclusion
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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Related concepts

Primary sources

Channel specifications change. These are the official documents this page is based on.

Last reviewed View as markdown