Weekly P&L

Aggregated Weekly Performance (Sales + Ads).

Heatmap

Visual comparison of weekly metrics across products.

Analytics

Monthly trends, distribution, and comparison tables.

[[ filteredData.length ]] / [[ total ]]
Click column headers to sort. Data aggregated from orders.

Loading P&L dashboard metrics...

Computing YoY comparison figures, sales ranks, and PPC details

[[ mObj.name ]]
Week [[ sortDir === 'asc' ? '▲' : '▼' ]] ASIN [[ sortDir === 'asc' ? '▲' : '▼' ]] Ads Ads / Day Units [[ sortDir === 'asc' ? '▲' : '▼' ]] Units / Day Ads / Unit Sold Ads Clicks CVR (PPC) BSR Profit Revenue Price / Unit Tacos %
[[ r.date ]]
[[ r.date_to ]]
[[ r.asin ]] [[ getCurrencyPrefix(r.currency) ]][[ r.ad_spend.toFixed(2) ]] ([[ getCurrencyPrefix(r.currency) ]][[ r.ad_spend_1y.toFixed(2) ]]) [[ getCurrencyPrefix(r.currency) ]][[ r.ads_per_day.toFixed(2) ]] [[ formatInteger(r.units_ordered) ]] ([[ formatInteger(r.units_ordered_1y) ]]) [[ r.units_per_day.toFixed(1) ]] [[ getCurrencyPrefix(r.currency) ]][[ r.cpa.toFixed(2) ]] [[ r.ad_units ]] [[ formatInteger(r.clicks) ]] ([[ formatInteger(r.clicks_1y) ]]) [[ r.clicks > 0 ? (r.cvr_ppc).toFixed(2) + '%' : '-' ]] [[ r.bsr ? formatInteger(r.bsr) : '-' ]] ([[ formatInteger(r.bsr_1y) ]]) [[ getCurrencyPrefix(r.marketplace === 'US' ? 'USD' : 'EUR') ]][[ r.profit.toFixed(0) ]] ([[ getCurrencyPrefix(r.marketplace === 'US' ? 'USD' : 'EUR') ]][[ r.profit_1y.toFixed(0) ]]) - [[ getCurrencyPrefix(r.currency) ]][[ r.ordered_product_sales.toFixed(0) ]] ([[ getCurrencyPrefix(r.currency) ]][[ r.ordered_product_sales_1y.toFixed(0) ]]) [[ getCurrencyPrefix(r.currency) ]][[ r.price_per_unit.toFixed(2) ]] ([[ getCurrencyPrefix(r.currency) ]][[ r.price_per_unit_1y.toFixed(2) ]]) [[ r.tacos.toFixed(2) ]]%
SUM [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ad_spend.toFixed(2) ]] ([[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ad_spend_1y.toFixed(2) ]]) [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ads_per_day.toFixed(2) ]] [[ formatInteger(mObj.totals.units_ordered) ]] ([[ formatInteger(mObj.totals.units_ordered_1y) ]]) [[ mObj.totals.units_per_day.toFixed(1) ]] [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.cpa.toFixed(2) ]] [[ mObj.totals.ad_units ]] [[ formatInteger(mObj.totals.clicks) ]] ([[ formatInteger(mObj.totals.clicks_1y) ]]) [[ mObj.totals.clicks > 0 ? (mObj.totals.cvr_ppc).toFixed(2) + '%' : '-' ]] [[ mObj.totals.bsr ? formatInteger(mObj.totals.bsr) : '-' ]] ([[ formatInteger(mObj.totals.bsr_1y) ]]) [[ getCurrencyPrefix(mObj.name === 'US' ? 'USD' : 'EUR') ]][[ mObj.totals.profit.toFixed(0) ]] ([[ getCurrencyPrefix(mObj.name === 'US' ? 'USD' : 'EUR') ]][[ mObj.totals.profit_1y.toFixed(0) ]]) [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ordered_product_sales.toFixed(0) ]] ([[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ordered_product_sales_1y.toFixed(0) ]]) [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.price_per_unit.toFixed(2) ]] ([[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.price_per_unit_1y.toFixed(2) ]]) [[ mObj.totals.tacos.toFixed(2) ]]%
RATIOS Org: [[ mObj.totals.organic_pct.toFixed(0) ]]% | Paid: [[ mObj.totals.paid_pct.toFixed(0) ]]% Margin: [[ mObj.totals.margin.toFixed(1) ]]% ACOS: [[ mObj.totals.acos.toFixed(1) ]]% TACOS: [[ mObj.totals.tacos.toFixed(1) ]]%

