Magento 2 Extension Price Lists / B2B Pricelists

Magento 2 price list extension for contract prices, customer and group assignments, quantity tiers, validity periods, priorities, and optional CSV, API, GraphQL, and Hyvä support.

SoftwareSilo Price Lists turns negotiated Magento 2 prices into manageable business records. Each named list brings products, customer coverage, validity, priority, and website scope together. Sales and ecommerce teams can maintain an agreement without hunting through individual product records.

Designed for recurring B2B agreements: Use a price list for a distributor program, annual customer contract, dealer level, framework agreement, purchasing association, or temporary sales period. The list name gives the commercial arrangement a clear identity in Magento.

Assign a list to individual customers or customer groups: Direct customer assignment fits negotiated accounts. Group assignment fits broader segments such as dealers, wholesalers, or partners. A customer may match more than one list, so the pricing rules include explicit conflict handling.

Automate assignment from customer data: A list can match a customer attribute, an address attribute, or both. This supports cases such as account type, sales region, country, or a custom classification. Exact or loose value comparison is configurable.

Set contract periods at two levels: A price list has an overall start and end date. Individual product entries can also carry their own validity window. This allows a yearly agreement with selected items changing at a different date.

Use fixed prices, surcharges, or discounts: Product rows support a fixed amount, a nominal or percentage surcharge, and a nominal or percentage discount. The common Price System package provides the calculation layer and the configurable strategy that selects the applicable result.

Add quantity tiers inside the same agreement: A product can have prices for several quantity thresholds. The buyer receives the price that applies to the ordered quantity, while the agreement remains grouped under one recognizable list.

Priorities resolve overlapping lists: When several active lists apply, priority determines which tier set is considered. Lists with the same highest priority can contribute quantity tiers. An optional setting also permits tiers from lower-priority lists to be merged.

A base price list can provide a fallback: One base list per website can cover cases where no customer-specific list matches. Validation can enforce that website-level rule, helping prevent accidental gaps or competing base lists.

Keep storefront pricing consistent: The shared Price System layer calculates list prices for product pages, category listings, cart, checkout, order items, and the customer price overview. Configurable products and AJAX price refresh are handled by the common pricing engine.

Let customers review their prices: Logged-in buyers can use My Prices to see the prices available to them. When enabled, an assigned price list can be downloaded as CSV with the configured delimiter and enclosure.

Daily administration stays practical: Administrators can copy complete price lists, assign customers and groups in searchable grids, add catalog products, edit assigned product rows, and control whether large product grids load automatically.

Bulk and integration options are separate: CSV Import/Export supports repeatable file exchange and command-line imports. SOAP/REST provides CRUD and bulk operations for lists, products, customers, and groups. GraphQL exposes filtered price list data for headless projects. Hyvä compatibility is sold separately.

Price Lists includes the required Price System base package: The base package is the shared calculation framework, not a second price list license. Other Price System modules, such as Customer Specific Prices, Category Specific Prices, or Product-Customer Matrix Prices, are independent products for different pricing models.

Price lists are not private catalogs: This module changes applicable prices. It does not hide products or categories. If each company must see a different assortment, combine pricing with a catalog-visibility solution and test both decisions together.

Plan ownership before importing thousands of prices: Decide whether Magento or the ERP owns each list, how customer assignments are identified, how expired agreements are replaced, and which rule wins when several prices match. A small test set with real customers, quantities, dates, websites, currencies, tax settings, and configurable products should pass before full rollout.

Named pricelists as pricing containers

Keep pricing logic, validity, and priorities in clear pricelist entities instead of scattered single rules.

Customer-condition logic with attributes

Define pricelists with customer attributes and optional address attributes using combinable condition logic.

Direct customer assignment

Assign pricelists directly to specific customers for contract-based pricing scenarios.

Customer-group assignment

Assign pricelists to full customer groups and scale segment-based pricing efficiently.

Product prices with quantity tiers and price application

Define multiple quantity levels per product and set the price application type per tier.

Date control on list and product level

Manage validity windows both on pricelist level and product-price level for planned rollouts.

Priority and merge logic for overlaps

Resolve overlaps by priority and optionally merge quantity tiers from equally prioritized pricelists; same-quantity tiers are reduced to one tier per quantity by strategy.

Base pricelist fallback

Define one base pricelist per website to avoid pricing gaps when no specific list applies.

Website-scoped pricelist control

Separate pricing strategies per website while keeping a centralized pricelist structure.

Mass-copy pricelists

Duplicate selected pricelists quickly for new campaigns, regions, or customer segments.

Inline editing for assigned pricelist products

Update price, quantity, price application, and date fields directly in assigned-product grids.

Customer-account visibility and CSV download

Assigned customers can view their prices in My Prices and download CSV files when enabled.

Cart-rule condition support

Use the condition customer has pricelist to target promotions to relevant customer segments.

  • Current Version2.2.9
  • Compatible with Magento 2.4.6 - 2.4.9
  • Compatible with PHP 8.1 - 8.5

If your environment differs from the listed requirements, we can check compatibility in advance. Please contact us via our contact form.

pricesystem-pricelist

Version 2.2.9 - 2026-06-22

