Skip to main content
Card class: Non-HeroCategory: Ecommerce Platform

At a glance

Gross margin percentage per brand (brand_id) over the trailing 30 days. The category-grouping companion to BC Product Margin. Most BC stores carry multiple brands (own-label plus 5-30 reseller brands); margin per brand reveals which brands carry the business and which are vanity SKUs that look like revenue contributors but bleed margin. For BC stores with B2B Edition reselling distributor brands, margin-by-brand is the most-watched profitability decomposition.
What it counts(SUM(line_revenue) - SUM(line_cost)) / SUM(line_revenue) * 100 GROUP BY brand_id over the trailing 30 days. Cost from cost_price field in BC catalogue (manually configured per SKU); revenue from line items (excluding shipping).
API endpointGET /v3/catalog/products for cost_price per SKU; GET /v2/orders/{id}/products for line revenue. The OpenSearch index materialises per-brand-per-day cost and revenue.
VAT / tax treatmentWe use total_ex_tax for the revenue side (margin should be computed pre-tax).
ShippingExcluded; shipping doesn’t have a brand attribution.
DiscountsDeducted from revenue side; cost remains the same, so margin contracts during promo periods.
RefundsNot deducted from revenue; the original margin captures still appear.
Cancelled ordersExcluded.
Incomplete ordersExcluded.
CurrencyMulti-currency aggregated using daily FX. Cost is in the merchant’s primary currency by convention; if you stock cost values in mixed currencies, configure under Settings → Cost handling.
ChannelsAll channels included by default. Per-channel margin would be valuable for B2B-vs-DTC comparison; configure per-channel filter under Settings → Margin scope.
B2B Edition behaviourB2B price-list orders typically have lower margin (wholesale price < retail price). A brand whose margin drops on B2B Edition activation is being sold at proper wholesale margin; that’s healthy. The card surfaces the B2B vs DTC margin gap per brand.
Cost data qualitycost_price is merchant-maintained in BC; if it’s not populated, margin reads 100% (revenue with zero cost). Always verify cost_price populated for all SKUs before treating this card as authoritative. The card flags brands with low cost-data coverage.
Discount allocationCart-level discounts are pro-rated across line items; the brand whose SKU got more line discount carries more of the margin hit.
Time window30D rolling.
Alert triggerNone on this card; pairs with BC Product Margin gauge alarm.
Rolesowner

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 US specialty foods retailer on BigCommerce Pro carrying their own brand “MerchantOwn” plus 8 reseller brands. B2B Edition active with wholesale customers (cafes, restaurants). Snapshot for 1 Apr to 30 Apr 26.
BrandRevenueCostMargin %DTC marginB2B margin
MerchantOwn (own label)$138,400$48,44065.0%67%58%
BrandA (premium reseller)$82,200$43,56047.0%49%38%
BrandB (mid reseller)$52,800$32,15039.1%42%30%
BrandC (commodity reseller)$38,400$28,56025.6%28%18%
BrandD (volume / promo)$24,200$19,42019.8%21%14%
BrandE-H$18,000$13,20026.7%28%22%
Headline$354,000$185,33047.7%
What’s interesting:
  1. Own-label MerchantOwn at 65% margin carries the business. It’s 39% of revenue but contributes 53% of gross margin dollars. Almost every BC store with own-label SKUs sees this pattern: own-label margin is structurally 15-25 percentage points higher than reseller margin because the merchant captures the manufacturer’s margin too. Strategic implication: invest in own-label SKU expansion.
  2. BrandD at 19.8% is the margin drag. 24,200revenuebutonly24,200 revenue but only 4,780 gross margin contribution. This brand is being sold mostly through promotional discount; the merchant runs frequent BrandD coupons to attract bargain-hunters. The question: is BrandD attracting customers who later buy higher-margin SKUs (acquisition value), or just bargain-hunters who never come back (margin bleed)? Cross-reference with BC Channel Repeat Rate per-brand if your CRM supports it.
  3. B2B margin is 8-10pp lower than DTC across all brands. This is the structural wholesale discount. A merchant whose DTC margin is 50% will see B2B margin around 40%. The right read: are you covering your B2B operating cost (sales rep, terms, support) on the lower margin? A 40% gross with 5% operating = 35% net is healthy; with 10% operating = 30% net needs pricing review.
  4. BrandC at 25.6% is below the merchant’s 35% target floor. This is the line below which a brand should be re-priced or de-listed. Investigation: is the cost competitive (supplier negotiation), is the price competitive (market check), or is the discount layer too aggressive (promo cycle audit)?
  5. Cost-data coverage: 4 of 9 brands had complete cost_price data; 5 partial. The card flagged the partial-cost brands as low-confidence; the merchant ran a cost-data audit before treating the numbers as authoritative.
Action priority order:
  1. Audit cost-data coverage first. Margin computation depends on cost_price being populated for every SKU in the brand. Brands with low coverage produce misleading margin reads.
  2. Identify margin-leaders to invest in. Own-label and high-margin reseller brands deserve more shelf-space and ad spend.
  3. Identify margin-laggards below your category floor. Re-price, renegotiate cost, or de-list.
  4. Compute DTC vs B2B margin per brand. B2B should be 8-12pp below DTC; a wider gap suggests over-discounting B2B.
  5. Pair with BC Revenue by Brand for the volume context.

Sibling cards merchants should reference together

