Product Pricing
Cost price versus selling price, margin, wholesale and custom pricing, how VAT-inclusive pricing works, and what happens when you change a price.
8 min read · Updated 16 Oct 2026
On this page
Two numbers matter on every item: what it costs you and what you charge. Kassly asks for both, because without the cost it cannot tell you a margin, a food cost or a profit.
Pricing sits in the Pricing block of the product form (Catalog → Products → Add Item, or the edit pencil on an existing item).
The price fields
| Field | Required | Notes |
|---|---|---|
| Cost Price (₱) | Yes | What one unit costs you. Pre-filled with 0. |
| Selling Price (₱) | Yes | What you charge. Left blank on purpose on a new item — it should be a deliberate number, never a safe default. |
| Wholesale Price (₱) | No | Needs the Customer Memory & Promos add-on to appear. |
| Allow Custom Pricing | No | Off by default. Lets a cashier type their own price for this item. |
Cost is pre-filled with zero because plenty of small merchants genuinely do not know it and only care about the selling price. Leaving it at zero costs you nothing at the counter — but it makes every margin, profit and food-cost figure in Kassly wrong, so it is worth going back to fill in.
Cost price is per stock unit
If the item tracks stock, the cost is the cost of one stock unit. Flour
tracked in grams at ₱45 per kilo has a cost price of 0.045, not 45.
Cost is kept to four decimal places for exactly this reason. Selling prices stay at two — you cannot charge a customer ₱0.045.
With Inventory Pro, editing a product shows hints under Cost Price:
- Last purchase cost, the most recent price you paid for it on a purchase order or a costed stock-in, with the PO number, supplier and date. It needs See Cost Prices.
- On automatic costing, Updated automatically from receipts; editing sets a new starting cost. See Inventory settings.
Margin
As soon as both numbers are filled in, Kassly shows what the price earns under
the selling price — ₱2.50 profit · 15.6% margin · 18.5% markup for an item that
costs ₱13.50 and sells for ₱16:
| Figure | Worked out as | Read it as |
|---|---|---|
| Profit | selling − cost | Pesos kept on each one sold |
| Margin | profit ÷ selling price | The share of the price you keep. The reports' gross margin uses the same formula |
| Markup | profit ÷ cost | How much you added on top of what you paid (your tubo or patong) |
The same two percentages show under each variant's price. Nothing shows while the cost is still the form's placeholder 0.
If you type a selling price below the cost you get a red warning instead: "Selling price is below cost — you will lose money on each sale." It is a warning, not a block. Loss leaders are allowed.
Wholesale price
Needs the Customer Memory & Promos add-on (₱300 per branch each month), or any bundle that includes it. Without it the field is simply not shown.
A wholesale price is a second price on the same item, used when a line is rung up as wholesale rather than retail — B2B sales orders and consignment issues do this. It is not applied automatically to a customer just because they are marked as wholesale.
If a line asks for the wholesale price, Kassly looks in this order:
- the variant's wholesale price,
- the product's wholesale price,
- the ordinary selling price.
So leaving wholesale blank is safe: nothing sells for ₱0 by accident.
See Sales orders and invoices.
Allow Custom Pricing
Turn this on for items with no fixed price — cut-to-length cable, custom cakes, tailoring. It lets a cashier enter the amount at the counter.
It is a per-item permission. If a sale tries to set its own price on a product that does not allow it, Kassly rejects the whole sale: "Product … does not allow custom pricing."
Tax-inclusive versus tax-exclusive
Every product carries a Tax Inclusive setting, and it changes the meaning of the selling price you typed.
| Setting | Your ₱112 selling price means | VAT at 12% |
|---|---|---|
| Tax Inclusive (on) | The customer pays ₱112 | ₱12.00 is carved out of the ₱112 |
| Tax Inclusive (off) | The customer pays ₱125.44 | ₱13.44 is added on top |
The arithmetic, so you can check a receipt by hand:
- Inclusive — VAT = total − (total ÷ 1.12). The line total does not change.
- Exclusive — VAT = total × 0.12, and the line total goes up by that amount.
Philippine retail prices are almost always tax-inclusive, which is why new products default to it.
The product's own setting wins. Your store-wide Tax Inclusive Pricing switch in Settings → Store Settings → BIR Registration is the default for ad-hoc items typed at the counter, but a product or service always uses the value stored on itself. If you flip the store switch, it does not retroactively change items already in your catalog.
VAT classification
Alongside Tax Inclusive there is a VAT Classification with three options:
| Classification | What Kassly does |
|---|---|
| Vatable (12%) | Applies your tax rate, inclusive or exclusive as set. |
| VAT-Exempt | No VAT at all. The price is the price, and the Tax Inclusive setting is ignored. |
| Zero-Rated | No VAT at all. |
Two whole-store cases override anything an item says:
- If your store's Tax Type is Non-VAT (Percentage Tax) or VAT-Exempt, every line is treated as VAT-exempt with zero VAT, no matter how the product is classified. Nothing is carved out of your revenue.
- The Tax Inclusive and VAT Classification fields only appear on the product form if your store is marked BIR-accredited. If they are not shown, new products are created tax-inclusive and vatable.
Tax rates and the store-level settings are covered in Tax configuration. Senior-citizen and PWD discounting interacts with VAT and is covered in Discounts.
Changing a price
Edit the product, change the number, save. There is no approval step and no scheduling.
What happens next:
| The back office | Updated immediately. |
| The app | Picks the new price up on its next catalog sync. A terminal running offline keeps selling at the old price until it syncs. |
| Past sales | Untouched. Every receipt, report and Z-reading keeps the price that was actually charged. |
| Stock valuation | Uses cost, not selling price, so a reprice does not move your inventory value. |
Because a reprice only reaches a terminal on sync, plan price changes for a moment when your devices have signal — not five minutes before a rush. See Sync status.
Cost and price history
Every change to a product's cost or selling price is recorded, on every plan: edits, imports, bulk updates, and every purchase order delivery (even one that left the cost as it was). With Inventory Pro you can read it on the product page, in the Cost & price history card. Without it the card is locked, but the history is still being kept, so it is all there the day you add Inventory Pro.
The card has two tabs:
- Cost lists each change, newest first: when, the source (manual edit, import, purchase order receipt, goods receipt, production, "PO cost applied" and so on) with a link to the purchase order or production run, the supplier or location, the quantity and unit cost of a delivery (with the change from that supplier's previous price), the catalog cost before and after, and who made the change. A delivery that didn't move the catalog cost reads Unchanged. A small chart shows the cost over time.
- Selling price lists selling, wholesale and tier price changes the same way.
A product with variants has a picker: all variants, the product itself, or one variant. The chart only appears for a single one, because a product and each of its variants keep their own cost.
The Cost tab needs See Cost Prices. Without it the card shows the selling price history only.
What Kassly does not do
Being straight about the edges:
- No quantity-break pricing. There is no "10 pieces or more, ₱9 each" tier.
- No member price. Member pricing is not a separate price on the item; loyalty and memberships work through discounts instead. See Memberships.
- No per-branch prices. A product has one selling price across your whole store. Branch-level pricing is not supported.
- No scheduled price changes. A new price takes effect the moment you save it. For time-limited pricing use a promotion instead — see Approvals and promotions.
- No automatic markup. Kassly will not set your selling price from your cost plus a percentage, and receiving stock at a higher cost never changes what you charge. Selling prices only change when you change them.
Two things can move a cost price on their own: completing a production run at a commissary recalculates the finished item's cost as a moving average of what was already on hand and what the batch cost to make (see Commissary), and, if you turned on automatic costing, every costed delivery does the same (see Inventory settings).