docs
/
Courses — Appmint

Appmint Pricing: price lists, tiers and customer prices

Watch on YouTube ↗

Video chapters
  1. 0:00 Welcome
  2. 0:09 Overview: how a price is chosen
  3. 0:46 Part 1 · Volume price and quantity tiers — How quantity tiers work: explained
  4. 1:15 Build and prove a volume price
  5. 2:37 Part 2 · A trade price for a customer group — Customer groups: explained
  6. 2:53 Group, member, trade price, proof
  7. 3:51 Part 3 · A contract price for one customer — One customer and the pricing methods: explained
  8. 4:07 A fixed contract price for Morgan
  9. 4:41 Part 4 · Overlapping lists and priority — Priority and overlapping lists: explained
  10. 5:06 Fix the overlap with a bulk tier
  11. 5:55 Part 5 · Scheduled prices and membership changes — Scheduled prices and membership: explained
  12. 6:26 Schedule a contract, change a membership

Appmint Pricing Part 6: Pricing for Shared Accounts (Organisation and B2B Accounts)

Watch on YouTube ↗

Written guide

Overview

Configure price lists and prove which buyer receives which price. We will keep base price, variants, price lists and discount codes distinct.

Before you start

Choose one existing product and keep its SKU, variant, currency and buyer fixed while testing. The recorded example is Cedar Botanical Print, base A4 price $25, and the rule course-volume-print gives 20% off at quantity five. It has no customer-group restriction. Historical screenshots document that local configuration and cart comparison; advanced customer/priority branches remain separate verification work.

SettingWhat changes
Product base priceStarting item price
Variant addition/pricePrice for the selected choice
Price listEligible rule based on saved scope and conditions
Discount codeA separate promotion entered/applied through Discounts
ShippingDelivery amount, separate from the product-rule comparison

01. Understand the pricing surfaces

Why this matters

Product price establishes the base; a price list applies eligible pricing rules. Discount codes are a separate module.

Follow these steps

Open Storefront → Pricing. Inspect Overview, Price Lists and Product Pricing. Open the target product to record its existing base price and variant effect before changing a list. Return to Price Lists and choose the create action. Expand the editor so every field and footer remains readable.

Check the result

A dashboard count cannot prove a price applied. Keep the product SKU, customer and quantity fixed when comparing results.

02. Create scope and pricing method

Why this matters

Scope identifies the products and customers; the pricing method determines the calculation.

Follow these steps

Enter Name, Description, Status, Type and Priority. Begin Inactive. Choose Retail, Wholesale, Contract or Promotional as appropriate. Set dates and customer/customer-group eligibility. Select Applies To: all, products, categories or brands, then select the actual records. Choose discount, fixed or markup. For discount select percentage or amount and its value; for markup inspect the product cost source. Save and reopen the list.

Check the result

Higher-priority lists apply first according to the schema. A type name such as Wholesale does not by itself restrict the list to wholesale customers.

Prepare the quantity-five example

  1. In Price Lists, choose Add List. Inspect Status immediately: the blank editor shown below defaults to Active, so select Inactive before preparing a new rule.
  2. Enter Name course-volume-print and a description identifying the exercise. Select Wholesale as Type. This label does not itself create a customer restriction.
  3. Set Apply To → Products and select CF-PRINT-01 from the product selector. Leave Customer Groups/Customers empty for this quantity-only comparison.
  4. Select Pricing Method → Discount, Discount Type → Percentage, and Discount Value → 20.

Expanded new price-list editor showing status, scope and pricing method

Blank editor after the dialog-width repair. Its Active default is visible; change to Inactive deliberately while preparing the rule.

  1. Scroll within the same editor to Minimum Quantity and enter 5. Keep the multi-tier toggle off for this single threshold and currency USD. Leave unrelated order-value/history qualifications unset.
  2. Choose Save, reload Price Lists and reopen the rule. Check selected product, discount20, minimum5 and intended status together before activation.

Lower pricing editor showing distinct tier toggle, Minimum Quantity, Product Prices and Currency

These are separate controls: Minimum Quantity qualifies the list, while the tier toggle introduces multiple pricing bands. This blank form is not a saved rule.

