Products & product cards

A product card is a pre-launch planning record. You build it in setlist — variants, SKUs, costs, tests, pricing, forecast — and only push it to Shopify once it's ready to list.

Where: setlist → Products The detail page is documented separately: The Product Workspace


What a product card is

setlist's intro line says it best:

"Plan products, generate SKUs, prescribe tests, set pricing, and review them before they're created in Shopify."

A product card is everything about a product before it becomes a real Shopify listing. It starts with a temporary working name and an auto-generated SKU, then moves through the stagesPlan → Design → Review → Ready for launch — as you flesh it out. When it reaches "Ready for launch," you push it to Shopify and finish the listing there.

setlist owns the prep (variants, SKUs, bill of materials, costs, testing, forecast). Shopify owns the listing (final name, photos, SEO, collections). The description is shared — write it in the Product description section on the detail page, and once the product is linked it stays reconciled with Shopify. See Shopify catalog & reconciliation.

setlist
the studio
  • Variants
  • SKUs
  • Bill of materials
  • Costs
  • Testing
  • Forecast
  • Readiness pipeline
Shopify
the listing
  • Official name
  • Photos
  • Description
  • SEO
  • Collections
  • Live storefront
Fulfil
source of truth for materials
  • Stock on hand
  • Unit costs
  • Labor
Who owns what — setlist · Shopify · Fulfil

Creating a product card

Click New product card (on the Products list, the dashboard, or from inside a campaign). The form has four sections.

1. Product details

FieldRequiredNotes
Working nameA temporary name to start ("e.g. gold ring with a blue stone"). The SKU auto-derives from the category + this name. You set the official name later, in Review.
Link to briefA URL for this product's brief — a Monday.com doc, or anything else. Openable from the product page any time afterwards. A scheme-less paste like monday.com/… is stored as a full URL.

There's no description field on the create form. The product description is its own Product description section on the detail page.

2. Classification

