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.
- A new row is typed into the Orders tab, one cell at a time, in the white cells a person fills in.
- The shaded cells in that row fill themselves in.
- The figures on the Summary tab change to include the new row.
- The chart, Profit by sales channel, redraws with it.
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
| Column | What goes in it | Worked out as |
|---|---|---|
| Item Name | Type any text. | |
| Category | Pick one: Jewellery, Prints, Candles, Ceramics, Textiles, Stationery or Other. | |
| Listed Price | Type an amount in £. | |
| Material Cost | Type an amount in £. | |
| Make Time Mins | Roughly how long one takes to make.Type a number. | |
| Margin Per Unit | Fills 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 Percent | Fills 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 Listed | Tick it when it applies. |
Orders
16 columns
| Column | What goes in it | Worked out as |
|---|---|---|
| Order Date | Type a date. | |
| Order No | Type any text. | |
| Item | Pick one of the Item Name entries on Products. | |
| Sales Channel | Where the buyer came from, as best you can tell.Pick one: Etsy Search, Etsy Ads, Social Media, Repeat Buyer or Market Stall. | |
| Qty | Type a number. | |
| Item Charged | What the buyer paid for the goods, before postage.Type an amount in £. | |
| Postage Charged | Type an amount in £. | |
| Postage Cost | Stamps, label and packaging.Type an amount in £. | |
| Etsy Fees | Listing, transaction, payment processing and any ads charge.Type an amount in £. | |
| Materials Cost | Leave blank to use the Products tab cost times quantity.Type an amount in £. | |
| Gross Revenue | Fills 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 Cost | Fills 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)) |
| Profit | Fills 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 Margin | Fills 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)) |
| Month | Fills itself in. | Worked out from this row's Order Date. The formulaIF(ISBLANK([order_date]),"",TEXT([order_date],"YYYY-MM")) |
| Status | Pick one: Received, Made, Posted, Delivered or Refunded. |
Item Performance
7 columns
| Column | What goes in it | Worked out as |
|---|---|---|
| Item | Pick one of the Item Name entries on Products. | |
| Units Sold | Fills 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])) |
| Orders | Fills 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])) |
| Revenue | Fills 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)) |
| Profit | Fills 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 Order | Fills 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 Margin | Fills 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
| Column | What goes in it | Worked out as |
|---|---|---|
| Month Starting | Type a date. | |
| Month | Fills itself in. | Worked out from this row's Month Starting. The formulaIF(ISBLANK([month_start]),"",TEXT([month_start],"MMM YYYY")) |
| Orders | Fills 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))) |
| Revenue | Fills 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 Fees | Fills 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 Costs | Fills 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)) |
| Profit | Fills 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 Order | Fills 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 Margin | Fills 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
| Figure | Worked out as |
|---|---|
| Orders Recorded | The number of rows on Orders with Item Charged filled in. The formulaCOUNT([Orders!item_charged]) |
| Total Revenue | Item 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 Costs | Materials, 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") |