03. Quantity tiers and qualification

Why this matters

Quantity thresholds and customer-history requirements are separate gates. A buyer can satisfy one and fail the other.

Follow these steps

Enable quantity-based tiered pricing and enter the minimum/maximum quantities and percentage, amount or fixed_price tier values. Set minimum order value or minimum quantity where needed. Inspect automatic application, manual approval, previous orders, lifetime spend, account age and required customer tier. Use per-product overrides only for the intended products. Save, reopen and compare the stored scopes with the target customer.

Check the result

Do not fill optional qualifications accidentally. A group reference requires actual membership; typing a buyer email at checkout is not proof of authenticated group access.

04. Activate and test the buyer result

Why this matters

A useful pricing test compares both sides of a threshold with the same saved list.

Follow these steps

Activate the list. Open the customer product/cart and test a nonqualifying quantity, then a qualifying quantity. Inspect unit price and total. Repeat as the qualifying customer and an unrelated customer. Test an overlapping price list by reviewing priorities and the actual selected result, then deactivate the unwanted list and recalculate the cart.

Check the result

If the price is wrong, inspect status, dates, selected records, membership, threshold and priority before changing the amount. Reopen/recalculate the actual cart; a stale preview is not evidence of current pricing.

Reopened course-volume-print with Active status, Products scope, discount20 and minimum5

Historical activation readback. The description still says inactive until tested; Status is the actual saved control. Customer selectors are empty, so this is not private wholesale pricing.

Compare the buyer basket at the threshold

  1. Open the product from your site's customer-facing View link and select A4. Keep the same variant throughout.
  2. With the rule inactive, compare quantity4 and quantity5. Record product subtotal separately from delivery.
  3. Return to Price Lists, activate the saved rule and save. Reopen it to verify Active.
  4. Return to the cart and recalculate/refresh after changing the quantity. Compare four and five again; inspect the rule name as well as the unit price.

Five A4 prints with the named 20-percent price rule in the actual customer cart

The cart shows $20 each ×5=$100 products, $5 delivery, $105 total. The product page still shows its $25 base price; the cart supplies the qualified-rule result.

Rule stateQuantityProduct subtotalRecorded deliveryTotal
Inactive4$100$5$105
Inactive5$125$5$130
Active4$100$5$105
Active5$100$5$105
  1. Restore the rehearsal rule to Inactive after testing and verify the saved state. Do not leave an exercise promotion active accidentally. No purchase is needed to compare these cart prices.

This comparison proves the recorded quantity rule only. To verify group pricing, repeat with an actual member and non-member; to verify dates or priority, hold all other conditions fixed and test those separately.

Detailed instructions

The following retained material documents earlier local work. Its pending checks remain pending; historical successful outcomes are not claims of a fresh execution. Use the source-authored instructions above to prepare the new recording, and preserve these references for comparison.

A03: Prepare wholesale pricing

Worked example

A coupon is an entered promotion. Wholesale pricing can instead depend on the buyer or quantity. In Pricing, Add List creates our course-volume-print rule. Keep it Inactive while preparing it. Choose Wholesale, apply it to Cedar Botanical Print, and use Discount, Percentage and twenty, with Minimum Quantity five and USD. Save, reload and edit the list to check those values. We have stored a rule; the next comparison will establish which actual basket receives it.

Prepare wholesale pricing

Included controls: Settings, Price Lists, Overview, Product Pricing, Add List, Wholesale, Products scope, Discount percentage, min quantity, currency, Inactive readback.

Check the result: Inactive20%min5CF-PRINT-01 USD stored/reopened; no promised applied outcome.

Retained evidence: capture/SF10-pricing-discounts.webm.

Implementation reference: price-list-form.tsx.

A04: Check which customer gets which price

Worked example

Does the volume price match our promise? First, leave the rule Inactive and compare the visible cart: four A4 prints cost one hundred dollars plus five delivery; five cost one hundred twenty-five plus five. Now edit course-volume-print, change its status to Active and save. Back in the shop, four still cost twenty-five each: they don't meet the minimum of five. Change the quantity to five and check the recalculated cart. Each print is now twenty, and the cart names the twenty-percent offer. Products total one hundred; shipping remains five. The same one-hundred-five-dollar total now buys five prints instead of four. This rule uses quantity, without a customer-group restriction, so don't describe it as a private price for selected accounts. Leave the course rule Inactive when the comparison is finished.