CardWhy pair it with Margin by Brand
BC Product MarginThe store-wide gauge; this card is brand decomposition.
BC Revenue by BrandVolume context; high-margin brands need volume to matter.
BC Top CouponsPromo cycles compress per-brand margin.
BC AOV with/without DiscountDiscount density’s margin impact per brand.
BC Channel Top ProductsSurfaces which SKUs drive each brand’s margin.
BC Revenue by CategoryCategory-vs-brand margin comparison.
Total RevenueHeadline revenue context.
BC Top SKUs RevenueHero-SKU margin verification.

Reconciling against the vendor’s own dashboard

Where to look in BigCommerce Control Panel: Reports → Sales (Plus / Pro / Enterprise) shows revenue by brand but doesn’t natively compute margin (cost data isn’t always integrated into the reports surface). For per-product cost: Products → individual product → Identifiers shows the cost_price field. BC does not natively roll cost up to brand-level margin. Why our margin may differ from BC reports / accounting:
ReasonDirection
Cost data freshness. We use whatever cost_price is currently in BC; if costs increased and BC wasn’t updated, we read stale.Vortex IQ HIGHER margin (using stale low cost)
VAT / tax handling. We use ex-tax revenue; BC’s reports in some plan tiers use inc-tax.Vortex IQ MARGIN MATCHES if both ex-tax
Refund treatment. We don’t deduct refunds; if you do post-fact, your accounting margin will be lower.Vortex IQ HIGHER (gross margin)
Currency conversion. We use daily FX; accounting may use month-end fixed rates.Sub-1% gap
Bundle costs. Bundle parent SKU cost vs component cost handling differs across systems.Either direction
Cancelled-order impact. We exclude cancelled; accounting may include reversal entries.Vortex IQ HIGHER margin
Cross-connector reconciliation (when accounting integrations are connected):
CardExpected relationshipWhat causes legitimate divergence
netsuite.netsuite_brand_marginNetSuite’s GL-grounded margin should match within 1-3%NetSuite uses costing method (FIFO, weighted avg); BC’s cost_price is point-in-time.
quickbooks.qb_cogs_by_brandQuickBooks COGS per brand correlates stronglyQuickBooks accrues COGS at fulfilment; we attribute at order. Timing differences.
shipbob.sb_cost_per_brandShipBob’s per-brand fulfilment cost adds to COGSShipBob’s fulfilment cost isn’t in cost_price; it should be in landed-cost. Configure landed-cost mode if your books include 3PL fees.
The margin-by-brand view is BC-aligned with similar cards on Shopify (per vendor) and Adobe Commerce (per manufacturer); merchant-facing semantics are equivalent though Adobe’s manufacturer attribute is less consistently used.

Known limitations / merchant FAQs

My margin reads 100% on a brand. Is the brand margin really 100%? Almost certainly not. The most common cause is missing cost_price data: BC defaults the field to zero, so revenue minus zero cost equals 100% margin. Audit the brand’s SKUs in BC catalogue for cost_price population. The card flags brands with low cost-data coverage; treat them as not-yet-trustworthy until cost is populated. Why is my B2B margin 8-10pp lower than DTC for every brand? Wholesale pricing is structurally below retail. The B2B price-list discount pulls revenue down while cost stays the same, compressing margin. The healthy gap is 8-12pp; below that means you may be under-discounting B2B (good for margin, bad for B2B competitiveness); above means over-discounting (bleed). Should I include shipping in margin? Generally no. Shipping is collected from customer at one rate and paid to carriers at another; the gap (positive or negative) is shipping margin, not product margin. We exclude shipping from this card; for total-margin-with-shipping use Total Revenue minus Total Cost. My own-label margin reads 65% but accounting says 58%. Why the gap? Likely accounting deducts (a) inbound freight to your warehouse, (b) duty / tariffs, (c) inspection / QC labour. We use BC’s cost_price which is typically per-unit landed cost, but some merchants populate it with FOB cost only. For accurate own-label margin, populate cost_price with full landed cost (manufacturer + freight + duty). My BrandD margin is 19.8% but I run 30%-off promos. Should I do the math myself? The card already does it. Discount-applied revenue is the numerator; cost stays full. So a brand with 30% sticker discount and 50% sticker margin reads ~28% margin (50% - 30%/65% = ~28% post-discount margin). The card does this calculation for you; trust it. My multi-storefront BC instance has different prices per storefront. Does the card aggregate? By default yes, you see store-wide brand margin. For per-storefront margin (UK premium pricing vs US discount pricing), use the storefront filter. Configure under Settings → Storefront filter. Why do bundles show weird margin? Bundle parent SKUs vs component SKUs handle cost differently. Bundle parent typically has its own cost_price (sum of components) but BC sometimes leaves it null. Configure under Settings → Bundle treatment → Component-summed if your bundles use the parent-cost approach. Can I see margin trend over time? Yes, switch from snapshot to trend view at the top of the card. Trend shows 90-day margin per brand; useful for catching margin compression that builds gradually (a creeping 1-2pp/month decline that’s invisible on point reads). My alert threshold is “<35% (margin pressure)”. What about brands that are structurally below 35%? Configure per-brand thresholds. Commodity brands at 25% margin are normal; the alert triggering on them is noise. Set per-brand floors under Settings → Alerts → Brand floor; the alert fires when a brand drops below ITS specific floor, not the universal 35%. Should I de-list brands below 25% margin? Maybe, but check acquisition value first. A 20%-margin brand that brings in customers who later buy 60%-margin own-label items has acquisition value beyond direct margin. Cross-reference customer LTV per first-purchased-brand to see whether low-margin brands have the customer-acquisition halo effect.

Tracked live in Vortex IQ Nerve Centre

Margin by Brand is one of hundreds of KPI pulses Vortex IQ tracks across BigCommerce and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.