How Product Pricing Works & Pricing Models

Created by Matt Reid, Modified on Sun, 18 Jan at 6:24 PM by Matt Reid

Overview

Zulu uses a flexible, multi-layered pricing system that supports:

  • Multiple price tiers (retail, wholesale, bulk) (default)
  • Cost tracking with weighted average calculations
  • Quantity-based discounts (Price Breaks)
  • Client-specific pricing (custom price books)
  • Automatic markup calculations (CostPlus mode)
  • Full audit trail of all price changes

Base Price Fields

Every product has the following price fields:

Selling Prices (User-Editable)

FieldLabelDescription
priceRetail PriceThe primary selling price displayed to customers. This is the default price used on invoices, quotes, and the shop.
price_specialSpecial PricePromotional or sale price. When set (> 0), this takes precedence over the retail price. Used for time-limited offers, only for non account-pricing users.

Cost Prices (System-Managed)

These fields are automatically updated by the system and cannot be directly edited:

FieldLabelDescription
price_purchasePurchase PriceThe cost price from your supplier. Updated when you receive goods via Purchase Orders or Product Deliveries. For forex suppliers, this price represents the purchase price in that foreign currency.
price_averageAverage CostWeighted average cost of all stock on hand. Used for inventory valuation and COGS calculations. See Average Cost Calculation below.
price_latest_landedLatest Landed CostThe most recent fully-landed cost per unit (including freight, customs, etc.). Updated when completing Product Deliveries with landed costs.

Wholesale Price Tiers (User-Editable)

FieldDefault LabelDescription
price_ws1WholesalePrimary wholesale tier
price_ws2Wholesale 2Secondary wholesale tier
price_ws3Wholesale 3Third tier
price_ws4Wholesale 4Fourth tier
price_ws5Wholesale 5Fifth tier
price_ws6Wholesale 6Sixth tier
price_ws7Wholesale 7Seventh tier

Note: Wholesale tier labels can be customized in Settings > Products > Manage Pricing Tiers. You can rename tiers to match your business (e.g., "Trade", "Distributor", "VIP").

Decimal Precision

TypePrecisionExample
Selling prices2 decimals$99.95
Cost prices4 decimals$45.7825

Cost prices use higher precision to maintain accuracy during currency conversions and weighted average calculations.

Zulu will in due course adopt likely 4-decimal precision across all pricing.


Average Cost Calculation

The price_average field uses the weighted average cost method for inventory valuation.

Formula

When new stock is received:

New Average = (Existing Stock × Current Average) + (New Quantity × New Unit Cost)
             ─────────────────────────────────────────────────────────────────────
                              Existing Stock + New Quantity

Example

EventQtyUnit CostStock AfterAverage Cost
Opening0-0NULL
Receive 100 units100$10.00100$10.00
Receive 50 units50$12.00150$10.67
Sell 30 units-30-120$10.67
Receive 80 units80$11.00200$10.80

Special Behavior

  • When stock is first received and average price is NULL, it inherits the purchase price value
  • Only NULL triggers inheritance (a value of 0 is treated as valid)
  • Average cost is only recalculated when adding stock, not when selling

Price Breaks (Quantity-Based Pricing)

Price Breaks allow you to offer tiered pricing based on quantity purchased.

How It Works

Define quantity ranges with corresponding prices:

Quantity RangePrice
1 - 9$100.00
10 - 49$90.00
50 - 99$80.00
100+$70.00

When a customer orders 35 units, the system matches to the "10-49" tier and applies $90.00 per unit.

Configuration

  1. Navigate to Products > Edit Product
  2. Click the Price Breaks button
  3. Add quantity tiers with min/max ranges
  4. Set the price for each tier
  5. Optionally add a Special Price for promotional break pricing

Price Break Fields

FieldDescription
Qty. MinMinimum quantity for this tier
Qty. MaxMaximum quantity (0 = unlimited)
PriceStandard price for this tier
Special PriceOptional promotional price for this tier

Inheritance

  • Parent products can define breaks that apply to all variants
  • Child products can override or disable parent breaks
  • Use the Price Break Disable toggle to disable breaks for specific products

