DEV Community

Boxcar Kits
Boxcar Kits

Posted on

How I built a spreadsheet that does Etsy fee math (formulas inside)

Etsy sellers ask "what do I actually keep from a sale?" all the time. The answer is a stack of fees, and some are charged on more than the item price. I built an Excel + Google Sheets workbook that answers it. Here is the formula logic, so you can copy it into your own sheet.

These are US fee rates I checked against Etsy's fee pages on Oct 13, 2026. Fees change, so put them in cells, not in formulas. None of this is tax or financial advice.

1. Put every rate in a Settings tab

Each rate gets its own cell:

Cell Setting US default
B3 Listing fee $0.20
B4 Transaction fee 6.5%
B5 Payment processing % 3%
B6 Processing fixed fee $0.25
B7 Offsite Ads fee 15% (12% for shops over $10k/yr)
B10 Avg sales tax rate 0%
B11 Regulatory operating fee 0% in US
B12 Offsite Ads cap per order $100

If Etsy changes a fee, you edit one cell and every formula updates.

2. Order revenue

Etsy charges the transaction fee on item price plus shipping, so the base needs both:

Order revenue = price * qty + shipping
=B3*B5+B4
Enter fullscreen mode Exit fullscreen mode

3. Each fee

Listing fee        =Settings!$B$3*B5
Transaction fee    =ROUND(B12*(Settings!$B$4+Settings!$B$11),2)
Payment processing =ROUND(B12*(1+Settings!$B$10)*Settings!$B$5+Settings!$B$6,2)
Offsite Ads        =IF(UPPER(B9)="Y",MIN(Settings!$B$12,ROUND(B12*Settings!$B$7,2)),0)
Enter fullscreen mode Exit fullscreen mode

Some things I learned along the way:

  • Processing is charged on sales tax too. The buyer pays tax, but Etsy's 3% applies to the full total. The (1+B10) factor handles that. Leave it at 0% if you don't know your average.
  • Offsite Ads has a cap. MIN() stops the fee at $100 per order.
  • Round each fee on its own with ROUND(...,2), the way a statement does. Otherwise your totals drift a few cents from what Etsy shows.
  • UPPER() on the Y/N cell means "y" works as well as "Y".

4. Net profit and margin

Total fees  =SUM(B13:B16)
Costs       =B6*B5+B7+B8        (materials*qty + packaging + postage)
Net profit  =B12-B17-B18
Margin      =IFERROR(B19/B12,0)
Enter fullscreen mode Exit fullscreen mode

Example: a $24 item with $4.99 shipping, $5.50 materials, $0.80 packaging and $4.50 postage, not from Offsite Ads. Fees come to $3.20: $0.20 listing, $1.88 transaction, $1.12 processing. Net profit is $14.99.

5. Working backwards: break-even and target price

This was the most useful part. Profit is zero when:

price*q + ship = costs + listing + fixed + (price*q + ship) * pct_fees
Enter fullscreen mode Exit fullscreen mode

pct_fees is everything charged as a percentage: transaction, regulatory, processing (adjusted for tax) and Offsite Ads if it applies. Solve for price:

=ROUND(((B18+B13+Settings!$B$6)
  /(1-Settings!$B$4-Settings!$B$11-Settings!$B$5*(1+Settings!$B$10)
     -IF(UPPER(B9)="Y",Settings!$B$7,0))
  -B4)/B5,2)
Enter fullscreen mode Exit fullscreen mode

For a target margin m, take m away from the denominator too (...-B10 in the sheet, where B10 is the target margin). Same example: break-even item price is $7.44, and a 35% margin needs $15.28.

One caveat: the closed form ignores the Offsite Ads cap. It only matters on orders over about $667, so I left it out.

6. Roll it up with SUMIFS (no dynamic arrays)

I wanted it to work in Excel 2010 as well as Google Sheets, so I skipped FILTER/LET. The Sales Log has a helper column Q holding YYYY-MM. The dashboard then uses:

Orders   =COUNTIFS('Sales Log'!$Q:$Q,A5)
Revenue  =SUMIFS('Sales Log'!$I:$I,'Sales Log'!$Q:$Q,A5)
Fees     =SUMIFS('Sales Log'!$N:$N,'Sales Log'!$Q:$Q,A5)
Enter fullscreen mode Exit fullscreen mode

The Products tab works out each SKU's margin after fees and flags anything under 30%:

=IF(E2="","",IF(E2<0.3,"REVIEW PRICING","OK"))
Enter fullscreen mode Exit fullscreen mode

7. Test the formulas outside Excel

I recalculated the workbook headless in LibreOffice (soffice --headless --convert-to xlsx), read the cached values back with Python's openpyxl (data_only=True), and checked them against a separate Python version of the same math. That caught a few real bugs before anyone bought anything. (Tip: on complex sheets, turn off LibreOffice's threaded calculation. It gave me wrong results once.)

Grab it

Or just copy the formulas above. That's why they're here.

Top comments (0)