Added
  • Added assigned customer and customer group counts with assignment filters to the admin pricelist grid
  • Added configuration to control whether the Catalog Products grid auto-loads on pricelist edit pages
Fixed
  • Fixed API pricelist relation saves to resolve configured product, customer, and customer group identifiers before persistence, including embedded relation payloads on full pricelist saves
  • Fixed assigned pricelist product grid price and quantity fields so they can be edited inline with numeric values
  • Fixed base pricelist validation config lookup to use website scope instead of treating website IDs as store IDs

Version 2.2.8 - 2026-06-16

Added
  • Added configuration to control whether base pricelist prices are merged under the Pricelist type in My Prices or exposed separately
  • Added SSO compatibility by lazy-loading the customer session in pricelist model construction
Changed
  • Changed admin ACL hierarchy and explicit permissions for pricelist export, mass copy, and mass delete actions
  • Changed frontend pricelist download links so assigned pricelists without products are not offered
Fixed
  • Fixed resolve table names through Magento's table-name resolver
  • Fixed admin price displays to use Magento currency formatting
  • Fixed admin pricelist edit performance by preventing the full catalog product assignment grid from auto-rendering on page load
  • Fixed direct frontend pricelist CSV downloads so the download enablement flag is enforced
  • Fixed frontend pricelist download access and links so inactive, expired, future, and foreign-website pricelists are not exposed
  • Fixed frontend pricelist CSV generation to use unique safe server filenames and stable download filenames
  • Fixed pricelist CSV product joins so they are restricted to the requested pricelist
  • Fixed sales rule pricelist condition checks for customers assigned to multiple pricelists
  • Fixed admin pricelist export product SKU resolution by exporting the assigned catalog product ID

Version 2.2.7 - 2026-04-23

Fixed
  • Fixed admin pricelist listing fulltext search

Version 2.2.6 - 2026-03-19

Added
  • Added compatibility to pricesystem 2.3.5

Version 2.2.5 - 2026-02-27

Added
  • Added consistent validation errors for unresolved or non-existing API product identifiers to avoid database-level error responses
Changed
  • Enforced strict API product identifier resolution based on the configured API product attribute
  • Prevented implicit fallback to product entity ID when custom API fields are enabled with non-entity product attributes
Fixed
  • Fixed automatic customer-to-pricelist assignment on registration for website-specific pricelists (website filter now includes current website and global website)
  • Fixed auto-assign config lookup to use the active admin configuration path for customer assignment

Version 2.2.4 - 2026-02-19

Added
  • Added inline row edit for assigned pricelist products in admin
Fixed
  • Customer group NOT LOGGED IN is now treated as a valid group on the customer group edit form for pricelist assignments
  • Customer attribute option loading now supports boolean attributes and keeps the "No" option in the attribute value selector
  • Auto-assign evaluation now supports address-only conditions (without mandatory customer attribute pre-filtering)

Version 2.2.3 - 2026-02-01

Fixed
  • Support table name prefixes

Version 2.2.2 - 2026-01-26

Changed
  • Now the download path redirects to login if not logged in for a smoother flow (before it was referer URL)

Version 2.2.1 - 2026-01-23

Fixed
  • Fixed config flag lookup for my prices download enablement (use ScopeConfigInterface instead of old helper get() method)

Version 2.2.0 - 2026-01-16

Added
  • Added PHP 8.4 compatibility
  • Added compatibility to pricesystem 2.3.0
Changed
  • Switched table name from pricesystem_pricelist_user to pricesystem_pricelist_customer (automatic migration will be executed)
  • Changed to nullable fields for date fields in the database
  • Updated admin UI elements to the newer Magento UI components (forms)
  • Clarified "Merge pricelist qtys" configuration description and translations to better explain behavior when multiple pricelists share the same priority
  • Removed Helper\Data as it is not used anymore
  • Renamed pricesystempricelist/index/downloadcsv to pricesystempricelist/index/downloadPrices
  • Removed config setting pricesystem/pricelist/show_pricelist_product_id_column - now onwards, product ID is always displayed in the pricelist products grid

Version 2.1.3 - 2025-10-23

Fixed
  • Admin Pricelist: "Submit to pricelist" now correctly detects products selected via keyboard (Tab/Space/Enter). Prevents false "Please select at-least 1 catalog product!" alert when items are selected without mouse

Version 2.1.2 - 2025-05-08

Fixed
  • Fixed an issue on saving NOT_LOGGED_IN customer group for a pricelist as single entry in admin

Version 2.1.1 - 2024-08-14

Fixed
  • Fixed adminhtml.xml for new config added recently

Version 2.1.0 - 2024-08-14

Added
  • Display ID for assign/deassign pricelist window in admin customer edit section
  • Display is_basepricelist inside the customer edit section grids (customer-related pricelists, customer-group related pricelists)
  • Added a configuration "match_exact_type" to use exact comparison (===) when auto-assign pricelists during customer registration
  • Added note inside the pricelist popup when no pricelists are available in the system

Version 2.0.23 - 2024-03-19

Fixed
  • Fixed issue with isValidUserId() function

Version 2.0.22 - 2024-03-06

Changed
  • php Docs

Version 2.0.21 - 2024-01-31

