Category Group Pricing

Set custom prices at the category level for entire customer groups. One price entry affects all group members shopping in that category.

Overview

Category Group Pricing allows you to assign specific prices to customer groups (Wholesale, Retail, VIP, etc.) for entire product categories. This scales customer pricing to groups.

Key Characteristics

  • Group-based targeting - One group, one category, many customers
  • Database table: pricesystem_categoryprice_customergroup
  • Foreign keys: group_idcustomer_group, entity_idcatalog_category_entity
  • Unique constraint: category + group + qty + website + dates + application type
  • Priority system: Conflicts resolved with customer prices by priority or global rule

When to Use Group Pricing

Use Case 1: Wholesale Pricing

Scenario: All wholesale customers get 30% off Electronics.

Solution:

  • Category: Electronics
  • Group: Wholesale
  • Price Application Type: Discount
  • Price: 30 (30% off)
  • Priority: 15

Every customer in Wholesale group automatically gets 30% off all electronics.

Use Case 2: Retail vs Wholesale

Scenario: Different pricing tiers for retail vs wholesale.

Solution:

Retail Customers:

  • Category: Office Supplies
  • Group: Retail
  • Price: $29.99
  • Priority: 10

Wholesale Customers:

  • Category: Office Supplies
  • Group: Wholesale
  • Price: $19.99
  • Priority: 10

Each group sees their appropriate price.

Use Case 3: VIP Program

Scenario: VIP members get premium pricing on luxury categories.

Solution:

  • Category: Luxury Goods
  • Group: VIP
  • Price: Reduced by 20%
  • Priority: 25

VIP membership badge grants automatic discounts.

Use Case 4: B2B Customer Segments

Scenario: Construction companies get special pricing on building materials.

Solution:

  • Create customer group: "Construction"
  • Category: Building Materials
  • Group: Construction
  • Price: Bulk contractor pricing
  • Priority: 20

All construction company accounts get contractor rates.


Database Structure

Table: pricesystem_categoryprice_customergroup

Schema:

CREATE TABLE pricesystem_categoryprice_customergroup ( id INT PRIMARY KEY AUTO_INCREMENT, entity_id INT NOT NULL, -- Category ID group_id INT NOT NULL, -- Customer Group ID qty DECIMAL(12,4) NOT NULL, -- Quantity tier value DECIMAL(12,4) NOT NULL, -- Price value priority INT DEFAULT 0, -- Priority for conflict resolution from_date DATE DEFAULT NULL, -- Start date to_date DATE DEFAULT NULL, -- End date website_id INT NOT NULL, -- Website scope price_application_type VARCHAR(50), -- fixed|discount|adjustment created_at TIMESTAMP, updated_at TIMESTAMP, FOREIGN KEY (entity_id) REFERENCES catalog_category_entity(entity_id) ON DELETE CASCADE, FOREIGN KEY (group_id) REFERENCES customer_group(customer_group_id) ON DELETE CASCADE, FOREIGN KEY (website_id) REFERENCES store_website(website_id) ON DELETE CASCADE, UNIQUE KEY (entity_id, group_id, qty, website_id, from_date, to_date, price_application_type) );

Key Differences from Customer Table:

  • group_id instead of customer_id
  • Foreign key to customer_group table
  • Same other fields (qty, priority, dates, etc.)

Customer Groups in Magento

Default Groups

Magento ships with these groups:

Group IDGroup NameDefault Tax Class
0NOT LOGGED INRetail Customer
1GeneralRetail Customer
2WholesaleWholesale
3RetailerRetailer

Custom Groups

You can create custom groups:

Admin Panel >Customers > Customer Groups > Add New Customer Group

Examples:

  • VIP Customers
  • Construction
  • Healthcare
  • Education
  • Government
  • Non-Profit

Each group can have:

  • Custom name
  • Tax class
  • Category prices (via this extension)

Admin Interface

Location

Admin Panel >Catalog > Category Prices > Customer Group Prices

Grid Columns

  • ID - Database record ID
  • Category - Category name with breadcrumb
  • Customer Group - Group name
  • Qty - Minimum quantity
  • Price - Custom price value
  • Priority - Resolution priority
  • From Date - Start date
  • To Date - End date
  • Website - Website scope
  • Created - Creation timestamp
  • Actions - Edit/Delete

Grid Features

Same as customer prices:

  • Filtering
  • Sorting
  • Mass actions
  • Pagination
  • Inline editing

Creating Group Prices

Standard Entry Form

Category (Required):

  • Select from category tree
  • Example: Electronics >Laptops

Customer Group (Required):

  • Dropdown of all groups
  • Options: General, Wholesale, Retail, VIP, etc.
  • Example: "Wholesale"

Quantity (Required):

  • Decimal (12,4)
  • Default: 1
  • Example: 10 for bulk tier

Price (Required):

  • Decimal (12,4)
  • Example: 89.99

Priority (Optional):

  • Integer (0-999)
  • Default: 0
  • Example: 15