Price Selection Logic

When calculating price, the system: 1. Finds the matching quantity tier 2. Compares break price vs base product price 3. Uses the lower of the two prices 4. If Special Price exists on break and is lower, uses that instead


Cost Based Pricing Model

Cost Plus is an automatic markup system that calculates selling prices based on your cost price.

How It Works

  1. Set the cost price (purchase price)
  2. Define markup percentages for each price tier
  3. Selling prices are automatically calculated

Formula

Sell Price = Cost Price + (Cost Price × Markup%)

Example

TierMarkup %Cost PriceCalculated Sell Price
Retail100%$50.00$100.00
Wholesale 160%$50.00$80.00
Wholesale 240%$50.00$70.00

Configuration

  1. Navigate to Settings > Product tab
  2. Set Pricing Model to "Cost Based Pricing"
  3. Configure markup percentages for each price tier in the Manage Pricing Tiers popup window

CostPlus vs Flexible

Model:Cost BasedFlexible
Price calculationAutomatic from costManual entry
When to useConsistent marginsVariable pricing
Markup controlPercentage-basedDirect price entry

Tip: You can switch between models at any time. Existing prices are preserved. Please note though that when switching from cost based / cost-plus back to flexible the pricing will remain at what it was last saved as.


Client-Specific Pricing (Price Book)

Create custom pricing rules for individual clients at the product or category level.

Pricing Hierarchy

When determining a client's price, Zulu checks in this order:

1. Product-Level Rule (direct price override)
   ↓
2. Product-Level Rule (price group + margin)
   ↓
3. Category-Level Rule (applies to all products in category)
   ↓
4. Client Default Settings (price group + margin on client record)
   ↓
5. Base Product Price (fallback)

Rule Types

Fixed Price Override

Set a specific price for a client: - Price Sell: Direct price (e.g., $85.00)

Price Group + Margin

Use a base price tier with an optional markup/discount: - Price Group: Which price tier to use (e.g., "Wholesale 1") - Margin %: Adjustment percentage (positive = markup, negative = discount)

Margin Calculation

Final Price = Base Price + (Base Price × Margin%)

Example

Product: Widget - price = $100.00 (retail) - price_ws1 = $80.00 (wholesale)

Client Rule for "Acme Corp": - Price Group: price_ws1 (Wholesale) - Margin: 10%

Calculation: $80.00 + ($80.00 × 0.10) = $88.00

Acme Corp pays $88.00 per Widget.

Setting Up Client Pricing

Per-Client Default

  1. Navigate to CRM > Clients > Edit Client
  2. Set Price Group (which tier they use by default)
  3. Set Margin % (adjustment to apply)

Category / Product-Specific Rules

  1. Navigate to CRM > Clients > Edit Client
  2. Click Price Book button
  3. Add a rule for specific product or category
  4. Choose between fixed price or group + margin

Price Logging & Audit Trail

All price changes are automatically logged for audit purposes. These are accessible on the product page to view pricing history.

What's Logged

Change TypeDetails Recorded
Product price changesOld value, new value, which field, who changed it
Price rule changesClient ID, product ID, price change
Price break changesBreak ID, quantity tier, price change
TimestampLogged timestamp of the change

Viewing Price History

Price history is available on the product edit screen and via API queries.


Quick Reference

Price Field Summary

FieldEditableUpdated ByPurpose
PriceYesUserRetail selling price
Special PriceYesUserPromotional price
Purchase PriceNoDeliveries/POsSupplier cost
Average PriceNoStock receiptsWeighted average cost
Latest Landed CostNoDeliveriesLatest landed cost
Wholesale 1 thru 7YesUserWholesale price tiers

Pricing Priority (Highest to Lowest)

  1. Client-specific product rule (fixed price)
  2. Client-specific product rule (group + margin)
  3. Client-specific category rule
  4. Client default price group + margin
  5. Price breaks (if applicable quantity)
  6. Product price_special (if set)
  7. Product price (base retail)

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article