Included controls: activation, eligible quantity, customer/groups, scope, scheduled dates, priority, tiers, fixed/discount/markup, overrides, retail/wholesale/contract/promotional.

Limitations and checks: Actual inactive/active4vs5 quantity comparison verified and cleanupInactive. Customer-group eligibility, dates, priority/overlapping rules, tiers, fixed/markup methods and per-product overrides still need distinct demonstrations; no group restriction was added to this rule.

Check the result: Inactive4×25+5=105; inactive5×25+5=130; active4unchanged105; active5×20+5=105 with named20%rule. FinalInactive readback, visible cart cleared.

Implementation reference: price-list-form.tsx, product-pricing-settings.tsx, pricing.service.ts.

Actual comparison evidence: SF31-pricing-visible-baseline.webm, SF36-pricing-settled-eligibility.webm, README.md.

E07: Price the larger print

Worked example

Reopen Cedar Botanical Print. Under Organization, open Brand and choose cedar-form-course. Now expand Variants and choose Add Attribute. Select print-size and turn on A4 and A3. Leave A4 without an extra amount; put ten beside A3. Generate Variants creates the two size records. Save Changes stores the brand association and the variants together. Reload and reopen to check the brand, both choices and the ten-dollar addition. The generated absolute-price fields are blank in this example. The ten here is an addition to the twenty-five-dollar base, not the whole price of an A3 print. We’ll check that distinction in the customer’s cart.

Price the larger print

Included controls: attach attributes, Select Options, additional option price, Generate Variants, variant SKU, absolute price blank, save readback.

Check the result: cf-print-01-a4/a3 and A3 increment10 persist.

Retained evidence: capture/SF05-product-options.webm.

Implementation reference: product-form.tsx.

Limitations and checks

Current UI entry and editor: . Corresponding SDK storefront schemas and the retained AppEngine references define fields and consumer boundaries. Provider calls, external delivery, payments and financial mutations were not performed for this writing task.

Next steps

You can now follow the module from its configuration to the record that proves the result. Use the relevant chapter to revisit an alternative or troubleshoot the exact failed handoff.

BusinessMade Pricing — supporting guide

Overview

Configure price lists and prove which buyer receives which price. We will keep base price, variants, price lists and discount codes distinct.

BusinessMade entry and scope

Open Storefront → Pricing at /storefront/pricing in BusinessMade. This route mounts the shared Pricing module; the surrounding menus are BusinessMade’s. Use Operations → Contacts for customer details, Operations → Customers & Benefits for group eligibility, Admin → Business locations for branches, and Operations → POS / Order entry for counter sales. Keep the organization and record identity consistent across those screens.

The location selector governs the venue-specific POS, but does not establish that every shared Storefront module filters its data by that selection. Inspect the record’s own location and currency. Payments are under Storefront → Payments, while delivery rules and shipments are under Storefront → Shipping; creating this module’s record is not payment or shipping-provider configuration.

01. Understand the pricing surfaces

Why this matters

Product price establishes the base; a price list applies eligible pricing rules. Discount codes are a separate module.

Follow these steps

Open Storefront → Pricing. Inspect Overview, Price Lists and Product Pricing. Open the target product to record its existing base price and variant effect before changing a list. Return to Price Lists and choose the create action. Expand the editor so every field and footer remains readable.

Check the result

A dashboard count cannot prove a price applied. Keep the product SKU, customer and quantity fixed when comparing results.

02. Create scope and pricing method

Why this matters

Scope identifies the products and customers; the pricing method determines the calculation.

Follow these steps

  1. In Storefront → Pricing → Price Lists, start a new list. The current shared editor opens wide; keep the complete fields readable.
  2. Enter a unique Name, such as bm-course-volume, and a short Description. Change Status to Inactive before filling the rest: the captured new form starts Active.
  3. Choose the intended Type. Wholesale is a descriptive type; it does not automatically populate Customer Groups or Customers. Leave those empty only for an intentionally unrestricted buyer example.
  4. Choose Apply To → Products, then select the exact saved product. Confirm its identity instead of relying on a similar title.
  5. Choose Pricing Method → Discount, Discount Type → Percentage and Discount Value 20 for this practice rule. Inspect Priority and dates before saving.
  6. Choose Save, reopen the same list and check its inactive status, product scope and calculation. Continue below to add a quantity gate before activating it.