[[ pGroup.title ]] ([[ pGroup.items.length ]] [[ pGroup.items.length === 1 ? 'ASIN' : 'ASINs' ]]) ([[ pGroup.asin ]])

[[ mObj.name ]]
Week Ads A/D Units U/D CPA Sold Ads Clicks CVR (PPC) BSR Profit Rev Price/U Tacos
[[ r.date.substring(8) ]] [[ getCurrencyPrefix(r.currency) ]][[ r.ad_spend.toFixed(0) ]] ([[ getCurrencyPrefix(r.currency) ]][[ r.ad_spend_1y.toFixed(0) ]])

Ad Spend Breakdown

SP (Products) [[ getCurrencyPrefix(r.currency) ]][[ (r.ad_spend_sp || 0).toFixed(0) ]]
SB + SD [[ getCurrencyPrefix(r.currency) ]][[ (r.ad_spend_sbsd || 0).toFixed(0) ]]
Coupons [[ getCurrencyPrefix(r.currency) ]][[ r.coupon_discount.toFixed(0) ]]

Total [[ getCurrencyPrefix(r.currency) ]][[ r.ad_spend.toFixed(0) ]]

SP = Sponsored Products | SB = Brands | SD = Display | Coupons = discount cost

[[ getCurrencyPrefix(r.currency) ]][[ r.ads_per_day.toFixed(1) ]] [[ formatInteger(r.units_ordered) ]] ([[ formatInteger(r.units_ordered_1y) ]]) [[ r.units_per_day.toFixed(1) ]] [[ getCurrencyPrefix(r.currency) ]][[ r.cpa.toFixed(1) ]] [[ r.ad_units ]] [[ formatInteger(r.clicks) ]] ([[ formatInteger(r.clicks_1y) ]]) [[ r.clicks > 0 ? (r.cvr_ppc).toFixed(1) + '%' : '-' ]] [[ r.bsr ? formatInteger(r.bsr) : '-' ]] ([[ formatInteger(r.bsr_1y) ]]) [[ getCurrencyPrefix(r.marketplace === 'US' ? 'USD' : 'EUR') ]][[ r.profit.toFixed(0) ]] ([[ getCurrencyPrefix(r.marketplace === 'US' ? 'USD' : 'EUR') ]][[ r.profit_1y.toFixed(0) ]]) -

Profit Breakdown ([[ r._breakdown.cur ]])

Revenue +[[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.revenue.toFixed(0) ]]
Referral ([[ (r._breakdown.referral_pct * 100).toFixed(1) ]]%) -[[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.referral.toFixed(0) ]]
FBA ([[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.fba_per_unit.toFixed(2) ]]/u × [[ r.units_ordered ]]) -[[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.fba.toFixed(0) ]]
COGS ([[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.cogs_per_unit.toFixed(2) ]]/u × [[ r.units_ordered ]]) -[[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.cogs.toFixed(0) ]]
Tax/VAT ([[ (r._breakdown.tax_pct * 100).toFixed(1) ]]% of gross) -[[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.tax.toFixed(0) ]]
Ad Spend (incl. coupons) -[[ getCurrencyPrefix(r._breakdown.cur) ]][[ r._breakdown.ads.toFixed(0) ]]

Net Profit [[ getCurrencyPrefix(r._breakdown.cur) ]][[ r.profit.toFixed(0) ]]

Margin: [[ r._breakdown.revenue > 0 ? (r.profit / r._breakdown.revenue * 100).toFixed(1) : '0' ]]%

