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_id→customer_group,entity_id→catalog_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_idinstead ofcustomer_id- Foreign key to
customer_grouptable - Same other fields (qty, priority, dates, etc.)
Customer Groups in Magento
Default Groups
Magento ships with these groups:
| Group ID | Group Name | Default Tax Class |
|---|---|---|
| 0 | NOT LOGGED IN | Retail Customer |
| 1 | General | Retail Customer |
| 2 | Wholesale | Wholesale |
| 3 | Retailer | Retailer |
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:
10for 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.
| Group | Category | Qty | Price | Priority |
|---|---|---|---|---|
| Wholesale | Electronics | 1 | $90.00 | 15 |
| Wholesale | Electronics | 25 | $85.00 | 15 |
| Wholesale | Electronics | 100 | $80.00 | 15 |
| Wholesale | Electronics | 500 | $75.00 | 15 |
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.
| Group | Category | Qty | Price | Priority |
|---|---|---|---|---|
| Retail | Office Supplies | 1 | $25.00 | 10 |
| Retail | Office Supplies | 5 | $24.00 | 10 |
| Retail | Office Supplies | 10 | $23.00 | 10 |
Result:
- Retail customer orders 7 items → $24 each (Qty 5 tier)
Group Assignment
How Customers Get Group Prices
When a customer logs in:
- Magento loads customer record
- Customer record has
group_idfield - Extension checks
pricesystem_categoryprice_customergroupfor matchinggroup_id - 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:
- Check customers
- Actions dropdown: "Assign a Customer Group"
- Select group
- 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:
- Old group prices no longer apply
- New group prices apply immediately
- 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:
| Website | Group | Category | Price |
|---|---|---|---|
| US Store | Wholesale | Electronics | $90 USD |
| EU Store | Wholesale | Electronics | €85 EUR |
| UK Store | Wholesale | Electronics | £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:
- Categoryprice CSV Import/Export Add-On
- CLI:
php bin/magento pricesystem:export-categoryprice-customergroup
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:
| Category | Retail Price | Wholesale Price | VIP 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/searchPOST /V1/pricesystem/categoryprice/customergroupPUT /V1/pricesystem/categoryprice/customergroup/:idDELETE /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:
- Unused groups (no customers assigned)
- Empty groups (no prices defined)
- Obsolete groups (old programs)
- Duplicate groups (consolidate)
Testing New Groups
Before production:
- Create test group
- Assign test customer
- Set test prices on sample categories
- Log in as test customer
- Verify pricing displays correctly
- Test quantity tiers
- Test date ranges
- 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 deleteScenario 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 groupScenario 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 groupScenario 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 dateTroubleshooting
Price Not Showing for Group
Checklist:
- ✓ Customer logged in?
- ✓ Customer in correct group? (Check customer record)
- ✓ Group price exists? (Check admin grid)
- ✓ Category correct?
- ✓ Quantity meets minimum?
- ✓ Date range valid?
- ✓ Website matches?
- ✓ 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:
- Check both customer group assignments
- Confirm both group prices exist
- Test with correct login credentials
Guest Prices Not Working
Issue: Group 0 (NOT LOGGED IN) prices not applying.
Causes:
- Customer accidentally logged in
- Session cookie from previous login
- Cache issue
Resolution:
- Clear browser cookies
- Test in incognito/private mode
- Clear Magento cache
- Verify group_id = 0 in database
