b2b-commerce-store-setup
Use this skill to configure a Salesforce B2B Commerce storefront: creating the WebStore, linking BuyerGroups, assigning CommerceEntitlementPolicies, and granting buyer contacts transactional access. Trigger keywords: B2B Commerce, WebStore, BuyerGroup, entitlement policy, buyer account, storefront access. NOT for B2C Commerce (LWR storefronts using Individual/Person Account models), CPQ quote configuration, or Order Management fulfillment flows.
Best use case
b2b-commerce-store-setup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use this skill to configure a Salesforce B2B Commerce storefront: creating the WebStore, linking BuyerGroups, assigning CommerceEntitlementPolicies, and granting buyer contacts transactional access. Trigger keywords: B2B Commerce, WebStore, BuyerGroup, entitlement policy, buyer account, storefront access. NOT for B2C Commerce (LWR storefronts using Individual/Person Account models), CPQ quote configuration, or Order Management fulfillment flows.
Teams using b2b-commerce-store-setup should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/b2b-commerce-store-setup/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How b2b-commerce-store-setup Compares
| Feature / Agent | b2b-commerce-store-setup | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use this skill to configure a Salesforce B2B Commerce storefront: creating the WebStore, linking BuyerGroups, assigning CommerceEntitlementPolicies, and granting buyer contacts transactional access. Trigger keywords: B2B Commerce, WebStore, BuyerGroup, entitlement policy, buyer account, storefront access. NOT for B2C Commerce (LWR storefronts using Individual/Person Account models), CPQ quote configuration, or Order Management fulfillment flows.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# B2B Commerce Store Setup
This skill activates when a practitioner needs to configure or troubleshoot buyer access on a Salesforce B2B Commerce storefront — including WebStore creation, BuyerGroup assignment, entitlement policy linking, and granting individual contacts the ability to transact.
---
## Before Starting
Gather this context before working on anything in this domain:
- Confirm whether the org uses B2B Commerce for Visualforce (legacy) or B2B Commerce on Lightning Experience — the admin UI differs, but the underlying data model (WebStore, BuyerGroup, CommerceEntitlementPolicy) is the same.
- The most common wrong assumption: all contacts under a BuyerAccount automatically inherit storefront access. They do not. Only contacts explicitly assigned the **Buyer** or **Buyer Manager** role via a `BuyerAccountAccess` (contact-level role assignment) can log in and transact. Missing this step causes silent access failures that appear identical to entitlement misconfiguration.
- Hard platform limits that cannot be raised via support case:
- Maximum **200 BuyerGroups per CommerceEntitlementPolicy**.
- A product entitled across more than **2,000 BuyerGroups per store** is silently excluded from storefront search indexing beyond that cap — the product remains visible in Commerce admin but disappears from buyer-facing search.
---
## Core Concepts
### 1. The WebStore → BuyerGroup → EntitlementPolicy Access Chain
The complete access model is a chain of junction objects:
```
WebStore
└─ WebStoreBuyerGroup (junction)
└─ BuyerGroup
└─ CommerceEntitlementBuyerGroup (junction)
└─ CommerceEntitlementPolicy
└─ Entitled Product2 records
```
In parallel, buyer membership flows through:
```
Account (converted to BuyerAccount)
└─ BuyerGroupMember → BuyerGroup
└─ Contact (assigned Buyer or Buyer Manager role via buyer access record)
```
A buyer contact can only see and purchase products that are:
1. Part of a `CommerceEntitlementPolicy` linked to a `BuyerGroup`
2. Where that `BuyerGroup` is linked to the `WebStore` the contact is accessing
3. Where the `Account` is a member of that same `BuyerGroup` via `BuyerGroupMember`
4. Where the contact themselves has an explicit Buyer or Buyer Manager role assignment
All four conditions must hold. Missing any single link produces either a blank catalog or a login failure.
### 2. BuyerGroup Limits and Silent Search Indexing Failures
`CommerceEntitlementPolicy` has a hard cap of **200 BuyerGroups** per policy. This limit cannot be increased via a support case; it is enforced at the platform level (B2B Commerce Developer Guide — Entitlement Data Limits).
A separate, less-documented limit applies at the store level: when a single `Product2` record is entitled across more than **2,000 BuyerGroups within one WebStore**, the Commerce search indexing engine silently stops indexing that product for buyer groups beyond the 2,000th. The product appears correctly in Salesforce admin and in the Commerce product catalog, but buyers in the affected groups see zero results in storefront search. There is no error log, warning email, or visible indicator in the UI that this cap has been breached.
### 3. Contact Roles: Buyer vs. Buyer Manager
Adding a contact to a BuyerAccount's associated Account record does not grant storefront access. Two explicit roles exist:
- **Buyer** — can browse, add to cart, and place orders on behalf of the account.
- **Buyer Manager** — can do everything a Buyer can, plus manage other buyers on the account (approve orders, manage address book, invite additional contacts depending on org configuration).
Role assignment is stored as a relationship record. If the role assignment record is missing, the contact can authenticate (if they have a Community or Experience Cloud user) but receives a "you are not authorized" error or an empty storefront with no cart access.
### 4. WebStore Configuration Checklist Before Linking Buyers
Before attaching BuyerGroups, the WebStore itself must have:
- A published **Commerce Experience Cloud site** associated with it.
- At least one active **price book** associated via `WebStorePricebook`.
- Search indexing enabled and at least one initial index run completed.
Skipping these steps means BuyerGroup and entitlement wiring looks correct in data but the storefront remains non-functional.
---
## Common Patterns
### Pattern A: Single BuyerGroup, Single Entitlement Policy
**When to use:** Most straightforward setups — all buyers on the store see the same product catalog and pricing tier.
**How it works:**
1. Create one `BuyerGroup` record (e.g., "Standard Buyers").
2. Create `WebStoreBuyerGroup` with `WebStoreId` = your store and `BuyerGroupId` = the new group.
3. Create one `CommerceEntitlementPolicy` (e.g., "Standard Entitlement").
4. Create `CommerceEntitlementBuyerGroup` linking the policy to the group.
5. Add `CommerceEntitlementProduct` records linking each `Product2` to the policy.
6. Convert each customer `Account` to a `BuyerAccount` (set `IsBuyer = true` on the Account, or use the Commerce admin UI).
7. Create `BuyerGroupMember` records for each BuyerAccount.
8. Assign Buyer roles to the relevant contacts.
**Why not skip buyer group:** Without a `BuyerGroup`, the entitlement policy has no path to the store. Products remain unentitled even if the `CommerceEntitlementPolicy` and `BuyerAccount` exist.
### Pattern B: Segmented Catalog via Multiple BuyerGroups
**When to use:** Different customer tiers need different product visibility (e.g., distributors see all SKUs, retail partners see a curated subset).
**How it works:**
1. Create one `BuyerGroup` per tier (e.g., "Distributor Buyers", "Retail Buyers").
2. Link both groups to the same `WebStore` via separate `WebStoreBuyerGroup` records.
3. Create one `CommerceEntitlementPolicy` per tier with the appropriate product set.
4. Link each policy to its corresponding `BuyerGroup` via `CommerceEntitlementBuyerGroup`.
5. Assign each `BuyerAccount` to the correct group via `BuyerGroupMember`.
6. Monitor total BuyerGroup count per policy — must stay under 200.
**Why not one policy with visibility rules:** The entitlement model is additive; a contact with access to multiple groups sees the union of entitled products. Separate policies per group is the only way to enforce hard product-level segmentation.
---
## Decision Guidance
| Situation | Recommended Approach | Reason |
|---|---|---|
| All buyers need the same catalog | Single BuyerGroup + Single EntitlementPolicy | Simplest model; easiest to maintain |
| Different buyers need different product sets | One BuyerGroup + EntitlementPolicy per tier | Only model that enforces hard catalog segmentation |
| Products missing from storefront search but visible in admin | Check 2,000 BuyerGroup-per-product indexing limit | Platform silently drops search indexing beyond cap |
| Contact can log in but sees empty catalog or no cart | Verify contact has explicit Buyer or Buyer Manager role | Account membership alone is insufficient |
| EntitlementPolicy limit error when adding BuyerGroup | Split groups across multiple policies | Hard cap of 200 BuyerGroups per policy; cannot be raised |
| Store search returns zero results after setup | Confirm search index has been rebuilt after entitlement changes | Entitlement changes do not automatically trigger re-index |
---
## Recommended Workflow
Step-by-step instructions for an AI agent or practitioner working on this task:
1. **Verify org prerequisites** — confirm B2B Commerce is enabled, a Commerce Experience Cloud site exists and is published, and at least one active price book is associated with the WebStore via `WebStorePricebook`.
2. **Model the buyer segmentation** — determine how many BuyerGroups are needed. If more than one tier is required, plan one `CommerceEntitlementPolicy` per tier. Verify the total number of groups per policy will not exceed 200.
3. **Create BuyerGroups and link to WebStore** — create each `BuyerGroup` record, then create the corresponding `WebStoreBuyerGroup` junction records tying each group to the `WebStore`.
4. **Create EntitlementPolicies and link products** — create each `CommerceEntitlementPolicy`, add `CommerceEntitlementProduct` records for the entitled `Product2` records, then create `CommerceEntitlementBuyerGroup` junction records linking each policy to its BuyerGroup. Verify total BuyerGroup-per-product count stays under 2,000 across the store.
5. **Convert Accounts to BuyerAccounts and add to groups** — set `IsBuyer = true` on each customer Account (or use Commerce admin), then create `BuyerGroupMember` records assigning each BuyerAccount to the correct BuyerGroup.
6. **Assign Buyer or Buyer Manager roles to contacts** — explicitly assign each transacting contact the Buyer or Buyer Manager role. Do not assume account membership grants access.
7. **Rebuild search index and validate** — trigger a Commerce search index rebuild, then log in as a test buyer contact and confirm: (a) entitled products appear in search, (b) cart is accessible, (c) non-entitled products are absent.
---
## Review Checklist
Run through these before marking work in this area complete:
- [ ] WebStore has an associated published Experience Cloud site
- [ ] Each BuyerGroup is linked to the WebStore via a `WebStoreBuyerGroup` record
- [ ] Each `CommerceEntitlementPolicy` is linked to its BuyerGroup via `CommerceEntitlementBuyerGroup`
- [ ] No single policy exceeds 200 BuyerGroups
- [ ] No single product is entitled across more than 2,000 BuyerGroups in this store
- [ ] Each customer Account has `IsBuyer = true` and a `BuyerGroupMember` record
- [ ] Each transacting contact has an explicit Buyer or Buyer Manager role assignment
- [ ] Commerce search index has been rebuilt after entitlement changes
- [ ] End-to-end test: buyer contact can search entitled products and add to cart
---
## Salesforce-Specific Gotchas
Non-obvious platform behaviors that cause real production problems:
1. **Contact role assignment is mandatory, not inferred** — Adding a contact to the Account that was converted to a BuyerAccount does not grant any storefront access. Only contacts with an explicit Buyer or Buyer Manager role assignment can transact. The failure mode is silent: the contact authenticates successfully but sees an empty storefront or receives an authorization error. This is the single most common misconfiguration in new B2B Commerce setups.
2. **Entitlement changes do not auto-trigger search re-indexing** — When you add or remove products from a `CommerceEntitlementPolicy` or add a new BuyerGroup, Commerce does not automatically rebuild the search index. The catalog admin reflects the change immediately, but buyers see stale search results until a manual or scheduled index rebuild completes. Always rebuild the index after any entitlement change and verify via a buyer-facing search before signoff.
3. **Silent search exclusion above 2,000 BuyerGroups per product** — If a `Product2` is entitled across more than 2,000 BuyerGroups within a single WebStore, the search indexer silently stops including that product for groups beyond the 2,000th. No error is raised, no warning email is sent, and the product still appears correctly in the Commerce admin catalog. The only symptom is that buyers in the overflow groups see no search results for that product. This limit is documented in the B2B Commerce Developer Guide (Entitlement Data Limits) but is easy to miss in high-scale multi-group deployments.
---
## Output Artifacts
| Artifact | Description |
|---|---|
| WebStoreBuyerGroup records | Junction records linking each BuyerGroup to the WebStore |
| CommerceEntitlementBuyerGroup records | Junction records linking each EntitlementPolicy to its BuyerGroup |
| BuyerGroupMember records | Records assigning each BuyerAccount to one or more BuyerGroups |
| Contact role assignments | Buyer or Buyer Manager role records for each transacting contact |
| Rebuilt search index | Post-setup index confirming all entitled products are searchable |
---
## Related Skills
- admin/experience-cloud-site-setup — required prerequisite; the Commerce storefront runs on an Experience Cloud site that must be published before buyer access works
- admin/cpq-pricing-rules — if dynamic pricing per buyer group is needed, CPQ pricing rules interact with Commerce price booksRelated Skills
shield-kms-byok-setup
Configure Shield Platform Encryption with customer-supplied (BYOK) or customer-held (Cache-Only Key Service) tenant secrets, rotate them, and recover. NOT for Classic Encryption or field masking.
commerce-lwc-components
Use this skill when building or customizing Lightning Web Components for B2B Commerce or D2C LWR storefronts — product display tiles, cart line-item components, checkout step components, wishlist buttons, and product comparison widgets that rely on Commerce Storefront wire adapters from the commerce namespace. NOT for standard LWC development outside a Commerce store context, not for Aura-based Community Builder components, and not for legacy B2B Commerce (CloudCraze) Aura widgets.
slack-salesforce-integration-setup
Use this skill when setting up or troubleshooting the Salesforce for Slack managed app — including connecting a Salesforce org to a Slack workspace, configuring the three-party admin handshake, linking Slack channels to Salesforce records, enabling record preview sharing, and managing org-level limits. Triggers on: Salesforce for Slack app not connecting, Slack org connection setup, Salesforce record sharing in Slack, Slack workspace admin approval, connecting Salesforce to Slack. NOT for building custom Slack apps or Slack bots (separate development platform), not for Slack Workflow Builder Salesforce connector (use slack-workflow-builder skill), not for Flow-based Slack messaging (use flow-for-slack skill).
salesforce-maps-setup
Use when configuring Salesforce Maps (formerly MapAnything) — territory planning, route optimization, live tracking, geo-grid visualizations, and check-in/check-out workflows for Sales or Service field reps not on Field Service. Covers package installation order (Maps + Maps Advanced + Maps Routing/Live Tracking add-ons), the MapsTerritoryPlan / MapsAdvancedRoute / MapsLayer object family, base-data syncs (Geocoding and Routing services), and integration with Sales and Service Cloud records. Triggers: 'Salesforce Maps setup', 'MapAnything migration', 'territory planning by polygon', 'route optimization for sales reps', 'live tracking field reps', 'plot accounts on a map', 'check-in to the closest account'. NOT for Field Service Lightning territory and scheduling (use admin/fsl-scheduling-optimization-design and data/fsl-territory-data-setup) — Maps and FSL are different products. NOT for Consumer Goods Cloud retail visit planning (use admin/consumer-goods-cloud-setup) — RoutePlan/Visit objects are CG-specific. NOT for Tableau / CRM Analytics geo charts.
private-connect-setup
Configure Private Connect between Salesforce and AWS/Azure for traffic to stay on private networks. NOT for standard internet callouts.
net-zero-cloud-setup
Use this skill when configuring Salesforce Net Zero Cloud — including Scope 1/2/3 emission source modeling via the StnryAssetCrbnFtprnt / VehicleAssetCrbnFtprnt / Scope3CrbnFtprnt object families, emission factor library setup (EmssnFctr / EmssnFctrSet), DPE-driven carbon calculation jobs, supplier engagement scoring, and CSRD / ESRS / TCFD disclosure pack mapping. Triggers on: Net Zero Cloud setup, Sustainability Cloud carbon accounting, Scope 1 2 3 emissions Salesforce, emission factor library, supplier engagement Net Zero, ESG disclosure pack mapping. NOT for ESG content scoring (use Marketing Cloud), NOT for general financial reporting (use Accounting Subledger), NOT for energy-only utility billing (use Energy & Utilities Cloud).
named-credentials-setup
Named Credentials and External Credentials configuration for secure outbound callouts: per-user vs per-org authentication, legacy vs enhanced Named Credentials, external credential principal types (Named Principal, Per User, Anonymous), OAuth 2.0 and JWT flows, and credential deployment. NOT for callout code patterns, Apex HTTP implementation, or OAuth server-side flow debugging.
manufacturing-cloud-setup
Use this skill when configuring Salesforce Manufacturing Cloud — including Sales Agreement setup, Account-Based Forecasting (ABF) recalc jobs, run-rate management, Rebate Management programs, channel inventory tracking via Channel Revenue Management, and Group Membership / OrderItem-to-SalesAgreement reconciliation. Triggers on: Manufacturing Cloud setup, Sales Agreement Salesforce, account-based forecast recalculation, run rate manufacturing, rebate program setup, channel revenue management. NOT for general Sales Cloud opportunity-to-order flow (use standard Opportunity / Order), NOT for Field Service install-base management (use FSL skills), NOT for Automotive Cloud dealer modeling (use automotive-cloud-setup).
loyalty-management-setup
Use this skill when setting up or extending Salesforce Loyalty Management — including program and currency creation, tier group design, qualifying vs. non-qualifying point currency separation, DPE batch job activation, partner loyalty configuration, and member portal setup on Experience Cloud. Triggers on: Loyalty Management setup, loyalty tier setup Salesforce, qualifying points vs redemption points, DPE batch job for loyalty, partner loyalty program Salesforce, loyalty member portal. NOT for Marketing Cloud engagement program design (separate product), not for B2B loyalty via Sales Cloud (standard opportunity, not loyalty program), not for general Experience Cloud site setup (use experience-cloud-setup skill).
automotive-cloud-setup
Use this skill when setting up or extending Salesforce Automotive Cloud — including the Vehicle / VehicleDefinition data model, dealer-OEM relationship modeling via AccountAccountRelation, ActionableEvent orchestration for service campaigns and recalls, FinancialAccount lifecycle for retail-credit deals, and DriverQualification / WarrantyTerm extensions. Triggers on: Automotive Cloud setup, Salesforce Automotive Cloud data model, Vehicle vs VehicleDefinition, dealer hierarchy AccountAccountRelation, Automotive Cloud actionable events, recall campaign Salesforce. NOT for general Sales Cloud opportunity work on a vehicle product (use standard Opportunity), NOT for Manufacturing Cloud sales agreements (use manufacturing-cloud-setup), NOT for Field Service vehicle inventory (use FSL skills).
salesforce-backup-and-restore
Designing a backup and restore strategy for a Salesforce org — Salesforce Backup (the native paid product), the deprecated weekly Data Export Service, third-party tools (OwnBackup / Druva / Gearset / Spanning), and self-rolled Bulk API extracts. Covers RPO / RTO targeting, restore-of-a-single-record vs full-org restore, parent / child relationship rebuilding, and cost / coverage tradeoffs across vendors. NOT for sandbox refresh strategy (see devops/sandbox-strategy), NOT for metadata source-control / DevOps backups (see devops/sfdx-source-control).
product-catalog-migration-commerce
Use when migrating product catalog data into Salesforce B2B Commerce — covers category hierarchy, product attributes, images, pricing, and variant structure using the Commerce Import API. NOT for CPQ product catalog migration, post-migration catalog configuration, or commerce catalog taxonomy planning.