[[ getCurrencyPrefix(r.currency) ]][[ r.ordered_product_sales.toFixed(0) ]] ([[ getCurrencyPrefix(r.currency) ]][[ r.ordered_product_sales_1y.toFixed(0) ]]) [[ getCurrencyPrefix(r.currency) ]][[ r.price_per_unit.toFixed(2) ]] ([[ getCurrencyPrefix(r.currency) ]][[ r.price_per_unit_1y.toFixed(2) ]]) [[ r.tacos.toFixed(1) ]]%
SUM [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ad_spend.toFixed(0) ]] ([[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ad_spend_1y.toFixed(0) ]]) [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ads_per_day.toFixed(1) ]] [[ formatInteger(mObj.totals.units_ordered) ]] ([[ formatInteger(mObj.totals.units_ordered_1y) ]]) [[ mObj.totals.units_per_day.toFixed(1) ]] [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.cpa.toFixed(1) ]] [[ mObj.totals.ad_units ]] [[ formatInteger(mObj.totals.clicks) ]] ([[ formatInteger(mObj.totals.clicks_1y) ]]) [[ mObj.totals.clicks > 0 ? (mObj.totals.cvr_ppc).toFixed(1) + '%' : '-' ]] [[ mObj.totals.bsr ? formatInteger(mObj.totals.bsr) : '-' ]] ([[ formatInteger(mObj.totals.bsr_1y) ]]) [[ getCurrencyPrefix(mObj.rows[0].marketplace === 'US' ? 'USD' : 'EUR') ]][[ mObj.totals.profit.toFixed(0) ]] ([[ getCurrencyPrefix(mObj.rows[0].marketplace === 'US' ? 'USD' : 'EUR') ]][[ mObj.totals.profit_1y.toFixed(0) ]]) [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ordered_product_sales.toFixed(0) ]] ([[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.ordered_product_sales_1y.toFixed(0) ]]) [[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.price_per_unit.toFixed(2) ]] ([[ getCurrencyPrefix(mObj.rows[0].currency) ]][[ mObj.totals.price_per_unit_1y.toFixed(2) ]]) [[ mObj.totals.tacos.toFixed(1) ]]%
RATIOS Org: [[ mObj.totals.organic_pct.toFixed(0) ]]% / Paid: [[ mObj.totals.paid_pct.toFixed(0) ]]% Margin: [[ mObj.totals.margin.toFixed(0) ]]% ACOS: [[ mObj.totals.acos.toFixed(0) ]]% TACOS: [[ mObj.totals.tacos.toFixed(0) ]]%

Calculating heatmap metrics...

[[ hmMetricLabel ]] · [[ hmCompareLabel ]] · [[ hmShowBy === 'product' ? 'products' : 'marketplaces' ]] · [[ hmMarketFilter || 'all markets' ]] · [[ filterMonth || 'current month' ]]
[[ hmShowBy === 'product' ? 'Product' : 'Market' ]] [[ hmSortArrow('name') ]] [[ col.label ]] [[ hmSortArrow('c'+ci) ]] Avg/Week [[ hmSortArrow('avg') ]]
[[ row.label ]] [[ cell.v1 ]] [[ cell.v2 ]] [[ cell.v3 ]] [[ row.avgFmt ]] [[ row.n ]]-wk avg total [[ row.totalFmt ]]

No data for heatmap. Select a month and ensure product groups are loaded.

Good Problem Watch New Base / No data
Each cell: value · %Δ · absolute Δ. BSR = lower is better. TACOS = lower is better.

Monthly Trend

Month [[ f.name ]]
[[ m.name ]] [[ formatDollar(m.profits[f.id]) ]] ([[ m.proportions[f.id].toFixed(1) ]]%)
[[ formatDollar(m.priorProfits[f.id]) ]]
SUM (Yearly) [[ formatDollar(profitTableData.yearlyProfits[f.id]) ]] ([[ profitTableData.yearlyProportions[f.id].toFixed(1) ]]%)
[[ formatDollar(profitTableData.yearlyPriorProfits[f.id]) ]]
Each market's profit is net of its brand-wide ad spend (BRAND portfolios), [[ formatDollar(profitTableData.brandTotal) ]] in [[ profitYear ]]: · [[ mkt ]] [[ formatDollar(v) ]]

Distribution

[[ pieViewBy === 'marketplace' ? 'Market' : 'Family' ]] Total Share
[[ f.name ]] [[ formatDollar(pieChartData.values[f.id]) ]] [[ pieChartData.proportions[f.id].toFixed(1) ]]%
Brand ads (in slices) −[[ formatDollar(pieChartData.brandAds) ]]
Net total [[ formatDollar(pieChartData.netTotal) ]]
No data available for the selected period.

