FlipDesk

Know what every flip actually made.

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.

FLIPDESKSOLD 10/26

Canon AE-1 Program 35mm Film Camera Body

SML-1003 · bought at an estate sale

Sold for
$165.00
eBay fees
−22.26
Promoted listing
−4.95
Shipping label
−9.40
What you paid
−35.00
Net profit$93.39
ROI 266.8%listed 41 days
Pull it from Shelf B3
FlipDesk dashboard showing gross sales, net profit, margin, sales-vs-profit chart and profit by marketplace

The dashboard, with demo data. FlipDesk follows your device's light or dark setting — so does this page.

Built around how a reseller actually works

From the yard sale to the Schedule C, every item keeps one history — even across relists with new eBay item numbers.

  1. 1

    Source

    Log cost, source and purchase date per item, or buy a whole lot or storage unit and split its cost evenly or by value.

  2. 2

    Shelve

    Give every shelf, bin and tote a printed QR label. Scan it with your phone to see what's there or put things away.

  3. 3

    List

    Active eBay listings sync on a schedule and link to your items by SKU. Unlisted stock stays visible as the “death pile.”

  4. 4

    Sell

    Orders, fees, ad fees, labels and refunds arrive from eBay. Record Facebook, Mercari, Poshmark or in-person sales beside them.

  5. 5

    Close the books

    Expenses by Schedule C category, mileage at the IRS rate, an income statement and a tax report with CSV export.

Take a look around

Real screens from FlipDesk 1.5.0, filled with demo data.

FlipDesk inventory screen

Inventory with cost, source, shelf location and status. Filter for items missing a cost or date.

Everything else it handles

eBay sync

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.”

Real profit

Price plus shipping, minus fees, ads, label, refunds and cost of goods — per sale. Margin, ROI, and average days to list and to sell.

Automations

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.

Error detection

Flags duplicate label charges, label adjustments, fee credits, failed relists and sync or token problems — the money that slips by quietly.

Sale alerts

“Sold — it's on Shelf B3” in the app, or sent to ntfy, Discord, email or a webhook for Home Assistant and n8n.

Refunds handled

Cancellations and full or partial refunds are applied to the sale automatically, with an option to put the item back in stock.

Shelf count sheets

Print a PDF of everything listed, grouped shelf by shelf, with boxes for the counted quantity — so you can confirm it's really there.

Your data, portable

CSV import and export, full JSON backup and restore, nightly backups, and migration between SQLite, PostgreSQL and MariaDB.

Tax-ready

A Schedule C–style report (accrual with inventory, or cash) with guided data checks. It organizes your records; it isn't tax advice.

Never hunt for a sold item again

Print QR labels for every shelf, bin and tote. When something sells, the alert tells you where it is.

  • 4, 6 or 8 labels per 4×6 thermal label with cut lines, single big labels, small rolls, or Letter sheets.
  • Exact-size PDFs for Rollo, Zebra, MUNBYN and Dymo 4XL printers.
  • Scan with the in-app camera or your phone's own camera app — each label is a link.
  • Renaming a shelf doesn't break printed labels; the QR holds the code.

Installs on your phone like an app

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 dashboard on a phone
FlipDesk inventory list on a phone
FlipDesk sales summary on a phone

Your books stay on 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.

Passkeys
Face ID, Touch ID, Windows Hello, Android or a security key — passwordless, or as a second step.
Two-factor
TOTP with Google Authenticator, Authy or 1Password, plus single-use recovery codes and replay protection.
Require MFA
One admin switch sends anyone without an authenticator or passkey straight to setup.
Single sign-on
OpenID Connect with Authentik, Authelia, Keycloak, Pocket ID, Zitadel, Entra ID, Google or Okta. Users are created automatically, with group-based access and admin rules.
Roles
Admins manage settings, users and eBay; regular users work with inventory, sales and reports.
Hardening
Brute-force throttling, sign-out everywhere, and PKCE, state, nonce and signature checks on SSO.

Install

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.

  1. Create a docker-compose.yml

    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!
  2. Start it

    mkdir -p data config
    docker compose pull
    docker compose up -d
  3. Create your admin account

    Open http://<host>:8080 and create the first user.

  4. Connect eBay

    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.

Plain docker run, updating, and common settings
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.

VariableDefaultWhat it does
PUBLIC_URL—HTTPS address of the app, used for eBay OAuth, notifications and QR labels
DB_TYPEsqlitesqlite, postgres or mysql (or set DATABASE_URL)
EBAY_CLIENT_ID, EBAY_CLIENT_SECRET, EBAY_RUNAME—Optional; otherwise entered in the app
MFA_REQUIREDfalseRequire two-factor for everyone
OIDC_ENABLED, OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET—Single sign-on
SESSION_COOKIE_SECUREfalseSet to true when served only over HTTPS
TZUTCTime zone for scheduled jobs

The full list, the eBay setup steps and the automation rollout guide are in the README.

Logos

For blog posts, write-ups and homelab dashboards. The mark is two arrows passing each other — bought, then sold.

FlipDesk logo, dark text
Logo, for light backgroundsSVGPNG
FlipDesk logo, white text
Logo, for dark backgroundsSVGPNG
FlipDesk mark, single color
One-color markSVG
FlipDesk green#1F7A4D
Sidebar ink#16201B
Paper#F6F7F5
Dark-mode green#3FAE77

Stop paying monthly to find out what you made.