Proper Spreadsheets

Templates › Business

Etsy Seller Profit Tracker

Made for handmade and print-on-demand sellers.

Record every Etsy sale with fees, postage and materials, and see what each order and each item actually earns. The summary carries a chart that redraws itself as you type.

Of the 40 columns, you fill in 19 and the other 21 work themselves out, and all 14 figures on the summary do too. There is room for 1,260 rows of your own.

£4.99one payment, yours to keep

  • Opens in Excel, Google Sheets and Numbers
  • Delivered straight away
  • No macros, nothing to install
  • Change it free before you buy

Payment is handled by Stripe. Your card details go to them and never to us. Sales are final, which is why every tab, column and calculation is shown on this page first.

Already have a spreadsheet of your own? Check it for mistakes, free.

The workbook's summary and the table behind it
A row typed into the real file. Every figure that changes is the spreadsheet's own arithmetic. What the film shows, in order:
  1. A new row is typed into the Orders tab, one cell at a time, in the white cells a person fills in.
  2. The shaded cells in that row fill themselves in.
  3. The figures on the Summary tab change to include the new row.
  4. The chart, Profit by sales channel, redraws with it.
The chart, drawn from the totals in the table beside it. See it full size
Where you type, and the shaded columns that work themselves out. See it full size

Everything inside, before you pay

This is the whole design: every tab, every column and how each calculated one is worked out. White cells are yours to fill in; the shaded ones work themselves out and are locked so a formula cannot be overwritten by accident. There is room for 1,260 rows. Open any tab to see its columns.

Products

8 columns

Your items and what each one costs you to make. Ready for 200 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
Item NameType any text.
CategoryPick one: Jewellery, Prints, Candles, Ceramics, Textiles, Stationery or Other.
Listed PriceType an amount in £.
Material CostType an amount in £.
Make Time MinsRoughly how long one takes to make.Type a number.
Margin Per UnitFills itself in.

The Listed Price minus the Material Cost.

The formulaIF(OR(ISBLANK([list_price]),ISBLANK([material_cost])),"",ROUND([list_price]-[material_cost],2))
Margin PercentFills itself in.

Worked out from this row's Listed Price and Material Cost.

The formulaIF(OR(ISBLANK([list_price]),ISBLANK([material_cost])),"",IFERROR(([list_price]-[material_cost])/[list_price],0))
Still ListedTick it when it applies.

Orders

16 columns

One row per Etsy sale. Fill in what you charged and what it cost you, and the profit works itself out. Ready for 800 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
Order DateType a date.
Order NoType any text.
ItemPick one of the Item Name entries on Products.
Sales ChannelWhere the buyer came from, as best you can tell.Pick one: Etsy Search, Etsy Ads, Social Media, Repeat Buyer or Market Stall.
QtyType a number.
Item ChargedWhat the buyer paid for the goods, before postage.Type an amount in £.
Postage ChargedType an amount in £.
Postage CostStamps, label and packaging.Type an amount in £.
Etsy FeesListing, transaction, payment processing and any ads charge.Type an amount in £.
Materials CostLeave blank to use the Products tab cost times quantity.Type an amount in £.
Gross RevenueFills itself in.

Worked out from this row's Item Charged and Postage Charged.

The formulaIF(ISBLANK([item_charged]),"",ROUND([item_charged]+IF(ISBLANK([postage_charged]),0,[postage_charged]),2))
Total CostFills itself in.

Worked out from this row's Item Charged, Materials Cost, Item, Qty, Postage Cost and Etsy Fees, using Material Cost and Item Name on Products.

The formulaIF(ISBLANK([item_charged]),"",ROUND(IF(ISBLANK([materials_cost]),IFERROR(INDEX([Products!material_cost],MATCH([item_name],[Products!item_name],0)),0)*IF(ISBLANK([qty]),1,[qty]),[materials_cost])+IF(ISBLANK([postage_cost]),0,[postage_cost])+IF(ISBLANK([etsy_fees]),0,[etsy_fees]),2))
ProfitFills itself in.