Comparison

[[ cmpData.leftLabel ]] LIVE [[ cmpData.rightLabel ]]
Units U/Day Avg Price Profit U/Day Profit Units U/Day Avg Price Profit
[[ f.abbr || f.name ]] [[ cmpData.left[f.id].total ]] [[ cmpData.left[f.id].perDay.toFixed(1) ]] [[ cmpData.left[f.id].avg.toFixed(1) ]] [[ cmpData.currencySymbol ]][[ formatPivotMoney(cmpData.left[f.id].profit) ]] [[ cmpData.live[f.id].perDay.toFixed(1) ]] [[ cmpData.currencySymbol ]][[ formatPivotMoney(cmpData.live[f.id].profit) ]] [[ cmpData.right[f.id].total ]] [[ cmpData.right[f.id].perDay.toFixed(1) ]] [[ cmpData.right[f.id].avg.toFixed(1) ]] [[ cmpData.currencySymbol ]][[ formatPivotMoney(cmpData.right[f.id].profit) ]] [[ f.abbr || f.name ]]
SUM [[ cmpData.sumLeft.total ]] [[ cmpData.sumLeft.perDay.toFixed(1) ]] [[ cmpData.sumLeft.avg.toFixed(1) ]] [[ cmpData.currencySymbol ]][[ formatPivotMoney(cmpData.sumLeft.profit) ]] [[ cmpData.sumLive.perDay.toFixed(1) ]] [[ cmpData.currencySymbol ]][[ formatPivotMoney(cmpData.sumLive.profit) ]] [[ cmpData.sumRight.total ]] [[ cmpData.sumRight.perDay.toFixed(1) ]] [[ cmpData.sumRight.avg.toFixed(1) ]] [[ cmpData.currencySymbol ]][[ formatPivotMoney(cmpData.sumRight.profit) ]] SUM
U/Day = avg units sold per day (open periods counted up to today) · Avg Price = revenue / units (native currency) · LIVE = current month to date · Timeframes align to whole months (data is week-of-month grain)
No data for the selected periods.

Year-over-Year Monthly Trend

Monthly Weekly Summary

