---
title: "Catalog & PIM: Variants, Inventory & Search | Commerce Engine"
description: "One product record for every channel: physical, digital and bundle products, unlimited variants, stock by warehouse and batch, and built-in search."
canonical_url: "https://www.commercengine.io/features/catalog"
---

> Commerce Engine site index: https://www.commercengine.io/llms.txt

# Catalog & Inventory

Commerce Engine keeps one product record with the description, typed attributes, every variant, optimised photos and video, and stock down to the batch. Choose the channels it sells on, and your website, app, stores and marketplaces share the same stock, in real time.

## Omnichannel inventory

Create a product once, then choose where it sells: your website, your app, your store counters and marketplaces, down to a single variant. Every channel sells from the same stock, so a sale at the counter shows on your website the moment it happens.

- **Channels per variant**: Choose the channels for each variant, such as each shade and size.
- **One stock**: Every channel sells from the same count.
- **Live updates**: A sale anywhere updates the count everywhere at once.
- **Scoped channels**: Each channel sees only what you assign it. Switch a channel off and the product leaves it straight away, while its stock stays shared with the rest.

**Docs:** [How stores, channels and keys fit together](https://www.commercengine.io/docs/storefront/credentials)

**See also:** [POS & Omnichannel](https://www.commercengine.io/features/pos.md)

## Batch and expiry tracking

Track stock in every warehouse and store, down to the lot or batch, with manufacture and expiry dates that trade buyers can see before they order. Most platforms stop at one count per product.

- **Every location**: Warehouses and stores, each with its own count.
- **Lot and expiry**: Manufacture and expiry dates for every batch.
- **First in, first out**: With batch tracking on, stock leaves first in, first out by default, or by an inventory strategy you set.
- **Stock log**: Every reservation, shipment and cancellation is logged, each with its reason.

**Docs:** [Inventory API](https://www.commercengine.io/docs/admin/api-reference/inventories/retrieve-inventory-detail)

**See also:** [Shipping](https://www.commercengine.io/features/shipping.md)

## Product types: physical, digital and bundles

Every product is physical, digital or a bundle, and its record fits the type.

- **Physical**: Weight, box sizes and stock in each warehouse.
- **Digital**: Nothing to pack or ship. You deliver it your way, even as a booking in your own scheduling tool.
- **Bundles**: A bundle groups products you already sell under its own price, photos and SEO, with no SKU or stock of its own. It sells while its items are in stock and listed, then splits into them when it ships.
- **Offers and subscriptions**: All three types take offers and subscriptions.

**Docs:** [Create product API](https://www.commercengine.io/docs/admin/api-reference/catalog/create-product)

**See also:** [Orders & Subscriptions](https://www.commercengine.io/features/order-and-subscriptions.md)

## Product variants

Add the options a product comes in, such as shade and size, and every combination becomes a variant, with no limit on how many.

- **No limit**: On variants per product.
- **Own SKU and price**: Each variant has its own SKU and price, and a price for each buyer group.
- **Own media**: Photos and video for every variant.
- **Own attributes and channels**: Each variant carries its own stock, typed attributes and channels, so a store exclusive sells only in stores.

**Docs:** [Variant option model](https://www.commercengine.io/docs/storefront/catalog#variant-option-model)

**See also:** [B2B commerce](https://www.commercengine.io/solutions/b2b.md)

## Product attributes

Write a rich description, then add the details shoppers choose by as typed attributes. Each one is entered with the right control, becomes the right filter in search and reads cleanly on the product page.

- **7 attribute types**: Text, number, yes or no, date, single choice, multiple choice and colour.
- **Attribute sets**: Attach sets of attributes to a category, with required fields and defaults, so every new product arrives complete.
- **Filters**: A count on every choice, and ranges for numbers.
- **Structured data**: Typed values that search engines can read.

**Docs:** [Attributes and variant options](https://www.commercengine.io/docs/storefront/catalog#attributes-versus-variant-options)

**See also:** [B2B commerce](https://www.commercengine.io/solutions/b2b.md)

## Product search

Search comes built in and answers in about 75 milliseconds on average, so results keep up with every keystroke. There is no separate search service to pay for or keep in sync.

- **Fast**: About 75 ms average response.
- **Typo-tolerant**: A misspelt search still finds the right product.
- **Facets**: Filter on any attribute, with a count on every option and the price range of the results.
- **Built in everywhere**: The same search runs on your website, app and POS, with nothing to sync.

**Docs:** [Search API](https://www.commercengine.io/docs/api-reference/catalog/search-products)

**See also:** [POS & Omnichannel](https://www.commercengine.io/features/pos.md)

## Product images and video

Keep every photo and video in one media library, and serve each one fast by default. There's nothing to set up.

- **One media library**: Folders, tags, alt text, and which products and variants use each file.
- **WebP and AVIF**: Photos are sent in whichever format the browser reads best, in thumbnail, standard and zoom sizes, from a CDN close to the shopper.
- **Streaming video**: Videos stream in H.264 at a quality that adapts to the connection.
- **Optimised by default**: Upload the original once; every upload is optimised.

**Docs:** [Media library API](https://www.commercengine.io/docs/admin/api-reference/media-gallery/list-all-files)

**See also:** [D2C brands](https://www.commercengine.io/solutions/d2c.md)

## Product reviews and analytics

Shoppers review what they bought, and you see how each product and variant converts.

- **Verified reviews**: Every review is tied to its order, with a star rating in half stars, photos and video.
- **Moderation**: Approve, feature, tag or reply from your dashboard. Ratings travel with the product into search.
- **Per-variant funnel**: For every product and variant, see how many shoppers viewed it, added it to cart, started checkout and bought, by hour, day, week or month.

**Docs:** [Product analytics API](https://www.commercengine.io/docs/admin/api-reference/metrics/retrieve-product-analytics-stats)

**See also:** [Analytics](https://www.commercengine.io/features/analytics.md)

## CMS integration

When your content team wants landing pages, A/B tests or more say over product copy, switch on the DatoCMS integration. Commerce Engine stays the source of truth for price and stock.

- **Real time**: Every edit syncs as it's saved.
- **Three models**: Products, categories and bundles.
- **One source**: Price and stock stay in Commerce Engine.
- **A/B ready**: Test pages and copy in the CMS.
- **DatoCMS plans**: DatoCMS is our preferred CMS partner. Commerce Engine customers can take the €39-a-month client starter plan, which covers most stores, or 30% off the €199 standard plan, and we can arrange custom plans.

Other systems can follow the catalog through webhooks.

**Docs:** [Data sync API](https://www.commercengine.io/docs/admin/api-reference/catalog/create-request-for-data-syncing)

**See also:** [Starter storefronts](https://www.commercengine.io/starters.md)

## Also included

- **Categories that fill themselves**: Give a category a rule on product attributes, and matching products join it on their own. Categories nest into a tree. [Category API](https://www.commercengine.io/docs/admin/api-reference/catalog/create-category)
- **Prices and minimums by buyer group**: Each buyer group can see its own price, minimum quantity and pack size on the same product. [B2B commerce](https://www.commercengine.io/solutions/b2b.md)
- **Bulk import**: Bring in thousands of products as one job, with variants and prices, and download a file of any rows that failed. [Catalog jobs API](https://www.commercengine.io/docs/admin/api-reference/catalog/create-catalog-job)
- **Offers on the product itself**: Discounts, offer prices, volume slabs and buy X get Y on any product or variant, for chosen buyer groups, with start and end dates. [Coupons & Promotions](https://www.commercengine.io/features/coupons-and-promotions.md)
- **Ready for search engines and AI**: The Commerce Engine SEO package turns every product into structured data, a Markdown page and sitemap entries. Browser agents can search and fill a cart, and only the shopper can pay. [SEO and AI guide](https://www.commercengine.io/docs/seo-ai/overview)
- **Recommendations**: Similar products by attributes and category, plus your own up-sells and cross-sells for each product or variant. [Similar products API](https://www.commercengine.io/docs/api-reference/catalog/retrieve-similar-products)

## Webhooks and APIs

Thirteen signed catalog webhooks keep your ERP, search index or CMS in step, and each product and stock change carries the full record. Read the catalog without a session, prerender it safely, and run the rest from the Admin API.

- `product.updated`: Price, stock, channels or details changed, from any product edit, bulk update, channel change or stock change.
- `inventory.updated`: Stock moved in any location, from a reservation, shipment, cancellation, stock-in or manual count.
- `product.variant.created`: New variants were added to a product, one at a time or together.
- `category.updated`: A category was renamed, moved or otherwise changed.

API endpoints:

- `POST /catalog/products/search`
- `GET /catalog/products/{product_id}`
- `POST /catalog/products-channels`
- `POST /catalog/products/{product_id}/inventory`
- `GET /catalog/inventories/detail`
- `POST /catalog/jobs`
- `POST /catalog/integration-sync`
- `GET /catalog/metrics/product-analytics`

**Docs:** [Catalog guide](https://www.commercengine.io/docs/storefront/catalog) · [Webhooks overview](https://www.commercengine.io/docs/api-reference/webhooks/overview) · [SEO and AI guide](https://www.commercengine.io/docs/seo-ai/overview)

## FAQ

### Do I still need a separate PIM?

Usually not. A PIM keeps one master record per product and sends it everywhere you sell. Commerce Engine's catalog does that: one record with typed attributes, variants, media and stock, assigned to the channels you choose, with your website, app, stores and marketplaces selling from the same stock.

### Can I track batches and expiry dates?

Yes. Turn on lot tracking and stock is counted per batch in each warehouse, with manufacture and expiry dates that trade buyers can see on the storefront. When every warehouse tracks batches, stock leaves first in, first out by default, or by an inventory strategy you set. Every movement is logged, with its reason.

### Can I sell digital products and bundles?

Yes. Every product is physical, digital or a bundle. Digital products skip weights, boxes and shipping, and you deliver them your way: one merchant connects theirs to a scheduling service so each purchase books an appointment. A bundle groups products you already sell, with its own price, photos and SEO but no SKU or stock of its own. It sells while its items are in stock and listed, and splits into them when the shipment is created, so your warehouse team picks the items as usual.

### Is there a limit on variants?

No. Add the options a product comes in, such as shade and size, and each combination becomes a variant with its own SKU, price, photos, video, stock, attributes and channels.

### Do I need a separate search service?

No. Search is built in and answers in about 75 milliseconds on average. It forgives typos and returns counts for every filter and the price range of the results, on your website, app and POS.

### How are photos and videos optimised?

Automatically. Photos are sent as WebP or AVIF, whichever the browser reads best, in thumbnail, standard and zoom sizes from a CDN. Videos stream in H.264 at a quality that adapts to the connection. Upload the original once; there's nothing to configure.

### Can I manage product content in a CMS?

Yes. Switch on the DatoCMS integration and your products, categories and bundles sync to it in real time as they change. DatoCMS is our preferred CMS partner: Commerce Engine customers can take a €39-a-month client starter plan, which covers most stores, or 30% off the €199 standard plan, and we can arrange custom plans. Other systems can follow the catalog through webhooks.

### Can I bring my existing catalog?

Yes. Import products in bulk as one job, with variants, prices, attributes and packaging, and download a file of any rows that failed. We'll help you map your current catalog during onboarding.

## Related

- [Payments](https://www.commercengine.io/features/payments.md)
- [Shipping](https://www.commercengine.io/features/shipping.md): Where orders ship from, and how.
- [Orders & Subscriptions](https://www.commercengine.io/features/order-and-subscriptions.md): Subscriptions on any product type.
- [POS & Omnichannel](https://www.commercengine.io/features/pos.md): The store counter, selling from the same stock and search.
- [D2C brands](https://www.commercengine.io/solutions/d2c.md)
- [B2B commerce](https://www.commercengine.io/solutions/b2b.md): Variants and catalogs priced for trade buyers.
- [Multi-vendor marketplaces](https://www.commercengine.io/solutions/marketplace.md)

## Get started

Bring your product list. We'll help you import it, set up attributes, variants and warehouses, and connect each channel.

- [Book a demo](https://app.youform.com/forms/qqvhuspq)
- [Start building free](https://app.commercengine.io/signup) on the Free plan
- [Read the catalog guide](https://www.commercengine.io/docs/storefront/catalog)
