At a glance
Total revenue split by the brand field on each catalogue product, ranked descending. The card multi-brand BC merchants live in, for retailers stocking 20+ brands (homewares, beauty, sporting goods, B2B distributors), brand-level revenue is the primary unit of merchandising decision-making.
| What it counts | SUM(line_item.total_inc_tax) GROUP BY product.brand_id over the period. Each line item’s revenue is attributed to the parent product’s brand; mixed-brand orders contribute to multiple brand totals. Products with brand_id = 0 (no brand assigned) roll up into a synthetic “Unbranded” bucket. |
| VAT / tax treatment | Tax-inclusive (total_inc_tax). Same convention as Total Revenue. |
| Shipping | Excluded at the line-item level. Shipping is order-level in BC, not brand-attributable. The store-wide Total Revenue includes shipping; this card sums only the goods revenue, so the brand totals will sum to less than store revenue by the shipping amount. |
| Discounts | Deducted at the line-item level. Order-level coupons (e.g. “10% off entire order”) are pro-rated across line items by their pre-discount value. |
| Refunds | Not deducted (gross revenue view). For net brand revenue, pair with Refund Value and the brand-level refund split. |
| Cancelled / voided orders | Included if the order was created in the window. Use the financial-status filter to exclude voids if you want the realised view. |
| Currency | Multi-currency without FX conversion. A multi-currency BC store sees brand totals summed naively. Filter by currency for clean per-currency comparisons. |
| Channels / sources | All channels contribute. Web, POS, marketplaces, B2B portal. The brand attribution is product-side (catalogue), so it works identically across all channels. |
| Brand-attribution gotcha | BC’s brand_id is set on the product, not the line item. If you change a product’s brand assignment mid-period (e.g. a private-label SKU gets re-tagged), historical revenue is re-attributed to the new brand on the next index sync. Don’t bulk-edit brand assignments without first exporting historical brand revenue, the historical view will rewrite. |
| B2B Edition note | B2B portal customers often see different brands than retail (e.g. a wholesale-only line). The brand totals here include all channels’ revenue; for B2B-only brand revenue, filter to the B2B channel. |
| Time window | 30D (rolling 30 days, vs prior 30 day comparison) |
| Alert trigger | None on this card directly. Pair with BC Alert Revenue Drop for store-wide drop alerts; add a brand filter manually for brand-specific alerting. |
| Roles | owner, marketing |
Calculation
Calculated automatically from your BigCommerce data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK homewares retailer on BigCommerce Pro stocking 18 brands. 30-day window 14 Apr 26 to 14 May 26.| Rank | Brand | Revenue | Share | vs prior 30d | Verdict |
|---|---|---|---|---|---|
| 1 | ”Linen & Co.” | £142,800 | 28.4% | +12.1% | Hero brand, growing |
| 2 | ”Hammond Home” | £88,420 | 17.6% | -3.4% | Stable second tier |
| 3 | ”Maple Avenue” (own brand) | £74,210 | 14.8% | +28.2% | Surging, investigate |
| 4 | ”Norwich Linen” | £52,900 | 10.5% | -19.3% | Falling, investigate |
| 5 | ”Brighton Bath” | £38,140 | 7.6% | +4.1% | Stable |
| 6-10 | (5 mid-tier brands) | £74,500 | 14.8% | mixed | Long tail |
| 11-18 | (8 tail brands) | £30,400 | 6.1% | mixed | Tail |
| Unbranded | (no brand assigned) | £1,310 | 0.3% | n/a | Catalogue gap, fix |
| Total | £502,680 | 100% | +5.2% overall |
- The top-3 brands carry 60.8% of revenue. That’s a healthy “Pareto” distribution for multi-brand BC stores; concentration above 75% in top-3 signals brand-supplier risk (one supplier dispute and a third of revenue evaporates). Concentration below 40% signals lack of merchandising focus.
- Maple Avenue’s +28% surge is the most actionable signal. Own-brand growth at this rate, especially with healthy margins (own-brand typically carries 50-65% gross margin vs 30-40% for third-party), is exactly what BC Pro retailers should be optimising for. Action: increase own-brand marketing spend, expand Maple Avenue’s catalogue depth, prioritise its placement in collections.
- Norwich Linen’s -19% drop is the second priority. Investigate: did inventory go OOS (cross-check BC Channel OOS per Channel)? Did a key SKU get delisted? Did the supplier raise prices and the merchant pause re-buying? A 19% drop on the #4 brand is £10k of monthly revenue; worth a 30-minute audit.
- The “Unbranded” bucket at £1,310 is a catalogue-hygiene problem. Products without a
brand_idare typically (a) recently uploaded items the merchandiser forgot to tag, or (b) deprecated own-brand items where the brand was deleted. Action: filter Products → View by brand=none and assign correctly; this also improves on-site brand-filter UX. - The tail (8 brands at 6.1% combined) is a focus question. These brands cost storage, supplier-management overhead, and merchandising attention. Either (a) cut the bottom-3 to free up working capital, or (b) commit to growing the most strategic of them. Don’t drift in the middle, low-revenue brands that linger drain margin from the top performers.
- Investigate Norwich Linen drop today. 30-minute root-cause check.
- Plan a Maple Avenue expansion this week, brief merchandising and marketing teams.
- Audit and fix the Unbranded bucket this week, 1-2 hour catalogue task.
- Quarterly: review the bottom-3 brands for cut-or-commit decision.
- Set per-brand revenue alerts via Vortex Mind for any brand >5% of revenue dropping >15% week-over-week.
Sibling cards merchants should reference together
| Card | Why pair it with Revenue by Brand |
|---|---|
| BC Margin by Brand | Revenue is only half the story. A brand with high revenue and low margin (typical for premium third-party brands at distributor pricing) deserves different attention than a high-revenue / high-margin own brand. |
| BC Revenue by Category | The orthogonal cut. Brand × category cross-tabs reveal where to expand (a strong brand under-represented in a hot category) or contract (a weak brand bloating a tail category). |
| Total Revenue | The denominator. The brand totals here sum to less than store revenue because shipping is excluded; this card explains the goods-revenue split. |
| BC Top SKUs Revenue | The SKU-level zoom. Drill into the top brand to see which SKUs drive its revenue. |
| Products by Vendor | The vendor-side view (vendor ≠ brand on BC; a single vendor can supply multiple brands and vice versa). Useful for supplier consolidation analysis. |
| BC Revenue by Channel | Brand × channel cross-tabs reveal where each brand sells best (some brands index 2× on Amazon vs web; allocate marketplace inventory accordingly). |
| Refund Rate | A brand growing in revenue but with high refund rate is a quality crisis in the making. Cross-reference. |
shopify.products_by_vendor | Cross-platform peer (Shopify uses vendor instead of brand_id; semantically equivalent for brand attribution). |
Reconciling against the vendor’s own dashboard
Where to look in BigCommerce Control Panel: Analytics → Reports → Sales on Plus / Pro / Enterprise plans includes a “Sales by Brand” view. Pick the same date range; the totals should match within ±1-2% (rounding). For the source-of-truth catalogue assignments, Products → Brands lists every brand and its product count. For diagnosis on a specific brand: click the brand name in BC’s Brands view to see the products assigned to it. If a brand looks under-counted in this card, it’s almost always because newly-uploaded products haven’t had a brand assigned yet (the “Unbranded” bucket). Why our number may legitimately differ from BC:| Reason | Direction |
|---|---|
| Shipping exclusion. BC’s “Sales by Brand” report includes a pro-rated shipping allocation per brand; we exclude shipping entirely from brand totals. Our number runs ~5-10% lower than BC’s. | Vortex IQ LOWER |
| Brand reassignment mid-period. If a product was reassigned from Brand A to Brand B, BC’s report attributes orders to whichever brand was assigned at order time; we attribute to the current brand assignment on next index sync. | Either direction |
| Refunds. Some BC plans show net-of-refunds in the Sales by Brand view; this card is gross. | BC LOWER if BC view is netted |
Custom-fields-based brand. Some BC stores use a custom field rather than brand_id for brand. We index brand_id only; custom-field brand assignments are invisible to this card. Configure your BC catalogue to use the native brand field. | Vortex IQ may MISS brands |
| Time-zone and boundary days. BC reports use store time zone; this card uses UTC for the rolling 30-day window. | Boundary-day differences |
| Multi-currency. BC’s report converts to store currency; we don’t FX-convert. Multi-currency stores will see materially different totals; filter by currency. | Either direction |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
google_ads.ga_revenue_by_brand_label | If you use brand-level ad campaigns and tag them with a brand custom label, ad-attributed revenue per brand should track the brand-level revenue here, modulo attribution windows. | Ads attribution is multi-touch; this card is order-source-of-truth. Expect ±20% gap. |
google_analytics.ga_revenue_by_item_brand | GA4’s item_brand parameter on purchase events should match the brand totals here within ±15%. | GA4 misses 10-25% of orders to ad blockers / cookie rejection. |
amazon_sp.amazon_revenue_by_brand | The Amazon-channel slice of this card should match Amazon SP-API per-brand revenue within ±5%. | Amazon’s brand attribution uses Brand Registry; mismatches mean your BC brand assignments don’t match Amazon Brand Registry. |
products_by_vendor (semantically the brand split) and Adobe Commerce’s manufacturer attribute revenue split; the field shape differs but the merchant-facing semantics are equivalent.
Known limitations / merchant FAQs
My biggest brand has 60% of revenue, is that risky? Yes, depending on the brand. A 60% own-brand share is healthy concentration; it means you control supply, margin, and roadmap. A 60% third-party brand share is supplier risk; one supplier dispute, price hike, or stock-out and a third of revenue evaporates. Diversify away from third-party concentration above 40%. My “Unbranded” bucket is large, what’s wrong? Three common causes: (1) recently uploaded products without a brand assignment yet (fix in Products → bulk edit → assign brand); (2) a deleted brand left orphaned products (fix the same way); (3) the merchant uses a custom field for brand instead of BC’s nativebrand_id (configure the catalogue to use native; this card cannot index custom fields). The Unbranded bucket above 5% of revenue is a catalogue-hygiene problem worth fixing.
Why does my BC Sales by Brand report show different numbers?
Most commonly because BC’s report includes a pro-rated shipping allocation per brand; this card excludes shipping. Other reasons: brand reassignment mid-period, refund netting, time-zone differences, multi-currency FX. See the reconcile section above. The two views should agree to within ±10%; larger gaps signal a configuration mismatch.
A brand surged 50% week-over-week, real or noise?
Check the order count. A 50% revenue surge with stable order count means a high-value SKU shipped (a wholesale order, a B2B portal pickup, a viral premium item). A 50% surge with proportional order growth is genuine demand. For brands with <50 orders/month, week-over-week swings of 30-50% are within normal noise range; require multi-week trends before reacting.
Can I exclude my own brand from the third-party brand competition view?
Yes, the card supports filters on brand IDs. Configure a saved view “Third-party brands only” excluding your own brand IDs. This makes the relative competition between third-party suppliers clearer.
My BC catalogue uses categories instead of brands, can I still use this card?
Use BC Revenue by Category instead. Brand-based merchandising suits multi-supplier retailers (homewares, beauty, sporting goods); category-based merchandising suits single-brand stores (fashion DTC, niche own-brand). Use whichever matches your merchandising model.
Why does the brand revenue total differ from store revenue?
Two reasons: (1) shipping is excluded at the line-item level (line items have no shipping; shipping is order-level in BC); (2) the “Unbranded” bucket sweeps up products without a brand assignment but they still contribute to store revenue. The sum of brand revenue + Unbranded should equal store goods revenue (i.e. revenue excluding shipping); add shipping to reconcile to total store revenue.
Multi-currency BC store, how do I read this card?
Apply a currency filter. Without filtering, the card sums revenue across currencies naively, producing meaningless totals. With a currency filter (“show only USD orders”), the brand totals are clean and comparable. Set up one saved view per currency.
Should I cut a brand below X% of revenue?
Generally yes for brands below 1.5% of revenue with margin under 30%, the working capital tied up, the supplier relationship overhead, and the merchandising attention rarely justify the contribution. Exceptions: niche brands that draw specific customer cohorts (cult brands, exclusive partnerships) can be worth keeping for the audience even if the revenue is small. Cross-reference BC Margin by Brand before any cut decision.
My B2B portal sells different brands, can I see B2B-only brand revenue?
Yes. Filter the card to the B2B channel (channel_id = <your B2B portal id>). The B2B brand mix is usually different from retail (often skewing to high-volume practical brands rather than aspirational ones). Use the B2B-specific view for procurement-side decisions.
A brand grew 30% but its order count is flat, what changed?
AOV grew. Either (a) the merchant raised prices on a hero SKU; (b) customers shifted to higher-priced items within the brand (mix shift); (c) a B2B / wholesale order skewed the average. Cross-reference with BC Revenue by Category (within the brand) and BC Top SKUs for the brand to identify the mix-shift cause.