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 stages — Plan → 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.
- Variants
- SKUs
- Bill of materials
- Costs
- Testing
- Forecast
- Readiness pipeline
- Official name
- Photos
- Description
- SEO
- Collections
- Live storefront
- Stock on hand
- Unit costs
- Labor
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
| Field | Required | Notes |
|---|---|---|
| Working name | ✅ | A 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 brief | — | A 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
| Field | Required | Notes |
|---|---|---|
| Category | ✅ | Drives 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.) |
| Subcategory | — | A dependent dropdown — appears once you pick a category that has subcategories. |
| Product line | — | From 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. |
| Owner | — | A person from Settings → Team. Defaults to "Unassigned." |
| Plan-stage classifications | — | Any 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
| Field | Required | Notes |
|---|---|---|
| Campaign | — | Only shown if you have campaigns. Adds the new product to that campaign on save. Pre-filled when you start from a campaign. |
| Launch group | — | A launch to assign to. Assigning one seeds and locks the launch date to the launch's start. |
| Launch date | — | Editable when no launch is assigned (no past dates). Locked to the launch's start when a launch is assigned. |
| End date | conditional | Appears when the product line's behavior is Limited date. Defaults to the launch's end date. |
| Quantity | conditional | Appears when the behavior is Limited quantity — the units cap. |
4. Testing
| Field | Default | Notes |
|---|---|---|
| Tests required for this product | ON | Turn 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."
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:
| Item | Goes to |
|---|---|
| Import planning data | The 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 CSV | The CSV importer described below. |
| Export planning workbook | Downloads 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:
| Column | Shows |
|---|---|
| Product | The 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 status | The product's current Shopify listing state |
| Product line | Assigned product line, or "Not set" |
| COGS | The cost per unit, as a range when variants differ |
| Price | The retail price, as a range when variants differ |
| Margin | Product margin %, or "—" when there's no final price yet |
| Sold 30d / 90d | Units 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) |
| Forecast | The product forecast total |
| On hand | Current 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 → Preferences → Products 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, Rings → Band, 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:
| Field | Values |
|---|---|
| Product line | Any line from Settings → Product lines, or Not set (clear). |
| Sub-category | Any sub-category, labeled Category › Sub-category, or Not set (clear). |
| each classification | One 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.
| Column | Notes |
|---|---|
| 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. |
| sku | Leave 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 · forecastTotal | All 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.
testsRequireddefaults 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
- The Product Workspace — the detail page where the real work happens
- Shopify catalog & reconciliation — link an existing Shopify catalog, planning workbooks
- Stages & progress gates
- Forecasts — versioned planning from sales history
- Settings