BY WEEK WEEK 1 WEEK 2 WEEK 3 WEEK 4 SUM
UNITS [[ formatPivotMoney(pivot3Data.weeks[w-1].units) ]] ([[ formatPivotMoney(pivot3Data.prior.weeks[w-1].units) ]]) [[ formatPivotMoney(pivot3Data.sum.units) ]] ([[ formatPivotMoney(pivot3Data.prior.sum.units) ]])
UNITS/DAY [[ pivot3Data.weeks[w-1].unitsDays > 0 ? (pivot3Data.weeks[w-1].units / pivot3Data.weeks[w-1].unitsDays).toFixed(1) : '0' ]] ([[ pivot3Data.prior.weeks[w-1].unitsDays > 0 ? (pivot3Data.prior.weeks[w-1].units / pivot3Data.prior.weeks[w-1].unitsDays).toFixed(1) : '0' ]]) [[ pivot3Data.sum.unitsDays > 0 ? (pivot3Data.sum.units / pivot3Data.sum.unitsDays).toFixed(1) : '0' ]] ([[ pivot3Data.prior.sum.unitsDays > 0 ? (pivot3Data.prior.sum.units / pivot3Data.prior.sum.unitsDays).toFixed(1) : '0' ]])
REVENUE [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.weeks[w-1].revenue) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.weeks[w-1].revenue) ]]) [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.sum.revenue) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.sum.revenue) ]]) €[[ formatPivotMoney(pivot3Data.sum.revenueEur) ]] (€[[ formatPivotMoney(pivot3Data.prior.sum.revenueEur) ]])
REVENUE/DAY [[ pivot3Data.symbol ]][[ pivot3Data.weeks[w-1].unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.weeks[w-1].revenue / pivot3Data.weeks[w-1].unitsDays)) : '0' ]] ([[ pivot3Data.symbol ]][[ pivot3Data.prior.weeks[w-1].unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.prior.weeks[w-1].revenue / pivot3Data.prior.weeks[w-1].unitsDays)) : '0' ]]) [[ pivot3Data.symbol ]][[ pivot3Data.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.sum.revenue / pivot3Data.sum.unitsDays)) : '0' ]] ([[ pivot3Data.symbol ]][[ pivot3Data.prior.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.prior.sum.revenue / pivot3Data.prior.sum.unitsDays)) : '0' ]]) €[[ pivot3Data.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.sum.revenueEur / pivot3Data.sum.unitsDays)) : '0' ]] (€[[ pivot3Data.prior.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.prior.sum.revenueEur / pivot3Data.prior.sum.unitsDays)) : '0' ]])
PROFIT [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.weeks[w-1].profit) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.weeks[w-1].profit) ]]) [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.sum.profit) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.sum.profit) ]]) €[[ formatPivotMoney(pivot3Data.sum.profitEur) ]] (€[[ formatPivotMoney(pivot3Data.prior.sum.profitEur) ]])
PROFIT/DAY [[ pivot3Data.symbol ]][[ pivot3Data.weeks[w-1].unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.weeks[w-1].profit / pivot3Data.weeks[w-1].unitsDays)) : '0' ]] ([[ pivot3Data.symbol ]][[ pivot3Data.prior.weeks[w-1].unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.prior.weeks[w-1].profit / pivot3Data.prior.weeks[w-1].unitsDays)) : '0' ]]) [[ pivot3Data.symbol ]][[ pivot3Data.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.sum.profit / pivot3Data.sum.unitsDays)) : '0' ]] ([[ pivot3Data.symbol ]][[ pivot3Data.prior.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.prior.sum.profit / pivot3Data.prior.sum.unitsDays)) : '0' ]]) €[[ pivot3Data.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.sum.profitEur / pivot3Data.sum.unitsDays)) : '0' ]] (€[[ pivot3Data.prior.sum.unitsDays > 0 ? formatPivotMoney(Math.round(pivot3Data.prior.sum.profitEur / pivot3Data.prior.sum.unitsDays)) : '0' ]])
ADS SPENT [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.weeks[w-1].adSpend) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.weeks[w-1].adSpend) ]]) [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.sum.adSpend) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.sum.adSpend) ]]) €[[ formatPivotMoney(pivot3Data.sum.adSpendEur) ]] (€[[ formatPivotMoney(pivot3Data.prior.sum.adSpendEur) ]])
BRAND ADS [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.weeks[w-1].brandAds) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.weeks[w-1].brandAds) ]]) [[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.sum.brandAds) ]] ([[ pivot3Data.symbol ]][[ formatPivotMoney(pivot3Data.prior.sum.brandAds) ]]) €[[ formatPivotMoney(pivot3Data.sum.brandAdsEur) ]] (€[[ formatPivotMoney(pivot3Data.prior.sum.brandAdsEur) ]])
MARGIN [[ pivot3Data.weeks[w-1].revenue > 0 ? pivot3Data.weeks[w-1].margin.toFixed(2) + '%' : '-' ]] ([[ pivot3Data.prior.weeks[w-1].revenue > 0 ? pivot3Data.prior.weeks[w-1].margin.toFixed(2) + '%' : '-' ]]) [[ pivot3Data.sum.revenue > 0 ? pivot3Data.sum.margin.toFixed(2) + '%' : '-' ]] ([[ pivot3Data.prior.sum.revenue > 0 ? pivot3Data.prior.sum.margin.toFixed(2) + '%' : '-' ]])
No data available for the selected period.
Week 1: Day 1-7 · Week 2: Day 8-14 · Week 3: Day 15-21 · Week 4: Day 22-End PROFIT is net of BRAND ADS € column shows USD→EUR conversion

Marketplace Breakdown

METRIC [[ mkt ]] SUM
[[ row.label ]] [[ row.fmt(row.values[mkt]) ]] ([[ row.fmt(pivot4Data.prior.rows[row.idx].values[mkt]) ]]) [[ row.fmt(row.sumVal) ]] ([[ row.fmt(pivot4Data.prior.rows[row.idx].sumVal) ]])
No data available for the selected period.

Marketplace Weekly

METRIC [[ col.label ]]
[[ row.label ]] [[ row.fmt(row.values[ci]) ]]
No data available for the selected period.
All values in USD. Week 1: day 1-7 · Week 2: 8-14 · Week 3: 15-21 · Week 4: 22-end. Arrows compare each week vs the previous week.

No data found.