Templates › Business and freelance
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.
- Tabs
- 5
- Columns
- 40
- Fill themselves in
- 35
£7one 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.
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.
Products
| Column | Type | Worked out as |
|---|---|---|
| Item Name | text | |
| Category | choice (list) | |
| Listed Price | currency | |
| Material Cost | currency | |
| Make Time Mins | number | |
| Margin Per Unit | currency | IF(OR(ISBLANK([list_price]),ISBLANK([material_cost])),"",ROUND([list_price]-[material_cost],2)) |
| Margin Percent | percent | IF(OR(ISBLANK([list_price]),ISBLANK([material_cost])),"",IFERROR(([list_price]-[material_cost])/[list_price],0)) |
| Still Listed | bool |
Orders
| Column | Type | Worked out as |
|---|---|---|
| Order Date | date | |
| Order No | text | |
| Item | choice (from Products › item_name) | |
| Sales Channel | choice (list) | |
| Qty | number | |
| Item Charged | currency | |
| Postage Charged | currency | |
| Postage Cost | currency | |
| Etsy Fees | currency | |
| Materials Cost | currency | |
| Gross Revenue | currency | IF(ISBLANK([item_charged]),"",ROUND([item_charged]+IF(ISBLANK([postage_charged]),0,[postage_charged]),2)) |
| Total Cost | currency | IF(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 | currency | IF(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 | percent | IF(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 | text | IF(ISBLANK([order_date]),"",TEXT([order_date],"YYYY-MM")) |
| Status | choice (list) |
Item Performance
| Column | Type | Worked out as |
|---|---|---|
| Item | choice (from Products › item_name) | |
| Units Sold | number | IF(ISBLANK([item_name]),"",SUMIF([Orders!item_name],[item_name],[Orders!qty])) |
| Orders | number | IF(ISBLANK([item_name]),"",COUNTIF([Orders!item_name],[item_name])) |
| Revenue | currency | IF(ISBLANK([item_name]),"",ROUND(SUMIF([Orders!item_name],[item_name],[Orders!gross_revenue]),2)) |
| Profit | currency | IF(ISBLANK([item_name]),"",ROUND(SUMIF([Orders!item_name],[item_name],[Orders!profit]),2)) |
| Profit Per Order | currency | IF(ISBLANK([item_name]),"",ROUND(IFERROR(SUMIF([Orders!item_name],[item_name],[Orders!profit])/COUNTIF([Orders!item_name],[item_name]),0),2)) |
| Profit Margin | percent | IF(ISBLANK([item_name]),"",IFERROR(SUMIF([Orders!item_name],[item_name],[Orders!profit])/SUMIF([Orders!item_name],[item_name],[Orders!gross_revenue]),0)) |
Monthly Summary
| Column | Type | Worked out as |
|---|---|---|
| Month Starting | date | |
| Month | text | IF(ISBLANK([month_start]),"",TEXT([month_start],"MMM YYYY")) |
| Orders | number | IF(ISBLANK([month_start]),"",COUNTIFS([Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0))) |
| Revenue | currency | IF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!gross_revenue],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2)) |
| Etsy Fees | currency | IF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!etsy_fees],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2)) |
| Total Costs | currency | IF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!total_cost],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2)) |
| Profit | currency | IF(ISBLANK([month_start]),"",ROUND(SUMIFS([Orders!profit],[Orders!order_date],">="&[month_start],[Orders!order_date],"<="&EOMONTH([month_start],0)),2)) |
| Average Per Order | currency | IF(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 | percent | IF(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
| Measure | Worked out as |
|---|---|
| Orders Recorded | COUNT([Orders!item_charged]) |
| Total Revenue | ROUND(SUM([Orders!gross_revenue]),2) |
| Total Etsy Fees | ROUND(SUM([Orders!etsy_fees]),2) |
| Total Postage Cost | ROUND(SUM([Orders!postage_cost]),2) |
| Total Costs | ROUND(SUM([Orders!total_cost]),2) |
| Total Profit | ROUND(SUM([Orders!profit]),2) |
| Overall Profit Margin | IFERROR(SUM([Orders!profit])/SUM([Orders!gross_revenue]),0) |
| Average Profit Per Order | ROUND(IFERROR(SUM([Orders!profit])/COUNT([Orders!item_charged]),0),2) |
| Profit This Month | ROUND(SUMIFS([Orders!profit],[Orders!order_date],">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),[Orders!order_date],"<="&EOMONTH(TODAY(),0)),2) |
| Profit This Year | ROUND(SUMIFS([Orders!profit],[Orders!order_date],">="&DATE(YEAR(TODAY()),1,1),[Orders!order_date],"<="&DATE(YEAR(TODAY()),12,31)),2) |
| Best Earning Item | IFERROR(INDEX([Item Performance!item_name],MATCH(MAX([Item Performance!profit]),[Item Performance!profit],0)),"") |
| Profit From Best Item | ROUND(IFERROR(MAX([Item Performance!profit]),0),2) |
| Fees As Share Of Revenue | IFERROR(SUM([Orders!etsy_fees])/SUM([Orders!gross_revenue]),0) |
| Orders Not Yet Posted | COUNTIF([Orders!status],"Received")+COUNTIF([Orders!status],"Made") |






