FeaturesEverything includedAI advisorPricingOpen app
Guide

Furniture on Shopify: products, variants, or custom options?

When a furniture choice should be a separate product, a variant, or a custom option, and what that means for SKUs, stock, text fields and conditional logic.

The same sofa in 14 fabrics, five sizes and three leg styles is either one product with a few choices on it or 210 variants to create, price and keep stock counts for, depending on how you set up your Shopify catalog. Furniture is the category where this decision matters most: the same piece is sold in fabrics, finishes, sizes and configurations, sometimes stocked and sometimes built after the order, and getting the structure wrong means phantom SKUs, a variant picker nobody can use, or orders that arrive without the details the workshop needs.

In short: if you would count it, it is a variant; if you would write it on the job sheet, it is a custom option; if a shopper would search for it on its own, it is a separate product. This guide is how to apply that rule to furniture, and then where text fields, uploads, pricing and conditional logic fit. It draws on our research into how hundreds of e-commerce stores, including over a hundred furniture retailers and makers, organize their catalogs and custom options.

Start with how you make and stock furniture

The right catalog structure follows from your operation, not from Shopify’s features. Most furniture businesses are one of these, or a mix:

  • Stocked. You buy or make finished pieces ahead of demand and hold them: a bookcase in three finishes, a dining chair in oak or walnut. Each finished piece has a stock count.
  • Made to order from a menu. You build after the order, but from a fixed set of choices: any of 14 fabrics, three leg styles, five sizes. Nothing is stocked as a finished piece; the fabric is on a roll and the lumber is in the rack.
  • Bespoke. Custom dimensions, customer drawings, one-off commissions.

Shopify has three places to put a choice, and each matches one of these:

Where the choice livesUse it whenWhat Shopify gives you
Separate productsShoppers search for, compare and buy the things separatelyOwn page, photos, price, description and place in search and collections
VariantsYou stock and count each versionOwn SKU, barcode, stock level, price, weight and image; the theme’s picker; Google Shopping listings
Custom optionsThe choice is an instruction for how to make or finish the piece, a personalization, or a paid serviceChoices saved on the order line for your workshop; add-on prices; text, numbers, uploads; conditional logic

Products and variants are built into Shopify. Custom options are not: a fabric choice with a price, a custom width or a sketch upload comes from a product options app such as OptionWise, or from custom theme code.

Which furniture choices should be separate products

Make something its own product when a customer would search for it, compare it, or photograph it separately. An armchair, a sofa and a sectional from the same range are three products: they are searched for by name (“sectional”), they are priced differently, they need different photography, and they are different things to build. Group them in a collection named after the range so the range page still exists.

Do not split by something you can show with a swatch. A sofa in oat linen and a sofa in slate linen are one product with a fabric choice, not two products. Splitting by color or fabric multiplies your product pages, dilutes your search presence across near-duplicate pages, and leaves every page with an out-of-date photo when a fabric is discontinued.

The furniture-specific cases:

  • Beds. One product per bed design, with size as a variant or a custom option (see below), not one product per size. The photos are the same.
  • Dining sets. A table and its chairs are separate products; offer the chairs on the table page as an add-on product (covered later) rather than as one combined “dining set” product with every chair count baked in.
  • Modular and sectional. Sell the modules as products if customers combine them freely; sell a fixed set of configurations (sofa, chaise sofa, sectional) as products if you offer those and nothing else.
  • Left-hand and right-hand facing. One product with the orientation as a choice: the photos, price and build are the same, and the product page can still mention both orientations for shoppers who search that way.

When furniture variants make sense, and when they explode

Use a Shopify variant for every version of the product that has its own stock level. A variant is a SKU with a barcode, a stock count, a price and a weight, which is exactly right for a chair stocked in oak and walnut.

It is exactly wrong for made-to-order choices. A bed in 14 fabrics, 5 sizes and 3 base types is 210 variants, each needing a SKU, price and stock figure that means nothing when the bed is built after the order. Add a fourth choice, such as headboard height, and it no longer fits at all: Shopify allows up to three options per product (and up to 2,048 variants).

The hybrids that work: a bed frame stocked per size but upholstered to order (size is a variant; fabric and headboard are custom options), or dining chairs stocked in oak and walnut frames with a seat-pad fabric cut from a roll (frame is a variant; fabric is a custom option). Keep the variant axes to what shoppers filter by and what you count.

Two things are worth keeping as variants even when you could make them custom options. Collection filters work on variants, so a stocked color that shoppers filter by (“Show me green sofas”) should stay a variant. And Google Shopping lists each variant with its own price, so a stocked size with its own price reaches the feed as a separate listing. Made-to-order choices have neither need: there is no stock to filter by, and the price a customer pays for Velvet – Forest shows on the product page and in the cart.

Custom options do not create SKUs. The product keeps its SKU, and the customer’s choices arrive on the order as line item properties beneath it: “Fabric: Velvet – Forest, Legs: Brushed steel, Chaise: Left, Width: 94 in”. That is the job sheet. If your workshop uses its own codes, put the code in the value name (“Velvet – Forest (VF-12)”). Materials on a roll or in a rack are tracked in your inventory system, not as variants.

