Skip to main content
Card class: Non-HeroCategory: Ecommerce Platform
Total Products for the selected period. The headline catalogue count and the denominator behind every catalogue-health ratio in the Nerve Centre.

At a glance

The total number of products in your WooCommerce catalogue. Counted from GET /wp-json/wc/v3/products and indexed on the standard refresh. It is the denominator behind every catalogue-health percentage (SKU coverage, image coverage, attribute completeness), so a wrong product count quietly distorts all of them.
What it countsCOUNT(products) from the WooCommerce product catalogue. By default the card counts top-level products of type simple, variable, grouped, and external. Variations are NOT counted as separate products, a variable product with 12 variations counts as one product (its variations are children, fetched separately via wc/v3/products/{id}/variations).
REST API endpointGET /wp-json/wc/v3/products (paginated; the indexer walks every page). Fields used: id, type, status, sku. Variations come from GET /wp-json/wc/v3/products/{id}/variations and are excluded from this count.
Status treatmentBy default counts publish products (live in the catalogue). draft, pending, private, and trash are excluded unless the merchant has configured the profile to include them. This is the most common reason the card reads lower than the raw “All (N)” number in WP Admin, which sums every status.
Product typeAll four core types count as one each: simple, variable, grouped, external/affiliate. grouped parents count once even though they reference child simple products.
VariationsA variable product’s variations are NOT individual products. One “T-shirt” with S/M/L x 3 colours (9 variations) is one product here. If you want the variation-level view, that is a different metric.
SKU requirementA product is counted whether or not it has a SKU. Products with a blank sku still count here, see Products Missing SKU for that gap.
Self-hosted vs managed-WooIdentical definition on a self-hosted LAMP stack, WordPress.com Business / Commerce plans, and managed-Woo hosts (Woo.com Cloud, WP Engine, Pressable, Kinsta). Self-hosted stores with a slow host can show brief sync lag after a large bulk import; managed hosts settle faster.
Time windowRT (real-time snapshot, refreshed on the standard data refresh)
Alert triggernone (informational count; no alert fires on this card)
Rolesowner, operations

Calculation

Calculated automatically from your WooCommerce data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A UK homewares brand on self-hosted WooCommerce 8.6 with WooCommerce Subscriptions and a bulk-import plugin. Catalogue snapshot taken 12 Apr 26.
Product type / statusCountCounts in this card?
simple, publish1,420Yes
variable, publish286Yes (one per parent, not per variation)
grouped, publish18Yes
external/affiliate, publish6Yes
simple, draft (work in progress)94No
simple, trash (deleted, not purged)31No
Variations under the 286 variable products3,940No (counted as children, not products)
Total Products (this card)1,730
Four things to notice:
  1. Variations are not products. The 286 variable products carry 3,940 variations between them, but the card counts the 286 parents, not the 3,940 children. WP Admin’s product list behaves the same way (it shows parents), but a CSV export of variations or a “variation count” plugin will report a much larger number. This is the single biggest source of “your count looks wrong” confusion.
  2. Draft and trashed products are excluded. The 94 drafts and 31 trashed items do not count. In WP Admin the “All (1,855)” tab at the top of Products sums every status including drafts and trash, so the raw header number will read higher than this card. Click the Published (1,730) filter in WP Admin to match.
  3. Bulk imports cause a brief spike-then-settle. This brand ran a 400-product CSV import on 8 Apr 26. On a slow shared host the import wrote products in batches over ~40 minutes; the Vortex IQ indexer caught a partial count mid-import before settling on the final number at the next poll. Managed-Woo hosts complete the import faster, so the transient is shorter.
  4. The count is the denominator for catalogue-health cards. SKU coverage, image coverage, and Variable Product Attribute Completeness all divide by a product count. If you change the profile to include drafts here, those ratios shift too, keep the definition consistent across the workspace.

Sibling cards merchants should reference together