Expanded shared new price-list form

Historical Appmint shared-editor reference, not BusinessMade live proof. Status starts Active and Apply To starts All; change both deliberately for the scoped practice rule.

Check the result

Higher-priority lists apply first according to the schema. A type name such as Wholesale does not by itself restrict the list to wholesale customers.

03. Quantity tiers and qualification

Why this matters

Quantity thresholds and customer-history requirements are separate gates. A buyer can satisfy one and fail the other.

Follow these steps

For one discount that starts at a threshold, enter Minimum Quantity 5 and leave Enable quantity-based tiered pricing off. That makes qualification distinct from multiple pricing bands. Save and reopen to confirm the5 persisted.

For several bands with different benefits, turn on Enable quantity-based tiered pricing and enter each band's minimum/maximum and percentage, amount or fixed_price value. Avoid overlapping ranges unless you have verified how the intended combination resolves. Inspect automatic application and any manual-approval/customer-history requirements before enabling them. Product Prices contains per-product overrides; Currency remains a separate setting.

Lower pricing form with minimum quantity and tier switch

Historical shared-editor reference: the tier switch and Minimum Quantity are separate controls. Currency is USD in this example. This frame is configuration, not a price applied to a sale.

Check the result

Do not fill optional qualifications accidentally. A group reference requires actual membership; typing a buyer email at checkout is not proof of authenticated group access.

04. Activate and test the buyer result

Why this matters

A useful pricing test compares both sides of a threshold with the same saved list.

Follow these steps

Activate the list. Open the customer product/cart and test a nonqualifying quantity, then a qualifying quantity. Inspect unit price and total. Repeat as the qualifying customer and an unrelated customer. Test an overlapping price list by reviewing priorities and the actual selected result, then deactivate the unwanted list and recalculate the cart.

Compare a qualifying sale without mistaking it for revenue

Keep one product, variant and customer fixed. First test quantity4, then quantity5 with the same saved rule. Record the unit price and line total returned by the application, then remove the practice items or retain the tab clearly identified as unpaid. Only after this comparison should you introduce customer-group eligibility or another price list; otherwise several changing conditions hide which rule produced the result.

Check the result

If the price is wrong, inspect status, dates, selected records, membership, threshold and priority before changing the amount. Reopen/recalculate the actual cart; a stale preview is not evidence of current pricing.

BusinessMade operational handoff — Verify the price on a BusinessMade sale

Why this matters

Pricing connects to the saved customer, product or transaction. Follow that identity through the BusinessMade operation rather than creating a second record to illustrate a result.

Follow these steps

Expand the entire Pricing editor before filling it. Prepare an active rule for the intended products and customer group, with explicit quantity range, priority and dates. Save and reopen. In Operations → Customers & Benefits inspect the intended customer’s group membership, then use a controlled POS tab with the relevant customer context and quantity. Compare the server line price and discount with an otherwise equivalent ineligible case. Return to Pricing to inspect conflicts if the higher-priority rule wins. Keep test tabs identified so an unpaid pricing comparison is not presented as revenue.

Recovery and implementation boundary

Source configuration alone does not prove every POS branch applies customer-based pricing. If the checkout does not expose the required customer context or the rule is ignored, retain that as an integration gap, not a successful demonstration.

Limitations and checks

Substantive pending work: Source configuration alone does not prove every POS branch applies customer-based pricing. If the checkout does not expose the required customer context or the rule is ignored, retain that as an integration gap, not a successful demonstration. Runtime evidence for the taught handoff remains separate from authored coverage. Do not mark the course production-ready until the intended branch’s saved result, failure recovery and customer/provider outcome have been checked.

Next steps

You can return directly to the chapter for the change you need. Keep the saved record and its operational result together: the same customer, product, location and transaction should remain identifiable through each handoff.