Video chapters
- 0:00 Welcome
- 0:09 Overview: how a price is chosen
- 0:46 Part 1 · Volume price and quantity tiers — How quantity tiers work: explained
- 1:15 Build and prove a volume price
- 2:37 Part 2 · A trade price for a customer group — Customer groups: explained
- 2:53 Group, member, trade price, proof
- 3:51 Part 3 · A contract price for one customer — One customer and the pricing methods: explained
- 4:07 A fixed contract price for Morgan
- 4:41 Part 4 · Overlapping lists and priority — Priority and overlapping lists: explained
- 5:06 Fix the overlap with a bulk tier
- 5:55 Part 5 · Scheduled prices and membership changes — Scheduled prices and membership: explained
- 6:26 Schedule a contract, change a membership
Appmint Pricing Part 6: Pricing for Shared Accounts (Organisation and B2B Accounts)
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.
| Setting | What changes |
|---|---|
| Product base price | Starting item price |
| Variant addition/price | Price for the selected choice |
| Price list | Eligible rule based on saved scope and conditions |
| Discount code | A separate promotion entered/applied through Discounts |
| Shipping | Delivery 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
- 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.
- Enter Name
course-volume-printand a description identifying the exercise. Select Wholesale as Type. This label does not itself create a customer restriction. - Set Apply To → Products and select CF-PRINT-01 from the product selector. Leave Customer Groups/Customers empty for this quantity-only comparison.
- Select Pricing Method → Discount, Discount Type → Percentage, and Discount Value → 20.

Blank editor after the dialog-width repair. Its Active default is visible; change to Inactive deliberately while preparing the rule.
- 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. - Choose Save, reload Price Lists and reopen the rule. Check selected product, discount20, minimum5 and intended status together before activation.

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.

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
- Open the product from your site's customer-facing View link and select A4. Keep the same variant throughout.
- With the rule inactive, compare quantity4 and quantity5. Record product subtotal separately from delivery.
- Return to Price Lists, activate the saved rule and save. Reopen it to verify Active.
- 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.

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 state | Quantity | Product subtotal | Recorded delivery | Total |
|---|---|---|---|---|
| Inactive | 4 | $100 | $5 | $105 |
| Inactive | 5 | $125 | $5 | $130 |
| Active | 4 | $100 | $5 | $105 |
| Active | 5 | $100 | $5 | $105 |
- 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.

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.

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.