CardWhy pair it with Total Products
WC Products Missing SKUUses Total Products as its denominator. A rising SKU-gap ratio with a flat product count means new products are landing without SKUs.
WC Products Missing ImageSame denominator. Image coverage is meaningless without the total it divides into.
WC Variable Product Attribute CompletenessFocuses on the variable subset of this count. Pair to see how much of your catalogue is variable and how complete those variations are.
WC Out of Stock ProductsOOS as a share of Total Products tells you what fraction of the live catalogue cannot be sold.
WC Draft Products 30d OldThe drafts excluded from this card. A growing draft pile means catalogue work is stalling before publish.
WC Stock Value SnapshotTotal Products is the count; stock value is the money tied up in them.

Reconciling against WooCommerce

Where to look in WooCommerce Admin: WP Admin → Products → All Products. At the top of the list a row of status filters reads All (N) | Published (N) | Draft (N) | Trash (N). This card matches the Published count by default, not the All count. Use the Product type dropdown to confirm the split across simple / variable / grouped / external. For the catalogue overview, WP Admin → WooCommerce → Status → Tools and the Reports → Stock views also surface product-level counts, though each applies its own status filter. Why our number may legitimately differ from WooCommerce Admin:
ReasonDirection of divergence
Status filter. WP Admin’s “All (N)” header sums publish + draft + pending + private + trash; this card counts publish only by default.Ours lower than the “All” header, equal to the “Published” filter
Variations counted separately. A variation-export plugin or a custom report can count each variation as a row. This card counts parent products only.Ours much lower if a tool counts variations
Sync lag after a bulk import. A large CSV import on a slow self-hosted host writes products in batches; the indexer may catch a partial count mid-import before settling.Ours temporarily lower; self-resolves at next poll
Timezone / snapshot timing. This card is a point-in-time snapshot on the standard refresh; WP Admin is live. A product created seconds ago appears in WP Admin first.+/- a handful of products at the boundary
Plugin behaviour. Catalogue plugins (product bundles, composite products, B2B catalogues that hide products per customer role) can register custom product types or hide products from the default query. The card counts what the REST API returns for the indexer’s credentials.Investigate per-merchant if persistent
HPOS vs legacy. High-Performance Order Storage affects orders, not products, so it does not change this count. Mentioned only to rule it out, product counting is unaffected by HPOS.No effect
Cross-connector reconciliation: not applicable to this card. Total Products is a single-source WooCommerce count and does not join against any other connector. For cross-channel catalogue checks see Marketplace Listing Drift vs Catalog or WC Inventory vs Active Marketplace Listings.

Known limitations / merchant FAQs

Why does this card read lower than the number at the top of my Products page? Because WP Admin’s “All (N)” header sums every status, including drafts, pending, private, and trash. This card counts published products by default. Click the Published (N) filter at the top of the Products list and the numbers should line up. Do variations count as products? No. A variable product with 12 variations counts as one product. WooCommerce treats variations as children of the parent, fetched separately via wc/v3/products/{id}/variations. If a count looks far too high, something is counting variations as products. Do grouped and external/affiliate products count? Yes. All four core product types, simple, variable, grouped, and external/affiliate, count as one product each. A grouped parent counts once even though it references several child simple products. Does a missing SKU stop a product being counted here? No. SKU presence is irrelevant to this count, a product with a blank SKU still counts. SKU coverage is a separate metric, see Products Missing SKU. Can I include drafts in the count? Yes, the status scope is configurable per profile in the Sensitivity / profile settings. Be aware that changing it shifts every catalogue-health ratio that divides by this count, so keep the definition consistent across the workspace. Why did my count jump after a bulk import and then settle? Large CSV imports write products in batches. On a slow self-hosted host the Vortex IQ indexer can catch a partial count mid-import before the import finishes; the count settles at the next successful poll, usually within 1 to 3 hours. Managed-Woo hosts complete imports faster, so the transient is shorter.

Tracked live in Vortex IQ Nerve Centre

Total Products is one of hundreds of KPI pulses Vortex IQ tracks across WooCommerce and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.