From Date (Optional):

  • Date picker
  • NULL = immediate
  • Example: 2025-06-01

To Date (Optional):

  • Date picker
  • NULL = permanent
  • Example: 2025-08-31

Website (Required):

  • Dropdown
  • Example: "US Website"

Price Application Type (Required):

  • fixed / discount / adjustment
  • Example: discount

Group-Based Quantity Tiers

Creating Wholesale Tiers

Goal: Graduated wholesale pricing for Electronics.

GroupCategoryQtyPricePriority
WholesaleElectronics1$90.0015
WholesaleElectronics25$85.0015
WholesaleElectronics100$80.0015
WholesaleElectronics500$75.0015

Result:

  • Wholesale customer orders 50 items → $85 each (Qty 25 tier)
  • Wholesale customer orders 200 items → $80 each (Qty 100 tier)

Creating Retail Tiers

Goal: Small volume discounts for retail customers.

GroupCategoryQtyPricePriority
RetailOffice Supplies1$25.0010
RetailOffice Supplies5$24.0010
RetailOffice Supplies10$23.0010

Result:

  • Retail customer orders 7 items → $24 each (Qty 5 tier)

Group Assignment

How Customers Get Group Prices

When a customer logs in:

  1. Magento loads customer record
  2. Customer record has group_id field
  3. Extension checks pricesystem_categoryprice_customergroup for matching group_id
  4. Applies group prices to all products in those categories

Assigning Customers to Groups

Manual Assignment:

Admin Panel >Customers > All Customers > Edit Customer

  • Navigate to "Account Information"
  • Field: "Customer Group"
  • Select from dropdown
  • Save

Bulk Assignment:

Select multiple customers in grid:

  1. Check customers
  2. Actions dropdown: "Assign a Customer Group"
  3. Select group
  4. Submit

Automatic Assignment:

Use third-party extensions or custom code to:

  • Auto-assign based on purchase volume
  • Auto-assign based on company domain
  • Auto-assign based on custom attributes
  • Auto-assign based on registration form data

Changing Groups

When you move a customer to different group:

  1. Old group prices no longer apply
  2. New group prices apply immediately
  3. No price history tracking (current group only)

Example:

Customer moves from Retail → Wholesale:

  • Loses Retail category prices
  • Gains Wholesale category prices
  • Takes effect on next page load

NOT LOGGED IN Group

Special Case

group_id = 0 is for anonymous/guest visitors.

Use Case: Guest pricing for certain categories.

Example:

  • Category: Free Samples
  • Group: NOT LOGGED IN
  • Price: $0.00
  • Priority: 5

Guests can order free samples without logging in.

Note: Most B2B stores require login, so group 0 pricing is rare.


Priority System with Groups

Group vs Group (Same Customer)

Scenario: Customer in multiple groups?

Answer: Magento doesn't support multiple groups. Each customer has exactly ONE group at a time.

Group vs Customer Prices

Scenario: Customer has both group price and individual customer price.

Setup:

  • Customer #123 in Wholesale group
  • Group price: Wholesale + Electronics + $90 + Priority 15
  • Customer price: Customer #123 + Electronics + $85 + Priority 25

Result: Depends on configuration:

  • Select by priority: $85 (customer price, priority 25 > 15)
  • Customer first: $85 (always customer)
  • Group first: $90 (always group)

Configuration: Stores > Config > Pricesystem > Categoryprice > Price Select Rule


Multi-Website Group Pricing

Per-Website Pricing

Scenario: Different pricing per website for same group.

Setup:

WebsiteGroupCategoryPrice
US StoreWholesaleElectronics$90 USD
EU StoreWholesaleElectronics€85 EUR
UK StoreWholesaleElectronics£80 GBP

Wholesale customers see region-appropriate pricing.

Shared Group Pricing

Use website_id = 0 (All Websites) for global group pricing.

When to use:

  • Single website store
  • Same pricing across all regions
  • Development/testing

Date-Based Group Campaigns

Seasonal Group Promotions

Example: Summer Sale for Retail

  • Category: Outdoor Furniture
  • Group: Retail
  • Price Application Type: Discount
  • Price: 25 (25% off)
  • From Date: 2025-06-01
  • To Date: 2025-08-31
  • Priority: 20

All retail customers get summer discount automatically.

Flash Sales for VIP

Example: Weekend VIP Flash Sale

  • Category: New Arrivals
  • Group: VIP
  • Price: Early bird pricing
  • From Date: 2025-12-01
  • To Date: 2025-12-03
  • Priority: 30

VIP members get first access at discounted prices.

Contract Renewals

Example: Annual Wholesale Contract

  • Category: All major categories
  • Group: Wholesale
  • Price: Contracted rates
  • From Date: 2025-01-01
  • To Date: 2025-12-31
  • Priority: 15

Auto-renew by creating next year's entries in advance.


CSV Export for Group Analysis

Group Price Reports

Use the CSV Import/Export Add-On to export category group prices and review them in Excel/Sheets:

Tip: Export first and use the exported CSV as your template (it matches your installed version/config).

Cross-Group Comparison

Export prices for all groups, compare in spreadsheet:

CategoryRetail PriceWholesale PriceVIP Price
Electronics$100$90$85
Office$25$20$18

Ensure logical pricing hierarchy.


API Integration

Category customer group category prices can be managed via WebAPI if you install the SOAP / REST API Add-On:

Core endpoints use the prefix /V1/pricesystem/.... For category customer group prices the key endpoints are:

  • GET /V1/pricesystem/categoryprice/customergroup/search
  • POST /V1/pricesystem/categoryprice/customergroup
  • PUT /V1/pricesystem/categoryprice/customergroup/:id
  • DELETE /V1/pricesystem/categoryprice/customergroup/:id

Import/Export for Groups

Bulk import/export is available via the CSV Import/Export Add-On:

In Magento's importer (System >Data Transfer > Import) the entity type is:

  • Pricesystem Categoryprice Customergroup

Best Practices

Group Naming

Use descriptive names:

  • "Wholesale - Construction"
  • "VIP - Gold Tier"
  • "Education - K-12"
  • "Group 1"
  • "Test"
  • "Misc"

Priority Conventions

Establish group priority hierarchy:

  • 10-14: Retail/General groups
  • 15-19: Wholesale groups
  • 20-24: Special programs
  • 25-29: VIP groups
  • 30+: Emergency overrides

Group Management

Regular audits:

  1. Unused groups (no customers assigned)
  2. Empty groups (no prices defined)
  3. Obsolete groups (old programs)
  4. Duplicate groups (consolidate)

Testing New Groups

Before production:

  1. Create test group
  2. Assign test customer
  3. Set test prices on sample categories
  4. Log in as test customer
  5. Verify pricing displays correctly
  6. Test quantity tiers
  7. Test date ranges
  8. Clear cache and re-test

Advanced Scenarios

Scenario 1: Group Migration

Goal: Merge "Wholesale A" and "Wholesale B" into "Wholesale".

SQL:

-- Move all Wholesale A prices to Wholesale UPDATE pricesystem_categoryprice_customergroup SET group_id = 2 -- Wholesale WHERE group_id = 10; -- Wholesale A -- Move all Wholesale B prices to Wholesale UPDATE pricesystem_categoryprice_customergroup SET group_id = 2 -- Wholesale WHERE group_id = 11; -- Wholesale B -- Note: May create duplicates, resolve with priority or delete

Scenario 2: Bulk Priority Update

Goal: Increase all VIP group priorities by 10.

SQL:

UPDATE pricesystem_categoryprice_customergroup SET priority = priority + 10 WHERE group_id = 4; -- VIP group

Scenario 3: Clone Group Pricing

Goal: Copy all Wholesale prices to new "Wholesale Premium" group.

SQL:

INSERT INTO pricesystem_categoryprice_customergroup (entity_id, group_id, qty, value, priority, from_date, to_date, website_id, price_application_type) SELECT entity_id, 5 AS group_id, -- New group ID qty, value * 0.95 AS value, -- 5% better pricing priority + 5 AS priority, -- Higher priority from_date, to_date, website_id, price_application_type FROM pricesystem_categoryprice_customergroup WHERE group_id = 2; -- Wholesale group

Scenario 4: Expire All Group Campaigns

Goal: End all promotional group pricing.

SQL:

UPDATE pricesystem_categoryprice_customergroup SET to_date = CURDATE() WHERE priority BETWEEN 20 AND 24 -- Campaign priority range AND to_date IS NULL; -- Currently no end date

Troubleshooting

Price Not Showing for Group

Checklist:

  1. ✓ Customer logged in?
  2. ✓ Customer in correct group? (Check customer record)
  3. ✓ Group price exists? (Check admin grid)
  4. ✓ Category correct?
  5. ✓ Quantity meets minimum?
  6. ✓ Date range valid?
  7. ✓ Website matches?
  8. ✓ Cache cleared?

Debug:

-- Check customer group SELECT entity_id, email, group_id FROM customer_entity WHERE email = 'customer@example.com'; -- Check group prices for that group SELECT * FROM pricesystem_categoryprice_customergroup WHERE group_id = X AND entity_id = Y;

Different Customers See Different Prices

Expected Behavior!

  • Customer in Retail group → sees Retail prices
  • Customer in Wholesale group → sees Wholesale prices

Verify:

  1. Check both customer group assignments
  2. Confirm both group prices exist
  3. Test with correct login credentials

Guest Prices Not Working

Issue: Group 0 (NOT LOGGED IN) prices not applying.

Causes:

  1. Customer accidentally logged in
  2. Session cookie from previous login
  3. Cache issue

Resolution:

  1. Clear browser cookies
  2. Test in incognito/private mode
  3. Clear Magento cache
  4. Verify group_id = 0 in database

Found an issue with this documentation? Let us know