---
title: "Product and market status"
description: "How product status and market status decide whether a product is public in product search / GraphQL and available to merchandising."
---

A product in Enad has two status layers. They work together, but they are not the same thing.

**Product status**

The **global lifecycle**. In general, `draft` and `incomplete` keep the
product hidden on every surface, even if market status is `active`.

**Market status**

Availability for **one store group + market** (one surface). When the
product is otherwise publishable, this can still turn that surface off.

The same product can be live in B2B Sweden and off in B2C Finland. Each [store group + market](/catalog/store-groups-and-markets) pair has its own market status.

For the shared contract, a product is public in [product search / GraphQL](/storefront/product-search) when it is **publishable globally** and **market status for that surface is `active`**. In general, the same combination also controls **merchandising** (search and recommendations). Integration-specific behavior may differ. See [Nosto](#nosto) for the mapping we document today.

## What each status means

| Status | Meaning |
| --- | --- |
| `active` | Publishable. |
| `inactive` | Turned off. On a market, this typically makes an otherwise publishable product unavailable on that surface. |
| `draft` | Upcoming, not ready to publish. On the product, this typically keeps it hidden. |
| `incomplete` | Missing required data. On the product, this typically keeps it hidden. |
| `archived` | Ended. Used as a **product** lifecycle status. Treat `archived` on a market as something to confirm; market and channel status is typically `active`, `inactive`, or `incomplete`. |

The explorer lists the statuses you can see on a product in Enad, including `archived` on the market axis.

## Try a combination

Pick a product status and a market status to see the intended outcome for **one** surface.

<StatusExplorer />

## Variant status

Variants have their own status as well. In general they follow the same logic as the product: a global lifecycle, plus availability per store group + market where that is supported.

Once product status and market status are clear, variant status can typically be read the same way. Integration-specific behavior may differ.

## Storefront presentation

Enad exposes the status. The storefront decides how that status is presented.

This is most relevant for `archived`. The shared contract above covers whether the product is public in product search / GraphQL and merchandising. The storefront can still choose the visitor experience, for example:

- a 404
- an old-link or "no longer available" page
- hiding the product from listings while keeping a direct URL

Product search / GraphQL and merchandising integrations do not have to match that storefront experience.

## Merchandising integrations

The explorer shows the shared publication idea. Some integrations add their own states on top. This list will grow as more merchandising tools are connected.

### Nosto

Nosto keeps its own catalog status per surface. For the shared contract, this is the mapping that is robust enough to publish:

| Combination | What Nosto typically gets |
| --- | --- |
| Product `active` + market `active` | Synced and **searchable** |
| Product `active` + market `inactive` | **Discontinued** / not searchable |
| Product `draft` or `incomplete` | Not public, and typically **not synced** as active content |

`discontinued` is integration-specific to Nosto: when the product stays `active` and the **market** is `inactive`, Nosto typically keeps the product but drops it out of search.

Other combinations (including product `inactive`, product `archived`, and market `archived`) should be confirmed per implementation. Do not assume every non-`active` product status means "not synced", or that `archived` always maps like `inactive`.