Changed
  • Changed function of isValidUserId() to include the website check of the customer with pricelist website
Fixed
  • Fixed an issue with pricelist export on admin area (column ID was ambigious)

Version 2.0.20 - 2023-11-08

Changed
  • Changed the copy behavior of a pricelist - now on a copied base pricelist will be unset as a base pricelist to avoid issues during the save process of the new created pricelist

Version 2.0.19 - 2023-10-26

Fixed
  • Fixed an issue which ocurred on customer group edit form

Version 2.0.18 - 2023-09-19

Fixed
  • Fixed an issue which could result in wrong group-related pricelist assignments on customer edit (pricesystem tab)

Version 2.0.17 - 2023-07-18

Added
  • Added grid under admin section of customer edit (pricesystem tab) to display customer group related pricelists

Version 2.0.16 - 2023-06-07

Fixed
  • Fixed Pricelist save when product id column is enabled

Version 2.0.15 - 2023-05-31

Fixed
  • Added Fallback for Filter Input (Magento 2.4.0)

Version 2.0.14 - 2023-05-28

Fixed
  • Fixed UI component listing

Version 2.0.13 - 2023-05-24

Changed
  • Changed automatic customer assignment behavior, it will not apply anymore when either customer attribute or customer attribute value is null

Version 2.0.12 - 2023-05-12

Fixed
  • Dynamic properties declarations are fixed

Version 2.0.11 - 2023-05-08

Added
  • Added new config field: "Show pricelist product id column in pricelist products grid"

Version 2.0.10 - 2023-04-16

Added
  • Added cart condition rule for pricelist
  • 2.4.6 compatibility fixes

Version 2.0.9 - 2023-01-25

Added
  • New configuration to show "My Prices" my account link only when custom prices are set to the customer

Version 2.0.8 - 2023-01-12

Changed
  • Used new core trait to compare prices by priority

Version 2.0.7 - 2022-12-28

Changed
  • Refactored pricelist before/after save (relational data for customers/groups/products) to avoid direct MySQL queries

Version 2.0.6 - 2022-12-12

Fixed
  • Fixed dependency issue occuring during setup upgrade (Unable to apply data patch MageB2B\PricesystemPricelist\Setup\Patch\Data\AddPricelistAttributes)
  • Fixed the issue that the productsContainer was not showing all products when the website of the pricelist was selected to "All Websites"

Version 2.0.5 - 2022-11-28

Added
  • Added PriceProvider for My prices block

Version 2.0.4 - 2022-11-24

Fixed
  • Fixed issues around localized date input format when saved into DB

Version 2.0.3 - 2022-11-23

Fixed
  • Fixed behavior of pricelist grid under customer pricesystem tab as well as on assign/deassign grid to flush inconsist behavior for the recent 'all Websites' feature
Changed
  • DB column pricelist.website_id should not be null

Version 2.0.2 - 2022-11-12

Added
  • Added feature to select "All Websites" for pricelists (internal flag for website_id should be 0 in this case)

Version 2.0.1 - 2022-11-08

Fixed
  • Fixed issue to take the lowest/highest price for pricelist price with the same qty
pricesystem

Version 2.3.13 - 2026-05-13

Fixed
  • Fixed configurable product detail price updates after option selection when Pricesystem initializes the product price box asynchronously

Version 2.3.12 - 2026-05-12

Changed
  • Improved configurable product list price performance by preloading child products in batches instead of resolving children per parent product
  • Improved configurable product list price performance by reusing child category assignments during price calculation
  • Improved `Bss_HidePrice` compatibility by skipping redundant hide-price processing for internal configurable child price collections while keeping storefront hide-price behavior intact

Version 2.3.11 - 2026-05-12

Fixed
  • Fixed configurable product from-price resolution so parent prices use the lowest child final price instead of the lowest regular child price

Version 2.3.9 - 2026-05-01

Changed
  • Relaxed the Magento framework requirement to `^103.0.4`
  • Made the `pricesystem:cache:warmup` and `pricesystem:get-customer-price` CLI commands lazy during bootstrap
  • Changed frontend discount text and cart discount styling rendering by using Magento SecureHtmlRenderer for dynamic style tags
Fixed
  • Replaced CSP nonce-dependent inline frontend scripts with Magento init components for broader Magento compatibility
  • Fixed frontend discount percent display so non-zero final prices no longer render as `100%`
  • Applied the configured discount percent rounding mode consistently on product and listing page discount text rendering

Version 2.3.8 - 2026-04-15

Fixed
  • Fixed the `My Prices` customer account navigation link sortable menu position

Version 2.3.7 - 2026-04-06

Added
  • Price rendering now supports chunked/parallel price requests (defined by config ajax_chunk_size)
  • Added option enable_configurable_update_on_list to explicit enable configurable update on list (swatches)
Changed
  • Dedicated configurable services (ConfigurableFromPriceService, ConfigurableListPriceDataProvider)
  • Request-scope configurable evaluation context
Fixed
  • Fixed possible Configurable from-price recursion issue
  • Fixed list-page pre-AJAX price hiding CSS selector rendering by using HTML escaping compatible with inline `<style>` output

Version 2.3.6 - 2026-03-30