Custom options for made-to-order furniture

Custom options carry every choice that is an instruction rather than a stock item. For furniture, roughly in order of how often stores use them:

  • Fabric and color, as image swatches. If you sell fabric in price grades, make the grade the choice (Grade A to F, each with a price) and show that grade’s swatches beneath it.
  • Legs, base and feet: leg style, base type for beds (slatted, storage, metal frame), foot finish.
  • Finish and stain for solid wood, listed by the names customers know from the hardware store (Early American, Special Walnut, Ebony) so they can match a piece they own.
  • Size and configuration when made to order: seat count, headboard height, seat depth, cushion fill.
  • Custom dimensions as an OptionWise number field with a minimum and maximum, so you never receive a 16-inch sofa order.
  • Personalization, such as a plaque or a child’s name on nursery furniture, as OptionWise text fields with a character limit, one per line. The limits real stores use are in the engraving guide.
  • Instructions and files: an OptionWise text area for special requirements and a file upload for a sketch or room photo.
  • Services: assembly, delivery to the room of choice, removal of old furniture. Priced per piece type (“Storage bed assembly”, “Sectional assembly”), because a storage bed takes longer than a frame.

In OptionWise, any option can be required and any single choice can carry a default. Require and default the structural choices (fabric, legs, size) so the form is complete on load, and leave personalization and services optional. Assign the option set to a tag or collection rather than product by product, so a new sofa has its options the moment it is published (assign to products).

Conditional logic for furniture forms

A furniture form can run to fifteen fields if everything is always visible. Conditional logic shows a field only after the choice that makes it relevant:

  • Leg material reveals leg style. Wood or Steel, then that material’s styles, and a steel color only for steel.
  • Fabric grade reveals that grade’s swatches. Six grades, one swatch row shown at a time.
  • “Custom size” reveals the dimension fields, and a notes box.
  • “Add a plaque” reveals the text field.

In OptionWise, any buttons, dropdown, radio, checkbox or swatch choice can reveal other fields, on one value or any of several. Hidden fields are not validated and send nothing to the order. See conditional logic.

Pricing furniture choices and companion pieces

Both variants and custom options can change the price, so pricing is not the reason to choose between them; stock is. Price the choices that change the build or add a service (size steps, base and headboard upgrades, chaise, custom dimensions, premium fill, assembly) and keep color, fabric within a grade, leg style and orientation free. In OptionWise, add-on prices are fixed amounts on a value, totaled live on the page and carried through the cart, checkout and order.

A matching footstool, a mattress for a bed or the chairs for a table are stocked products of their own. Offer them on the main piece’s page as an add-on product: OptionWise’s linked-product option shows the companion’s variants (mattress size and firmness) on the bed page and adds the real product to the cart with its own price and stock. Throw pillows made in the same fabric are not stocked separately, so a priced value is enough.

Worked examples

Each example is the product page as the customer sees it, with each part labeled: what is a Shopify variant, what is a custom option, and what is an add-on product.

A sofa range, made to order

Nothing is stocked as a finished sofa, so there are no variants at all. The armchair, sofa and sectional are separate products because shoppers search for each by name and each needs its own photos and price; they sit in one collection and share one option set, assigned by tag. Every choice on the page is an instruction to the workshop: fabric, legs and cushion fill change how it is built, the chaise and custom width change the shape and are priced, and assembly is a service. The footstool is a stocked product of its own, so it is offered as an add-on with its own price and stock rather than as an option.

ProductsHudson armchairHudson sofaHudson sectional
Hudson sectional
$2,450
Custom options · OptionWise
Fabric gradeGrade AGrade B +$150
Grade A fabricShown because Grade A is selected
LegsNatural oakBlack-stained oakBrushed steel +$40
Cushion fillStandard foamFeather-wrapped +$120
ChaiseNo chaiseLeft +$350Right +$350
Make it to a custom width +$200
AssemblyNo thanks, I'll assemble it
Add-on product · OptionWise
Hudson footstool Matching fabric · in stock+$390
Add to cart · $2,800

An upholstered bed, frame stocked per size

The hybrid case. Frames are made ahead and held per size, so size is a variant: each size has its own SKU and stock count, and the page can say “4 left”. The upholstery is done after the order, so fabric, base and headboard height are custom options, with the structural upgrades priced and the fabric free. Assembly is a priced option. The mattress is a stocked product with its own sizes and firmness, so it is an add-on product, and the customer chooses its size on the bed page.

Manhattan bed
$1,290
Variants
SizeFullQueenKingCalifornia king4 left in stock
Custom options · OptionWise
Fabric
BaseSlattedStorage +$150Metal frame +$125
Headboard height48"54" +$6060" +$120
Bed frame assembly +$70
Add-on product · OptionWise
Mattress King · Medium firm+$640
Add to cart · $1,290

A starter option set for a made-to-order sofa

Install OptionWise, then build this set: create an option set, add each option below, and assign it to the tag sofa. Prices are examples in dollars; use your own amounts and currency.