Worked out from this row's Item Charged, Postage Charged, Materials Cost, Item, Qty, Postage Cost and Etsy Fees, using Material Cost and Item Name on Products.

The formulaIF(ISBLANK([item_charged]),"",ROUND([item_charged]+IF(ISBLANK([postage_charged]),0,[postage_charged])-IF(ISBLANK([materials_cost]),IFERROR(INDEX([Products!material_cost],MATCH([item_name],[Products!item_name],0)),0)*IF(ISBLANK([qty]),1,[qty]),[materials_cost])-IF(ISBLANK([postage_cost]),0,[postage_cost])-IF(ISBLANK([etsy_fees]),0,[etsy_fees]),2))
Profit MarginFills itself in.

Worked out from this row's Item Charged, Postage Charged, Materials Cost, Item, Qty, Postage Cost and Etsy Fees, using Material Cost and Item Name on Products.

The formulaIF(ISBLANK([item_charged]),"",IFERROR((([item_charged]+IF(ISBLANK([postage_charged]),0,[postage_charged]))-(IF(ISBLANK([materials_cost]),IFERROR(INDEX([Products!material_cost],MATCH([item_name],[Products!item_name],0)),0)*IF(ISBLANK([qty]),1,[qty]),[materials_cost])+IF(ISBLANK([postage_cost]),0,[postage_cost])+IF(ISBLANK([etsy_fees]),0,[etsy_fees])))/([item_charged]+IF(ISBLANK([postage_charged]),0,[postage_charged])),0))
MonthFills itself in.

Worked out from this row's Order Date.

The formulaIF(ISBLANK([order_date]),"",TEXT([order_date],"YYYY-MM"))
StatusPick one: Received, Made, Posted, Delivered or Refunded.

Item Performance

7 columns

How each item has done across all orders. Add a row for any item you want to watch. Ready for 200 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
ItemPick one of the Item Name entries on Products.
Units SoldFills itself in.

The total of Qty on Orders where Item matches this row's Item.

The formulaIF(ISBLANK([item_name]),"",SUMIF([Orders!item_name],[item_name],[Orders!qty]))
OrdersFills itself in.

The number of rows on Orders where Item matches this row's Item.

The formulaIF(ISBLANK([item_name]),"",COUNTIF([Orders!item_name],[item_name]))
RevenueFills itself in.

The total of Gross Revenue on Orders where Item matches this row's Item.

The formulaIF(ISBLANK([item_name]),"",ROUND(SUMIF([Orders!item_name],[item_name],[Orders!gross_revenue]),2))
ProfitFills itself in.

The total of Profit on Orders where Item matches this row's Item.

The formulaIF(ISBLANK([item_name]),"",ROUND(SUMIF([Orders!item_name],[item_name],[Orders!profit]),2))
Profit Per OrderFills itself in.

Worked out from this row's Item, using Item and Profit on Orders.

The formulaIF(ISBLANK([item_name]),"",ROUND(IFERROR(SUMIF([Orders!item_name],[item_name],[Orders!profit])/COUNTIF([Orders!item_name],[item_name]),0),2))
Profit MarginFills itself in.

Worked out from this row's Item, using Item, Profit and Gross Revenue on Orders.

The formulaIF(ISBLANK([item_name]),"",IFERROR(SUMIF([Orders!item_name],[item_name],[Orders!profit])/SUMIF([Orders!item_name],[item_name],[Orders!gross_revenue]),0))

Monthly Summary

9 columns

Profit month by month. Type the first day of each month in the left column. Ready for 60 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
Month StartingType a date.
MonthFills itself in.

Worked out from this row's Month Starting.

The formulaIF(ISBLANK([month_start]),"",TEXT([month_start],"MMM YYYY"))
OrdersFills itself in.

