At a glance
Product-count split by storefront publishing status:ACTIVE,DRAFT,ARCHIVED. The catalog hygiene number, are you running a tight catalog or sitting on accumulated draft sludge?
| What it counts | GROUP BY status.keyword → COUNT(products). Each Product.id contributes one to its current status bucket. Snapshot, not cumulative; a product moved from DRAFT to ACTIVE yesterday is in ACTIVE today, with no historical contribution to DRAFT. |
| API endpoint | Admin GraphQL. Product.status (enum ACTIVE / DRAFT / ARCHIVED). |
| What “ACTIVE” means in Shopify | Visible on at least one sales channel (Online Store, POS, Buy Button, marketplace, Shopify Audiences, etc.). A product ACTIVE but unpublished from the Online Store still counts as ACTIVE, which surprises merchants who think ACTIVE = “shoppers can buy this online today”. For “buyable on the website right now” use the per-channel publication state, not this card. |
| What “DRAFT” means | Saved in admin but not visible to any channel. Used during merchandising prep, supplier-sample evaluation, or for products being staged for a launch. Healthy stores keep DRAFT < 5% of catalog; high DRAFT share usually indicates abandoned merchandising work. |
| What “ARCHIVED” means | Soft-deleted. Removed from all channels but retained for historical order references (an ARCHIVED product still appears on past order line items). Crucially, ARCHIVED products cannot be re-listed without un-archiving first; merchants who archive seasonal SKUs annually must remember to un-archive before the season returns. |
| VAT / tax treatment | Not applicable (catalog-count metric, not money). |
| Shipping / discounts / refunds / cancellations | Not applicable. |
| Currency | Not applicable. |
| Channels / sources | The status applies to the product, not its publication on each channel. A product can be ACTIVE but only published to POS (not the Online Store), or vice-versa. To see channel-level publication, drill into productPublications per product. |
| Variants | The card counts at the product level, not the variant level. A product with 24 variants and 1 ACTIVE status is 1 toward ACTIVE. A store with 200 products averaging 8 variants each has 1,600 SKUs but only 200 rows in this card. |
| Time window | RT (real-time snapshot). The card always reflects the current state of the catalog, not a windowed view. |
| Alert trigger | None. The card is informational; the actionable signal is unusual draft accumulation or a sudden archived-spike (catalog migration, app misfire). |
| Roles | owner, operations |
Calculation
Worked example
An AU SMB cosmetics brand on Shopify (Standard plan), single AUD storefront, ~3 years trading. Snapshot at 12 May 26.| Status | Product count | Share | Notes |
|---|---|---|---|
ACTIVE | 412 | 68.4% | Live catalog, visible somewhere |
DRAFT | 158 | 26.2% | Mostly seasonal lines saved-but-never-launched |
ARCHIVED | 32 | 5.3% | Discontinued formulations and old packaging |
| Total products | 602 | 100% |
- Draft share at 26% is unhealthy. Industry benchmark for active-cosmetics SMBs is
DRAFT< 8%. 158 drafts represent abandoned merchandising work: products created during a launch sprint, never published, slowly accumulating. Audit drafts older than 90 days quarterly, every draft is search-index pollution that slows admin and confuses staff merchandisers. Bulk-archive the ones that won’t ship. - Archived 5.3% is normal. Categories with seasonal cycling (cosmetics, fashion, food) typically run 3 to 8% archived. Archiving is the correct action for permanent discontinuation; it preserves order-history references without bloating the live catalog.
- Active 412 is the operational number. This is the catalog the customer can see (somewhere); it drives Total Products, search-index size, sitemap entries, and most CDN costs. Stores trying to grow SEO traffic should care about the quality of these 412 (each with full content) more than total count.
- The active-vs-published gap. Of the 412
ACTIVEproducts, perhaps 380 are published to Online Store (the gap is POS-only items, B2B-only items, or productsACTIVEbut with the Online Store toggle off). The card cannot show this gap; you need to drill intoproductPublicationsper product. Common cause of the gap: an admin user toggled “remove from Online Store” instead of moving the product toDRAFT, leaving itACTIVEbut invisible. - The 32 archived hide a quiet risk. A merchant returning these to the catalog (a comeback formulation, a re-launched range) must un-archive and re-publish to channels. Archived products don’t show up in product-search inside admin by default, so staff often don’t know archived products exist; the un-archive step gets missed and the relaunch ships with a half-built catalog state.
Sibling cards merchants should reference together
Product Status sits inside the catalog-hygiene cluster:| Card | Why pair it with Product Status |
|---|---|
| Total Products | The aggregate number. The status split is the breakdown of this card. |
| Products by Type | Within ACTIVE, how the catalog organises by structured product type. |
| Products by Vendor | Within ACTIVE, the supplier mix. |
| Product Tags | Free-text tagging coverage on the active catalog. Drafts and archived products are tagged too but invisible to shoppers. |
| Inventory Alerts | Stock issues only matter on ACTIVE products. A zero-stock DRAFT is by design; a zero-stock ACTIVE is a fulfillment risk. |
| Top Products by Revenue | Reads against the ACTIVE set; an archived product can still appear here if it sold during the window before being archived. |
bigcommerce.product_status | Same definition, slightly different enum (BC uses is_visible boolean + availability string). Documentation cross-link. |
adobe_commerce.product_status | Adobe uses status (Enabled / Disabled) + per-website assignment. Documentation cross-link. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin:Products → All products → filter by Product status (top of the list) → toggle Active / Draft / ArchivedThe list shows products filtered to the chosen status; the count at the top of the table is the directly comparable figure. There is no dedicated chart for this in Shopify’s analytics suite; the product list is the source of truth. Other Shopify Admin views that look adjacent:
- Products → Collections: a curatorial layer on top of the catalog. A collection can include archived products (they just won’t render to shoppers); collection counts therefore differ from this card.
- Products → Inventory: variant-level, not product-level. Counts can be much higher (variants per product).
- Settings → Sales channels → (each channel): per-channel publication state. Different from product status; a product can be
ACTIVEand unpublished, orDRAFTand never published.
| Reason | Direction | Why |
|---|---|---|
| Sync lag | Ours lower for “today” | Catalog changes propagate via webhook with a 5 to 15 minute lag. Bulk imports / archive operations can have a longer lag (5 to 30 minutes for a 10,000-product re-sync). |
| Product duplicates | Ours higher if duplication app present | Some apps (review imports, marketplace syncs) create duplicate Product.id rows during sync windows. Shopify Admin may collapse them in the UI; the card sees raw rows. |
| Time zone | Not applicable | This is a snapshot, no time-window effect. |
| Currency | Not applicable | Catalog count, no money. |
| Multi-store on Shopify Plus | Each store separate | Shopify Plus organisations with multiple stores see one card per store, not aggregated. |
| B2B Edition | Either | B2B-only products published only to the B2B channel still count ACTIVE. Their visibility in the standard product list filter depends on which channel filter is set. |
| Card | Expected relationship | Notes |
|---|---|---|
google_analytics.ga_product_count | GA4 sees products that received view events; usually < ACTIVE count | GA4 only knows about products customers actually viewed. Long-tail SKUs with zero views never appear in GA4. |
klaviyo.kl_catalog_size | Should match ACTIVE ± 2% | Klaviyo’s product feed mirrors Shopify’s active catalog. Drift indicates a feed-sync issue. |
Known limitations / merchant FAQs
What’s a “good” mix of statuses? Category-dependent. Healthy targets:ACTIVE 85 to 95%, DRAFT < 8%, ARCHIVED 2 to 10%. Stores running annual seasonal cycles (fashion, gift, food) sit at the high end of ARCHIVED; stores with stable evergreen catalogs (homeware, office supplies) at the low end. DRAFT above 15% always indicates abandoned merchandising work that needs cleanup.
Why is “ACTIVE” not the same as “buyable on the website”?
Because Shopify separates product status from channel publication. A product is ACTIVE if it’s buyable on any channel; the website is just one channel. So a product ACTIVE and unpublished from the Online Store still counts as ACTIVE here while being invisible to web shoppers. To see “buyable on the website right now”, you need the per-channel productPublications query, which this card does not surface. The roadmap includes a Published to Online Store card; for now, use the Shopify Admin filter “Sales channel: Online Store, Published”.
What happens when I archive a product that has live orders / customer reviews?
The orders and reviews are preserved; archived products still render correctly on past order pages. The product is removed from search, collections, sitemap, and recommendations. Customer-facing review widgets typically continue to show reviews if cached; new reviews can’t be left because the product page returns 404. To re-list, un-archive (status moves to ACTIVE) and re-publish to the desired channels.
My catalog has 158 drafts, should I just delete them?
Probably not delete, archive. Shopify’s delete is permanent and can break historical reports if any of the drafts had ever been published or had inventory tracked. The safer cleanup pattern: bulk-archive drafts older than 90 days. They preserve their data and can be un-archived if you change your mind, but they stop polluting search and admin nav.
Are variants counted here?
No. The card counts Product.id rows, not ProductVariant.id. A product with 24 variants and status = ACTIVE is 1 row in ACTIVE. For variant-level counts, see Total Variants (planned).
Multi-currency stores, does the card change?
No. Product status is currency-agnostic; the card looks identical for a single-currency and a multi-currency store with the same catalog.
Subscription products, do they have a different status?
No, they use the same ProductStatus enum. The “subscription” attribute lives in the variant’s selling-plan associations, not in product status. A subscription product can be ACTIVE, DRAFT, or ARCHIVED like any other.
Shopify Plus vs basic plan, behavioural differences?
Largely none for the status enum itself. Plus stores running multiple stores in one organisation can have the same product replicated across stores, each with its own status; Combined Customer Records does not consolidate products. Basic stores see one catalog with one status per product.
B2B vs DTC, do statuses behave differently?
Status applies to the product regardless of B2B/DTC. A product ACTIVE and published only to the B2B Edition channel is invisible to DTC shoppers but still counts ACTIVE. The card cannot show this nuance; a B2B-heavy store should drill into channel publication state to understand catalog visibility per audience.
Refresh cadence?
Webhook-driven, near real-time. Status changes propagate within 5 to 15 minutes. Bulk operations (archive 5,000 products at once via the bulk editor) can take 5 to 30 minutes to fully reflect.
The card shows products I don’t recognise, where did they come from?
Three usual causes: (1) an app installed silently created products (review-import apps, marketplace-sync apps, gift-card apps create their own products), (2) a CSV import ran with duplicate-creation enabled, (3) historical migration artifacts. Cross-reference the Created date and Created by in the Shopify product list to identify the source; the count is correct, the cleanup target is the unknown vendor.
Action playbook when draft share is unexpectedly high:
- Sort drafts by Updated date ascending; the oldest are almost always abandoned work.
- Bulk-select drafts older than 90 days. If there’s no obvious reason to keep them, archive in bulk.
- For drafts younger than 90 days, ask the merchandising team if any are pending launch. Convert to a launch list, schedule, and either publish or archive.
- Audit the Created by field; if a single staff member or app created most drafts, fix the root behaviour (training, app config, removed app).
- Set an internal SLA: drafts older than 60 days require justification or get archived. Bake into a monthly catalog-hygiene review.