BlogShopify8 min read

Variants, line item properties or metafields? Modeling furniture specs in Shopify

A cleaning code, a stocked fabric choice, and a priced leg finish do different jobs. Give each attribute a home that preserves what the customer chose and what the vendor must build.

The OrderPilot team·

Chip carries a wood finish sample toward dining chairs in a bright furniture photography studio.

Seat height: a product specification. Fabric grade: sometimes a variant choice. A monogram on a headboard: information for that customer’s order. Then comes the leg finish that adds $120 and changes the lead time. That last choice needs more than somewhere to type “walnut.”

Choose the structure by what the attribute does. Does it change the selling price, the purchase cost, the SKU or stock identity, or the lead time? Does the vendor need it to build the piece? A catalog works well when those answers remain attached to the customer’s actual selection. The examples here are illustrative.

Ask what changes when the customer chooses

Start with the finished piece and work backward. If changing “oak” to “walnut” means a different stocked product, the choice needs a stock identity. If the finish only describes a table that is always supplied the same way, it is descriptive product information.

If the customer is choosing a finish for a piece the vendor will make, the choice also needs a route into purchasing. It might affect cost even when your selling price stays the same. “No surcharge” does not mean “no consequence.”

Write a short attribute list before building the product page. Beside each field, record who maintains it, who selects it, and who needs to read it later. The custom furniture product data checklist is useful for this first pass.

One warning sign is a field doing several unrelated jobs. A single “Details” box containing a fabric, delivery instruction, and warranty note is wonderfully flexible until someone has to buy the sofa.

Use variants for sellable stock identities

A Shopify variant represents a particular combination within a product. It suits a defined range where the choice determines the item you sell, price, and track. Shopify’s variant documentation limits a product to three options and 2,048 variants.

For a stocked chair offered in oak or walnut and linen or leather, a variant structure can be straightforward. The warehouse can count the same identity that the associate sells. A returned walnut-and-leather chair can be distinguished from the oak-and-linen chair beside it.

That clarity weakens when staff combine unrelated choices into labels simply to fit the option limit. A finish shouldn’t disappear inside a lengthy fabric name. If the customer needs separate decisions, preserve them in the structure you choose.

See Shopify’s three-option limit and the higher variant ceiling before expanding an upholstery matrix. Count both fields and combinations.

Use metafields for facts about the product

A metafield stores structured information attached to a Shopify record. Furniture examples include seat height, frame material, assembly information, and a cleaning code. A metaobject groups reusable information, such as a finish’s name, image, and description.

A metafield does not change a selling price merely because you fill it in. An app or other configured behavior can read the value and act on it, but storage and pricing are separate jobs. A field labeled “Walnut surcharge” is still just data until something applies that surcharge.

Keep cleaning codes with the fabric or product they describe, and display them where staff and customers need them. If upholstery changes, the care information should follow the chosen upholstery. Avoid copying a generic sofa cleaning code onto a configuration with a different fabric.

Reusable finish records also prevent small naming differences from multiplying. “Natural oak” should mean the same finish in the product page, the sample library, and the purchasing record.

Respect the storage and display limits

Shopify’s metafield limits allow merchants 256 definitions per resource type, with separate app limits. Most value types have a 64 KB limit, while list and reference types have their own ceilings. Metaobject reference lists can hold up to 1,024 entries.

A stored list and a visible list are different things. A basic Liquid loop can return only the first 50 reference entries; the storefront implementation needs appropriate pagination to show more. Shopify’s metaobject documentation explains the same basic loop boundary for entries.

For a store owner, the useful test is simple: select a finish well down the library and find it on the actual product page. Don’t accept the presence of the first swatch as proof that the full collection is available.

Give developers a clear requirement for the entire library, its search behavior, and what happens when a finish is withdrawn. A large field should not become a place to hide an unmaintained catalog.

Use line item properties for information on one purchase

Line item properties capture name-and-value information on a cart or order line, such as the text for a monogram. Shopify’s line item reference describes how those values are captured and displayed.

A property by itself does not create a priced variant, track separate stock, or maintain a purchase cost. Keep a free personalization field separate from the mechanism that charges for personalization. If adding embroidery costs money, the order needs a priced way to represent that service.

The vendor sees the property only if your purchasing workflow deliberately carries it into the document or message the vendor receives. Seeing “Monogram: AB” in the cart is not evidence that it appears on the PO.

Test that handoff with an actual sample order. Inspect the customer’s confirmation, staff order record, and vendor-facing document. The final document should state the accepted spelling and placement without requiring someone to reconstruct the customer’s choices from a screenshot.

Use template options for choices that drive the custom sale

OrderPilot templates put the furniture’s selectable specification beside its price, cost, and lead time. They support dropdowns, text, add-ons, swatches, number fields with per-unit pricing, and a Designer & Finishes picker that reads Shopify metaobjects.

That means your existing finish library can supply the picker. Decide which finishes belong on each template, then set the commercial details for that piece. Reusing a finish’s identity doesn’t require every sofa and table to charge the same amount for it.

A Dimensions option captures length, width, and height with minimum, maximum, and step settings. It has a flat price and no stock of its own; it is not automatically a price-per-volume calculation. Staff can see the chosen options and their lead-time contributions on the template and the Admin order line. Lead time can also appear in the online options block when enabled; it does not print on the quote PDF or PO. Keep a customer’s agreed timing explicit in the sale’s communication.

Follow a priced finish through the order

Say a table has a base price of $2,000. The customer chooses a walnut finish adding $120, making the merchandise total $2,120 before fees or tax. The vendor charges an extra $80 for that finish. The template should preserve both amounts, because they answer different questions.

The customer sees the selected finish and the quote total. Purchasing needs the exact finish instruction and its cost. OrderPilot carries the configured specification into the vendor PO, reducing the need to retype the showroom decision.

Use the product spec sheet as a readable reference for the piece and inspect it against the accepted configuration. The product spec sheet guide explains where the document helps the conversation. Before releasing the order, read the vendor document as if you had never seen the customer’s room. If it leaves you choosing between two walnuts, the record needs more detail.

Give each common attribute a clear home

Use this table as a starting decision, then adjust it to how the vendor actually sells the piece.

AttributeUsually belongs inWhat decides
Fixed seat heightMetafieldDescribes the standard piece
Stocked size or fabricVariantIdentifies separately counted stock
Custom lengthTemplate optionCustomer chooses within permitted limits
Fabric gradeVariant or template optionStock identity versus configured pricing
Finish or legsVariant or template optionWhether stocked or ordered to specification
Cushion fillTemplate optionChanges the build, cost, or price
COM yardageStructured specification or template fieldWho supplies it and how the amount is established
MonogramLine item property or template textCaptures exact wording; any charge needs its own pricing
Fixed overall dimensionsMetafieldDescribes the product rather than a choice
Cleaning codeFabric/product metafield or reusable recordFollows the selected material

The best structure lets the next person do their job without asking the salesperson what “the nicer legs” meant. Continue with the complete made-to-order Shopify guide to carry that catalog decision through the rest of the sale.

Sources

  1. Adding variants — Shopify Help Center.
  2. Metafield limits — Shopify developer documentation.
  3. Liquid objects: line_item — Shopify developer documentation.
  4. Liquid objects: metaobject_definition — Shopify developer documentation.

Give your team the tools they deserve

See what changes when every custom order lives in one place, from the showroom floor to your customer’s front door.