Added
  • Added `pricesystem:cache:warmup` CLI command for cache warmup runs

Version 2.3.5 - 2026-03-19

Added
  • Added function for Adobe Commerce product check

Version 2.3.4 - 2026-03-17

Changed
  • Consolidated frontend price reload into one flow and removed category/search price pipeline parts
  • Reduced duplicate AJAX price reloads and simplified the price AJAX response payload
Fixed
  • Fixed My Prices provider selection handling so the page when opened without a selected price type

Version 2.3.3 - 2026-02-20

Fixed
  • Fixed sort order from system configuration

Version 2.3.2 - 2026-02-19

Changed
  • Removed obsolete zero date checks
Fixed
  • Fixed error in Sales OrderItem API plugin when extension attributes are null
  • Fixed price adjustment matrix preview/apply condition evaluation
  • Fixed pricing context leakage between consecutive `PriceFacade` calls by resetting customer/group/date context after calculation
  • Fixed cache payload serialization for table prices by storing scalar JSON payload instead of native PHP serialization
  • Fixed an issue with displaying custom price column in admin

Version 2.3.1 - 2026-01-26

Fixed
  • Redirect unauthenticated visitors to login on the My Prices page to align with account-only access

Version 2.3.0 - 2026-01-16

Added
  • Added price adjustment feature: mass select prices and update them using a queue job