OptionTypeValuesNotes
Fabric gradeButtons, required, default Grade AGrade A, Grade B (+$150)Controls which fabric list shows
Grade A fabricImage swatches, required, default Linen – OatLinen – Oat, Linen – Slate, Performance weave – StoneVisible only when Grade A is selected
Grade B fabricImage swatches, required, default Velvet – ForestVelvet – Forest, Velvet – RustVisible only when Grade B is selected
LegsButtons, required, default Natural oakNatural oak, Black-stained oak, Brushed steel (+$40)
ChaiseButtons, required, default No chaiseNo chaise, Chaise on the left (+$350), Chaise on the right (+$350)Sectional and chaise sofa only
Cushion fillRadio, required, default Standard foamStandard foam, Feather-wrapped foam (+$120)
Custom widthCheckbox, no headingMake it to a custom width (+$200)Reveals the next field
Width (in)Number, required, min 60, max 120Visible only when Custom width is checked
AssemblyDropdown, required, default No thanksNo thanks, I’ll assemble it; Armchair or sofa assembly (+$89); Sectional assembly (+$129)

For a bed, swap Chaise for Base type and Headboard height, price assembly per bed type, keep size as a variant if you stock frames per size, and add the mattress as an add-on product with a linked-product option.

Common mistakes

  • A product per fabric or color. Twelve near-identical sofa pages that split search and go dead when a fabric is discontinued. One product, one fabric option.
  • Sizes as custom options when the frames are stocked. Stock counts end up in a spreadsheet and you oversell the California king. Stocked sizes are variants.
  • Made-to-order choices as variants. Hundreds of phantom SKUs and a variant picker that takes three dropdowns to show a price. Keep them as custom options.
  • Assembly and delivery as separate products. Customers do not go looking for them. Offer them as priced choices on the piece.
  • A dining set as one product. “Table + 4 chairs” and “Table + 6 chairs” multiply with every chair finish. Sell the table and offer the chairs as an add-on product.
  • Everything required, nothing defaulted. Eight stops before the add-to-cart button. Default every single choice and require only what changes the build.
  • Option sets attached product by product. The next sofa is published without its options. Assign by tag or collection.

Options should load with the page

On a furniture page, size, fabric and legs are one decision to the customer, so they should arrive together. Most options apps add their fields after the page has loaded, so the swatches appear a moment later and push the add-to-cart button down. OptionWise’s custom options load as part of the product page, next to the variant picker, so they appear with the price and photos and nothing moves (learn more). Its Appearance page can import your theme’s button shapes, fonts and colors, so the fabric swatches and leg buttons look like the theme’s own size picker (theme integration).

Frequently asked questions

Should sofa fabric be a Shopify variant or a custom option?

A variant if you hold stock of each fabric and need to count it; a custom option if the sofa is made to order and the fabric is cut from a roll. Made-to-order furniture with fabric, legs, size and chaise choices multiplies into hundreds of combinations and more choices than Shopify's three variant options allow, and custom options added with an app such as OptionWise keep that as one product with one stock count.

How many variants can a Shopify product have?

Shopify allows up to three variant options per product (for example size, color and material) and up to 2,048 variants. The three-option limit is the one furniture hits first: a made-to-order sofa with fabric, legs, size and cushion choices needs four, which is why furniture stores keep the stocked choices as variants and the made-to-order choices as custom options.

Should an armchair, sofa and sectional from the same range be one product or three?

Three products, grouped in a collection. Shoppers search for and compare them separately, each needs its own photos and price, and each is a different item to stock or build. Fabric, legs and cushion fill then live on each product as custom options, which OptionWise assigns to all three at once by tag or collection.

Do custom options need their own SKUs?

No. A SKU identifies something you stock and count. Custom options such as fabric, finish, engraving or a custom width are instructions attached to the order, not stock items, so the product keeps its single SKU (or one per variant) and the choices appear on the order line for your workshop. OptionWise saves them as Shopify line item properties, so they show on the order page, packing slips and notification emails.

How do I charge extra for a fabric grade, a larger size, or assembly on Shopify?

Attach a fixed add-on price to the option value. OptionWise adds the amount to the cart and checkout, so the total the customer pays matches the choices they made.

How do I let customers order a custom width or add a personalized plaque?

In OptionWise, use a number field with a minimum and maximum for the width, and a text field with a character limit for the plaque. With OptionWise's conditional logic you can show these fields only when the customer chooses 'Custom size' or 'Add a plaque', so the standard order form stays short.

Can I sell a matching footstool or mattress on the sofa or bed page?

Yes. If the footstool or mattress is a stocked product of its own, offer it as an add-on product: OptionWise's linked-product option shows it on the sofa or bed page and adds the real product to the cart with its own price and stock. If it is made along with the main piece, a priced option value is enough.

OptionWise for furniture stores

OptionWise is a Shopify product options app. For a furniture store, it puts fabric swatches, leg and base choices, custom dimensions, priced services and add-on products on one product page, and saves every choice to the order for the workshop.

OptionWise is free for life for stores that install today. It adds a block to your theme, with no code changes.

Add to Shopify