Product Groups
Show every colour, print and cut of a style together on one product page — as a clean swatch row — while each one stays its own Shopify product.
Overview
Many fashion brands keep each colour of a style as a separate Shopify product — for collection-grid visibility, per-colour SEO, and clean inventory. The downside: a shopper landing on the navy version can’t see that it also comes in olive and black.
Product Groups closes that gap. It links those products together and renders them as a swatch row on every product page — without merging anything into variants. Each product keeps its own page, images, inventory and URL. This guide covers everything from your first grouping to every storefront setting.
How it works
You create one or more groupings. A grouping is one way of relating products, defined by a rule. Every product whose rule produces the same group key becomes a sibling in that group — equal peers, with no “master” product.
Behind the scenes, on each sync the app:
- Reads your whole catalogue and applies each grouping's rule to extract a group key per product.
- Creates or updates one metaobject per group, holding the ordered list of member products.
- Writes a reference metafield back to each product so the storefront block can find its group instantly.
A product can belong to several groupings at once — for example a colour group and a print family — each rendered in its own way.
Install & set up
- 1
Install the app
Add Product Groups to your store from the Shopify App Store. It opens straight into your Shopify admin — no account or API keys to wire up.
- 2
Create a grouping
On the dashboard, choose New grouping, give it a name, and define how products relate (the rule — see below). For colour swatches that's usually a tag prefix or a metafield.
- 3
Run Sync now
Click Sync now. The app reads your catalogue, groups products by your rule, and writes the metaobjects and reference metafields. Large catalogues are read in the background, so you can leave the page.
- 4
Review your groups
Open the Groups list to see what was created, search and paginate, fix edge cases by hand, and optionally set swatch values like a colour name or hex.
- 5
Add the storefront block
In the theme editor, drop the Group switcher block onto your product template. Optionally enable collection-card swatches too (see below).
Grouping rules
A rule is a set of conditions combined with AND or OR. Each condition checks one product field with an operator. A condition can also be marked “use as group key”, meaning its matched value (or a regex capture group) becomes part of the key that decides which products are siblings.
Fields
- Tag
- Match against a product's tags — the most common source for colour groups (e.g. a shared style code in a tag).
- Product type
- Match the product type.
- Vendor
- Match the vendor / brand.
- Title
- Match against the product title.
- SKU
- Match the SKU of the product.
- Metafield
- Match a metafield value by namespace and key — ideal when an ERP already writes a style or group id.
- Status
- Match the product status (active, draft, archived) — used as a filter, not a key.
Operators
- equals / is not
- Exact match (case-insensitive).
- starts with / doesn't start with
- Prefix match — e.g. tags beginning with a style code.
- ends with / doesn't end with
- Suffix match.
- contains / doesn't contain
- Substring match.
- matches / doesn't match regex
- Regular expression — with a capture group you can extract just part of the value as the group key.
- in / not in
- Comma-separated list membership.
Example: one condition — Tag starts with style-, use as group key — groups every product sharing a style-1234 tag. Matching is case-insensitive.
Grouping settings
Each grouping has a Behavior card with one main toggle and an Advanced section:
- Sync enabled
- When off, this grouping is skipped during sync. Existing groups and the storefront keep working; only auto-updates pause.
- Delete orphan groups on sync
- Delete groups whose key no longer matches the rule. Off by default, to preserve manual changes you made in the Shopify admin.
- Include single-product groups
- Create a group even for a product with no sibling yet. A second product added later auto-joins. On the storefront a single-product group shows one swatch — useful for visual consistency across collection grids.
- Skip draft and archived products
- When on (recommended), only active products are grouped, so hidden products never appear on the storefront.
- Auto-create collections for new groups
- Automatically create (and, with Delete orphans on, delete) a linked Shopify collection per group during sync. Existing linked collections always stay in sync regardless of this toggle.
- Publish groups as storefront pages
- Make each group its own public page on your storefront. Best for outfit / print / pattern groupings. Needs a templates/metaobject.{type}.json file in your theme; Shopify renders a basic fallback if it's missing.
Swatch values (visual attributes)
Colour swatches can be driven by data you manage per product. A grouping can define visual attributes — typically a colour and a label — resolved in a cascade:
- Colour: an image override → a hex value → a letter fallback. Hex can come from a source metafield (e.g. ERP-managed) with an optional app-managed override on top.
- Label: the product title or a metafield such as a colour name.
- Swatch image: upload and crop a swatch image right in the app for products that need a pattern or texture rather than a flat colour.
You edit these values directly in the Groups area; the storefront block reads the same metafields.
Managing groups
The Groups area gives you full control after a sync:
- Groups list
- Search and paginate across thousands of groups, with a coverage badge showing how complete each group's swatch values are.
- Bulk actions
- Select multiple groups to delete, or bulk create / remove their linked collections.
- CSV import / export
- Export groups to a CSV and re-import to edit names and membership in bulk.
- Group detail
- Drag to reorder members (keyboard-accessible), edit swatch values per product, and create a linked collection on the spot.
- Overrides
- Force-add a product to a group, or force-remove one, regardless of what the rule produced. Overrides survive every sync.
Product page block — “Group switcher”
An app block you add in the theme editor (no code). It reads the group from the product’s reference metafield and renders the swatch row. Settings are grouped:
Source
- Grouping
- Pick which grouping this block renders. Leave empty to use the manual handle below, or to auto-detect the first available grouping on the product.
- Manual handle
- Type a grouping handle directly, for when no grouping is picked above.
Heading
- Heading text
- Text shown above the row, e.g. “Other colors”. Use [count] to insert the number of group members. Leave blank to hide the heading.
Swatch style
- Style
- Color swatch (hex / image cascade), Product image, Custom image, or Text only.
- Width / Height
- Swatch dimensions in pixels (16–200).
- Corner radius
- Roundness of each swatch (0–50%).
- Pill shape
- For text mode: sharp, rounded, or full pill.
- Image fit
- Cover (may crop) or Contain (may letterbox).
- Image loading
- Eager or lazy.
- Spacing
- Gap between swatches (0–24px).
Colours & image sources
- Hex source metafield
- Metafield holding the colour hex (default custom.hex) — e.g. one your ERP manages.
- Hex override metafield
- An app-managed override hex that wins over the source.
- Image override metafield
- Swatch image override (default custom.swatch_image_override).
- Custom image metafield
- Image used in Custom image mode (default custom.swatch_image).
Labels
- Show label
- Never, below each swatch, as a hover tooltip, or a single dynamic label that updates on hover.
- Dynamic label prefix
- Optional text shown before the dynamic label.
- Label source
- Product title, or a metafield (default custom.color_name).
- Spacing below heading/label
- Vertical spacing (0–32px).
Selected (current) product
- Show current product
- Whether the current product appears in its own row (it's never hidden by default).
- Highlight
- How the current swatch is marked: border, underline, dot, or dim only.
- Thickness / Distance / Color
- Fine-tune the highlight.
- Border on non-selected
- Optionally outline the other swatches too, with a chosen colour and padding.
Stock & availability
- When a member is out of stock
- Show as-is, dim, cross out + dim, or hide.
- Move out-of-stock to end
- Push sold-out swatches to the end of the row.
- Hide products outside current market
- Respect Shopify Markets availability.
- Size availability
- Optionally highlight when the currently selected size is unavailable on a sibling (set your size option name).
Overflow & spacing
- When swatches don't fit
- Wrap to the next line, horizontal scroll (with fade + optional arrows), or collapse to a “+N” button.
- Collapse options
- Visible count before collapsing, custom singular/plural overflow labels, and +N button border/colours.
- Margins
- Outer top / right / bottom / left margin around the whole row.
Collection cards
To show swatches on product cards (collection grid, search, related products), turn on the Group card swatches app embed for styling, then render one snippet in your product-card template:
{% render 'pg-card-swatches', product: card_product %}The snippet accepts optional arguments — an explicit grouping handle (and a fallback), a mode (swatch / product image / custom image), metafield paths for hex and image, an image_source, and eager loading. The app-embed settings control how they look:
- Swatches
- Width, height, corner radius, spacing, image fit, and an optional border with colour.
- Stock
- Show / dim / cross out out-of-stock members, or hide them entirely on cards.
- Overflow
- Wrap, horizontal scroll, or collapse to “+N” — with threshold, labels, and button/scroll colours.
- Outer margin
- Top / right / bottom / left spacing around the card swatches.
- Custom CSS
- Scoped CSS under .pg-card-swatches for any fine-tuning the controls don't cover.
Syncing
Sync is always something you trigger — there are no automatic product webhooks. That’s a deliberate design decision: a typical fashion catalogue generates thousands of product updates a day from ERP, POS and other apps, and reacting to all of them would be noisy and unpredictable.
Click Sync now whenever you want groups rebuilt — after a colour drop, a range change, or a catalogue import. Each sync only writes what actually changed, and your manual ordering inside a group is preserved.
Pricing
Billing runs through Shopify, so it appears on your normal Shopify invoice — no separate payment details.
One grouping, up to 25 groups. Enough to run colour swatches on a focused catalogue — and it doubles as your free trial, with no time limit.
Unlimited groupings and up to 500 groups per grouping. Fits almost any catalogue.
Everything unlimited — for catalogues where a single grouping needs more than 500 groups. Switch tiers any time.
FAQ
Will this merge my products into variants?
No. Every product stays its own Shopify product — its own page, images, inventory and SEO. Product Groups only adds a reference between them, so the storefront can show them together as a swatch row.
Do I have to edit my theme code?
Almost none. The product-page swatch row is an app block — you drag the “Group switcher” block onto your product template in the theme editor, with no code at all. Showing swatches on collection cards is the one exception: you turn on the app embed and add a single {% render 'pg-card-swatches' %} line to your product-card template.
How do products get grouped?
You define a rule — for example, tags that start with a shared style code, or a metafield your ERP writes. Products whose rule produces the same group key become siblings. You can also force-add or force-remove individual products with overrides.
Can a product be in more than one grouping?
Yes. A product can belong to several groupings at once — say a colour group and a print family — each with its own rule, metaobject type, and storefront block.
How often does it sync?
Whenever you click Sync now. There are no automatic product webhooks — a deliberate choice, so an ERP or POS import can't trigger thousands of background runs. You stay in control of when groups rebuild.
What happens when a grouped product sells out?
The storefront block can dim, cross out, hide, or reorder out-of-stock members live. Group membership itself only changes when you next run Sync now.
Will it slow my store down?
The storefront block is intentionally light — its CSS and JS are split out and loaded lazily, so the impact on your product page stays well within Shopify's performance guidance.
Support
Stuck on a setup, or spotted something off? We build this app ourselves, so you reach the people who actually work on it — no ticket queue.
See also our privacy policy.