Changed
  • Magento 2.4.7+ required
  • Improved "My Prices" page: configurable dropdown price types (provider-based) and optional "All prices" view (default: select first)
  • Removed ZERO_DATE_VALUE (0000-00-00) usage, use null instead
  • Changed config path of pricesystem/api_settings/* to pricesystem/api/* (automatic migration)
  • Removed PricesystemCore\Helper\ProductAttribute (in favor of PricesystemCore\Service\ProductService)
  • Removed PricesystemCore\Helper\Data (in favor of PricesystemCore\Service\ Classes)
  • Changed fixed sort_order config fields to config array field (price_sort_order) with automatic migration
  • Updated admin UI elements to the newer Magento UI components (forms)
Fixed
  • Fixed cache invalidation for customer groups after admin save (clear GroupRegistry, invalidate `full_page`, `block_html` and `pricesystem_cache`).
  • Fixed FPC degradation on category/search pages by using HttpContext for `customer_group` detection instead of CustomerSession (no session start, FPC stays group‑varying).
  • Fixed PHP 8.4 deprecation warning by explicitly marking the `$resource` and `$resourceCollection` constructor parameters in `Model\PriceAdjustment` as nullable

Version 2.2.6 - 2025-06-24

Fixed
  • Fixed display of basePrice when tax display (net/gross amount) on detail page is enabled

Version 2.2.5 - 2025-04-23

Changed
  • Changed template path definition of pricesystemcore/index.phtml from Block Class to xml

Version 2.2.4 - 2025-02-28

Fixed
  • Fixed Reflection Error when class of original price type could not be found or loaded
Changed
  • Improved Date Range Validation checks

Version 2.2.3 - 2024-12-12

Fixed
  • Fixed issue when using decimal values for qtys

Version 2.2.2 - 2024-10-27

Added
  • Added another API route to get context-based API prices (automatically from customer session or, when not logged in, from not logged in customer group, see webapi.xml for reference)
Fixed
  • Fixed issue with duplicate AJAX requests when using special trigger contentUpdated

Version 2.2.1 - 2024-09-21

Changed
  • Changed Version class for displaying extension information
Fixed
  • Fixed some issues for Magento_CSP Compatibility

Version 2.2.0 - 2024-08-31

Added
  • Added new API routes /V1/pricesystem/me/get-final-price & /V1/pricesystem/me/get-multi-price to fetch prices for the logged in customer (session) inside Magento 2

Version 2.1.13 - 2024-08-18

Fixed
  • Fixed tier price display for sort order prices with customer discount
  • Show "Skip customer and group discounts application on next available price" config only when Sort Order is set as Price Select Rule

Version 2.1.12 - 2024-08-08

Changed
  • Show last update date from this file inside the system configuration of the extension

Version 2.1.11 - 2024-07-22

Changed
  • Updated README.md

Version 2.1.10 - 2024-07-19

Fixed
  • Fixed CHANGELOG.md

Version 2.1.7 - 2024-03-05

Changed
  • Changed cache key of getProductPrices to include customerId and groupId
Fixed
  • Fixed an issue on display pricesystem discount for configurable products at the My Orders page in frontend
  • Fixed an issue with displaying up- and cross sell prices on special conditions

Version 2.1.6 - 2023-12-28

Changed
  • Changed hard coded groupId 0 to GroupManagement::NOT_LOGGED_IN_ID

Version 2.1.5 - 2023-11-29

Fixed
  • Fixed issue with shipment tab on frontend my orders section if display of custom view template was enabled

Version 2.1.4 - 2023-11-08

Fixed
  • Fixed discount text for configurables with tier prices

Version 2.1.3 - 2023-11-06

Fixed
  • Fixed tier price display for configurable products

Version 2.1.2 - 2023-09-16

Fixed
  • Fixed double currency conversion in cart

Version 2.1.1 - 2023-08-14

Fixed
  • Fixed double currency conversion in cart

Version 2.1.0 - 2023-06-04

Added
  • Virtual products support

Version 2.0.26 - 2023-06-03

Added
  • New configuration to add routes, for which ajax price request should not be done

Version 2.0.25 - 2023-05-16

Fixed
  • Added rounding for price discount calculations

Version 2.0.23 - 2023-05-14

Added
  • "product" object is passed to Customized Price

Version 2.0.22 - 2023-05-13

Added
  • Added new config to check for customer discount / customer group discount for price codes

Version 2.0.24 - 2023-05-12

Fixed
  • Pricesystem discount amount reload after cart qty update

Version 2.0.21 - 2023-05-12

Fixed
  • Dynamic properties declarations are fixed

Version 2.0.20 - 2023-05-06

Fixed
  • Incorrect tier price on PDP for configurable product on qty change

Version 2.0.19 - 2023-04-16

Added
  • Added new system configuration "Show From Price for Configurables" to show the lowest price from all simple tiers as the configurable price

Version 2.0.18 - 2023-03-22

Fixed
  • Fallback solution for DefaultConfigProvider on Original price, if e.g. configured_original_price is set

Version 2.0.17 - 2023-03-21

Added
  • Added cart condition rules for customer discount and customer group discount
Fixed
  • Added an additional check to prevent JS error for the discount text when oldPrice is not available from the template
  • Fallback solution for "configured_original_price" price type, previously resulted in an offset issue on admin order display

Version 2.0.16 - 2023-03-01

Fixed
  • Fixed an issue that disabled products were shown under my prices section in frontend

Version 2.0.15 - 2023-02-21

Fixed
  • Fixed a JS issue undefined priceSystem when module is not enabled on a specific website

Version 2.0.14 - 2023-02-15

Fixed
  • Fixed an issue when a custom price record was inserted with a qty of 0, it was falsely considered as tierprice within getTierPriceList function

Version 2.0.13 - 2023-02-14

Fixed
  • Fixed an issue which could lead to wrong prices when the config "Store View Code in URL" is active

Version 2.0.12 - 2023-02-09

Fixed
  • Fixed phpDoc for swagger for recent get-multi-price API feature

Version 2.0.11 - 2023-02-07

Added
  • New /V1/pricesystem/get-multi-price API call to retrieve final and tier prices for multiple skus

Version 2.0.10 - 2023-01-28

Fixed
  • Fixed /V1/pricesystem/get-final-price API call
Changed
  • Removed redundant ACL node MageB2B_PricesystemCore::pricesystem (use MageB2B_PricesystemCore::main instead)

Version 2.0.9 - 2023-01-25

Added
  • New configuration to show "My Prices" my account link only when custom prices are set to the customer

Version 2.0.8 - 2023-01-12

Added
  • Optional websiteId parameter is added to the PriceRequest to return website specific prices
  • Added trait PriceSelectByPriorityTrait
Changed
  • Changed categoryprice pricetype: It's now merged into one pricetype

Version 2.0.7 - 2022-11-28

Changed
  • Changed the CLI command to be pricesystem:get-final-price (previously mageb2b:product:get-customer-price), added a more descriptive text around the options of this CLI
  • Changed My Prices page to display all available tier qtys of a price type

Version 2.0.6 - 2022-11-25

Added
  • Added new method convertInputDate which will be used for all localizated date conversions into DB date for non post data processors
Fixed
  • Fixed issue occuring when access swagger page of Magento 2

Version 2.0.5 - 2022-11-24

Fixed
  • Fixed issue when fallback to regular price was taking into account: TypeError: MageB2B\PricesystemCore\Model\Catalog\Pricing\FinalPriceProvider::saveUsedPriceData(): Argument #1 ($usedPriceInfo) must be of type MageB2B\PricesystemCore\Model\Catalog\Pricing\Price\CustomizedPriceDecorator

Version 2.0.4 - 2022-11-24

Fixed
  • Fixed issue on pricelist product grid when neither customer nor a group was selected, the custom price renderer throwed an exception
  • Fixed issue with the pricesystem discount amount on admin order view grid, previously it was not displaying the amount in the ordered currency

Version 2.0.3 - 2022-11-17

Fixed
  • Fallback to the regular price is done, when custom price cannot be calculated

Version 2.0.2 - 2022-11-12

Changed
  • Changed function getWebsitesForForm to add default parameter $addAllWebsites, value false

Version 2.0.1 - 2022-11-11

Fixed
  • Fixed issue with infinite scroll price update

Version 2.0.0 - 2022-11-01

Added
  • Added new config "Hide price filter from layered navigation for customers"
  • Added new config "Reload prices with ajax for guests"
  • Added new config "Price Cache Lifetime"
  • Added new config "Skip greater tier prices"
  • Added new config "Show custom price column in backend grids (customer price grid, pricelist products grid)"
  • Added CLI to fetch final price based on pricesystem calculation (see: bin/magento mageb2b:product:get-customer-price)
  • Added API method to fetch final price based on pricesystem calculation
Changed
  • Magento 2 Compatibility only 2.4.x
  • Refactored the methods of calculating the prices using M2-core approach, it will improve the speed and compatibility of customizations
  • Refactored the logging to be more accurate and increase readability
  • Remove usage of own pricesystem index table
  • Changed the way pricesystem cache works: You can now define an own cache lifetime, considering that datasets can have dates in future its not recommend to increase it to more than 24 hours
  • Changed the price rendering to be ajax-based on detail page as well to prevent FPC-issues
  • Changed the way the custom price column in admin is rendered, its now done via AJAX to always get the correct amount
  • Removed some obsolete configuration settings
Fixed
  • Fixed issue with strike price now being applied correctly from the original price set from pricesystem
  • Fixed issue with display of the correct pricesystem discount and pricesystem price type

Version 1.1.11 - 2022-08-08

Fixed
  • Fixed issue with new customer group on admin save of pricesystem attributes

Version 1.1.9 - 2022-07-28

Fixed
  • Fixed Pricesystem API URL Checkout for getActual... methods

Version 1.1.8 - 2022-07-27

Changed
  • Change price box from display: none to visilbity:hidden to prevent custom theme issues/jumping of product blocks

Version 1.1.7 - 2022-07-25

Fixed
  • Whitelist additional routes

Version 1.1.6 - 2022-07-24

Fixed
  • Fixed issue on getTierPrice function
  • Fixed logger message issue when message is null
  • Ensure quote plugin is applied on checkout API calls (e.g. order placement)

Version 1.1.5 - 2022-07-21

Fixed
  • Fixed ID issue on price warming

Version 1.1.4 - 2022-07-21

Changed
  • Add prices reload for SM_SHOBY extension ajax pagination
  • Add price warming on category price ajax reqeust to ensure price index table

Version 1.1.3 - 2022-07-21

Changed
  • Added Sm_ShopBy for event ajax trigger on footer

Version 1.1.2 - 2022-07-20

Changed
  • Added new bind return for getCustomerprice()

Version 1.1.1 - 2022-07-20

Changed
  • Fixed tierprice issue on custom sort order

Version 1.1.10 - 2020-08-05

Fixed
  • Fixed isset issues of pricesystem attributes during save in admin
pricesystem-pricelist-importexport

Version 1.1.2 - 2026-03-08

Added
  • Added compatibility to pricesystem/pricelist 2.2.5
Fixed
  • Fixed pricelist import date range handling

Version 1.1.1 - 2026-01-16

Added
  • Added compatibility to pricesystem 2.3.0

Version 1.1.0 - 2025-11-03

Added
  • Import now respects system configuration `can_product_have_multi_qty_price` and rejects multiple quantity tiers per product when disabled
  • Added helpful error message guiding users to enable the config when multi-qty import is attempted but disabled
Changed
  • Removed ConfigHelper wrapper class dependency from Import and Export classes, using ScopeConfigInterface instead
  • Import validation now uses lowercase pricelist names consistently for duplicate detection across pricelists
Fixed
  • Fixed website_id validation to allow value 0 (indicating "all websites")
  • Fixed DateService static method calls by injecting DateService via dependency injection
  • Fixed same SKU import validation to properly allow same product across multiple pricelists in single CSV
  • Fixed duplicate product detection to use consistent lowercase pricelist names

Version 1.0.9 - 2025-10-28

Fixed
  • Return a proper download response for the sample file so the browser saves the file instead of rendering it inline
  • Import: assign injected `Product\CollectionFactory` to `$this->productCollectionFactory` (prevents fatal in `_initProductSkus`).

Version 1.0.6.1 - 2025-10-24

Fixed
  • Fixed constructor argument for Pricelist import class
  • Fixed download sample csv file is now downloaded instead of just opened

Version 1.0.8 - 2025-08-08

Fixed
  • Fixed issue on calling Data::checkDateFormat instead of DateService::checkDateFormat

Version 1.0.7 - 2025-07-05

Added
  • Added README.md and CHANGELOG.md
Changed
  • Removed dependency of MageB2B\PricesystemCore\Helper\Data

Version 1.0.6 - 2025-04-23

Fixed
  • Fixed deprecated usage of collections directly, instead use Factories

Version 1.0.5 - 2022-12-04

Changed
  • Refactored pricelist before/after save to avoid direct mysql queries

Version 1.0.4 - 2022-11-30

Fixed
  • Fixed composer.json version constraint

Version 1.0.3 - 2022-07-18

Fixed
  • Fixed constant in registration.php

Version 1.0.2 - 2022-05-28

Fixed
  • Fixed composer json

Version 1.0.1 - 2022-05-14

Added
  • Added checkDateFormat feature on import
  • Added config enable_date_range_validation
  • Added date validation
Changed
  • Changed priority of arguments of save() function to avoid deprecated issue on PHP8
  • Pricelist import speed improvements and some fixes
  • Speed optimization of import
  • MageBTB_PricesystemPricelistImportExport -> MageB2B_PricesystemPricelistImportExport
Fixed
  • Removed function checkDateFormat and use it from Helper Core
  • Added validColumnNames to avoid Problems in Magento 2.3.1
  • Fixed is_base_pricelist import wasn't working
  • Fixed function "validateUniqueDateRangeInCsv" which was broken once we did this multi row feature on import/export pricelists
  • Validate pricelist product duplication during import
  • Fixed issue with price attribute id
pricesystem-pricelist-api

Version 1.0.2 - 2025-07-06

Added
  • Added CHANGELOG.md

Version 1.0.1 - 2024-07-25

Added
  • added new API method to delete all pricelists
Changed
  • Update composer.json

Version 1.0.0 - 2022-05-11

Added
  • Initial version
pricesystem-pricelist-graph-ql

Version 2.0.0 - 2026-02-02

Added
  • Initial module version
pricesystem-hyva

Version 1.0.1 - 2026-06-16

Changed
  • Aligned Hyvä frontend price AJAX handling with pricesystem 2.4.0, including chunked list price requests, configurable list price updates, discount text rounding, and safer product detail fallback behavior
  • Added missing Hyvä compatibility handles for customer account navigation, cart discount text, configurable cart item editing, and the price AJAX render context
Fixed
  • Scoped all Hyvä compatibility layout handles with the `hyva_` prefix so the module no longer overrides Luma price system storefront pages when installed in mixed-theme shops
  • Added the missing `Hyva_CompatModuleFallback` module sequence used by the scoped compatibility handles
  • Added Hyva Tailwind 4 module CSS source registration while keeping Tailwind 3 source compatibility
  • Fixed module CSS so it no longer declares global Tailwind directives or applies the circular `hidden` utility
  • Fixed the Hyvä customer price overview so the special `All prices` option renders without calling regular price type metadata

Version 1.0.0 - 2025-07-27

Added
  • Initial version
Module-Specific Questions
What is a Magento 2 B2B price list extension?

It groups product prices into named agreements and applies them to selected customers or customer groups. SoftwareSilo adds dates, quantity tiers, priorities, a website-level base list, attribute assignment, and a customer price overview.

Who is SoftwareSilo Price Lists best for?

It fits wholesalers, manufacturers, distributors, dealers, procurement portals, and mixed B2B/B2C stores that repeatedly maintain agreed prices for accounts or customer segments.

What is included in the base license?

The license includes Price Lists and the required Price System calculation package. Named lists, products, customer and group assignments, attribute conditions, dates, quantity tiers, priorities, base-list fallback, copying, My Prices, and optional customer CSV download are included.

Why is the Price System package required?

Price System is the shared calculation framework used by the price-list module. It connects the applicable result with Magento catalog, cart, checkout, order, customer price display, strategy, and cache behavior.

Is Price System a separate purchase for this module?

No. The required base package belongs to the Price Lists product. Other pricing modules built on the same framework remain separate products.

Can I assign a price list to one customer?

Yes. Direct assignment is suitable for a negotiated contract with a particular account. Administrators can add or remove customers through searchable grids.

Can I assign a price list to a customer group?

Yes. Group assignment applies one list to all members of a Magento customer group, which is useful for wholesale, dealer, or partner levels.

Can customers receive price lists automatically?

Yes. Automatic assignment can match customer attributes, address attributes, or both. The merchant controls whether both conditions must match and whether value comparison is strict.

Can one customer have several price lists?

Yes. A customer can qualify through direct, group, or attribute-based assignment. Priority and merge settings determine how overlapping lists contribute prices.

How does price-list priority work?

The applicable lists are ordered by priority. The highest-priority tier set normally leads the calculation. Lists sharing the same highest priority can contribute their quantity tiers.

Can quantity tiers from different lists be combined?

Yes. Same-priority lists can contribute tiers, and an optional setting allows lower-priority tiers to be merged as well. Test identical quantities because the selected price strategy still resolves conflicts.

What is a base price list?

It is a website-level fallback price source for cases where no regular assigned list applies. Validation can limit a website to one base list.

Can a price list have a start and end date?

Yes. The whole list can be scheduled, and individual product rows can have separate start and end dates for controlled price changes within a longer agreement.

Are quantity-based contract prices supported?

Yes. A product can have several quantity thresholds inside a list, allowing negotiated volume pricing without creating a separate agreement for each tier.

Which price calculation types are available?

A product row can use a fixed price, nominal surcharge, percentage surcharge, nominal discount, or percentage discount.

Which price wins if several Magento prices apply?

That depends on the configured Price System strategy and price-type order. The system can select the lowest, highest, or configured sort-order result. The project should define this rule before launch.

Can administrators copy an existing price list?

Yes. Mass copy creates a new list from an existing one, which is useful when preparing a new contract period or a variation for another customer segment.

Can assigned products be maintained in bulk?

The admin grids support product selection and editing of assigned rows. For recurring high-volume exchanges, use the separate CSV Import/Export or API option.

Can customers see their assigned prices?

Yes. Logged-in customers can open My Prices to review applicable pricing. Price-list display can include the base list according to configuration.

Can customers download their price list?

Yes, when the download link is enabled. Only a list assigned to the logged-in customer through the supported assignment paths can be downloaded, and CSV delimiter and enclosure are configurable.

Does the module hide products or categories?

No. It changes pricing, not catalog visibility. Use a custom or private catalog solution when customers must also receive different product assortments.

Does it support multiple Magento websites?

Yes. Price lists have website scope, and the base-list rule applies per website. Test website, currency, tax, and customer assignments together.

Does it work with configurable products?

The shared Price System contains configurable-product price handling. Test the exact parent-child setup, quantity tiers, category display, product page, cart, and checkout used by the store.

What does the CSV Import/Export add-on provide?

It adds Magento import and export handling plus console commands for price-list files. The format can carry list data, products, quantities, price types, validity, customers, and groups.

What does the SOAP/REST API add-on provide?

It adds protected CRUD and bulk endpoints for price lists and their product, customer, and group relations, allowing ERP, CRM, PIM, or middleware integration.

What does the GraphQL add-on provide?

It exposes filtered queries for lists, product rows, customer relations, and group relations. It is intended for integrations and headless administration data, not as a replacement for testing storefront price calculation.

Does Price Lists support Hyvä?

Hyvä compatibility is available as a separate option. Test product lists, configurable products, cart editing, My Prices, checkout, and every installed pricing module together.

Is it an alternative to Adobe Commerce Shared Catalogs?

It can be an alternative when the requirement is price lists in Magento Open Source. Adobe Shared Catalogs also control product and category visibility and are tied to Adobe Commerce company accounts, so the scopes are not identical.

How should an ERP integration be designed?

Choose one owner for list definitions and prices, use stable identifiers for lists, products, customers, groups, and websites, define full versus delta updates, and log validation failures before switching production prices.

What should be tested before launch?

Test direct, group, attribute, and base assignments; priorities; equal quantities; dates and time zones; fixed and relative prices; configurable products; websites; currencies; tax display; cart, checkout, orders, My Prices, cache, imports, and every purchased add-on.

General Questions
How many Magento installations is the license valid for?

The license is valid for one Magento installation, including multi-website operation. In addition, the module may be installed on any number of development or staging servers. You can find further details in our license terms.

Is installation included in the price?

Installation and configuration are not included in the price. On request, we can support you with a smooth integration into your system.

How do I install a module?

Composer is PHP's package manager, and Magento 2 uses it to install modules and their dependencies. After purchase, the commands for your module are available under Licenses in your customer account. First add the private SoftwareSilo repository and your license token. Then install the listed package with composer require and run php bin/magento setup:upgrade and php bin/magento cache:clean.

What payment methods are available?

You can pay by credit card (Stripe) or bank transfer (prepayment). For credit card payments, the order is processed immediately and the access credentials are provided directly in a separate follow-up email.

What does the order process look like?

After credit card payment, you immediately receive access credentials to obtain the module via Composer. For bank transfer, access is granted once the invoice is paid.

I need a custom modification of the module. Is that possible?

Custom requests are no problem. We tailor our Magento 2 modules to your project and maintain a dedicated internal version so we always know exactly what runs on your system for support.

Can I install a demo version locally?

On each module detail page, you can request your own demo instance and test the module intensively for 7 days. However, we do not provide a local demo version.

Is the source code encrypted?

No, the source code of our modules is not encrypted. If you need a customization, feel free to send us a request. We will get back to you promptly with a non-binding quote.

What is the update policy and support?

You can add a support package to your order. It includes assistance as well as updates and upgrades related to the module. No continuous subscription is required.

I already have a license. How can I perform an update?

You can complete the license update here. If you have an active support package, you receive updates automatically via Composer. If your support package has expired, you can renew your license here or in your account.

I have another question — how can I contact you?

You can reach us anytime via eMail.

Price Lists / B2B Pricelists

×

Ideal for these industries & use cases

Wholesale Tier Pricing

Create separate pricelists for wholesale tiers (Bronze, Silver, Gold) with automatic assignment based on purchase volume or company attributes. Each tier receives graduated quantity discounts appropriate for their segment.

Regional Pricing Management

Create pricelists for different regions (US, EU, APAC) with automatic assignment based on customer country or postcode. Each region receives pricing in appropriate currency with region-specific quantity tiers and promotional campaigns.

Seasonal Campaign Pricing

Create time-limited pricelists for seasonal campaigns (Black Friday, Summer Sale, Holiday Specials) with date ranges that automatically activate and deactivate. Use high priority values to override standard pricing during campaign periods.

VIP Customer Programs

Create exclusive VIP pricelists with premium pricing and early access to new products. Assign customers to VIP lists based on lifetime purchase value, company attributes, or manual selection. Use highest priority to ensure VIP pricing always applies.

Contract-Based Pricing

Manage annual or multi-year customer contracts as named pricelists with precise date ranges matching contract terms. Create separate pricelists for each contract period, allowing easy contract renewal by activating new pricelists when old ones expire.

Multi-Brand Pricing

Create separate pricelists for different brands or product lines within your catalog. Assign customers to brand-specific pricelists based on their authorized dealer status or purchase history, ensuring proper pricing segregation across multiple brands.

Try before you buy

Request a personal demo and test the module with realistic sample data in Magento Admin and the storefront. Take your time to see whether it fits your requirements and workflows.

Technical documentation

Practical Magento 2 guides, developer documentation, and API references for installation, configuration, and troubleshooting.

Go to Knowledge Base

Do you need a custom solution?

Do your requirements go beyond the capabilities of our Magento 2 modules? We develop suitable Magento 2 modules and integrations for your business processes.

Request now