Google Sheets templates for eBay sellers
Sticker price lies. By the time sales tax, inbound shipping, duty, packaging, the label and eBay's cut come out, the $30 flip you were proud of cleared $6.40. These sheets count all the way through, on every row, with no add-ons to install and nothing to configure.
One click to copy into your own Google Drive. No add-ons, no scripts to install, no permissions to grant.
The problem
The thrift receipt. The customs invoice. The shipping label. And eBay's payout statement, which arrives weeks later with the fee already taken out. Nobody adds those four up per item, so the number in your head is the sticker spread.
What you tell people
What the sheet says
Still a good flip. It is just a $44 flip and not a $67 one, and the difference compounds across every item you will buy this year.
Three sheets, one question each
The Starter is not a smaller Workbook. It is a complete answer to a narrower question, and if that is your question then the Workbook is clutter you would be paying for.
You sold it, so what did you keep. Two tabs, fourteen columns, a hundred and twenty rows. Nothing before the sale, beside it, or after it.
Inventory that talks to sales. Landed cost per unit, packaging off a supplies rate, partial refunds and restocks. Costs that do not scale with what is sold are deliberately out.
Your store subscription, mileage, software, insurance. Built into a tab of your own and wired into the dashboard. No new accounting concepts at any price.
Try it here
These are the real formulas, running in your browser. Nothing is saved and nothing is sent anywhere. Change a fee, change a quantity, tick a refund and see which numbers follow.
Both fee numbers live here and nowhere else, which is how the real sheet is built too. eBay changes its schedule and these are yours to keep current. The 13.6% default is eBay's standard rate for most categories, read off their fee page on 2026-09-08. Some categories sit well away from it: books at 15.3%, guitars at 6.7%. The per order amount steps at $10, and it is carried for one reason: it is the only fee eBay does not credit back on a refund. A promoted listing adds its ad rate on top of the 13.6%, which is why the two are separate numbers here and not one blended figure. The ad rate ships at zero, because most sellers never run a promoted listing and one who never has should not be shown a fee they were not charged. Set it once if you promote everything, or type the rate on the one row that was promoted.
Nine columns you type, five the sheet works out. The first row is the jacket: bought for $8.00 plus $0.66 tax, sold for $74.99. Most sellers would call that $67 of profit. Clear the label cost and watch what moves. Two rows carry a fee override, for the two reasons a real fee leaves the standard rate: the jacket was promoted, the Keychron went to Canada. Clear either override and the sheet falls back to computing at 13.6%.
| Item | Date sold | Sold for | Ship charged | You paid | Label | Packaging | Fee override | Refunded | eBay fee | Net proceeds | Profit | ROI | Margin |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A blank row at the bottom computes on its own. Nothing to drag down. | |||||||||||||
The last row came back. Notice what a return actually costs: eBay credits the percentage fee, so the loss is the label out, the label back, the packaging, and the 40 cent order fee that never comes back. The fee column still shows what the sale was charged, because zeroing it would hide the one number you want to check against your payout statement.
And notice what the Starter cannot tell you. The refunded jacket is back in your closet and this sheet has nowhere to put it. What you paid for it drops out of the row entirely. That is not a bug in a sales log, it is the edge of one.
Two tabs talking to each other. Change a purchase quantity in Inventory and watch the cost basis move under a sale you recorded weeks ago.
| Item | Mode | Bought | Landed cost, per unit | Position | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Qty | Unit price | Tax | Freight | Duty | Landed | Value | Days held | |||
Freight and duty are hatched on the thrift and retail rows, because they do not apply. That is the hatching earning its place rather than decorating.
| Item | Date | Qty | Sold for | Ship charged | Label | Ad rate | Refund | Frozen | Cost of goods | Packaging | eBay fee | Ad fee | Profit | ROI |
|---|
Try this. Set the LED strip purchase quantity to 40. Its landed cost drops, because the freight spreads over more units, and the profit on a sale from three weeks ago moves with it. Now tick Frozen on that sale row. The cost basis locks to what it was when the sale was recorded and a later purchase cannot rewrite a closed month. That freeze is what ships; the live version above it is only here so you can see the link.
And this. Type 20 into the refund column on the keyboard row. It is a partial refund, not a flag: the sale price comes down, a fifth of the percentage fee and a fifth of the ad fee come back, the 40 cent order fee stays whole, nothing restocks, and the ratios stay live because a discounted sale is still a sale. The Starter cannot make that distinction. It records that money moved. This records where it went.
Packaging is not typed here. It comes off the Supplies tab at the current per order rate, with an override beside it for the shipment that was unusual. Same shape as the fee, one rung up. Per order means the figure does not move with the quantity on the line: three units on one order ship in one box.
Not a demo, because there is nothing generic to demonstrate. Here is one real fitting instead: the job asked for most often.
What the Workbook reports. Correct, and it is the number that tells you whether your buying is working.
After $250.33 of overheads that do not care how much you sold. Also correct, and it is the number you actually live on.
Those overheads are left out of the $20 Workbook on purpose. They do not scale with what is sold, so they sit outside its edge. That absence is load bearing, and it is the most common reason to want a Fitted build.
Intake is a written form, not a call. One revision round is included. Five builds a week, which is a ceiling rather than a target.
The Workbook
Shipped in the order you meet them. The live tabs arrive empty, because a sheet that comes prefilled with somebody else's flips is a sheet you have to clean out before you can use it.
Where the copy lands you. What to type first, what never to touch, and how to read the colours.
The fee rate, the per order amount and your default ad rate. Four numbers, in one place, so eBay changing its schedule is an edit and not a rebuild.
Boxes, mailers, tape and labels bought in bulk, turned into a per shipment rate that packaging draws from automatically.
Fifty rows. Landed cost per unit including freight and duty, quantity on hand, value on the shelf and days held.
A hundred and fifty rows, twenty visible columns. Cost of goods pulled from Inventory, fees computed, partial refunds handled properly.
Revenue, fees, cost, profit, ROI and days to sell. Plus a Check line that prints Closed, or tells you exactly how far off the books are.
A filled month you can read without wrecking your own data: $230.30 of profit on $570.40 of revenue, with a column explaining what each row teaches.
Every formula, in plain words. What it reads, what it assumes, and where the assumption breaks.
The same seven orders build/build_workbook.py reconciles before every release. Revenue less every cost line equals the profit line below, to the cent, which is what the Check line is for. The workbook reserves 36 months for the profit chart. Six are drawn here.
A month with no sales is left blank, not zero, so the line does not fake a history the business does not have. The dot here marks where August lands. In the workbook itself the chart needs two months with sales before it has a line to draw, so the Example tab alone leaves the plot empty.
However you buy
The landed cost columns adapt to how the item was sourced. The ones that do not apply are hatched out rather than left blank, so you can tell a zero from a not applicable.
Price plus sales tax. Freight and duty hatched out, because there were none.
Shelf price plus tax, minus any cashback or rebate you record against it.
Unit price, freight and duty spread across the quantity you actually bought.
Materials plus your own time is a different cost model. It is not in the sheet and the sheet does not pretend otherwise.
How to read it
Four states, used consistently on every tab. Once you have learned them on the Sales tab you have learned them everywhere.
You type here. If a cell is white, the sheet is waiting on you.
The sheet works it out. Overwrite one and you have broken the column.
Not applicable to this row. A thrift find has no customs duty, so the cell is struck out rather than showing a misleading zero.
Estimated, not actual. Type the real number over it when the payout lands and the dots come off.
Pricing
Pay once. No subscription, no seat count, no renewal. Every price below is a one time payment through Gumroad.
Starter
The sales log. What did I keep on that sale.
Upgrade to the Workbook later for $15
Workbook
Inventory and sales, talking to each other.
Upgrade to Fitted later for $129
Fitted
The Workbook, rebuilt around how you actually work.
$129 if you already own the Workbook
Every route to a given sheet totals the same. Buy the Starter first and the Workbook still costs you $20 in the end.
| Route | Steps | Total |
|---|---|---|
| Workbook, direct | $20 | $20 |
| Starter first | $5, then $15 | $20 |
| Workbook, then Fitted | $20, then $129 | $149 |
| All three rungs | $5, then $15, then $129 | $149 |
Upgrades are handled by hand: mail the address on your receipt and the upgrade price is sent back to you. There is no automatic mechanism, because one time digital products do not have one.
Fitted intake
Intake is a written form, not a call. Mail the answers below to the address on your receipt, whether you bought Fitted directly or are upgrading from the Workbook. Delivery is five business days from the day you send them, and a full refund is available any time before delivery.
Fitted rearranges, renames, adds and removes columns in the Workbook. It adds no new accounting concepts at any price, so it will not build FIFO, multi currency, consignment or a bill of materials for one buyer. Changing one column instead of the whole sheet is a tweak, not a Fitted build. It is quoted before any work starts, and most land between $25 and $50.
FAQ
No. You get a view only Google Sheet and a Make a copy link. The copy lands in your own Drive and it is yours. There is no Apps Script, no add-on and no permission prompt, on purpose: a script would trigger Google's unverified app warning, and it would not survive the copy anyway.
No. Nothing syncs, nothing logs in, nothing has access to your account. You type what you bought and what you sold. That is a deliberate limit, not a missing feature.
The rate lives in Settings and you set it once. It ships at 13.6%, eBay's standard rate for most categories, but books are 15.3% and guitars are 6.7%. Any row can override the computed fee with the actual amount off your payout statement.
Then buy the Starter for $5. It answers the only question you have, which is what you kept on a sale. If you later start buying in quantity, $15 moves you up to the Workbook.
Then you already know the hard part is the fee model and the cost basis, not the columns. Try the demos above with your own numbers. If yours already handles partial refunds and per unit landed cost, keep it.
No, and it does not try to be. It has no chart of accounts, no tax filing and no bank feed. It tells you what each item cleared. Your accountant will still want a different document.
Ask for a refund within 30 days on the Starter or the Workbook and you get one, no questions. You keep the copy in your Drive, because there is no way to take it back and pretending otherwise would be theatre. Fitted runs on different terms, printed on its pricing card: a full refund any time before delivery, and none after, because the file is built for one seller.
By hand. Mail the address on your receipt, ownership is checked, and the upgrade price comes back to you. Slower than a button, and it is the honest version of what the platform actually supports.