Manage your product catalog with cost prices and stock movements. Get low-stock alerts; when a deal is won, stock is deducted automatically and the cost is logged as an expense.
Product catalog with cost prices, stock movements, low-stock alerts and automatic deduction on won deals.
The products module is a catalog that knows what things cost, not just what they sell for. Every product carries a sale price and a cost price, can have its own custom fields, and tracks stock movements with low-stock alerts. Products are attached to deals, and when a deal is marked won the stock is deducted and the cost of goods is written to finance automatically. Catalogs import and update from CSV, including bulk price changes across a category. It is included on every plan from Starter.
Most CRMs have a product list. It exists so that a quote can be built from a dropdown instead of typed, and that is roughly where it stops: a name and a price.
The difference here is the second price. Each product carries the price you paid as well as the price you charge, and that single extra field changes what the rest of the system can tell you. Without it, a won deal is revenue. With it, a won deal is revenue, cost of goods and margin — and those three numbers disagree far more often than people expect. The salesperson with the highest turnover is frequently the one discounting hardest, and only the cost price makes that visible before the accountant does.
Everything else in this module — stock levels, alerts, imports, custom fields — is useful on its own, but the cost price is the reason the module is in the CRM rather than in a spreadsheet next to it.
The product list itself is editable in place: click a cell, change the value, move on. For a catalog of a few hundred items this is faster than opening each record, and for a catalog of thousands the CSV route below is faster still.
Products vary between industries more than leads do. A tyre has a size and a season; a treatment has a duration and a practitioner; a course has a start date and a capacity. Rather than a fixed schema you work around, you define the fields your products actually have.
| Type | Example | Where it appears |
|---|---|---|
| Text | Supplier reference, colour | Product form, list column, click-to-edit cell |
| Number | Weight, warranty months | Same, plus filter and report measure |
| Date | Expiry, next price review | Same, plus date filters |
| List | Size (S/M/L), season | Same, plus report dimension |
| Checkbox | Requires installation, hazardous | Same, plus yes/no filter |
Fields can be marked required, so a product cannot be saved without the data your process depends on. Once defined, a field is a column in the product list, editable directly in the cell, and a filter — which means "all products in category X with warranty under 12 months" is a saved view rather than an export.
The import is designed for the realistic case: a supplier price list that arrives every quarter and overlaps almost entirely with what you already have.
Most importers treat an empty cell as a value, and a price list with a blank cost column silently zeroes every cost price in your catalog. The upsert rule here is the opposite: only the cells you filled are written. It is the difference between an import you can run without reading the file twice and one you cannot.
Stock is tracked as a ledger of movements rather than a number you overwrite. Goods in, goods out, corrections and automatic deductions each write a line with a timestamp and a reason, so the current quantity is always explainable.
Each product has a low-stock threshold. When a movement takes the quantity below it, an alert is raised — which in practice is how the sales team finds out they are about to promise something that is not on the shelf, before rather than after the promise.
What this is deliberately not is a warehouse system: there are no bin locations, no picking routes and no multi-warehouse transfers. Stock here is tracked as it relates to selling — see what this is not.
Attaching products to a deal does two things at once when the deal is marked won:
| Action | Uses | Lands in |
|---|---|---|
| Stock is deducted by the quantities sold | Product stock levels | Stock movements, with the deal as the reason |
| Cost of goods is written as an expense | Product cost prices | Finance, attributed to that deal |
| Margin becomes calculable | Sale price minus cost price | Deal profitability (Business plan) |
The salesperson does nothing extra. Dragging the card to "won" is the stock action and the bookkeeping action, which is exactly why the CRM's numbers and the finance numbers stop drifting apart — nobody has to remember to tell anybody.
Products are a dataset in the pivot report builder alongside leads, deals, calls and finance. The reports that tend to change decisions:
It is worth being explicit, because assuming otherwise leads to a bad surprise a month in.
This is not a warehouse management system. It does not model bin locations, picking and packing, multi-warehouse transfers, serial or batch tracking, or purchase orders to suppliers. It does not replace an ERP for a manufacturer or a distributor with complex logistics.
What it is: product and stock tracking as it relates to selling. It answers "what do we have, what did it cost, what did we sell it for, and are we about to run out" — which is what a sales team needs to know, and what a warehouse system is usually too heavy to tell them quickly.
| Symptom | Most likely cause | Fix |
|---|---|---|
| Margin is 100% on everything | Cost prices are empty (default zero) | Import a cost column, or bulk-set costs per category |
| Stock went negative | Sales recorded before opening stock was entered | Add an opening-balance movement; history stays intact |
| Import created duplicates | Rows had no ID, so each became a new product | Export first to get IDs, then re-import with the ID column filled |
| Import blanked some fields | It did not — empty cells are ignored; check the source file for a literal "0" or a space | Clean the cell; re-import updates in place |
| Alert never fires | No low-stock threshold set | Threshold defaults to none; set it per product or in bulk |
| Old deals changed value after a price update | They did not — deal lines are stored at the price in force | Nothing to fix; historical margin stays stable |
| Plan | Catalog, cost prices, stock & alerts | Auto deduction + cost on won | Pivot reports | Deal profitability |
|---|---|---|---|---|
| Starter | Included | Included | — | — |
| Growth | Included | Included | Included | — |
| Business | Included | Included | Included | Included |
| Enterprise | Included | Included | Included | Included |
The catalog, cost prices, custom product fields, CSV import, stock movements, alerts and automatic deduction on won deals are all on Starter. See the pricing page for the full comparison and finance and commissions for how cost of goods flows into margin.
Set up your workspace in under a minute — free for 14 days.
Create your workspace