Worked out from this row's Month Starting, using Order Date on Orders.

The formulaIF(ISBLANK([month_start]),"",COUNTIFS([Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)))
RevenueFills itself in.

Worked out from this row's Month Starting, using Gross Revenue and Order Date on Orders.

The formulaIF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!gross_revenue],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2))
Etsy FeesFills itself in.

Worked out from this row's Month Starting, using Etsy Fees and Order Date on Orders.

The formulaIF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!etsy_fees],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2))
Total CostsFills itself in.

Worked out from this row's Month Starting, using Total Cost and Order Date on Orders.

The formulaIF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!total_cost],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2))
ProfitFills itself in.

Worked out from this row's Month Starting, using Profit and Order Date on Orders.

The formulaIF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!profit],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2))
Average Per OrderFills itself in.

Worked out from this row's Month Starting, using Profit and Order Date on Orders.

The formulaIF(ISBLANK([month_start]),"",ROUND(IFERROR(SUMIFS([Orders!profit],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0))/COUNTIFS([Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),0),2))
Profit MarginFills itself in.

Worked out from this row's Month Starting, using Profit, Order Date and Gross Revenue on Orders.

The formulaIF(ISBLANK([month_start]),"",IFERROR(SUMIFS([Orders!profit],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0))/SUMIFS([Orders!gross_revenue],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),0))

Summary

14 figures

The headline numbers for the shop.

FigureWorked out as
Orders Recorded

The number of rows on Orders with Item Charged filled in.

The formulaCOUNT([Orders!item_charged])
Total RevenueItem charges plus postage charged.

The total of Gross Revenue on Orders.

The formulaROUND(SUM([Orders!gross_revenue]),2)
Total Etsy Fees

The total of Etsy Fees on Orders.

The formulaROUND(SUM([Orders!etsy_fees]),2)
Total Postage Cost

The total of Postage Cost on Orders.

The formulaROUND(SUM([Orders!postage_cost]),2)
Total CostsMaterials, postage and Etsy fees together.

The total of Total Cost on Orders.

The formulaROUND(SUM([Orders!total_cost]),2)
Total Profit

The total of Profit on Orders.

The formulaROUND(SUM([Orders!profit]),2)
Overall Profit Margin

Worked out from Profit and Gross Revenue on Orders.

The formulaIFERROR(SUM([Orders!profit])/SUM([Orders!gross_revenue]),0)
Average Profit Per Order

Worked out from Profit and Item Charged on Orders.

The formulaROUND(IFERROR(SUM([Orders!profit])/COUNT([Orders!item_charged]),0),2)
Profit This Month

Worked out from Profit and Order Date on Orders.

The formulaROUND(SUMIFS([Orders!profit],[Orders!order_date],">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),[Orders!order_date],"<="&EOMONTH(TODAY(),0)),2)
Profit This Year

Worked out from Profit and Order Date on Orders.

The formulaROUND(SUMIFS([Orders!profit],[Orders!order_date],">="&DATE(YEAR(TODAY()),1,1),[Orders!order_date],"<="&DATE(YEAR(TODAY()),12,31)),2)
Best Earning Item

Worked out from Item and Profit on Item Performance.

The formulaIFERROR(INDEX([Item Performance!item_name],MATCH(MAX([Item Performance!profit]),[Item Performance!profit],0)),"")
Profit From Best Item

The largest Profit on Item Performance.

The formulaROUND(IFERROR(MAX([Item Performance!profit]),0),2)
Fees As Share Of Revenue

Worked out from Etsy Fees and Gross Revenue on Orders.

The formulaIFERROR(SUM([Orders!etsy_fees])/SUM([Orders!gross_revenue]),0)
Orders Not Yet Posted

Worked out from Status on Orders.

The formulaCOUNTIF([Orders!status],"Received")+COUNTIF([Orders!status],"Made")