Canon AE-1 Program 35mm Film Camera Body
- Sold for
- $165.00
- eBay fees
- −22.26
- Promoted listing
- −4.95
- Shipping label
- −9.40
- What you paid
- −35.00
FlipDesk is a self-hosted inventory and bookkeeping app for eBay resellers. It pulls in your sales, fees, ads and shipping labels, subtracts what you paid, and keeps the books ready for tax time — on your own server.
Free and open source under the MIT license. Version 1.5.0. Bring your own eBay developer keys.
Canon AE-1 Program 35mm Film Camera Body
The dashboard, with demo data. FlipDesk follows your device's light or dark setting — so does this page.
From the yard sale to the Schedule C, every item keeps one history — even across relists with new eBay item numbers.
Log cost, source and purchase date per item, or buy a whole lot or storage unit and split its cost evenly or by value.
Give every shelf, bin and tote a printed QR label. Scan it with your phone to see what's there or put things away.
Active eBay listings sync on a schedule and link to your items by SKU. Unlisted stock stays visible as the “death pile.”
Orders, fees, ad fees, labels and refunds arrive from eBay. Record Facebook, Mercari, Poshmark or in-person sales beside them.
Expenses by Schedule C category, mileage at the IRS rate, an income statement and a tax report with CSV export.
Real screens from FlipDesk 1.5.0, filled with demo data.
Inventory with cost, source, shelf location and status. Filter for items missing a cost or date.
Active eBay listings with watchers, age, promotion status and when each Good 'Til Cancelled listing renews.
Relist, reprice and promotion rules with a dry-run log, so you can see what would change before anything does.
Locations with item counts and printable QR labels in several layouts.
Build a count sheet of what's listed, grouped shelf by shelf, and download it as a PDF.
Expenses by Schedule C category, with receipts attached and a running total by category.
Revenue, selling costs, operating expenses and mileage, rolled up into net income for any period.
A Schedule C–style report with guided data checks, Part I income and Part III cost of goods sold.
Active listings, orders with a two-year backfill, and fees, labels, ad fees, credits and store subscriptions from the Finances API. On a schedule, plus “Sync now.”
Price plus shipping, minus fees, ads, label, refunds and cost of goods — per sale. Margin, ROI, and average days to list and to sell.
End and relist Good 'Til Cancelled listings before the 30-day renewal, lower the price each relist down to a floor, and promote items that sit unsold. Dry-run is on until you turn it off.
Flags duplicate label charges, label adjustments, fee credits, failed relists and sync or token problems — the money that slips by quietly.
“Sold — it's on Shelf B3” in the app, or sent to ntfy, Discord, email or a webhook for Home Assistant and n8n.
Cancellations and full or partial refunds are applied to the sale automatically, with an option to put the item back in stock.
Print a PDF of everything listed, grouped shelf by shelf, with boxes for the counted quantity — so you can confirm it's really there.
CSV import and export, full JSON backup and restore, nightly backups, and migration between SQLite, PostgreSQL and MariaDB.
A Schedule C–style report (accrual with inventory, or cash) with guided data checks. It organizes your records; it isn't tax advice.
Print QR labels for every shelf, bin and tote. When something sells, the alert tells you where it is.
FlipDesk is a Progressive Web App. Add it from Chrome, Edge, Samsung Internet or Safari for a full-screen app with its own icon, and long-press it for shortcuts to Add item and Record a sale.
Only styles, scripts and icons are cached on the device. Pages with your financial data always load live from your server.



FlipDesk runs in one Docker container you control. There's no FlipDesk cloud, no account to create with us, and no monthly fee. It talks to eBay with your own developer keys.
Nothing stateful lives in the image. Your database, photos, receipts and backups sit in folders you map from the host, so replacing or upgrading the container loses nothing. Stored eBay tokens are encrypted with a key kept in your config folder.
Prebuilt images are published to the GitHub Container Registry with every release. You'll need Docker and an HTTPS address for eBay to redirect back to — a reverse proxy or Cloudflare Tunnel works.
This uses the built-in SQLite database. PostgreSQL and MariaDB compose files are in the repo.
services:
flipdesk:
image: ghcr.io/smith-mountain-lake-resale/flipdesk:latest
container_name: flipdesk
restart: unless-stopped
ports:
- "8080:8080"
environment:
TZ: America/New_York
PUID: 1000 # owner of files written to ./data and ./config
PGID: 1000
PUBLIC_URL: https://flip.example.com # the HTTPS address eBay will redirect to
volumes:
- ./data:/data # database, photos, receipts, backups
- ./config:/config # config.yml (optional) + secret.key — keep it!mkdir -p data config docker compose pull docker compose up -d
Open http://<host>:8080 and create the first user.
Follow eBay connection in the sidebar. It walks you through creating a production keyset at developer.ebay.com, the required Marketplace Account Deletion endpoint, the RuName redirect, and connecting your store. The first sync backfills up to two years.
docker run -d --name flipdesk -p 8080:8080 \ -e PUBLIC_URL=https://flip.example.com -e TZ=America/New_York -e PUID=1000 -e PGID=1000 \ -v /srv/flipdesk/data:/data -v /srv/flipdesk/config:/config \ --restart unless-stopped ghcr.io/smith-mountain-lake-resale/flipdesk:latest
To update, run docker compose pull then docker compose up -d. Tables upgrade automatically on start. Download a full export first if you're jumping several versions.
| Variable | Default | What it does |
|---|---|---|
PUBLIC_URL | — | HTTPS address of the app, used for eBay OAuth, notifications and QR labels |
DB_TYPE | sqlite | sqlite, postgres or mysql (or set DATABASE_URL) |
EBAY_CLIENT_ID, EBAY_CLIENT_SECRET, EBAY_RUNAME | — | Optional; otherwise entered in the app |
MFA_REQUIRED | false | Require two-factor for everyone |
OIDC_ENABLED, OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET | — | Single sign-on |
SESSION_COOKIE_SECURE | false | Set to true when served only over HTTPS |
TZ | UTC | Time zone for scheduled jobs |
The full list, the eBay setup steps and the automation rollout guide are in the README.
For blog posts, write-ups and homelab dashboards. The mark is two arrows passing each other — bought, then sold.
#1F7A4D#16201B#F6F7F5#3FAE77