FieldRequiredNotes
CategoryDrives the SKU and the available subcategories. Sourced from Settings → Categories. (If you haven't added any yet, this becomes a free-text field with a hint to add them in Settings.)
SubcategoryA dependent dropdown — appears once you pick a category that has subcategories.
Product lineFrom Settings → Product lines. Its behavior may add a conditional field below (see "Launch & availability").
Behavior(read-only)Mirrors the chosen line's behavior — None / Limited date / Limited quantity. Set on the line in Settings.
OwnerA person from Settings → Team. Defaults to "Unassigned."
Plan-stage classificationsAny classifications you've set to show at the Plan stage appear here.

"Category" is not Shopify's "Product type." They are two separate fields:

  • Category is setlist's own planning field — it drives the SKU, the subcategory list, forecast targets, and how the Products list groups. setlist never writes it to Shopify.
  • Product type is a read-only mirror of whatever Shopify has on the linked product. It appears in the Status panel on the detail page once a product is linked, and nowhere else. You change it in Shopify, not in setlist.

Setting a Category has no effect on the Shopify listing, and editing the product type in Shopify has no effect on your Category.

3. Launch & availability

FieldRequiredNotes
CampaignOnly shown if you have campaigns. Adds the new product to that campaign on save. Pre-filled when you start from a campaign.
Launch groupA launch to assign to. Assigning one seeds and locks the launch date to the launch's start.
Launch dateEditable when no launch is assigned (no past dates). Locked to the launch's start when a launch is assigned.
End dateconditionalAppears when the product line's behavior is Limited date. Defaults to the launch's end date.
QuantityconditionalAppears when the behavior is Limited quantity — the units cap.

4. Testing

FieldDefaultNotes
Tests required for this productONTurn off for products that don't need physical testing — the test UI is then hidden.

Click Create product. setlist generates the SKU, creates a single default variant, files the card at stage Plan, and opens its detail page.

What's created automatically: the SKU (you never type it) and one default variant carrying that SKU. You add option types/variants later on the detail page. If the category has a forecast target, the detail page prefills the forecast from it — nothing is written until you save.

Required fields

Only two things are required to create a card:

  • A working name"Give the product a working name before creating it."
  • A category"Pick a category so setlist can generate the SKU."
New product card
Product details
e.g. gold ring with a blue stone
What is this product, who is it for, any notes for the team…
Classification
Ring (R)
Band
Core
None
Priya L. — Design
Launch & availability
Fall 2026
Sep 1, 2026
Set by Fall 2026
Testing
Tests required for this product
Turn off for products that don’t need physical testing.
Create productCancel
Creating a product card — the four sections

The Products list

The toolbar. New product card and Reconcile Shopify catalog sit in the page header — the latter links a live Shopify catalog to setlist product cards, covered in Shopify catalog & reconciliation. Above the list itself: Filter on the left, and on the right a Product data menu plus Edit.

The Product data menu holds three items:

ItemGoes to
Import planning dataThe Import planning data page — upload a setlist planning workbook, or a Monday.com CSV/XLSX export and map its columns. Covered in Shopify catalog & reconciliation.
Import product CSVThe CSV importer described below.
Export planning workbookDownloads the current catalog as an .xlsx planning workbook.

The tree table

The default layout is one tree table — Category → Sub-category → product — carrying the commercial columns. The Product column stays pinned while the rest scroll horizontally:

ColumnShows
ProductThe Shopify featured-image thumbnail (an image glyph when there isn't one), then the title (links to the detail page) with the SKU beneath
Shopify statusThe product's current Shopify listing state
Product lineAssigned product line, or "Not set"
COGSThe cost per unit, as a range when variants differ
PriceThe retail price, as a range when variants differ
MarginProduct margin %, or "—" when there's no final price yet
Sold 30d / 90dUnits sold in the last 30 and 90 days, from Shopify sales evidence — "42 / 118". Reads "—" until a sales sync has run (or with no linked Shopify SKU)
ForecastThe product forecast total
On handCurrent Shopify inventory across the product's SKUs, from the latest inventory sync

(Stage and readiness moved to the home tab's Pipeline — the Products tree is about what things cost, sell for, and have in stock.)

Group rows carry rollups. Click any Category or Sub-category row to expand or collapse it. While collapsed it still answers "how priced, selling, and stocked is this slice of the catalog":

  • COGS and Price show the group's combined range.
  • Sold 30d / 90d, Forecast, and On hand sum across the group.
  • Margin averages across only the products that have one, so unpriced work doesn't drag the number down. It reads "—" when nothing in the group is priced.
  • Shopify status and Product line stay blank on group rows — they're per-product facts with no meaningful average.

What's expanded by default. Categories open, sub-categories closed. While any filter is active, sub-categories default to open so a matching product is never hidden behind a collapsed rollup. Your own expand/collapse clicks override the defaults for the session, and they carry over into Edit mode.

Flattening and fallbacks. A category whose products all lack a sub-category skips the extra level: its products hang directly off the category row, which then carries the rollup itself. Products with no category or no sub-category are never dropped — they collect in No category / No sub-category groups, which sort after the named ones.

When the filters exclude everything, the list reads "No products match this filter."

Table or cards

Settings → PreferencesProducts layout chooses the default: Table (the tree above) or Cards. Both keep the same filters and the same Category → Sub-category organization; the cards layout uses collapsible group headings over a two-column grid, and each card carries the thumbnail, title, SKU, Shopify badge, lifecycle-stage badge, product line, Ready %, and Margin. (Cards keep the stage badge and Ready % even though the table moved those to the home Pipeline.)

Cards are a read-only presentation. Choosing Edit temporarily switches to the table layout so the checkboxes and forecast fields have somewhere to live, then returns to your preference when you're done.

Filtering

The Filter popover combines Launch, Category, Sub-category, Product line, one or more Stages, and one or more Shopify statuses. Every field except Launch is multi-select and means "any of these"; Launch is single-select. The button reads "Filtered (N)" when active, counting each selected value separately, and Clear resets everything. There's no free-text search or column sorting — use the filters.

A few behaviors worth knowing:

  • Sub-categories are nested beneath their parent category (for example, RingsBand, Signet), so the same sub-category name under two categories stays two distinct choices. The options follow the categories you've selected, and changing the categories drops sub-category selections no selected category can produce.
  • Category and Product line only offer values actually in use on your products, and Launch only appears once you have launches.
  • Stage and Shopify status show a count next to each option.
  • A product with no product line (or no sub-category) can never match a selected one, so turning that filter on hides it.

Bulk editing and assignment

Choose Edit. The same tree table grows a leading checkbox column — the header checkbox selects everything visible, and a group row's checkbox selects everything in that group — plus a trailing editable Forecast total column with a "→ N variants" hint under each field. Collapsing a group while editing hides its rows without discarding what you typed.

Once anything is checked, a bulk action bar floats at the bottom of the page and follows you as you scroll. It shows "N selected", the Add to… and Update… pickers, and an to clear the selection.

Add to… (campaigns and launches). Pick a Destination — Campaign or Launch — then the target, then Assign.

  • Campaign: adds direct campaign membership without removing other campaign relationships.
  • Launch: a product has one launch, so this moves it off any previous launch. Choose No launch (unassign) to clear membership.

Update… (one field across the selection). Pick a Field, pick a value, then Apply. The field list is:

FieldValues
Product lineAny line from Settings → Product lines, or Not set (clear).
Sub-categoryAny sub-category, labeled Category › Sub-category, or Not set (clear).
each classificationOne entry per classification you've defined — its own options, or Not set (clear). Text classifications get a free-text box where blank clears the field.
  • Setting a product line whose behavior isn't limited quantity also clears the product's units cap, matching the detail form.
  • A sub-category only reaches products of its parent category. The picker says so before you apply — "Applies to 4 of 9 selected — only Rings products." — and Apply is disabled when the choice would reach nothing. The rest are skipped, not reassigned.
  • Category is not bulk-editable, and neither are Channels (manage those per product).

Forecast totals. Type new totals in the Forecast total column, then choose Save. setlist distributes each changed total across that product's variants using your configured forecast weights, or evenly when no weights apply. Rows you didn't change are not written.

Save only appears when you owe one. The header button reads Done until a typed total actually differs from what the row showed, at which point it becomes Save with a discard beside it. Add to… and Update… apply immediately and don't wait on Save. A successful save clears the drafts, the selection, and Edit mode.

If a save collides with a teammate's edit, the banner reads "A product changed in another session. Your forecast edits are still here; review the latest values, then edit any forecast to retry." — your typed values survive.

Scope of a bulk action. Both pickers act only on checked products that are still visible after filtering, so a filter change can never sneak a hidden row into an action. Assigning and updating both keep the selection and Edit mode, so you can chain them (campaign, then launch, then a product line); the bar's is how you drop the selection.

Bulk launch assignment changes membership only; it does not reseed the product's launch or end dates. Review those dates on the product afterward.


Importing products from CSV

Already have products in a spreadsheet? Choose Product data → Import product CSV on the Products list — or Setup actions → Import CSV on the empty state — to bulk-create (or update) product cards.

The flow: drop a .csv file (with a header row) on the upload zone, then click Import. There's no preview or column-mapping step — setlist reads the headers and imports straight away, then shows a summary such as "Imported 12 new · 3 updated," with any skipped rows called out.

Limits: up to 2,000 rows and 4 MB per import. A larger file is rejected rather than partially imported. (For bigger spreadsheets, and for column mapping, use Import planning data instead.)

Recognized columns

Only two things are required for a new row: title (the working name) and category. Everything else is optional.

ColumnNotes
title (required)The working name. Also accepts name, product, style, …
category (required for new rows)Must match a category in Settings → Categories by name or SKU code. Also accepts productType, type, family.
skuLeave blank to auto-generate. A SKU that matches an existing product updates that product instead of creating a new one.
description · subcategory · owner · launch · launchDate · productLine · endDate · limitedQuantity · campaign · testsRequired · forecastTotalAll optional. owner, launch, productLine, and campaign resolve against your Settings catalogs by name (or id) — an unrecognized value is quietly dropped.

Headers are matched loosely (case, spaces, and punctuation are ignored, and common aliases are accepted), so Product Type, product_type, and PRODUCT-TYPE all land on the same column.

Nothing in this file touches Shopify's own product type — the category column fills setlist's planning field only.

How rows are matched

setlist matches each row to an existing product by SKU (case-insensitive):

  • No match → a new product card is created at stage Plan with one default variant. testsRequired defaults on unless the column says otherwise.
  • Match → that product is updated (title, category, description, dates, owner, classifications…). Its stage, production quantity, due date, assignee, official name, and link to brief are preserved.

Gotchas. There's no undo — a matched SKU overwrites. If two rows resolve to the same SKU, the first wins and the rest are skipped. And if your file has no recognizable header row, columns are read positionally in the order above, so always keep a header row.


Tips & gotchas

  • You don't type SKUs. They're generated from the category's SKU template + your global prefix. You can override a variant's SKU on the detail page if needed. See Categories & SKUs.
  • Category stays in setlist. It never reaches Shopify. Shopify's own product type comes back the other way, read-only, on the detail page's Status panel.
  • The working name isn't the final name. The official (Shopify-ready) name is set in the Review stage and is what syncs to Shopify.
  • Two "readiness" numbers exist. The Ready column (on the home Pipeline and the cards layout, and the dashboard's Avg readiness) uses a fixed 6-point checklist; the Progress gate on the product detail page tracks the current stage's gate. They can differ for the same product. See Stages & progress gates.
  • Set up Settings first. Categories, team, launches, product lines, and classifications all feed the creation form. An empty catalog shows an "Add … in Settings" hint. See Settings.

See also