S&T Card Manager — User Guide
Everything the app does, in the order you would actually do it: put cards in, price them, sell them, reconcile the money, and keep the books honest. Every screen in this guide is drawn from the live app, with the exact button labels and messages you will see on screen. Screens and examples show the example organization “BK Cards 71”; your organization’s name appears in its place.
1Quick start
S&T Card Manager is one database with five front doors. Which door you use depends on what you are doing — showing cards off, working the inventory, running the books, or feeding new cards in.
1.1The six tabs
The tab bar sits in the sticky header and never scrolls away. Each tab has its own accent colour, and that colour follows you through the whole screen — amber means Ledger, teal means Collection, and so on.
| Tab | Colour | What it is for | Who sees it |
|---|---|---|---|
| Collection | teal | The showcase. Big card images, price, grade badges. Read-only — nothing is edited here. | Everyone. It is the landing tab. |
| Financials | violet | Executive dashboard for the card business: revenue, COGS, gross profit, ROI, aging, dead money, grading lift. | Finance access only |
| Accounting | emerald | The books: the non-card expense ledger, the P&L, the partner capital waterfall, tax schedule, distributions. | Finance access only |
| Ledger | amber | The card inventory grid — 64 columns, filters, saved views, editing, selling, CSV export. | Everyone |
| Scan | sky | Intake. Photograph a shoebox or paste PSA certs; AI proposes what each card is; you approve. | Everyone can upload; managers scan and bring in |
1.2Ten things, ten clicks
| You want to… | Do this |
|---|---|
| Record a sale | Ledger → click the card's name → Status = Sold → platform → total + net → Proceeds To → Confirm Sale |
| Sell a stack as one lot | Ledger → Select to Sell → tick the cards → Sell N selected → |
| Price a stack for a show | Ledger → filter down to the stack → read the live rollup line: You have $X across N cards |
| Add one card by hand | Ledger → + Add Card → fill in → Save → then attach a photo |
| Turn a shoebox into inventory | Scan → upload → pairs/fronts → Scan selected → review → Bring into App |
| Month-end eBay | Gear → Data Import → eBay → Sales → drop the orders report → review buckets → Bring in N sale(s) |
| Fix a bad number everywhere | Gear → Bulk Edit → filter → select → Edit selected |
| See what the business owes you | Accounting → Statements → Total Owed (All Sources) |
| See where the books are wrong | Click the integrity badge in the header |
| Totals look stale | Hard-refresh (Cmd/Ctrl + Shift + R) — the app caches aggressively for speed |
1.3House rules the app enforces
- The card row is the truth about money. History, events and audit trails record what happened; they never feed a total.
- Derived numbers are computed by the database, never typed. Total Cost, Net Return, Year Sold and the projected profits are calculated. The editor previews them live as you type, but the database's answer is what gets stored.
- Nothing an importer or the AI proposes is written until a human approves it. Scan writes to a holding table; the PSA matcher writes nothing at all; every importer has a review step and an explicit Apply.
- Photos are always copied into our own storage. The app never keeps a long-term link to PSA's, CDP's or anybody else's server, so an expired third-party link can never blank your images.
- Green means you type it. Grey means the database did. That colour convention runs through the card editor and the Accounting tab.
2Signing in & accounts
2.1Sign in
One screen, two fields. The error message you see on a failed attempt is passed straight through from the authentication service, so Invalid login credentials is its wording, not ours.
2.2Setting or changing a password
You will meet the password screen in three ways: from an invitation e-mail, from a reset e-mail a manager sent you, or from Help & Support → Account → Password → Change password….
Four rules, shown live as you type. Each turns from ○ to a green ✓ as it is satisfied:
- At least 8 characters
- One uppercase letter
- One lowercase letter
- One number
There is no symbol requirement and no maximum length. If the two boxes differ you get Passwords do not match.; if a rule fails, Password does not meet the requirements.
2.3Roles and what they unlock
There are five roles. Three of them — Company, Partner, Admin — are collectively "managers" and can do everything. Finance access is automatic for managers and is a per-person switch for everyone else.
| Role | Meaning | Manage users & dropdowns | Edit cards | Financials & Accounting |
|---|---|---|---|---|
| Company | BKCards71 — the entity | Yes | Yes | Always |
| Partner | Full access, manages users | Yes | Yes | Always |
| Admin | Full access, manages users | Yes | Yes | Always |
| User | Can edit cards | No | Yes | Only if the finance switch is on |
| Viewer | Read-only | No | No | Only if the finance switch is on |
Your role is printed in the header as a lowercase mono chip beside your name — literally partner, admin, viewer and so on.
2.4The account status ladder
Every person's account moves through a documented ladder. You will see these words on the Users tab.
| Status | How you get there | Can sign in? |
|---|---|---|
| invited | A manager sent an invitation | Only via the invite link |
| accepted | The invitee set a password (a manager pressing Refresh on the Users tab confirms it) | Yes |
| active | They signed in and the app actually loaded | Yes |
| suspended | A manager suspended them | No — banned until reactivated |
| removed | A manager removed the login; the accounting identity survives | No login exists |
Suspended and removed accounts are also rejected by the server on any privileged action, with Account is not active.
3The app shell
The header is sticky: the tabs, your identity, the health light and Sign Out stay on screen no matter how far a view scrolls.
3.1The header, left to right
- Wordmark — S&T Card Manager over the small caps line CARD MANAGER.
- The six folder tabs (see 3.2). The sixth, Platform Connect, is where marketplaces are synced and listed (§11).
- The integrity badge — the health light (3.3).
- ? — Help & Support. Every role sees it.
- ⚙ — the Admin Console.
- Your name and the amber role chip.
- Sign Out — no confirmation; you drop straight back to the sign-in screen.
There is deliberately no password control in the header. Password changes live inside Help & Support, under Account.
3.2The tab bar
All tabs sit on one baseline — selecting a tab never makes it hop. The active tab is painted in its accent colour, wears a 3-pixel accent bar across the top, and its bottom edge merges into the page below. Inactive tabs sit slightly dimmed. Hovering any tab shows Go to Ledger, Go to Scan, and so on.
Switching tabs does not re-fetch your cards. The whole inventory is loaded once when you sign in and shared by every view — which is exactly why an edit made in the Ledger instantly changes the numbers on Financials and Accounting.
3.3The integrity badge — your health light
The badge is always visible, on purpose. An earlier draft hid itself when everything was clean; that was wrong, because a badge that disappears cannot be told apart from a badge that broke. Green has to be shown as loudly as red.
It is driven by severity, not volume. One contradiction lights it red no matter how many amber items sit behind it. It is deliberately not a percentage — twelve broken records against 3,000 cards would read as 0.4% and look green while the books were wrong.
Hovering the badge lists exactly what is wrong, one line per non-zero item, in the form 2 × Sale data on a card that isn't sold. Clicking it opens the Admin Console already on its Integrity tab — the gear means "settings", the badge means "show me the problem". When you close the console, the check re-runs, because that is where the fixes happen.
The badge watches exactly three things (full detail in 15.7):
| Watched item | Severity | What it means |
|---|---|---|
| Sale data on a card that isn't sold | broken | A half-reversed sale — phantom revenue, or a hole where revenue should be. |
| Status and disposition disagree | broken | The Status says one thing and the Sale Type says another. |
| Sold, missing platform or sale year | attention | Revenue that cannot be attributed. Losses and gifts are excluded — they are legitimately $0 with no platform. |
3.4Help and the gear
? opens the Help & Support overlay (see §17) — guides, issue and feature forms, contact, and your password. Clicking the dark backdrop closes it.
⚙ opens the Admin Console. Its tooltip still reads Settings (coming soon) — that string is simply out of date; the console is fully built. Anybody can press the gear, but a non-manager sees only their own My Account profile pane. Everything else is manager-only and is gated again on the server.
4Collection
The showcase — an image-first gallery, teal, and the front door of the app. It is a pure show-off surface: the only "insight" is the stat line in the header. Nothing is edited here.
4.1Grid and list
A segmented control at top left switches between Grid view (a 2/3/4-column photo grid depending on screen width) and List view (a compact row with a thumbnail). Beside it, a search box: Search items — player, set, year, brand…. Search matches card id, description, player, cert number, brand, card type, card year, grader and location — a plain substring match, no fuzzy logic.
4.2The filter rail
The rail scrolls sideways on a phone and always keeps this order:
| Control | Options |
|---|---|
| Sort | Newest added (default) · Player A–Z · Year (newest) · Year (oldest) · Price (high → low) · Price (low → high) · Sold for (high → low) · Sold for (low → high) · Grade (high → low) |
| Status pills | For Sale · Not For Sale · Sold — independent toggles, not a radio group. They union together. |
| Price | Under $15 · $15 – 25 · $25 – 50 · $50 – 100 · Over $100 |
| Attribute pills | Graded · Rookie · Autographed |
| Category / Year | Built from what you actually hold — categories alphabetically, years newest first |
| × Clear | Appears only when something is filtered. Resets search, price, status, the three attribute pills, category and year — but not the sort or the grid/list choice. |
Collection opens showing only for-sale cards. Turning all three status pills off falls back to "everything held except Sold" rather than showing an empty screen. Archived cards never appear in Collection at all — there is no archived view here.
4.3Badges, prices, stat blocks
A tile shows the description on two lines and a price beneath it. The price is the sold price for a sold card and the asking price otherwise; with neither, the line reads No price set in grey italics. List rows omit the price line entirely when there is none.
The three stat blocks in the header are computed over everything you hold:
- For Sale — count of cards that are neither sold nor Not-For-Sale, valued at cost.
- Not For Sale — count and cost of the keeper pile.
- Sold — count and the realised sale total.
That asymmetry is intentional: unsold positions are worth what you paid, sold ones are worth what you got.
4.4The flip-card detail
Clicking any tile or row opens a read-only detail modal. The left half is a card that flips in 3D when clicked — every card flips, whether or not it has a back photo; without one the back face shows the placeholder No back photo / yet available. A teal hint pill reads Click card to flip, then Back · click to flip.
The right half lists only facts that exist — any blank row is dropped entirely. The price line reads one of three ways: $412.75 sold, $184.00 asking, or No asking price set.
5Ledger — the card grid
The Ledger is where the work happens. Every card the business has ever owned lives here, in a grid of up to 64 columns with 57 filters, saved layouts, live money totals, and one click into the full card editor.
5.1Anatomy of the screen
Top to bottom: a toolbar, the KPI band, the filter row (status facet, card-type chips, the live rollup), the grid itself, and a sticky footer carrying the row count and the data-integrity badge.
5.2The toolbar
| Control | What it does |
|---|---|
| Search box | Matches seven fields — ID, SKU, description, player, cert number, brand, card type. (The placeholder only advertises five; SKU and card type are searched too.) |
| View name ▾ | Opens Columns & Views. Reads Built-in view until you apply a saved one. |
| + Add Card | Opens the card editor empty, in insert mode, defaulted to For Sale. |
| Select to Sell | Turns on multi-select for a lot sale. Becomes Done selecting. |
| Recent Sales | All sold cards, newest first, sortable — unaffected by every grid filter. |
| Export View CSV | Exports exactly what you are looking at, post-filter and post-sort. |
| Export Full DB CSV | Pulls the entire database live, including archived rows. |
| Show archived (n) | Far right. Appears only when archived cards exist. |
5.3The KPI band
Every KPI is whole-dataset. The tiles are computed over every live (non-archived) card and are completely independent of your search, chips and column filters. That is deliberate: the headline never silently changes meaning under you. Filtered numbers appear separately, in the rollup line (5.6).
| Tile | What it counts | Follows the year toggles? |
|---|---|---|
| Net Return | Sum of Net Return over sold, non-archived cards. Red below zero, green above. | Yes |
| Net Sold Total | Sum of the net sale proceeds (after platform fees) on those cards. | Yes |
| Gross Sold Total | Sum of the gross sale price (what the buyer paid, before fees); falls back to net where gross is unknown. Ed. 4.5. | Yes |
| Cards Sold | Count of sold, non-archived cards. | Yes |
| Current Inventory Count | Cards in for-sale inventory. Excludes sold, archived and Not-For-Sale. | No |
| Money in Inventory | Total Cost of that same set — what you are into the stock for. | No |
| Not For Sale | Count · cost of the keeper pile, split by owner (BK, Kevin, Brian, then anyone else). | No |
Years Sold toggles
At the right of the band. All resets to every year. Clicking a single year from the "All" state narrows to just that year; after that each click adds or removes a year.
5.4Columns & Views
The View … ▾ button opens one popup that does two jobs: choose which of the 64 columns are visible, and save that arrangement as a named view you can come back to.
- Set the grid up the way you want it — tick columns, drag widths, click a header to sort.
- Open View … ▾, type a name in the box, press Save current. You get Saved "Show floor" ✓ in green.
- Click the ☆ beside a view to make it your default — it becomes ★ and that layout loads automatically next time you open the app.
- Click a view's name to apply it (Applied "Sales only"); Delete removes it.
- Reset to built-in restores the 34-column default layout, re-fits every column to its content and sorts by ID.
5.5All 64 columns
Columns live in nine coloured groups, and the group band above the header shows which is which. The 34 marked Default below are the ones the built-in view shows. "Filter" tells you what kind of funnel that column's header offers.
| # | Column | Group | Filter | Default | Notes |
|---|---|---|---|---|---|
| 1 | ID | Item | Photo coverage | ✓ | Frozen and locked. Its funnel is the Has Photo / No Photo filter. Hovering pops the card image. |
| 2 | Card Name | Item | — | ✓ | Frozen and locked. Click it to open the card editor. |
| 3 | Player | Identity | — | Searchable, not filterable | |
| 4 | Card Year | Identity | Min–max | ✓ | Type 2024 in both boxes to pick one year |
| 5 | Brand | Identity | Checklist | ✓ | From the managed Brand dropdown |
| 6 | Item Type | Identity | Checklist | The card_types lookup | |
| 7 | Card Type | Identity | Checklist | ✓ | The sports lookup — Baseball, Football, … This is what the chips filter |
| 8 | Set | Identity | Checklist | Set/product name only, no year or brand | |
| 9 | Subset | Identity | Checklist | ||
| 10 | Parallel | Identity | Checklist | ||
| 11 | Card Number | Identity | Checklist | ||
| 12 | Intake Title | Identity | Checklist | The name the card arrived with | |
| 13 | Intake Source | Identity | Checklist | scan, ebay, cdp-inventory, psa_return, app, reintake | |
| 14 | Name Source | Identity | Checklist | canonical, intake, user, grader | |
| 15 | Print Run | Identity | Min–max | Renders as /399 | |
| 16 | Rookie | Identity | Checklist (Yes/No) | Amber badge | |
| 17 | Auto | Identity | Checklist (Yes/No) | Sky badge | |
| 18 | Relic | Identity | Checklist (Yes/No) | Fuchsia badge | |
| 19 | Name Locked | Identity | Checklist (Yes/No) | Locked names are skipped by Generate names | |
| 20 | SKU | Identity | Checklist | ✓ | The importers' match key |
| 21 | Listing Name | Identity | Checklist | The title used on the marketplace | |
| 22 | Purchase Name | Identity | Checklist | ||
| 23 | CDP Name | Identity | Checklist | Card Dealer Pro's title | |
| 24 | Status | Status & Location | Checklist | ✓ | Pill: Sold / For Sale / Not For Sale |
| 25 | Location | Status & Location | Checklist | ✓ | Where the card physically is |
| 26 | Listed On | Status & Location | Checklist (multi) | ✓ | A card can be listed in several places; a row passes if any ticked platform matches |
| 27 | Showcase | Status & Location | — (none) | Sortable only — there is no funnel on this column | |
| 28 | Damaged | Status & Location | — (none) | Shows ⚠ Damaged; hover for the damage note. Sortable only | |
| 29 | Purchase Date | Acquisition | — | Sortable, not filterable | |
| 30 | Purchase Year | Acquisition | Min–max | ||
| 31 | Purchase Platform | Acquisition | Checklist | ||
| 32 | Owned By | Acquisition | Checklist | ✓ | Profit follows ownership |
| 33 | Paid By | Acquisition | Checklist | ✓ | Cost recovery and losses follow the wallet |
| 34 | Pay Method | Acquisition | Checklist | ✓ | |
| 35 | Platform Purchase Order ID | Acquisition | Checklist | ✓ | The buy-side order number |
| 36 | Grader | Grading | Checklist | ✓ | PSA / SGC / BGS / … |
| 37 | Grade | Grading | Checklist | ✓ | Shown combined, e.g. 10 Pristine; sorts numerically |
| 38 | Cert Number | Grading | — | ✓ | Searchable, not filterable. The photo importers' join key |
| 39 | PSA Order # | Grading | Checklist | ||
| 40 | Grading Paid By | Grading | Checklist | Drives the cross-partner grading rows in the waterfall | |
| 41 | Grade Fee | Costs | Min–max | ✓ | |
| 42 | Base Cost | Costs | Min–max | ✓ | What you paid for the card itself |
| 43 | Tax | Costs | Min–max | ||
| 44 | Shipping | Costs | Min–max | Inbound shipping you paid | |
| 45 | Handling | Costs | Min–max | Also where return costs land after a refund | |
| 46 | Total Cost | Costs | Min–max | ✓ | Calculated: base + tax + shipping + handling + grade fee |
| 47 | Comp As Is | Valuation | Min–max | ✓ | What it comps at in its current state |
| 48 | Projected Profit As-Is | Valuation | Min–max | ✓ | Calculated: comp − total cost. Red/green |
| 49 | Expected Sale (10) | Valuation | Min–max | ✓ | What it would fetch as a 10 |
| 50 | Projected Profit (10) | Valuation | Min–max | ✓ | Calculated. Red/green |
| 51 | Asking Price | Valuation | Min–max | ✓ | A blank asking price sorts and filters as 0, so a 0…0 range finds every unpriced card |
| 52 | Projected Profit (Sale) | Valuation | Min–max | ✓ | Calculated. With no asking price it reads set price rather than a fake number |
| 53 | Sale Type | Sale | Checklist | ✓ | The disposition — Sold – Straight Sale, Gifted, Lost, … |
| 54 | Date Sold | Sale | — | Sortable, not filterable | |
| 55 | Year Sold | Sale | Min–max | ✓ | Drives the tax buckets |
| 56 | Sold Platform | Sale | Checklist | ✓ | FB displays as Facebook |
| 57 | Proceeds To | Sale | Checklist | Which account the money landed in | |
| 58 | Platform Sale Order ID | Sale | Checklist | ✓ | Traceability back to eBay/CollX |
| 59 | Platform Sale Item ID | Sale | Checklist | ✓ | eBay item number — stamped by the Listings importer |
| 60 | Sold Price | Sale | Min–max | The gross the platform reported | |
| 61 | Net Proceeds | Sale | Min–max | ✓ | What actually landed after fees |
| 62 | Net Return | Sale | Min–max | ✓ | Calculated: net proceeds + shipping margin − total cost. Blank on anything not sold |
| 63 | Home | Storage Location | Checklist | ✓ | Where it lives when it is not at a show |
| 64 | Show | Storage Location | Checklist | ✓ | Derived: Case A2 or Bin 3, B, 12 |
5.6All 57 filters
Filters stack in a fixed order — archive scope, then search, then the status facet, then the card-type chip, then the photo funnel, then each column funnel. Everything ANDs across filters; within one funnel, the ticked values OR.
| Filter | Count | Where |
|---|---|---|
| Global search fields | 7 | Toolbar box |
| Status facet buttons | 5 | All / For Sale / Not For Sale / Sold / Archived |
| Card-type chips | 1 + N | Available plus one per card type in stock |
| Photo-coverage funnel | 1 | On the ID column header |
| Per-column checklist funnels | 37 | Column headers |
| Per-column min–max funnels | 19 | Column headers (numeric columns) |
| Show archived | 1 | Far right of the toolbar |
| × Clear all filters | 1 | Appears only when something is filtered |
Status facet and card-type chips
Column funnels
Every filterable column header carries a small funnel icon. It turns amber when that column is filtering, and the photo funnel turns teal. Clicking the funnel opens the popover; clicking the header label still sorts.
Clearing filters
× Clear all filters appears on the right of the status row whenever anything is filtering. It resets the search, the status facet, the card-type chip, the photo funnel and every column funnel. It deliberately leaves your columns, widths, sort, active saved view and the "Show archived" tick alone.
5.7Sorting, resizing, freezing
- Sort — click a header label. Click again to flip direction. The active column turns amber and shows ▲ or ▼. Blanks always sink to the bottom, in both directions.
- Resize — drag the right edge of any header (Drag to resize · double-click to reset). Double-clicking re-fits that one column to its content.
- Auto-fit — on first load every column is measured against your real data and sized to fit, between 60 and 420 pixels. Any column you have resized by hand is never touched again by that process.
- Frozen pair — ID and Card Name stay pinned to the left while everything else scrolls under them. They are locked, so they can never be hidden — even if a saved view forgets them, they are put back.
- Virtualised rows — only the rows near your viewport exist in the page, which is why 1,958 rows scroll smoothly. Filtering and sorting are unaffected.
5.8Rows: hover, open, select
In select mode, clicking a row toggles its checkbox instead of opening the editor, and the hover preview is switched off. Your selection is stored by card id, so it survives filtering, sorting and scrolling — you can select five cards, change the filter completely, and select five more.
5.9Recent Sales
A violet modal listing every sold card, newest first, completely independent of the grid's filters. Useful for "what did we sell last week" without disturbing your working view.
5.10CSV export
Two buttons, two very different scopes:
- Export View CSV (teal) — exactly the rows you are looking at, after every filter and in your current sort order.
- Export Full DB CSV (indigo) — ignores the grid entirely and pulls the whole database live from the server, including archived rows. This is always the true current database, never a stale copy in your browser.
1234.56), never as "$1,234.00", so a
spreadsheet can add it up. Column order is always canonical no matter what order you ticked them in.
Net Return is blank for anything not sold, exactly as in the grid. And every file always carries the
front and back photo links so a file handed to CDP or a marketplace never loses its images.5.11The footer and the integrity count
The sticky footer reads Showing 184 of 1,958 live rows. — or rows (incl. archived) when the archived tick is on. On the right sits a small badge: ✓ Data integrity · 1,958 live.
That badge compares the number of live cards the database reports against the number the app actually loaded. Green means they match exactly. It fails closed: if the count cannot be verified, or the two numbers differ by even one, it goes red with Mismatch: database has N live, app loaded M. If you ever see red there, refresh before you trust anything else on screen.
6Editing a card
There is exactly one card panel in this app, and every route leads to it: clicking a Card Name in the Ledger, clicking a description in Bulk Edit or an Integrity drill-down, or finishing a card that just came out of Scan. What you learn once works everywhere.
6.1Opening the panel
It slides in from the right over a dimmed page. The header shows Card #1042 (or New Card when adding) above the card's name, plus the Status dropdown and the 🕘 History button. The action bar at the bottom is sticky, so Save is always reachable.
6.2Green, grey and sky — the colour language
| What you see | What it means |
|---|---|
| Green border, focus turns brighter green | Editable. You type it. |
| Grey box, mono grey text, suffix (calc) | Calculated. Read-only — there is no input element at all. |
| Grey, "not allowed" cursor, tooltip Computed from the platform fee — not editable | Temporarily locked while the platform's fee table computes it (Mark Sold's Net Sale). |
| Sky-blue bordered block at the bottom | The eBay What-If pad. Nothing there is ever saved. |
The five calculated fields are Total Cost, Projected Profit As-Is, Projected Profit (10), Projected Profit (Sale) and Net Return. They update live as you type — the panel mirrors the database's own formula so you can see the effect immediately — but what finally gets stored is the database's answer, not the preview.
The formulas, in plain English:
- Total Cost = base cost + tax + shipping + handling + grade fee (blanks count as zero).
- Projected Profit As-Is = comp − total cost. (10) = expected sale at 10 − total cost. (Sale) = asking price − total cost.
- Net Return = net proceeds + shipping margin − total cost, where shipping margin is what the buyer paid for shipping minus what the label actually cost. If you never record an external label cost, shipping washes to zero margin.
6.3Every field, group by group
Identity
Card Name · SKU · Player · Card Year · Brand · Set / Product · Subset / Insert · Parallel / Variety · Card # · Print Run (/#) · Item Type · Card Type · Rookie (RC) · Autograph · Relic / Patch.
Ten of these are name drivers — change one and an unlocked canonical name rebuilds itself as you type (see 6.4).
Status & Location
Location · Listed On (multi-tick) · Showcase · Damaged · Damage Note.
Acquisition
Purchase Date · Purchase Year · Purchase Platform · Owned By · Paid By · Pay Method · Platform Purchase Order ID.
Owned By and Paid By are the two most consequential dropdowns in the app: profit follows ownership, cost recovery and losses follow the wallet. Leaving either blank breaks the partner split, which is why Integrity has a check for it.
Grading
Grader · Grade (the ladder) · Grade Qualifier · Cert Number · PSA Order # · Grading Paid By.
Grade is a 19-step ladder — 1, 1.5, 2 … 9.5, 10 — and a blank option shown as -. There is no free-text grade anywhere in the app. Grade Qualifier is a combo box: pick a suggestion or type your own.
| Qualifier | Meaning |
|---|---|
| MC | Miscut (PSA) |
| MK | Marks (PSA) |
| OC | Off-Center (PSA) |
| OF | Out of Focus (PSA) |
| PD | Print Defect (PSA) |
| ST | Staining (PSA) |
| Pristine | CGC / BGS 10 |
| Black Label | BGS all-10 |
| Gold Label | SGC |
Costs
Base Cost · Tax · Shipping · Handling · Grade Fee · Total Cost (calc). The $ inside a money box is chrome — do not type it.
Valuation
Comp As Is · Expected Sale (10) · Asking Price · and the three calculated projected profits.
Sale
Sale Type · Date Sold · Year Sold · Sold Platform · Proceeds To · Sold For (Gross) · Net Sale · eBay Shipping Collected · External Shipping Collected · Gifted To · Platform Sale Order ID · Platform Sale Item ID · Net Return (calc).
You normally never touch these by hand — the Mark-Sold flow fills them all. Two behaviours to know: changing Sold Platform or Sold For (Gross) re-estimates Net Sale; and editing eBay Shipping Collected on an eBay platform corrects the net by exactly the fee on the shipping difference.
Names · Notes · Storage Location
Listing Name · Purchase Name · CDP Name — the titles other systems know this card by. Notes is free text. Storage is Home · Show · Box · Show · Column · Show · Divider · Show · Display Case, which is what produces the Case A2 / Bin 3, B, 12 badge you see in the grid and in Collection.
6.4The Card Name engine
Card names in this app follow the PSA slab layout. The engine can build one for you, remember where a name came from, and refuse to overwrite one you typed yourself.
| Provenance chip | Means |
|---|---|
| canonical | Built from the card's own attributes. It follows along automatically as you edit those attributes. |
| intake | The name the card arrived with, restored by Use intake. |
| user | You typed it. Locked — nothing overwrites it, including bulk Generate names. |
| PSA / SGC | Grader-authoritative. You can still override it by typing, which locks it as your override. |
Fill attributes from name — the reverse of Generate (Ed. 4.5)
Beside Generate in the Card Name panel sits Fill attributes from name. It reads the
name you typed and proposes the fields: Year, Card # (what follows #), Grader, Grade, Print run (/99),
Brand (matched against your Brand dropdown, longest name first — “Panini Donruss” is Donruss, “Panini” alone is Panini),
Set (the words between the brand and the card number; CHROME is lifted into Subset), Item Type Single
(unless the name says lot, set, box, pack, break, bundle or complete), Parallel (X-Fractor, Refractor, Sapphire, colours…),
RC / AUTO / RELIC, and the cert if one is in the name. It then asks Card Hedge once for Player, Set and Category. A Read:
line says what it found (“no parallel word found” when it didn't). Nothing is written until you press Apply —
blanks are filled; a field that already has a value is kept unless you tick Overwrite. The name itself is never
changed. Then Save as usual.
6.5Listed On — the one field that is not a card column
A card can be live on several marketplaces at once, so Listed On is a set of tick boxes rather than a dropdown. Unticking everything is how you say "not listed". If no platforms have been set up you will see No platforms defined — add them in Admin Console → Dropdowns → Listing Platform. A failure to save the listings never fails the card save, and toggling a platform on its own is enough to make the panel "dirty".
6.6Photos
6.7Save, Update, Cancel
| Button | Behaviour |
|---|---|
| Update (sky) | Saves and stays open, then re-reads the row so the calculated fields show the database's real answer. Message: Updated ✓ — saved, still editing. |
| Save (green) | Saves and closes. |
| Cancel / × / clicking the dim area | If anything changed: Discard unsaved changes? Your edits will be lost. A clean panel closes silently. |
Adding a card
+ Add Card opens the same panel empty. The only requirement is Description is required to add a card. On insert the card lands as For Sale, all five cost boxes default to 0, and the id is minted by the database. The panel then switches onto the real card in place and tells you Added card #1974 ✓ - you can add a photo now or Close.
6.8Archive, Restore, Delete
- Archive (amber) — hides the card from working views. Confirms with Archive this card? It will be hidden from working views. Sold cards still count in fiscal totals. Archiving is also how you retire a duplicate: archived cards are excluded from every integrity check, so archiving genuinely resolves a flag rather than hiding it.
- Restore (sky) — brings it back. The one state change with no confirmation, because it is harmless and reversible.
- Delete Permanently (red) — appears only when the card is already archived and you are an admin. Confirms with Permanently delete card #1042? This cannot be undone. It also removes the front image file.
6.9The eBay What-If pad
6.10The drawer as a console — the board (Ed. 4.6)
Click a card's name anywhere and its drawer slides in from the right. Everything about the card is here, in boxes — and the boxes arrange themselves so the important ones are always at the top and the two columns always end level.
The top line. The card number, its Status (For Sale · Pending · Not For Sale · Sold · Gifted · Write Off) and any flags. Under it the full name — never cut short — and a one-line readout of the money: what it cost you, what you're asking (or what it sold for and your profit), its market value and its live eBay price.
Top right. 🕘 Journey (everything that ever happened to this card) and ×. Under them the Market Value bar: the value in big numbers and, at the right, the Card Hedge mark with paired (green) or unpaired (red). Click the bar to open the Market Value sheet (§6.12).
| The card is… | Left column, top | Right column, top |
|---|---|---|
| live on eBay (⚡) | Pictures → On eBay → eBay Net What-If | Essentials → Identity → Sale (Record a sale by hand →) |
| sold | Pictures → Identity | Essentials → Sale (the receipt); the What-If folded ▸ at the very bottom |
| for sale, not on eBay | Pictures → Identity | Essentials → Sale (Record sale →) → What-If |
Everything else — Grading, Acquisition, Costs, Valuation, Status & Location, Storage, Names, Notes — fills in below, dealt to whichever column is shorter. Carets (▸ ▾) are drawn bigger everywhere so you can see what folds; the small ebay letters beside a field mean "this is on your live listing" (an amber ring = the card differs from what's live).
6.11Condition, Sale and On eBay (Ed. 4.6)
Sale is the end of the story, so it sits high on the right. Before a sale it says Record sale → (on a live eBay card: that eBay will book the sale itself when the order ships, with Record a sale by hand → just in case). After a sale it shows three green tiles — Sold for · Net Sale · Profit — and every detail under them.
Condition is now the first row of Valuation, because condition drives price. On a raw card pick it from the list (Near Mint or Better · Excellent · Very Good · Poor) — eBay requires it to list. On a graded card it reads Graded · PSA 8: the grade is the condition, and eBay asks for nothing more.
On eBay (live cards) is the whole listing, editable: Title · Price · eBay category · Store category · Item location · Condition and photos · the 🔒 Fixed by eBay line (what eBay won't change on a live listing) · Allow offers · ▸ Item specifics · the three policies · Package · Description · Send changes to eBay · End listing. On a card that is one of several in one listing (§11.10) the head shows 1 of 6 · 6 left, the 🔒 line says quantity 6 (group of 6 cards), a Multi-buy row appears (§11.11), and Send changes / End listing tell you they act on the whole listing.
6.12Market Value — the bar and the sheet (Ed. 4.6)
Click the Market Value bar. A sheet drops down over the right side of the drawer.
- Top row — the card's number and name; at the far right the Card Hedge mark with paired or unpaired. Paired means the app knows exactly which card in Card Hedge's catalog this is.
- → Comp As Is — four buttons put a number into the card's Comp As Is field, always asking first: Card Hedge FMV · Last sale · Comp calc · $ your number → Put in. Save keeps it. None of these ever touch your books.
- Card Hedge box — the catalog card the app paired to, with its picture, and valued as PSA 8 (from Grading). That's it ✓ confirms a pairing · Not it ▾ (red) opens the closest catalog cards · Unpair clears the pairing (asks first) · Pair now pairs an unpaired card.
- Market Value box — Refresh value asks Card Hedge again (one metered call). Four tiles: Card Hedge FMV · PSA 8 (their estimate for a PSA 8, built from recent sales; the chip Strong · 5 sales in 15 days is how much they trust it — hover for the range and the pull date; under it in blue Last sale PSA 8 $6,001, their most recent single sale at your grade) · Comp calc (your number from the comps you tick: highest and lowest dropped, the rest averaged) · Asking · Paid.
- Last Sale — one chip per grade, Card Hedge's most recent sale at each; your card's grade is blue. Single sales, not estimates.
- Sold Comps — the last ten sales, each with a tick box. Tick the ones that are truly your card; the Comp calc follows (N of 10 counted).
7Selling, gifting, un-selling
Every card leaves inventory through the same door: the Status dropdown at the top of the editor. What differs is which story you tell it.
7.1The Status dropdown
| Choose… | What opens |
|---|---|
| For Sale | A one-line confirm: Change status to "For Sale"? |
| Not For Sale | Change status to "Not For Sale"? — the keeper pile |
| Sold | The Mark Sold form (7.2) |
| Gifted (free — write-off) | The Gift this card form (7.4) |
| Write Off… (lost / destroyed) | The Write off this card form (7.5) |
Under the dropdown is a live status line: for a sold card, Cost basis $96.40 · Sold for $184.00 · Net Sale $161.28 · Profit $64.88; for an unsold one, cost basis and comp. A damaged card always shows ⚠ Damaged.
7.2Mark Sold
- Open the card and set Status → Sold.
- Pick Straight Sale or Trade.
- Set Date Sold — Year Sold is derived from it, and Year Sold is what drives your tax buckets.
- Pick the Sold Platform. Net Sale fills itself immediately.
- Type the Total (the gross). Net Sale recomputes.
- Optionally set Proceeds To — which account the money landed in.
- Confirm Sale. You get Marked sold ✓ and the grid, KPIs, chips and rollup all re-tally instantly.
How the net is worked out
Fees are data, not code. They live in Admin Console → Settings, and any change there takes effect on the very next sale with no deploy.
- Tiered platform (a fee ladder by price) — the bracket is chosen by the sale price; net = total × (1 − fee%) − flat fee. Tiers always beat the flat rate.
- Flat platform — net = total × (1 − fee%) − per-order fee.
- No fee data — Net Sale is left for you to type, pre-filled equal to the Total.
The label grows a live suffix showing the maths — (−12.35% − $0.40) or (−8% tier) — so you can always see why the number is what it is. These are estimates; the exact payout trues up when you run the eBay importer.
Validation runs in this order, and stops at the first failure:
- Date Sold is required.
- Sold Platform is required.
- Sale Type is required.
- Total (gross) is required.
- Net Sale is required — pick a platform and it fills itself.
- Net Sale can't be negative — money received is never below $0.
- Net Sale can't exceed Total (gross) — fees only ever reduce the sale price. Check the two amounts.
7.3Gift profit to BKCards71
Immediately after a profitable sale on a card owned by Kevin or Brian, a second modal offers to move some or all of that profit into the company pool.
A gift can never exceed the card's profit (Gift cannot exceed the profit of $64.88.), and the owner must match exactly one contributor in the Accounting tab — otherwise you are told to record it there instead.
7.4Gifting the card
Status → Gifted (free — write-off). Two fields: Gift Date (defaults to today) and Gifted To. The explainer is blunt:
"Gifts are always free — if money changed hands, it's a sale. This books a $0 sale: the card leaves inventory and its full cost writes off as a loss in the gift year, on the owner's books. No platform, no proceeds."
Confirmation: Gifted to Marcus — cost written off.
7.5Writing a card off
Confirmation: Written off — Lost. Full cost books as this year's loss.
7.6The un-sell chooser — four stories
Moving a card off Sold is never a plain confirm. The app first restates what is on file — "Recorded sale: $161.28 net on 2026-08-11. What actually happened?" — and makes you pick the story, because the four stories have four different financial consequences.
| Story | What it does to the money | Confirmation |
|---|---|---|
| Strike the sale | Every sale field is cleared. Nothing else moves. | Sale struck — clean, no ledger trace (audit kept). |
| Returned & refunded | Sale cleared and the return cost you type is added to the card's Handling, raising its cost basis. A note is appended to the card. | Sale reversed — back in inventory, basis up $12.40 for return costs. |
| Order canceled & refunded | Sale cleared. The card never left inventory. | Order canceled — sale reversed, card never left inventory. Recorded in the card journey. |
| We kept the money | The original card is untouched — the sale stands. A brand-new card row is created at $0 cost basis carrying the identity, grading, photos and ownership. | Sale kept on the books. Physical card re-entered as new card #1974 at $0 basis — open it to adjust. |
8Card journey — the history timeline
The 🕘 History button in the editor header opens the card's whole life: bought, sent to grading, graded, listed, sold, reversed, archived. It is a record, never a calculation — nothing in the P&L, the tax schedule or the partner waterfall reads it.
Events are sorted by lifecycle position first, then by date, so the story reads in order even when a date is missing (those show date unknown in italics rather than jumping to the top). Every event type the app can draw:
- 🛒 Bought
- 📮 Sent to grading
- 🏅 Graded
- 🏷️ Listed
- 💲 Asking price changed
- 💰 Sold
- ↩️ Sale struck (mistake)
- ↩️ Returned & refunded
- 🚫 Order canceled & refunded
- 🔧 Sale corrected
- 🔁 Kept payment, card back
- 🎁 Gifted
- ✖ Written off
- ⚠ Damaged
- 📦 Archived / ♻️ Restored
- 🔍 Found / ❓ Lost
- 🤝 Loaned out / 🎪 At a show
- 📝 Note
Adding an event by hand
+ Add event records things the app cannot infer, or history that predates the log. It carries the warning ⚠ Events can't be edited or deleted afterwards — check before you add. — history is append-only in the database; a correction is a new event, never an edit.
The offered types are deliberately a subset: Note, Found, Lost, Loaned out, At a show, Damaged, Sent to grading, Graded, Listed, Asking price changed, plus five "— historical" variants (Sold, Returned & refunded, Order canceled & refunded, Sale corrected, Sale struck). Bought, live Sold, Gifted, Written off, Archived and Restored are not offered — those are only ever written by the flow that actually performs the action.
Money-bearing types add Gross $, Net $ and Order #, policed by the same rule as everywhere else: Net can't exceed gross — fees only ever reduce a sale.
Two small badges tell you where an event came from: reconstructed from card record means it was rebuilt from the card's own data when history was first seeded; added by hand means a person typed it. Events written by the app's own flows carry no badge.
9Bulk tools
Two different jobs share the word "bulk". Bulk Edit changes fields across many cards at once and lives in the Admin Console. Bulk Sale sells many cards as one order and lives in the Ledger.
9.1Bulk Edit — the picker
Gear → Bulk Edit. Filter down to the cards you mean, tick them, then act. Archived cards are excluded from the list entirely.
Eight facets are available: Status, Card Type, Item Type, Brand, Grader, Location, Owner and Card Year. Each is a multi-select with Select all / Clear, per-value counts, and blanks grouped under (blank).
9.2The bulk edit popup
Edit selected (N) opens the shared popup: "Tick the fields to change. Untouched fields are left alone. Blank = clear the value." A control stays disabled and grey until you tick its box — nothing can be changed by accident.
The three safety layers
- Tick to arm. Nothing is written for a field you did not tick.
- Two acknowledgements. The amber cost-basis warning appears whenever you touch Base Cost, Tax, Shipping, Handling or Grade Fee and the selection contains — or might contain — a sold card. The red clear warning appears whenever a ticked field has nothing typed in it, because that means erase.
- A final itemised confirm. Every Label → new value, with (clear) for blanks and Yes/No for switches, plus an overwrite estimate and every warning restacked.
What can and cannot be bulk-edited
31 fields across eight groups are editable in bulk: Identity (Card Year, Card Type, Item Type, Brand, Player, Listing Name, Purchase Name, CDP Name), Status & Location (Location, Showcase), Acquisition (Purchase Date, Purchase Platform, Pay Method, Owned By, Paid By, Purchase Order #), Grading (Grader, Grade, Grade Qualifier, Grade Fee, PSA Order #, Grading Paid By), Costs (Base Cost, Tax, Shipping, Handling), Valuation (Comp As Is, Expected Sale (10), Asking Price), Storage (Home, Show · Box, Show · Column, Show · Divider, Show · Display Case) and Admin (Counts in Financials, Notes).
Deliberately not bulk-editable: Card Name, SKU, Status, Sale Type, every sale field, cert number, damaged flags, photos, the listings, and all five calculated values. Sales are made one card at a time in the editor, or as a lot in Bulk Sale.
9.3Generate names
Generate names (N) rebuilds the canonical PSA-style Card Name for the selected cards from their own attributes — the same format the editor's Generate from attributes button produces.
Generation only runs one way — attributes → name. There is no reverse tool that reads a card name and fills in Brand, Set and Player from it.
9.4Bulk Sale — selling a lot
From the Ledger: Select to Sell → tick cards → Sell N selected →. You type the single total you actually received for the whole lot, and the app splits it across the cards proportionally by asking price, to the penny.
- In the Ledger, press Select to Sell and tick the cards (filter and sort freely — the selection follows the cards, not the rows).
- Press Sell N selected →.
- If any card has no asking price, an amber panel appears: "N cards in this lot have no asking price. Set them to continue — the split is weighted by asking price, so every card needs one." Type prices inline. Until you do, the rest of the form is dimmed and unusable.
- Set the date, pick the platform, type the Total Sale (Gross), and optionally the order id.
- Check the preview table — the Totals row must equal your order.
- Book N sales → confirm "Book 4 cards as SOLD for a total of $500.00 (net $500.00) on 2026-08-21? This marks every selected card sold."
10Intelligence — scan, values & research
The Intelligence tab is where the market comes to you, where a card in your hand becomes a card in the app, and where your cards get a market value. Four sub-tabs, left to right: Highlights · AI Card Scan · My Card Values · Market. It runs on Card Hedge, the catalog and pricing service behind the scenes. Nothing on this tab writes to your Ledger until a person rules on it.
10.0Highlights — the market on the way in
Intelligence lands on Highlights: a read-only portal of what the market is doing, refreshed by S&T every hour for every tenant — nothing here spends a Card Hedge call when you look. The rail shows as of the last pull, top-100 sales for 7 and 30 days, how many players are ranked, and what is new in the catalog. Category chips (All · Baseball · Basketball · Football · Hockey · Soccer · Pokemon) switch every board at once. Managers get Refresh now, which re-runs the pull under the deck clock.
- Movers this week — Card Hedge's biggest gainers: gain %, 30-day sales, price. Click open Movers → for the full board.
- Hottest players — the whole market, all categories, ranked by S&T: Hot = sold last week × momentum vs the prior four weeks × price move, with a one-line why and twelve weekly bars. Card Hedge has no "hottest players" feed; the app builds the pool from every feed it pulls (≈600 players in play) and ranks it.
- Category pulse — each category's weekly pace against its 30-day run rate.
- New to the catalog — cards added in the last 30 days, day by day, and the sets they landed in.
- Hottest sets — by 30-day sales.
- Most sold · last 90 days — one strip per grade: PSA 10 · PSA 9 · PSA 8 · BGS 9.5 · SGC 10 · CGC 10 · Raw, top five each with sales and 90-day average price.
Every tile jumps to its Market board with the filter already set; every card opens the Card View (10.9).
10.1What Card Hedge is — and when it is called
Card Hedge keeps a catalog of trading cards (every parallel is its own row, with a picture and a catalog id) and the recent sales for each. The app uses it for four things, and only these:
- Identifying a photo — the AI Card Scan. Their photo match returns the catalog card it thinks you photographed, the variant (Base, Silver, RayWave Refractor…), and how sure it is (a percentage). Their slab-label read returns the cert number, grader and grade off a graded holder.
- Pairing — stamping a catalog id on one of your cards so values and comps can be looked up. You see the pairing in the Ledger's Card Hedge column and in the card's Market Value section, and you can re-rule it any time.
- Valuing — a fair-market value at your card's grade, the grade-by-grade price ladder, and real recent sales with links.
- Cert details — what a cert number is, when you drop a slab photo on a review row.
10.2Uploading photos
- Front + back pairs (default) — photos pair in order: first is a front, second is its back, and so on.
- Fronts only — every photo becomes its own front-only card.
Files sort by filename in natural number order (img2 before img10). Non-images are
ignored; a single bad file never aborts the batch. An upload is only a photo in a holding area — no card exists yet.
10.3Scan selected — what a tile tells you
- Tick the tiles (or Select all) and click Scan selected.
- The S&T deck clock appears — Scanning with Card Hedge · answered 2 of 5. Each card is its own request, all sent at once, so five cards take about as long as one. Tiles fill in as answers land.
- Each scanned tile now reads, top to bottom:
- Scan · Card Hedge · High confidence — where the name came from and how sure Card Hedge is. Confidence is always a band — High (green), Medium (amber) or Low (red) — never a percentage; a photo match is never "100% sure".
- The card name, large and never cut off — the tile grows as many lines as the name needs
(
2020 PANINI MOSAIC #263 JUSTIN HERBERT MOSAIC GREEN). - Not it? Choose another (N) ▾ — a dropdown of the other cards Card Hedge considered, full titles with their confidence band. Pick one and the tile switches to it on the spot. This rewrites the scan only — no card in the app is touched — and the previous pick drops into the list so you can go back.
- A status line: the sport · RC · slab PSA 10 (the label was read; hover shows the cert) · and the answer to the only question that matters first: ✓ in app #3194 · same cert (green — certain, the cert is already on that card), looks like #2229 (amber — a name match, a maybe), or not in the app (blue — new).
- A full-width Review & add → button.
A tile that says No match — enter manually means Card Hedge had nothing for that photo; you can still open the review and narrow it down (10.4) or type the card in.
10.4Review & add — the three blocks
The review opens with your photo(s) on the left and three blocks in a fixed order. Read them top to bottom.
- In the app? Green Not in the app — new card, or amber
This cert is already in the app / This looks like a card you already have
with a Match to #id button for each candidate.
Match is a write, not a preview. Click Match to #2229 and the app asks: "Write this scan onto #2229? It fills that card's blanks (cert, grade, pairing, photos) — nothing is added." Only Yes, match writes. It never changes a name, cost, order or photo the card already has. A cert number belongs to exactly one card, so when the same cert is already in the app, Bring into App is disabled and Match is the only door. A name-only lookalike can still be brought in as a second copy — that is your call, and it is a real case (two raw copies).
- Card Hedge thinks this is… The catalog card's picture, its description, its confidence band (High / Medium / Low), the catalog id and variant, and Card Hedge's one-line reasoning. When Card Hedge picked a coloured parallel, a Heads up offers It's the regular card (Base) in one click. Then the question: Is that the card? — Yes — keep going below or Not it — unpair.
- Narrow it down. Type anything you know — a parallel ("raywave"), a set, a number — and click Ask Card Hedge. Your hint is combined with what the scan already knows (year, brand, set, player, number), and two answers come back as picture tiles with full titles: every catalog row that fits (up to 100 — each parallel is its own row, ranked by your words; a parallel spelled as one word, "Raywave", still finds "Ray Wave Refractor") and Card Hedge's single AI pick with its band. Click a tile and the review re-pairs to that card. The box empties when you open a different card's review. Tip: their AI wants a card-like phrase ("2025 Topps Chrome Update Will Smith RayWave"), not a sentence.
Then Other cards Card Hedge considered (pictures, full titles and similarity band — click one to use it) sits right under "In the app?", above the fields. Then the fields (Card Name with ↻ rebuild, Player, Year, Brand, Set, Subset, Number, Parallel, Category, grader / grade / cert, RC / auto / relic). Everything is editable; you always have the last word.
Finish with Bring into App. The card is created Pending (see 14.13), paired to the catalog card you confirmed, with your photos copied into the app's own storage. Bring selected into App does the same for many tiles at once — it skips tiles with no name yet and tiles whose cert is already in the app, and says so. Delete selected removes uploads only; it never touches a card.
10.5My Card Values — market values in bulk, and my cards that moved
My Card Values opens with My cards that moved: every card of yours whose value changed, with pills for Last week · Last month · Last 90 days, a category dropdown, ▲ Up / ▼ Down, a player search, and the totals — up, down, net. A card moves once it has been valued twice (a Check Value here, or the hourly watch feed for cards paired to the catalog). Click a row to open the card. Below it, the sub-tab prices your cards from real recent sales of the same card at the same grade. To value a batch:
- Open Intelligence → My Card Values.
- The status chips default to For Sale — deliberate, so you never spend valuation budget on cards that already sold. Switch chips to widen the set.
- Narrow further with the search box, the grader filter, or the value-state filter (never valued / stale / recent).
- Tick individual rows or use Select all, then click Check Value (n) — the button shows how many you selected.
- Watch each row fill in live as it is valued. The run ends with counts: valued · no sales found · on cooldown · failed. If the day’s vendor budget runs out, the run stops cleanly and tells you.
Hover a row to see the card’s big photo (it floats to the left, so your eye never travels); click the card’s name to open the full card editor. The Location column sits beside Grade so you can find the physical card.
10.6How a value is computed — and the 7-day rule
For each card the engine pulls sold listings that match the card at its grade, throws out outliers, and weights recent sales more heavily. What comes back with the number:
- Sample size — how many sales the value stands on, plus a low–high range.
- Confidence — strong (8+ sales), fair (3+), or thin. Thin values are honest guesses; treat them that way.
- The last three sales, with links — click through and see for yourself.
- The true window — “No sales in last N days” always states the real number of days the data covered, never a guess.
Each card can be re-checked after 7 days; the row shows the exact date it becomes eligible again (e.g. again 9/05). The cooldown is a feature, not a limit — it keeps vendor costs sane and the numbers meaningful.
10.7Cards at the grader
A card with a grader chosen but no grade yet is at the grader. The app shows its grade as Pending (blue), Location says where it is, and the engine values it as a raw card — with the grader’s name stripped from the search — until the grade comes home. Why: a raw card titled “PSA” would otherwise soak up graded-copy prices and value itself at many times reality. The value carries the disclosure “At PSA for grading — valued as RAW until the grade comes home.”
10.8Market — any card, the whole market
Market has its own strip. Every board opens on the hourly snapshot (no calls spent), every table filters and sorts on every column with Showing X of Y, and a search or a set click is the one live question, under your meter.
- Card Lookup — type any card (player, year, set, number, parallel), pick a category, Research. Every parallel is its own row with 30-day sales and PSA 10 / PSA 9 / Raw prices. Click a row → Card View.
- Movers — the weekly gainers board by category, with a gain histogram; Last week / Last month sort.
- Most Sold — what actually moves at a grade in the last 90 days: PSA 10 · 9 · 8 · BGS 9.5 · SGC 10 · CGC 10 · Raw, by category; a search narrows to a set or player.
- Players — the hottest-players ranking (hot score, sold last week, momentum, average price move, weekly bars, why), then Player watch: name up to 25 players (suggestions as you type) for 7 / 30 / 90-day totals and twelve weeks of volume and dollars.
- Sets — hottest sets by 30-day sales, by category; search by name; click a set for its cards ranked by sales.
- Watchlist — the cards you asked to watch (☆ in any Card View), the latest price seen, the change, and when. Price changes arrive with the hourly pull. ✕ stop to unwatch.
10.9The Card View
The same frame of information wherever a card is found — it slides in from the right and never moves you off the list you were on:
- The picture, the name, sales in the last 7 and 30 days, the catalog id, and parallel chips — every parallel of that card, one click to switch.
- In the app? — looks like #id with the card's name (click to open it), or "not that we can see — a card you'd be buying new".
- Price at every grade — click a grade for the rest.
- Fair market value at that grade with its band (High / Medium / Low), the sample and freshness, Card Hedge's one-line explanation, and a second-opinion estimate beside it.
- Comps — ten recent sales with dates, prices, sale type and links.
- 180-day price line at that grade.
- Should I grade it? — type what you'd pay raw and the grading fee; the table shows what it sells for at PSA 10 / 9 / 8 / 7, the profit after the fee, the gain over selling raw, and the break-even grade highlighted.
- ☆ Watch this card — adds it to your Watchlist (10.8).
11Platform Connect — eBay
The marketplace side of the app. Your organization connects its own eBay seller account once; from then on the app can act on that account — and only that account — on your behalf. Nothing here runs on its own: every sync, listing and order is something a person starts and reviews.
11.1Connecting your eBay account
- Click the gear → Platforms.
- Under eBay, click Connect eBay.
- You are sent to eBay's own sign-in page. Sign in to the seller account you want the app to manage. The app never sees your eBay password.
- eBay shows a consent screen — “S&T Card Manager wants to view and manage your inventory and offers, view your orders…” — click Agree and Continue.
- You land back in the app with a green line: eBay connected as yourname.
The Platforms card then shows the connected account, the environment, status, when it was connected, when the app last used it, and the exact permissions granted. eBay issues the app a token that is stored encrypted; the app refreshes it as needed. Each organization's connection is its own — a partner in your organization sees the same connection; nobody outside it can.
11.2The Platform Connect tab
The sixth top-level tab, full width. Sub-tabs per marketplace — eBay today; Mercari, Shopify and Whatnot are placeholders. The eBay panel shows the connection chip (Connected as yourname · production) and the three stages of the pipeline:
| Stage | Direction | What it does | Status in this edition |
|---|---|---|---|
| First-time sync | eBay → app | Pulls every active listing from your eBay account, sorts them by whether they are already in the app, and lets you confirm matches, add new cards, and choose which listings the app should manage (§11.4–11.5). | Live — pull, match, review and Apply (Confirm / Add). Manage is recorded; the take-over itself is a later build. |
| List cards — Flights | app → eBay | Build a named set of cards (a Flight), set the eBay choices once for the set, check each card's readiness, then publish (§11.6). | Live up to publish — publish itself is the next build. |
| Orders | eBay → books | Every eBay order, any status, arrives on its own; a sale that ships books itself; you match, check and correct (§11.9). | Live (Ed. 4.5) |
Edition 4.5: the tab is a strip — Overview · Sync · Flights · Orders — one thing on screen, and it remembers where you were. At the right end of the strip one pill reads ● Connected as yourname · production; while the app is asking eBay for anything the dot turns yellow and the pill grows a · checking eBay… tail, then shrinks back. Manage connection beside it opens Platforms. Overview shows four tiles (linked listings by manager, for sale, Flights open, orders in the last 7 days), the eBay push panel (Turn on eBay push → On ✓) and the First-time order sync panel (Sync two years →). Listings and Flights still wait for a person; orders do not — they arrive by themselves.
11.3One manager per listing
If another tool (for example Card Dealer Pro) already manages some of your eBay listings, the two must never manage the same listing — the last one to write wins on price and quantity. The app can tell which listings another tool made (they show Managed by: CDP) and which were made by hand on ebay.com (Managed by: nobody). A listing managed by another tool can be confirmed or added to your collection, but it gets no Manage control at all — not greyed out, absent — until you revoke that tool in eBay (Account › Third-party app access).
11.4First-time sync — the words
| Word | Means | Touches eBay? |
|---|---|---|
| Add to collection | Pull a listing down and create the card in the app | No |
| Confirm | This listing is a card already in the app — stamp the eBay item number and “managed by” on that card | No |
| Manage | The app takes that listing over on eBay. Only possible when nobody else manages it | Yes (later build) |
| Leave alone | Nothing happens | No |
| List on eBay | Cards in the app, not on eBay, pushed up in a Flight (§11.6) | Yes |
After a match, listings sit in one of three boxes. In the app means proof — the eBay item number or SKU is on a card that isn't sold, the stored title is identical, a cert number matches, or the title is a strong match (75% or better with the price agreeing). These arrive already chosen: the card picked and Confirm ticked. Possible is the matcher's weaker guess (50–75%), offered but not chosen. Not in the app has no evidence — and it also holds any listing whose only match is a card the app says is Sold, because a live listing on a sold card is a relist, a second copy, or a stale listing, not the same card; the sold card stays in the dropdown for reference.
11.5First-time sync — step by step
- Pull listings. The stat line shows how many are live, Buy It Now vs auction, how many another tool made vs hand-made, and the total list price. The table appears at once.
- Match to cards. The three boxes fill with counts; each has its own sub-chips (Proof · Strong title · Duplicate listing · NFS in app · Sold in app · CDP-managed · Hand-made…).
- Every row has the same controls: Match to (a dropdown of the candidate card or none, plus find to search your whole collection), Confirm, Add, and Manage (appears only once Confirm or Add is ticked, never on a CDP row). The header boxes act on everything currently shown, so filter first, then tick all.
- Every column filters and sorts: listing title, price (high→low / low→high), format, managed by, app card, app status (including none), evidence. Photos show for both sides — hover to enlarge, click to pin.
- Duplicate listing means two live listings point at one card. Both stay with the card; the stronger is confirmed, the other waits for you — confirm the real one, and end (or Add, if you truly own two).
- Apply N. It confirms once (“N confirm · N add · N manage requested · nothing is sent to eBay”), then works row by row. Confirm writes the link and stamps the card: Listed On = eBay, item number, listing name, asking price where blank, a listed event in the Card Journey. Add creates the card (title, year, asking price = list price, item number, SKU, For Sale) and pulls the eBay photo into your own storage. Failures are listed and never block the rest. The match re-runs; applied rows come back as Already linked.
11.6Flights — sending cards up
A Flight is a named set of cards that goes up to eBay together, with the eBay choices set once for the whole set. It is also a permanent record of what went up and how. Every direction in works, and once you're inside you keep adding:
- From the Ledger: Select cards → tick cards → Add N to Flight ▾ → an open Flight or + New Flight…. (The button beside it, Record sale of N →, is the opposite job — booking a sale that already happened.)
- From the Flight itself: Platform Connect → eBay → List cards — Flights →
+ New Flight → inside it, + Add cards ▾: search the Ledger and click a
card to add it, or open one of the doors (Ed. 4.4):
- Add all Pending → N — every Pending card that is in no Flight yet, after a confirm that names the count. Nothing is sent to eBay.
- Scan photos (AI) → into this Flight · Search Cert → into this Flight · Add a card by hand → into this Flight — each opens that road with this Flight as the destination. A rose banner under the header on every tab says Flight door open — everything you bring in lands in Flight #N, with Back to the Flight and Done. While it is open, every card you add or match (the review grid, Scan's Bring into App or Match, Add Card) joins the Flight. It survives a refresh; Done closes it.
A card lives in one open Flight; adding it elsewhere moves it. Sold and archived cards are left out and counted. Remove a card with ✕; Close Flight releases its cards. The Flights list has Edit and Delete on every row, and inside a Flight Save & close and Delete Flight — everything saves as you change it; Delete releases the cards to the Ledger first and is only offered on a draft or closed Flight (a live one must be closed on eBay first).
The header (set once, applies to every card): name · Format (Buy It Now, or Auction with a 1–10 day length) · Schedule (list now when published, or a date and time — eBay holds a future start itself) · Best Offer (on/off, auto-accept ≥ %, auto-decline < %; not on auctions) · eBay category default (sports singles / CCG singles / non-sport) · from your eBay account: payment, shipping and return business policies, item location, and up to two store categories if you have an eBay Store — all pulled live, with ↻ Refresh from eBay, and plain instructions when policies aren't enabled or no location exists yet · notes. Pricing rule and title rule are the next build (pricing factor is 100% unless you set one, per Category or per card; titles follow PSA's label convention — year, brand and full player name are never abbreviated).
Readiness. Each card row shows its photo, name with its 80-character count, grade or raw condition, asking price, and readiness chips: no title · title over 80 · no front photo · no price · no year · no brand · no Category · no condition (raw) · sold. Fix a gap in the card panel or Bulk Edit and the chip disappears live. At publish, any card with a gap is held back with the reason; the rest go.
11.7Condition for raw cards
eBay requires a condition on every ungraded card. The card now has a Condition (raw) dropdown — Near Mint or Better · Excellent · Very Good · Poor, eBay's own values — in the card editor's Grading section, in Bulk Edit, as a Ledger column (Grading group, hidden by default), and in Dropdown Admin. Graded cards are covered by grader, grade and cert.
11.8Disconnecting
gear → Platforms → Disconnect (with a confirmation). Your eBay listings are untouched; the app simply stops being able to act on the account. You can also revoke the app from eBay's side under Account › Third-party app access — the next time the app tries, it will report the connection as revoked.
11.9Orders — every eBay sale, live (Ed. 4.5)
Orders is the one screen in Platform Connect that fills itself. There is no refresh button, on purpose: eBay pushes a note the moment an order is paid or shipped, the app checks eBay every fifteen minutes whether or not anyone is signed in, and the screen quietly re-checks the last ninety days each time you open it. The readout at the top tells you exactly that — Last filled · eBay history from · eBay push on · S&T Card Manager check every 15 min on · N new since your last visit — and new lines are highlighted.
The life of a line
| Stage | Means | What you do |
|---|---|---|
| Not in the app | eBay sold something the app can't pin to a card. | Match it (below) or Add to the app →. |
| Sold — not shipped | Matched to a card; the label hasn't been printed yet. | Nothing. Print the label on eBay as you always do. |
| Booked | Sold and shipped. The moment eBay reports the label, the sale books itself to the card — Sold, sale date, gross, eBay's real fee, net, shipping collected, order and item numbers, and a Journey line “Booked automatically — eBay reported the order shipped.” | Nothing, unless you want to record what the label cost (below). |
| Refunded | Only when eBay's payment ledger proves it (refund receipts covering the total, or the order was cancelled). A refund flag without receipts shows an amber eBay says refunded — check instead. | Rule on the card yourself (for example mark it Lost). A refunded line never books. |
| canceled | Never shipped, and refunded. | Nothing. |
Matching a line to a card
On a Not in the app line the app proposes: Cert match #N when the cert number in eBay's title is on one of your cards (certain), or Looks like #N from the title (ties say “identical”; a card that already sold shows its sale and order, and the one sold on this order comes first). Confirm #N links it. Not this card… opens a search of your own cards by id, cert or words. Add to the app → creates the card as Sold with the order's money, after a confirmation. Not this card… also lives on matched and booked rows: if a past booking landed on the wrong card, pick the right one — the app reverses the old card's sale only if it was booked from this very order (Journey: sale_corrected), links the right card and re-pulls the order.
Shipping cost on every row
Every line, at any stage, has a shipping-cost box. Blank means a wash (you charged what the label cost). Type a number and the app asks first — Set shipping cost to $X on #N? Was wash. Net moves by ±$Y — then writes it to the order and, on a booked row, to the card, so Net Return moves in the database, with a Journey note.
⚠ Check — hygiene on old bookings
Beside the search box a yellow pill, ⚠ Check N, counts booked lines whose card doesn't agree with the order: first by item number (card was booked from item X, this order is item Y), then by words — a real grader label one side lacks, a numbered parallel, a colour or parallel word. Click it: the Check view shows those lines with an amber bar, a tick column, Select all and ✓ It's this card — accept N; both pictures appear on hover (S&T Card Manager card / eBay card) so you can judge. Accept the good ones; use Not this card… on the wrong ones. Accepted pairings are remembered and never flagged again; the pill turns green — ✓ Uncheck N — when nothing is left to check.
Pictures, columns, periods
Matched rows carry the app's thumbnail; hover the card's words for a white name pop-up above them, hover the picture for a larger frame beside it. Unmatched and flagged rows show both pictures (eBay's comes from the listing gallery; eBay deletes ended listings after about ninety days, so very old lines honestly have none). The thumbnail, ⚡, Sold date and Card columns are frozen; every other column sorts (▲▼) and filters (a funnel with values or a min–max); columns resize and remember their width. Money reads as the old report did — sold, shipping collected, tax, fee (eBay's real fee per line), net in green or red — with buyer, order id and item id beside. Periods: 7 · 30 · 90 · 365 · 730 days · All, or a Year ▾. The rows scroll; the page and the footer (Showing X of Y) do not.
11.10Several identical cards — one listing (Ed. 4.6)
eBay wants six identical cards as one listing with a quantity, not six listings. The Flight does that for you.
- Add the cards. Type in the Flight's search box (card id, name, SKU or cert). A list opens with checkboxes — tick the ones you want (or the master checkbox at the top), then Add N selected. They appear in the Manifest at once. If the screen ever looks behind, the blue ↻ Refresh Flight re-reads everything.
- The app spots them. When two or more cards look like the same card (same year, brand, set, card number, parallel, grade — and, once set, condition), an amber band appears: These look like the same card — 6 × … · Make them one entry ▸ · Keep separate. Make them one entry asks first and gives them all the same, most complete name; the six rows become one group row.
- The group row. Picture, name, an amber × 6, "one listing · quantity 6", one Asking (each) price, policies, readiness, and at the right Split (back to singles) and Remove all 6 (out of the Flight; the cards stay in your Ledger). Click ▸ to see the six copies — each with its own Condition, its Asking and Cost, its owner and purchase date, and an ✕.
- One price for all. Type a price in Asking (each) and tab out: Asking price $4.00 for all 6 cards? Update all 6 writes it on every card in the Ledger so the Ledger, the drawer and the listing agree; Just the listing leaves the cards alone.
- Pictures. The listing needs one picture. Use the group row's Front + / Back + pockets (the picture lives on the Flight, not on any card), or let it borrow a copy's picture — a tiny #714 tells you whose; Choose picture ▾ picks another copy's.
- Condition. eBay lists one condition per listing. If no copy has one, Condition for all 6 ▾ sets them all. If some are set, Set the N blanks ▾ fills only the empties. If the copies differ the row says so — 3 × Near Mint or Better · 3 × Very Good — and Split by condition ▸ makes one listing per condition.
- Readiness. Yellow chips name what eBay still needs — no title (or title 84/80), no front photo, no price, no year, no brand, no Category, no condition (raw), no cert number (graded), conditions differ (groups), sold, archived. They disappear as you fix them; then the row reads green ready.
- Review → Publish. Review shows a group as one row, × 6 · one listing, total = 6 × price. Publish N to eBay counts what's new; cards already live are never sent again — the button reads All live on eBay and tells you No changes to publish.
11.11Multi-buy — buy more, pay less (Ed. 4.6)
eBay calls it Volume Pricing. In the Flight's Pricing rule box, switch Multi-buy on and set up to three tiers — Buy 2 save 5% · Buy 3 save 10% · Buy 4+ save 15%. It applies to the group listings when the Flight publishes. On a live listing, the card's On eBay box has a Multi-buy row with Send multi-buy and Remove multi-buy.
11.12Dashboard and Sync (Ed. 4.6)
The strip is now Dashboard · Sync · Flights · Orders, and it is always live: click Flights from inside a Flight and you're back at the list (unsaved name or notes ask Save and leave · Leave without saving · Stay; everything else in a Flight saves the moment you change it).
Dashboard — numbers only: live listings the app manages · all linked listings · group listings · cards for sale in the app · Flights open · orders in the last 7 days · sales in the last 30 days · orders not yet matched to a card. Under the tiles, eBay connection: the live feed as a light switch, green On / red Off. On = eBay posts sales the moment they happen; off = Orders still refreshes every 15 minutes. Turning it off asks first.
Sync — where you act. Connected as bkcards71 with Manage connection, then two separate first-time jobs, each done once: Orders first-time sync (two years of eBay orders into Orders, reconciled to your books; after this Orders keeps itself current) and Listings first-time sync (your active eBay listings, sorted by whether they're already in the app — §11.4–11.5).
12Financials — the executive dashboard
Violet. Everything on this page is about cards only: what you bought, what you sold, what you are holding. Operating expenses, capital and partner payouts are not here — they live in Accounting.
Because there are no expenses at this layer, Revenue − COGS is exactly Gross Profit. That is why you will find a Gross Profit tile and no separate "Net Return" tile — they would be the same calculation under two names.
12.1Scope — the single most important thing on this page
| Visual | Follows the year pill? |
|---|---|
| Revenue · COGS · Gross Profit · ROI · Avg Days to Sell | Yes |
| Invested Capital · Unrealized P/L · Top-Card Concentration | No |
| Gross Profit by Platform | Yes |
| Gross Profit by Year · Revenue vs COGS by Year · Units Sold Over Time · ROI Distribution · Grade Lift · Best & Worst Flips | No — they show every year on purpose |
| Everything in Inventory & Velocity, Mix & Exposure, Buying Discipline, Grade Distribution, Grading Spend, Data Quality | No |
12.2The eight KPIs
| Tile | What it is | How to read it |
|---|---|---|
| Revenue | Gross sales of the cards sold in scope | Sub-line gives the card count |
| Cost of Goods Sold | Total cost of those same cards — basis + grading + shipping | The gap to Revenue is gross profit |
| Gross Profit | Revenue − COGS | Green above zero, red below; margin shown beneath |
| ROI | Gross profit ÷ COGS | Lifetime, not annualised — a one-week flip and a three-year hold count the same |
| Invested Capital | Cost basis tied up in unsold, for-sale inventory | Excludes Not-For-Sale |
| Unrealized P/L | Comp − cost across only the inventory that has a comp | If coverage is 42%, the number describes 42% of the book. Directional, never a balance-sheet figure |
| Avg Days to Sell | Mean purchase-to-sale time | Your cash conversion speed |
| Top-Card Concentration | Biggest single card as a share of invested capital | Single-name risk |
12.3The seven sections
| Section | Contains | What it is for |
|---|---|---|
| Capital Health | Gross Profit by Year · Capital Position (six mini-stats) | The shape of the business over time and where the money sits right now |
| Sales Performance | Revenue vs COGS by Year · Gross Profit by Platform · Units Sold Over Time · ROI Distribution | Which channel actually makes money, and the shape of your flipping strategy. A fat Loss bar beside a fat 300%+ bar is a barbell — a few home runs paying for many strikeouts |
| Buying Discipline | Avg Acquisition Cost by Brand and by Platform (top 10 each) | Average ticket size, not performance. A brand bought fewer than three times does not appear at all — absence is not zero |
| Inventory & Velocity | Inventory Aging · Money in Inventory by Sport · Dead Money | The red 90+ d bar is your problem. Aging counts from purchase, not from listing |
| Grading Performance | Pipeline chips · Grade Distribution · Grade Lift · Grading Spend by Payer | The Raw bar in Grade Lift is the control group — the case for grading is every bar that clears it |
| Mix & Exposure | Value by Sport · Value by Brand · Asking-Price Bands · Top 10 Cards by Cost Basis | Concentration risk in plain sight |
| Best & Worst Flips | Top Winners · Worst Losers, eight rows each | Ranked by absolute profit, not ROI — a $2 card that returned 900% will never appear here |
12.4The AI analyst
Two flavours of the same thing. Brief the board ↗ at the top writes a whole-dashboard CFO briefing; each section also carries its own Ask the analyst ↗ button. Both become Regenerate ↻ once text exists.
The analyst is instructed to cite only the figures it was handed and never to invent one, to write three to five tight sentences, and to stay inside this tab's scope — it is explicitly forbidden from commenting on net income after expenses, because that data is not on this page. Changing the year pill clears every paragraph, so a briefing can never describe a scope other than what is on screen.
Data Quality is the one section with no analyst panel.
12.5How the flags feed back
- $0 total cost inflates ROI and Grade Lift — those cards are skipped by the ROI histogram, so the bars will not add up to your sold count.
- Sold, missing Date Sold degrades Avg Days to Sell and pushes stray points onto the bare-year positions of Units Sold Over Time.
- Inventory w/o comp is exactly the gap behind the Unrealized P/L coverage percentage.
The page footer is your fastest sanity check: Card-trading performance · computed live from 1,958 live cards · 822 sold · 1,125 in inventory. Those three counts should tie to the Ledger footer.
13Accounting — the books
Emerald. This is where everything that is not a card gets typed in, and where the whole business — cards plus expenses plus capital — is turned into a P&L, a partner waterfall and a tax schedule.
Two sub-views, and their hints tell you the convention: Ledger — Entry surface — you type it; Statements — Computed — finance & tax. Green means you type it; computed screens are read-only.
13.1The Ledger sub-view
The five summary stats plus the total:
| Stat | What it collects |
|---|---|
| Operating Exp | Business, counts-in-books entries whose category starts with "Operating Expense" |
| Capital Equip | Categories flagged as capital equipment (CapEx) |
| Write-Off | Categories whose name contains "Write-Off" |
| Owner Capital | Categories flagged as capital contributions |
| Personal (excl.) | Every personal-scope entry, whatever its category — counted here and nowhere else |
| Total · in books | Everything business + counts-in-books, including CapEx and Owner Capital. It is "what hit the books", not an expense total — so the four stats above it will not add up to it. |
Four columns carry funnels — Category, Vendor, Paid By, Freq and Reimb — with Select all / Clear and an Apply link. Blanks show as (blank). Clicking anywhere on a row opens it for editing; there is no separate edit button.
13.2Adding an entry
Required fields, checked in this order: Title is required. · Category is required. · Frequency is required. · Recurring entries need a start date.
The five managed dropdowns
Category, Vendor, Paid By (Contributor), Paid By Method and Frequency are all add-as-you-go: press +, type a name, press Add or Enter. Two levels of duplicate protection: an exact match (ignoring case) silently selects the existing one, and a near match warns first — Did you mean "Card Dealer Pro"? Click Add again to create new.
The New Cards block
When the category is exactly New Cards, an extra block appears: "Bulk lot: keeper cards are already in the card P&L. Enter how much of this lot went to keepers; the leftover becomes business COGS." Type the keeper allocation and the live read-out Leftover → COGS shows the remainder.
13.3Recurring entries
One row, not many. A recurring cost is stored once, carrying the per-occurrence amount, the interval, a start date and an optional end date. The table shows the multiplier inline — Monthly ×7 — and the Total column is amount × occurrences.
- The current, in-progress month is not counted until it ends. A monthly bill started in January and viewed in mid-August counts 7, not 8.
- To stop a rule, set an End Date. Occurrences after that month stop counting immediately, in every year scope.
- Prior-year / this-year / all-time totals come from flipping the year toggle, not from an in-row breakdown.
Note also that the year toggle offers only All, 2025 and 2026 — that list is fixed in the code and will need a developer to extend it when 2027 arrives.
13.4Reimbursements
Tick Reimbursable and the block opens: Not yet (owed) / Partial / Fully reimbursed, plus Reimbursed Amount, Reimbursed To and Reimbursed Date.
Any reimbursable entry counts, whatever its category — supplies, capital, opex. The result shows up in Statements under Out-of-pocket paid (reimbursable, unsettled).
13.5Statements, block by block
Nineteen blocks in a fixed order. Two frames are used and never mixed: the business P&L is sold-year (revenue recognised at sale, the IRS basis), and the capital waterfall is purchase-year cohort — everything before 2026 is one lump called 2025 & before.
The three rules that drive every partner number
- Cost recovery → the payer. Whoever fronted the money is credited back what they put in, capped at cost.
- Profit → the owner. Gain above cost goes to whoever owns the card. If BKCards71 owns it, the gain goes into the company pool; if a partner owns it, they keep it (less anything they gifted).
- Loss → the payer. A shortfall is charged to whoever paid, always, even when somebody else owns the card. That is a real out-of-pocket loss and it flows to their personal return.
Upside follows ownership; downside follows the wallet. That asymmetry is the whole model.
| # | Block | What it tells you |
|---|---|---|
| 1 | Four KPI tiles | Gross Profit · Net Ordinary Income · Capital Recovered · Total Still Out |
| 2 | P&L Bridge | Five magnitudes: Sales, COGS, OpEx, Write-Off, Net Income |
| 3 | Net Owed by Company → Partner | One bar per partner |
| 4 | Capital: Recovered vs Still Out | Stacked, by purchase cohort |
| 5 | Operating Expenses by Category | Donut of the OpEx mix |
| 6 | Business Accounting · P&L | The six-line statement. CapEx and owner capital sit outside it, on purpose |
| 7 | Cards Only · Capital Waterfall | Cost advanced → grading adjustments → recovered → still out, per partner |
| 8 | Shipping Ledger (Both Legs) | Collected from buyers, less what labels cost, = shipping margin |
| 9 | Write-Offs | Gifted · Lost · Forgery · Ripped Off · Destroyed, with a separate amber watch line for damaged-but-still-held cards |
| 10 | Non-Card Position (Ledger) | Out-of-pocket unsettled + capital contributions = non-card owed |
| 11 | Total Owed (All Sources) | Card capital still out + non-card owed − distributions taken |
| 12 | Reconciliation | Why the three partners do not sum to zero |
| 13 | Distributions | Money actually taken out. + Record to add one |
| 14 | Out-of-Pocket by Payer & Owner | The payer × owner matrix |
| 15 | Loss Carried by Partner | The figure that flows to a personal return |
| 16 | Partner Accounting · Tax pass-through | Profit kept − losses carried = net to personal return |
| 17 | Profit Gifts | Every gift of partner profit into the company pool |
| 18 | Profit Distribution | Sliders that split the company pool by percentage, per year |
| 19 | Tax Schedule | Per-card gain/loss, sorted biggest-loss-first — the harvesting worklist |
Recording a distribution
+ Record opens a small drawer: Date (drives fiscal year), Partner, Amount Taken, Kind and a note. Kind matters:
- Payout — reduces the partner's total owed, but is invisible to the Profit Distribution table.
- Capital Return — reduces total owed and is tracked as capital taken.
- Profit Draw — the only kind that reduces Profit still owed on the split table.
Setting the profit split
Sliders appear only when a specific year is selected. Drag each partner's percentage, watch the target dollars move live, then press Save Split. The total is shown in emerald at exactly 100% and amber otherwise, with (should equal 100%) appended — but nothing forces it. A split summing to 90% simply leaves 10% of the pool unallocated.
13.6Excel export
Export to Excel (All Years) — or the selected year — appears in the Statements sub-view and produces BKCards71_Accounting_All-Years.xlsx with nine sheets:
- P&L Summary — the six lines, plus CapEx, owner capital and the sold count
- Tax Schedule — per card, with owner and payer, and a TOTALS row
- Partner Positions — still out, non-card owed, distributions, net owed
- Out-of-Pocket — the payer × owner matrix
- Partner Tax — recovered, realized loss, profit kept, profit gifted, net to return
- Capital Waterfall — the six lines per partner, with the cohort label
- Non-Card Ledger — the raw entries
- Distributions — year-filtered
- Profit Gifts — the gift trail with a total
13.7Numbers that must tie
These are the internal identities the app maintains. If one of them fails, something is wrong and worth raising:
| Assertion | Where you can see it |
|---|---|
| Per-card gain/loss adds up to Gross Profit | The Tax Schedule footer literally prints Gross Profit as its column total |
| Gross Profit = Gross Sales − COGS + shipping margin | P&L block |
| Net Ordinary Income = Gross Profit − OpEx − Write-Off | P&L block (CapEx and owner capital excluded by design) |
| Adjusted capital advanced = cost advanced + grading for others − grading by others | Waterfall rows 1–4 |
| Still out = adjusted advanced − recovered | Waterfall rows 4–6 |
| Grading paid for others totals the same as grading others paid for you | Waterfall rows 2 and 3 — if they differ, a partner name failed to match |
| Cost out − recovered = loss, in every matrix cell | Out-of-Pocket footnote |
| Total owed = non-card owed + still out − distributions taken | Total Owed block |
And the external reconciliation targets the whole system has been checked against: 822 cards sold (582 / 240) · Net Return −$4,717.42 · Total Sold $85,426.58 · 1,125 in for-sale inventory · $75,603.83 money in inventory · 1,958 live, 15 archived.
13.8The Ledger toolbar & CSV export
The Ledger header carries four buttons: Export CSV, Import Receipt Photos, Import Statement, and + Add Entry. The two importers are activators: click one and its panel opens as a pop-up over the ledger with the button lit; opening the other closes the first. The only ways out are the panel’s red Cancel ✕ or switching panels — the buttons never change their labels on you.
Export CSV downloads the ledger you are looking at —
<org>_Ledger_2026.csv for a year, …_All-Years.csv for everything —
with one row per entry: dates, titles, categories, vendors, who paid, pay method, unit cost,
frequency, how many occurrences the year scope generated, the total in scope, and the reimbursement
fields. It foots to the on-screen totals to the penny, which makes it the file you hand an
accountant or paste to an assistant.
13.9Importing a bank statement
Click Import Statement, then Choose CSV Files… and pick your bank’s exports — several at once is fine (checking and credit card together). The app reads each line and sorts every one into a labeled group with its reason printed beside it:
| Group | What happens and why |
|---|---|
| Transfers | Skipped. A credit-card payment appears in both accounts — that is the same money twice, not an expense. |
| Income already on cards | Skipped. Marketplace payouts are your sale proceeds; they already live on each sold card as its Net Sale. |
| Card costs | Skipped. Card purchases and grading charges ride on the cards themselves — booking them here would double-count. |
| Shipping labels | Skipped as expenses. Label costs belong on the sale they shipped (the Shipping Ledger), never in OpEx. |
| Covered by a recurring rule | Marked “covered,” never booked twice. The matching rule is named on the line. If the amount ever drifts from the rule, it is flagged. |
| Bank fees | Pre-ticked, ready to book under Bank Fees with the bank as vendor. |
| New — needs review | Everything else. Titles are editable in place; pick a category, tick, book. |
Three guardrails you will notice:
- Duplicates arrive un-ticked. A line whose amount matches an existing entry within a few days (banks post late) is flagged already in ledger and needs a deliberate tick to book.
- Repeating amounts get recognized. The same amount in different months raises a banner — “looks like a monthly bill” — with a one-click Create recurring rule.
- An unknown card offers to introduce itself. A last-4 the app has never seen shows an amber bar: name it, and it becomes a payment method on the spot.
Booking talks back loudly: a green banner (top and bottom) counts successes; failures stay red and active with a plain-English reason on the exact row (“pick a category”), and already-booked rows are never re-sent — click Book as many times as you like.
13.10Importing receipt photos
A bank line like AMAZON MKTPL*562SQ9FA0 tells you nothing. The receipt tells you
everything. Click Import Receipt Photos → Choose Photos… and
pick up to ten screenshots or photos — Amazon order summaries, store receipts, anything readable.
- The app reads each image and proposes ledger lines: vendor, date, order number, total, and which of your cards paid, read straight off the receipt’s last four digits.
- A receipt with several items becomes several lines — one per item, each with its own price and its own category. Tax or shipping hiding in the total is spread across the items fairly, to the penny, and labeled on each line (“incl. $1.27 tax/ship”) so nothing is invented silently.
- Quantities survive: “2 @ $15.94” is shown on the line and saved into the entry’s description along with the order number — permanently searchable.
- If the paying card is a personal one, the line arrives pre-marked reimbursable to its owner (see 12.11). A company card arrives unmarked. Either way you can flip it.
- An unknown card offers the full introduction: name it, choose whether purchases on it are always reimbursable and to whom — answered once, remembered forever.
- Review every line, adjust titles/dates/amounts/categories in place, tick, and Book. Same feedback rules as the statement importer: green ✓ booked rows are final and never re-sent; failures stay active in red with the reason in plain words.
13.11Payment methods that know themselves
Every payment method can carry three facts beyond its name: the card’s last four digits, its kind (credit, debit, checking, cash, PayPal…), and its reimbursement default — whether purchases on it are business-reimbursable and to whom. The house naming style makes methods self-explanatory: BK CC (Kevin) - 0881 is the company credit card Kevin carries; Kevin 9486 is his personal Discover.
This is what makes the importers feel telepathic: a statement or receipt that mentions
…0881 files itself against the right method, brings the right paid-by, and pre-answers the
reimbursement question. Set the last-4s up once — in the ledger or right inside an import — and every
statement afterward sorts itself.
14Data Import
Gear → Data Import. Manager-only. Seven importers behind one screen, plus a drop layer that reads a file's header row and takes you to the right one. Every importer follows the same shape: load → match → review → apply, and nothing is written until you press Apply.
14.1Drop a file and let it route you
Drag any file anywhere onto this screen. The app reads its header row and tells you which importer it belongs to. Nothing is parsed or written by the detection layer — the verdict only moves you to the right screen; the importer still asks for your approval before a single row is written. Routing, never applying.
| Confidence | Meaning |
|---|---|
| high | The gate matched and most of the columns that importer reads are present. Only high-confidence single-importer drops are loaded for you automatically. |
| medium | The gate matched but fewer than half the useful columns are there — the import will be thin. |
| low | The gate matched but a required column is missing. Low means the importer will still refuse the file. You are routed there to look, never auto-loaded. |
| none | Nothing matched. |
Three things the drop layer will tell you honestly:
- Single importer, high confidence: "Switched to eBay orders report below and loaded the file — review it there, nothing is written yet."
- Single importer, lower confidence: "Not loaded automatically because the match wasn't high confidence — check the warning above, then load it by hand if it's right."
- Mixed drop: nothing is switched at all, and you get the breakdown. Guessing which half of a pile you meant is exactly the kind of helpfulness that loses money.
Each importer keeps hold of the files dropped for it until you press Clear — so you can drop Listings, then PSA, and Listings is still there when you go back: Files still held: ebaysales (1) · cdp (2) — each importer keeps its own until you press Clear.
14.2Generic CSV — any file, propose → review → approve
"Upload any CSV. Confirm what each column means, review every proposed change old-beside-new, and nothing writes until you approve it. Sold Price / Date Sold only ever write to cards already marked Sold — this tool never changes a card's status."
The eleven roles: — ignore — · Card Name (matching + optional rename) · Cert Number (matching + fill if empty) · SKU / Custom label (matching + fill if empty) · Purchase Price (base cost) · Asking Price · Sold Price (sold cards only) · Date Sold (sold cards only) · Order ID (marketplace order number) · Year (improves matching) · Player (improves matching).
Two gates stop you before you can do damage:
- Map Cert Number or Card Name first. — a mapping that could not match anything.
- Map at least one field to write (a price, date, cert) — or tick the rename box. — a mapping that could match but could not write.
How rows are matched
| Tier | Test |
|---|---|
| CERT | The cert number matches exactly |
| SKU | The SKU matches exactly |
| EXACT | The normalised card name is identical |
| STRONG | A close fuzzy name match (0.80 or better) |
| MAYBE | A weaker fuzzy match (0.45 or better) |
| NO MATCH | Nothing |
A matching Year adds a small bonus, and so does a matching Player — which is why mapping those two columns is worth doing even though they never get written.
Applying asks first: Write 42 selected change(s) to 38 card(s)? This INCLUDES 6 overwrite(s) of existing values. Writing a Date Sold also sets the Year Sold from it.
14.3eBay Sales — the money importer
This is the only eBay importer that books money. Upload the eBay orders report; it matches by eBay item number first, then base SKU, then title, and uses the file's real Sold For and Shipping — no guesses.
| Bucket | Meaning | Auto-ticked? |
|---|---|---|
| NEW SALE | A matched card that is not yet sold — this is the sale to book | Yes, unless it was a weak guess or two rows claim the same card |
| MISMATCH | The card is already Sold under a different order, and the numbers differ. Every difference is listed old → new | No — never written unless you tick it |
| DONE | Already sold under this order. Left alone | n/a |
| NOT IN APP | No card matched. Tick it and the card is created from the sale, already marked Sold | No |
| ⛔ SKIPPED | Refunded, canceled, $0 gross, or a net that computes to zero or less. Shown so you know they were seen | Never — they can never be written |
| 🚨 REFUND BOOKED AS SALE | This file proves the order was refunded and a card is booked against that exact order | Never |
Before writing anything, a collision check runs across everything you have ticked: Two or more ticked rows write to the same card (#2303, #2486). Only one can be right — the second would overwrite the first. Untick all but one for each, then apply.
Result: Applied. Brought in 128 sale(s), created 6 new card(s), skipped 18, 0 failed. Reload the Ledger.
14.4eBay Listings — stamping item numbers
Books nothing. Upload the Active Listings report and it stamps the permanent eBay Item Number onto each card, so every future sale matches exactly instead of by fuzzy title. The checkbox only cards missing an item # is on by default. SKU and strong title matches are auto-ticked; weak ones are not. Result: Stamped 84 item number(s), 0 failed.
14.5eBay Purchases — filling the buy side
The only importer that reads a real Excel workbook as well as CSV. Each purchase is fuzzy-matched by name to an existing card. Each row gets a dropdown: ✓ Fill match, ➕ Create new, or Skip.
- Fill match only fills blanks — base cost when it is zero or empty, purchase date when empty, purchase order number when empty. It never overwrites a cost you already recorded.
- Create new makes a card at For Sale with the raw eBay item name as the intake name, the item price as base cost, the order number, and the eBay image pulled into our own storage.
Result: Applied. Created 14 new card(s), filled 63 existing, skipped 9, 0 failed. New-card photos pull in the background.
14.6CollX Sales — saved order pages
"Drop saved CollX order pages — as many at once as you like. In Chrome, open an order and press Cmd-S; either 'Webpage, Single File' (.mhtml) or 'Webpage, Complete' (.html) works. Gross and net come from the page, never from the CSV."
| Concept | What CollX does |
|---|---|
| Gross | The item price on the page — what the card actually sold for. |
| Net | Seller's Proceeds — what CollX actually paid you. Shipping Protection is already inside it; never subtract it again. |
| Never the CSV | The orders CSV carries a list price, not the sale price. Drop it only for the checklist of orders whose pages you have not saved yet — it books nothing. |
| Matching ladder | SKU exactly → cert number → name + set + grade → the picker → typing a card id. |
| Multi-item orders | The order's net is split across the cards weighted by item price, to the penny. |
14.7CDP Batch — attributes and photos
"Upload a Card Dealer Pro batch export. It matches every row to a card by cert number (SKU as backup), then proposes eBay platform, asking price, the CDP/eBay listing name, and the card attributes. Blank fields are pre-ticked; anything that would overwrite an existing value is shown old→new and left for you to approve. Dropdown values are never created."
New cards created here land as For Sale with cost $0 — CDP only knows what a card is listed at, never what you paid — and their front and back images are pulled into our own storage in one batch.
14.8PSA Grading Return
"Upload the PSA order CSV. It matches + parses every returned cert (AI) against the cards at 'PSA Grading'. Assign each to an existing card or create it new, then Apply. Nothing writes until you Apply. You can Save the review as a draft and Resume it later."
- Drop the PSA order CSV. The order number auto-fills from the file name if it contains a long number.
- Type the Total grading bill $ — you will see the per-card spread appear.
- Set the destination location for the returning cards.
- Press Run AI match. Each cert gets a suggested card and a confidence.
- Fix anything wrong: pick a different card, choose ➕ Create as NEW card, or leave it — skip / unassigned —.
- Pin any individual grading fee that differs; the rest re-spread automatically.
- Apply N to cards. Then ⤓ Pull PSA photos now fills in the images.
Half-finished? 💾 Save draft stores the whole review — assignments, fees, destinations — and Resume: brings it back, re-reading the pool so cards you have added since are assignable.
14.9Things that can never be written, anywhere
- Refunded eBay orders — excluded from the apply list and re-checked during the apply itself.
- Canceled, $0-gross, or negative-net eBay rows.
- Refunded or canceled CollX orders.
- Any CollX order that already carries cards.
- Sold Price or Date Sold onto a card that is not already Sold (Generic CSV).
- Archived cards — never matched, never created against.
- Two rows onto one card in the same run.
- A dropdown value that does not already exist — you get a picker instead.
- A listing removal — CDP's Listed On is additive only.
15The Admin Console
The gear opens a full-screen console with nine tabs. Managers see all nine; everybody else sees one — their own profile, and the console is titled My Account instead of Admin Console.
15.1My Profile
Everybody's own pane. You can edit your first and last name and nothing else — email, role, finance access and account status are read-only and set by a manager. Press Save name for Saved.; a blank first name gives First name is required.
The footer explains why the name matters: "Your name appears throughout the app, including Owned By and Paid By on cards." Changing it here changes it on every card that references you.
15.2Users
| Action | Shown when | What happens |
|---|---|---|
| Edit | Always | Inline first/last name, role and finance switch. Promoting to a manager role forces finance access on. |
| Resend | Status is invited | Sends the invitation again. |
| Reset pw | They have an email and are not removed | Sends them a password-reset email. |
| Suspend | Not you, status active | Confirms "Suspend dana@example.com? They will not be able to sign in." |
| Reactivate | Not you, status suspended | Lifts the block. |
| Remove login | Not you, they have a login | "Accounting history is preserved and this cannot be undone without re-inviting." The person's accounting identity survives so old cards keep their owner and payer. |
| Delete | Not you, and role is User or Viewer | "PERMANENTLY delete sam@example.com? This cannot be undone." Blocked if any card references them. |
Inviting someone
- + Invite user.
- First name, last name, email. (First name and email are required.)
- Pick a role from the five chips — the hint under each explains it: BKCards71 — the entity, Full access, manages users, Can edit cards, Read-only.
- Set Finance & Insights access — for a manager role this is replaced by Always granted for Partner.
- Send invitation → Invite sent to dana@example.com.
15.3Dropdowns
Nine managed lists feed the dropdowns everywhere else in the app. Add a value here and it appears in the card editor, Bulk Edit and the importers immediately.
The nine lists: Brand, Card Type, Purchase Platform, Pay Method, Grader, Location, Listing Platform, Sold Platform, Proceeds To.
15.4Photo Import
Three panels that between them get an image onto every card. Everything here copies the image into our own storage — no path in this tab leaves a card pointing at somebody else's server.
PSA Cert Photos
Finds every PSA-graded card with a cert and no photo, asks PSA for the image, and attaches it. Set Calls this run (default 90, max 100) and press Run today's batch; it becomes a red Stop while it runs. The log tells you exactly what happened per cert:
- cert 104214318 → card 1042: photo set ✓
- cert 88214077 (card 1045): PSA has no front image — recorded, won't retry
- STOPPED: PSA daily quota reached — run again tomorrow.
- Nothing left to process. 🎉
CDP CSV Photos (by cert)
Upload a Card Dealer Pro export. Rows with a certification number and an image are matched by cert (or by base SKU) and the image is copied into our storage. Only the missing side is ever sent; rows already covered are counted as fully covered and skipped.
Raw Photo Matching — propose → review → approve
For cards with no cert. Upload a CSV with a title and a front image; the tool scores every row against the ledger and sorts them into EXACT, STRONG, MAYBE and NO_MATCH. Then:
- A checkbox means the matched card has no photo yet and can be attached.
- 📷 means the matched card already has a photo and is protected — never overwritten.
- — means no card matched.
- multi-match rows are skipped by the bulk buttons; tick them individually after checking which CSV row is the right one.
Approve all EXACT and Approve all STRONG do the obvious ones and report what they skipped. There is deliberately no bulk approve for MAYBE — those are yours, row by row. Attach approved (N) confirms before it writes.
15.5Data Import
Covered in full in §14.
15.6Purchases
Your eBay purchase history, in the app, matched to cards by hand — nothing here is automatic. A search box (Search name, order #, seller…), a four-way filter (all | unmatched | matched | converted) and a counter. Hovering a thumbnail pops the full purchase: order number, item id, date, item price, order total, quantity, seller, tracking and any note.
Two actions once you have selected rows:
- Match N to card → — search for a card by description, SKU or id and link all the selected purchases to it. Confirmation: Matched 3 to card ✓.
- Turn N into Live Card(s) — creates brand-new cards from the purchases. Each gets a fresh sequential SKU, the item name as the description, the order date as the purchase date, the order total as base cost, the order number, the purchase image, and status For Sale. Already-converted purchases are filtered out first. Result: Created 4 card(s) ✓ — find them in the Ledger to finish details.
The match column shows one of ★ new card #1974 (converted), ✓ #1042 … with an ✕ to unmatch, or unmatched.
15.7Integrity
Covered in full in §16.
15.8Bulk Edit
Covered in §9.1.
15.9Settings — platform fees
The tab is called Settings and contains exactly one subject: Platform Fees. Its intro is the model in one line:
"These rates drive every Mark-Sold estimate and the eBay importer — live, no deploy needed. Flat model: net = gross × (1 − fee%) − per-order fee. Platforms with tiers pick the bracket by sale price instead. Estimates are always trued up by the real payout."
- Flat table — one row per sold platform: Fee %, Per-order $, a Tiers cell reading 3 tier(s) — tiers govern or —, and Save. Retired platforms still appear, marked retired. Saving tells you eBay saved — new sales estimate with 12.35% + $0.40 immediately.
- Tiers — a sub-table per platform with From $, Fee %, Flat $, plus an add-tier row. Each tier runs from its "From $" up to where the next begins. If a platform has tiers, they override its flat numbers entirely.
Everything must be a number of zero or more — eBay: fees must be numbers ≥ 0. — and deleting a tier confirms: Delete the eBay tier starting at $250? Every change is written to the activity log.
14.10The review grid — every road ends here
CollX Purchases and PSA Search Cert (and, by the same rules, the AI Card Scan) end on one grid. Learn it once. Its promise: nothing is added on its own, and every row says in words what happened.
| Column | What it shows — and what you can do |
|---|---|
| Photo | Drop the front photo on the row (drop two at once: first = front, second = back). The cell lights teal while you hover with a file. A dropped front is read on the spot — a bright lime ⟳ READING THE SLAB LABEL… strip, then ✓ Read from the slab: PSA 10 · cert 57217545 with Apply to this row (fills cert, grader, grade; rebuilds the name; re-checks the Ledger) or Keep as is. A raw card simply says no label was read. |
| What was found | The card name, PSA-style, editable. Under it the source line: year · brand · set · number · player · parallel · order number · status. A cert PSA does not know shows a red ✕ Certification number not found at PSA — that row can only be skipped. |
| App photo | The photo already on the matching app card, so you can compare — only when there is a real match (same cert, or "looks like"). A new card shows "—". |
| Grade / Condition | PSA 10 with the cert, or Raw · Near Mint. |
| In the app? | Yes — #3193 same cert in green means certain. Looks like #2229 — same card? in amber means a name match — check it. No — new, sometimes with "1 other copy (different grade)": a raw card is never the same card as a graded one, and two grades are two cards. |
| Card Hedge | ○ off · ○ pairs on Apply (switch ticked) · ● Base after Apply. Never anything before Apply. |
| Location | Per row; default From the source (CollX: Completed → Monroe, In Transit → In Transit). |
| Paid / Cost basis | From the source when it carries money. When it does not (Search Cert), the app card's own money, tagged in app — Match never changes it. |
| Your ruling | Add · Match (pick the candidate; tick Overwrite only when the source should replace what is there) · Skip. Same-cert rows arrive as Match; new rows as Add; blocked rows as Skip. |
| Result | After Apply, in words: added #3193 · matched #3193 (2 fields filled) · skipped · failed — why, plus · paired (Base) or · no catalog match when the switch was on. |
The defaults bar above the grid sets Owned by, Paid by, Category, Location, Platform, Pay method and Purchase date for every Add, and holds the Pair + value with Card Hedge · after Apply switch (off by default). The counter reads N to add · N to match · N to skip. Apply (N) shows the deck clock, then a green banner top and bottom: Successfully added N cards · matched N · N paired with Card Hedge, N valued. The banner belongs to those rows — a new search or drop retires it.
Reviews stay put: leave the importer, come back, and the rows are still there until you Clear or Apply. A file that does not belong to the open importer is named and left alone; a file that belongs to a different importer switches you there with a loud ⇄ SWITCHED banner and a Take me back button.
14.11CollX Purchases — from screenshots
- In the CollX app: My Purchases → an order → Order Detail. Screenshot it.
- ⇅ Data In & Out → Data Import → CollX · Purchases → drop up to ten screenshots in the box (or Choose screenshots…).
- Each screenshot is shrunk in your browser and read by its own request, all at once — the deck clock counts Read 3 of 4 screenshots. Seconds, not minutes.
- One row per card lands on the review grid (14.10). Above it, one line per order: price · credit · balance · shipping · tax · charged, and basis $X = $Y in green when Σ(base + shipping + tax) equals Balance Applied + Total Charged to the penny (red ≠ if not — fix the numbers before Apply).
- Money rules: Gold credit = $0 basis; Balance = full basis; credit eats the price first, then balance. Shipping and tax are split across the order's cards by price share, largest remainder to the penny.
- Status → Location: Completed → Monroe; In Transit → In Transit. Platform CollX, pay method CollX Balance, order number and purchase date are stamped. The CollX title is kept as the purchase name; the card name is rebuilt PSA-style.
- Drop the slab or card photos on the rows (front, then back), rule Add / Match / Skip, Apply.
An order already in the app is flagged on its rows and skipped by default. A screenshot that is not a CollX Order Detail (a photo, another app) is named in a notice and adds no rows.
14.12PSA Search Cert
- Data Import → PSA · Search Cert → paste one or many cert numbers → Search.
- PSA is asked (nothing else). Each row shows PSA's front photo (blank when PSA has none — never a stand-in), the grade, year / brand / number / player / variety, and the cert.
- Same cert already in the app → the row arrives as Match, "In the app?" is green, the App photo shows your card, Paid / Cost basis show your card's money tagged in app. Apply fills anything missing and never duplicates. New cert → Add (set what you paid in the Paid column first). Unknown cert → red ✕ Certification number not found at PSA, Skip only.
Search Cert researches; it never creates scan uploads and never calls Card Hedge before Apply.
14.13PSA Attribute — fill your PSA cards from their certs (Ed. 4.5)
PSA keeps two things about every slab, behind two different doors: the data record (year, brand, subject, variety, card number, grade) and the pictures. The app treats them as two jobs on the one PSA key. PSA Cert under Photo Import (15.4) is the photo job; Attribute here is the data job. Neither touches the other's fields.
- ⇅ → Data Import → under PSA, click Attribute (the row reads Grading Return · Search Cert · Attribute).
- The panel says Cards to fill: N — every PSA-graded card with a cert number and a blank Year, Brand, Set, Player, Card #, Category or Grade — and PSA lookups today: used of 100 · left.
- Set Certs this run (20 by default; never more than what is left today) and press Read certs from PSA. One PSA call per cert, data only, under the deck clock. Nothing is written.
- A table appears: one row per card, and for each field what is on the card now next to what PSA says. Green = fills a blank (ticked for you). Amber = PSA differs from what's on the card — takable only when Overwrite what's on the card is ticked (the old value shows struck through). ✓ = already the same. — = PSA had nothing for that field.
- Tick what you want (Tick all fillable / Untick all) and press Apply N to M cards. Each card gets a Journey note: Attributes filled from PSA cert …
PSA's “Brand” is really the product line (“BOWMAN CHROME PROSPECTS AUTOGRAPHS”), so it is split the same way Fill attributes from name does it: the Brand comes from your Brand dropdown, CHROME goes to Subset, the rest becomes the Set.
14.13Pending — where imported cards land
Every card that comes in through a review grid or the AI Card Scan arrives with status Pending: in the app, not for sale, not counted in for-sale money. It becomes For Sale only when you flip it in the card editor or add it to a Flight. The one exception is a card created by the eBay first-time sync's Add to collection — that is a live listing, so it is For Sale from the start. Find Pending cards with the Pending facet in the Ledger, Collection and My Card Values.
15.10Platforms
The marketplace connectors for this organization. eBay today: Connect eBay, the connection card (account, environment, status, connected, last used, permissions) and Disconnect. The connection is one-time plumbing; the work happens on the Platform Connect tab (§11).
15.11Plans & Billing
Your organization's plan and standing. Shows the current plan (Trial · Collector · Dealer · Comp) with every tier side by side, the add-ons (eBay Connect, Market Values, AI Scan, Catalog, PSA cert lookups), and an invoices area. In this edition it is a read-only view: plan changes, add-on toggles, invoices and payment method arrive with billing. Tier changes are announced before they bill — never silent.
16Integrity — every check, and what to do
The Integrity tab runs 18 standing checks in six categories over every live card. Archived cards are excluded from all of them — archiving genuinely resolves an issue, so it never nags. Every count is clickable, every list downloads as CSV, and seven of the checks can be fixed inline without leaving the screen.
"Standing data-quality checks, grouped by area. Archived cards are excluded. Click any count to see the exact cards, with a CSV download."
16.1Sale & financial consistency — 6 checks
| Check | What it means | What to do |
|---|---|---|
| 1. Sold, missing details | A sold card with no sale year, no price, or no platform. "An exact day is optional — the year is what drives accounting." | Open each card and supply the missing piece so the revenue can be attributed. inline fix: Sold $ |
| 2. Sale data on unsold card | A not-sold card still carrying a sale — price, net, date, year, platform or marketplace order number. "A reversed sale should leave none of these behind." | This is a half-reversed sale. Either finish the reversal (un-sell it properly through the chooser) or put the card back to Sold. This is one of the two red-badge conditions. |
| 3. Status and disposition disagree | The Status says one thing and the Sale Type says another — e.g. a card marked For Sale that still carries "Sold – Straight Sale". "This is what a half-reversed sale looks like." | Decide which is true and fix the other in the card editor. The second red-badge condition. |
| 4. Sold with no order number | Sold on a marketplace but no order number recorded. "The sale can't be traced back to eBay or CollX, so a refund on it would never be spotted." | Paste the eBay/CollX order number onto the card. Gifts and write-offs are excluded — they have no marketplace order. |
| 5. Wrong sale year | Year Sold does not match Date Sold. "This corrupts your 2025/2026 tax buckets." | Correct whichever is wrong. This one directly moves money between tax years. |
| 6. Sold for $0 or less | A sold card with a zero or negative sale price. "Confirm gift vs. data error." | If it really was a gift or a write-off, set the Sale Type accordingly. Otherwise type the real price. inline fix: Sold $ |
16.2Cost & acquisition — 3 checks
| Check | What it means | What to do |
|---|---|---|
| 7. Missing / $0 cost | A blank or $0 base cost — the acquisition price is missing. | Enter what you paid. This is the biggest backlog bucket in the app, and it is a data-entry queue, not an alarm — it deliberately never lights the header badge. inline fix: Base Cost |
| 8. Bad purchase date | No purchase date, or a Purchase Year that does not match it. | Set the purchase date; the year must agree with it. inline fix: Purchase Date |
| 9. Negative money | Any of base cost, tax, shipping, handling, grade fee, asking price or sold price is below zero. | Correct the sign. A negative cost component silently distorts Total Cost, and therefore Net Return. |
16.3Grading — 3 checks
| Check | What it means | What to do |
|---|---|---|
| 10. Duplicate certs | Two or more live cards share a cert number — "the same physical card entered more than once." | Work out which row is the real one and archive the other. A duplicate double-counts both cost and inventory. |
| 11. Graded without cert | The card looks graded (a grader or a grade is set) but has no cert number. Cards sitting at the grader are excluded — their cert is legitimately still pending. | Enter the cert when it comes back. A missing cert also blocks the PSA photo backfill. inline fix: Cert # |
| 12. Cert but not graded | A cert number exists but the card is not marked graded. "A cert implies a graded card." | Set the grader and the grade. inline fix: Grade |
16.4Ownership & references — 2 checks
| Check | What it means | What to do |
|---|---|---|
| 13. Missing owner or payer | No Owned By or no Paid By — "breaks partner splits." | Assign both. Without them the capital waterfall and the profit split cannot be computed for that card. This is a good candidate for the drill-down's Edit selected bulk fix. |
| 14. SKU collisions | Two live cards share a SKU (case-insensitively). | Re-SKU one of them. SKU is a match key for the eBay and CDP importers, so a collision misroutes imports onto the wrong card. |
16.5Impossible / sanity — 3 checks
| Check | What it means | What to do |
|---|---|---|
| 15. Sold before bought | The sale date is earlier than the purchase date. | One of the two dates is wrong — usually a typed year. |
| 16. Future date | A purchase or sale date after today. | Correct it. A future sale date lands the revenue in the wrong tax year. |
| 17. Impossible card year | The card year is blank, before 1900, or further out than next year. | Set the print year. Next year is allowed, for pre-release product. inline fix: Card Year |
16.6Collection-facing — 1 check
| Check | What it means | What to do |
|---|---|---|
| 18. Showcased, no photo | A card set to show in Collection with no front image. | Attach a front photo (via Photo Import or the card editor), or untick Showcase. |
16.7The badge and the tab are not the same thing
The header badge watches only three of these eighteen, because the other fifteen are a data-entry queue rather than an alarm. A badge permanently reading "1,284" is a badge nobody reads.
| Badge line | Severity | Tab equivalent |
|---|---|---|
| Sale data on a card that isn't sold | broken | Check 2 |
| Status and disposition disagree | broken | Check 3 |
| Sold, missing platform or sale year | attention | A narrower version of check 1 — it ignores a missing price and excludes losses and gifts, which are legitimately $0 with no platform |
Inside the tab there is no broken/attention distinction at all: every flagged check is amber, every clean one emerald. The category colours are identity, not severity.
16.8Fixing what a check found
The seven checks with a one-field inline fix: Sold for $0 or less and Sold, missing details (Sold $), Missing / $0 cost (Base Cost), Bad purchase date (Purchase Date), Impossible card year (Card Year), Graded without cert (Cert #) and Cert but not graded (Grade).
17Help & Support
The ? in the header is the one entrance. Everyone can reach it. Every form you submit lands in a tracked queue you can watch from the same panel.
Guides
- Open the User Guide ↗ — this document, in a new tab.
- Open the Function Reference ↗ — "The whole product listed by category — what you click and what runs quietly in the background."
Beneath them sit six quick recipes, the same ones reproduced in §1.2.
The three forms
| Form | Use it when | Extra field |
|---|---|---|
| Submit an Issue | "Something broken, wrong, or confusing? Describe it and it goes straight onto the fix list." | How bad is it? — Blocking — I can't work / Annoying — there's a workaround / Cosmetic — looks wrong, works fine |
| Request a Feature | "Wish the app did something it doesn't? Pitch it — capability requests drive the roadmap." | — |
| Contact Us | "General questions — how a number is computed, where something went, how to do a thing." | — |
All three take an Area of the app (General, Collection, Ledger, Card Editor, Scan, Data Import, Financials, Accounting, Photos, Admin Console, Other), optional Card ID(s), a subject and a description. Both subject and description are required — A subject and a description are both required. On success: ✓ Submitted — it's on the list. Track it under "My requests" below.
My requests
Your twenty most recent submissions, newest first, each with a status chip: New Seen In progress Done Declined. Empty state: Nothing submitted yet — your requests will show up here with their status.
Account → Password
Change password… closes Help and opens the change-password box. The copy warns: "You'll stay signed in here; other devices will need the new password next time they sign in."
18Guardrails — things that can never happen
These are the promises the app keeps whether or not anybody is watching. They are worth knowing, because they tell you which mistakes you do not have to worry about.
Money
- Net Return never appears on a card that is not sold — not in the grid, not in a sort, not in a filter, not in a CSV. A stale number cannot leak into a total.
- Net Sale can never be negative, and never exceeds the gross. Enforced in the editor, the bulk sale, the journey form and the database itself.
- Projected Profit (Sale) never shows a number without an asking price — it says set price instead.
- Fees are data. Every sale estimate reads the platform fee table; nothing hardcodes a rate except the clearly-labelled What-If scratchpad.
- Derived values are computed by the database. Total Cost, Net Return, Year Sold and the projections cannot be typed, only driven.
- A bulk-sale split is penny-exact. The per-card shares always sum to the order total.
Sales and reversals
- Leaving Sold always goes through the un-sell chooser. There is no plain confirm.
- Nothing is wiped without being photographed first. The full sale snapshot lands in the audit log and the card's own timeline.
- A status change never acts on a stale copy of the card — the app re-reads it first and refuses if it changed elsewhere.
- You cannot write off a card that is already Sold.
- History is append-only. A correction is a new event, never an edit.
Imports and AI
- Detection routes, it never applies. Nothing is parsed or written by the drop layer.
- Refunded orders can never be applied — they are excluded from the apply list and re-checked during the apply itself.
- Sold Price and Date Sold can only be written to a card already marked Sold.
- Archived cards are never matched, and never created against.
- Two rows can never land on one card in the same run.
- Dropdown values are never invented — you get a picker instead.
- Listings are only ever added, never removed, by an importer.
- Scan writes to a holding table, never to inventory, and the PSA matcher writes nothing at all. A person confirms everything.
- An existing photo is never overwritten by any importer, and front and back use separate paths so one can never clobber the other.
- Photos are always downloaded into our own storage — the app never keeps a long-term link to a third party.
People and data
- You cannot suspend, remove or delete your own account.
- The last active manager can never be removed.
- Company, Partner and Admin identities are permanent — their login can go, the accounting record stays.
- A person referenced by any card cannot be deleted — you are told the count and pointed at "remove their login instead".
- Dropdown values are retired, never deleted, so no card ever loses its value.
- Permanent card deletion requires Archive first, and an admin.
- The finance tabs are hidden, not disabled, for anyone without access.
Display and totals
- KPIs are whole-dataset and immune to grid filters — filtered figures only ever appear in the separate rollup line.
- The rollup line is facet-aware, so "You have $X" always means the right thing.
- Deselecting every year falls back to all years — the KPI band can never go blank.
- Blank values always sort last, in both directions.
- ID and Card Name can never be hidden — even a saved view that forgot them gets them back.
- The data-integrity badge fails closed — red unless the counts match exactly.
- The health badge reports "unknown" rather than a false all-clear when its own check cannot run.
19Troubleshooting & known quirks
| Symptom | Cause and fix |
|---|---|
| The grid is suddenly empty | Check the photo funnel on the ID column. With both boxes unticked it shows zero rows. The echo pill in the status row reads No Photos Shown 0. Click it to reset. |
| Totals look stale after an import | Hard-refresh: Cmd/Ctrl + Shift + R. The app caches aggressively for speed. |
| The integrity count badge is red | The database and the app disagree on how many live cards exist. Refresh before trusting any number on screen. |
| Under the Archived facet every status chip reads 0 | Expected. The chips count live rows only, and the facet has narrowed the grid to archived ones. The footer's wording is also imprecise in that state. |
| My saved view lost its filters | Views store layout only — columns, widths and sort. Filters, search and the archived tick are never saved. |
| My column order jumped around | Any column toggle re-orders the grid into the canonical order. Column order is not user-controllable. |
| Recent Sales does not show everything | It caps at 400 rows with a notice. The net total in the header still covers every sale. |
| A recurring cost is one occurrence short | The current, in-progress month is not counted until it ends. A monthly bill viewed in mid-August counts seven, not eight. |
| Unticking Active on a recurring entry changed nothing | Correct — that checkbox is inert. Set an End Date to stop a rule. |
| A "Fully reimbursed" entry still shows as owed | The balance follows the amount, not the label. Type the reimbursed amount. |
| Financials and Accounting show different Gross Profit | They differ by exactly the shipping margin, by design. See §13. |
| The Accounting year toggle has no 2027 | That list is fixed in the code and needs a developer to extend. |
| A newly added Frequency behaves as one-off | A frequency added from the entry panel has no month interval until an admin sets one. Same for a new category's capital flags. |
| The gear's tooltip says "Settings (coming soon)" | Stale text. The Admin Console behind it is fully working. |
| A card reads Sold in the Ledger but not in Collection (or vice versa) | Collection decides "sold" from the sale year; the health badge uses the sale status. A card with one but not the other is exactly what the badge is designed to catch — check Integrity. |
| The Excel Non-Card Ledger sheet does not match the screen | Known: that sheet exports unit amounts for recurring entries. Use the P&L Summary sheet for totals. |
| An importer refuses my file | Read the detection card: low confidence means a required column is missing and the importer will refuse it. Re-export from the source with all columns. |
| CDP says a card is "not in the app" but I know we have it | Look for the ↳ looks like #1234 suggestion under the row — the exact keys missed but the name matched. Do not create; if the suggestion really is wrong, press different card to unlock the row. |
| PSA photo pulls stopped | PSA daily quota reached — run again tomorrow. Definitive answers are remembered, so tomorrow's run picks up where this one stopped. |
| A bank line I expected to book was skipped | Every skip prints its reason beside it. The usual answer: that money is already counted somewhere else — on a card, as a transfer between your own accounts, or by a recurring rule. |
| An import row failed with a red ✕ | The reason is written in plain English on that exact row (e.g. “pick a category”). Fix what it names and click Book again — rows already booked are never sent twice. |
| Do I need to refresh to see changes? | Your own edits appear instantly. Changes from another device or partner stream in live on supported screens (coverage is expanding). After an app update is deployed, hard-refresh twice — the app caches hard. |
20Glossary
| Term | Meaning |
|---|---|
| Asking Price | What you are asking for an unsold card. Drives Projected Profit (Sale) and the bulk-sale split. A blank counts as zero for sorting and filtering. |
| Base Cost | What you paid for the card itself, before tax, shipping, handling and grading. |
| Card Type | The sport or product family — Baseball, Football, Pokémon. This is what the Ledger chips filter. |
| Canonical name | The PSA-style card name built from the card's own attributes: year, brand, set, #number, player, subset, parallel, /print run, grader, grade. |
| Cohort (purchase cohort) | The purchase-year bucket used by the capital waterfall. Everything before 2026 is one bucket, 2025 & before. |
| Comp As Is | What the card comps at in its current condition. Feeds Unrealized P/L and Projected Profit As-Is. |
| Counts in Financials | A per-card switch for whether it belongs on the books at all. |
| Disposition / Sale Type | How a card left (or is sitting in) inventory: Sold – Straight Sale, Sold – Trade, For Sale – In Inventory, Not For Sale, Gifted, Lost, Forgery, Ripped Off, Destroyed. It carries accounting behaviour, which is why it is not editable from the Dropdowns tab. |
| Fill vs Overwrite | Importer language. A fill puts a value into an empty field; an overwrite replaces something that is already there. Fills are safe, overwrites need your tick. |
| Gross Profit | Revenue minus cost of goods sold. In Accounting it also carries the shipping margin. |
| Item Type | The kind of item — card, pack, lot. Distinct from Card Type. |
| Live card | Any card that is not archived. Every KPI in the app is computed over live cards. |
| Net Proceeds / Net Sale | What actually landed in your account after the platform's fees. |
| Net Return | Profit on a sold card: net proceeds + shipping margin − total cost. Database-calculated. |
| Not For Sale (NFS) | A keeper. Excluded from for-sale inventory, the card-type chips and Money in Inventory; it gets its own KPI tile with an owner split. |
| Owned By | Who owns the card. Profit follows ownership. |
| Paid By | Who fronted the money. Cost recovery and losses follow the wallet. |
| Potential card | A row in Scan's holding area. Not inventory, not money, until you bring it in. |
| Print Run | The serialled quantity — the 399 in /399. Not a cert number. |
| Proceeds To | Which account a sale's money landed in. |
| Shipping margin | What the buyer paid for shipping, less what the label actually cost. Already inside every card's Net Return — never add it again. |
| Showcase | A flag marking a card for display in Collection. |
| SKU | Your own stock number, e.g. BFL-EB14261. A match key for the eBay and CDP importers, which is why collisions matter. |
| Sold Price | The gross the platform reported, before fees. |
| Still out | A partner's money that has not come back yet: adjusted capital advanced minus what they have recovered. |
| Total Cost | Base cost + tax + shipping + handling + grade fee. Database-calculated. |
| Year Sold | Derived from Date Sold, and the field that drives every tax bucket. |
21Index of figures
S&T Card Manager — User Guide · Edition 4.5 · September 2026
Kevin · Brian · BKCards71
22Edition 4.7 additions — colours, the Integrity light, your plan
Edition 4.7 (September 13, 2026) is about consistency: every button and chip in the app now means the same thing everywhere, and a few doors moved.
22.1What the colours and buttons mean
- Teal, filled = do it. Add Card, Add Entry, Apply, Fill, Save, Publish, Record sale, Confirm. One per rail, always on the right.
- Teal outline = you set this. A selected filter chip (Available, a sport, a year, For Sale…), a column you sorted or filtered, the view you're on.
- Grey, filled with an outline = cancel, close, back, done selecting, refresh locally. Never the same colour as submit.
- Blue = talks to a platform or brings data in: Import Statement, Import Receipt Photos, Pull from eBay, Ask Card Hedge, Check Value, Send changes.
- Green = fine, done, on, connected, "That's it ✓".
- Yellow = something to look at — a readiness gap, an override, a warning. Yellow is never a button.
- Red = stopped, wrong, destructive: Delete, Stop, Write-Off, Unpair, End listing.
- Purple = who: owners, roles.
- White ⤓ pill = download. Every table's CSV (and the Statements Excel) is a small ⤓ pill at the bottom left beside the count; the pager sits at the bottom right.
- Inside a chip, the count of cards is blue and the $ value is green, so volume and money read apart at a glance.
- Column headers are always one line.
22.2The Integrity light is its own door
The green Clean (or yellow "needs attention") light in the header now opens a Data Integrity popup with every check, its drill-down and fix-in-place — it no longer takes you into the gear. Close it and the light re-reads.
22.3Recent Sales downloads
The Recent Sales popup has a ⤓ CSV pill beside its ×: the list as filtered and sorted — date sold, year, card, gross, net, profit, platform.
22.4Fill from names — open the card
In Data In & Out › Bulk Edit › Fill from names, the card's name is a link: it opens the card's drawer right there, so you can check a grade or a set before you tick it. Close the drawer and the row re-reads.
22.5"Not part of your plan"
Every top-level tab is part of a plan. If a tab isn't in yours, it stays in the tab bar and shows a quiet card — Accounting is part of the Business plan — with one button to Plans & Billing. Nothing is ever broken or hidden; turn it on and it appears.
22.6Where things moved
Export buttons left the Ledger header for the bottom bar (⤓ CSV · view and ⤓ CSV · full database). Bulk Order Review became Buy Review under Intelligence. The data-integrity badge sits on the status row, far right. The Finances year toggle and the Ledger's Years Sold toggles are ordinary filter chips.
22.7Intelligence — the strip, in order
Market Highlights → Market → My Card Values → AI Card Scan → Buy Review. The strip is frozen; each station's chips are ordinary filter chips. A station for counting your own cards — My Card Stats (how many Stars in the Night, how many Red Flares, how many /5s, what came in and went out this month; numbers, never money) — is the next build and sits between My Card Values and AI Card Scan.
22.8Fill from names — how a parallel is read
A parallel is a colour plus the finish words after it (Purple Holo Foil · Silver Prizm · Red Flare) or a finish on its own (Refractor · X-Fractor). "Prizms" reads Prizm. Colours and finishes are never an insert set: an insert is a named set inside the product (Stars in the Night · Prospect Autographs · A.I.), read from the Card Catalog. Without Overwrite, Fill only writes blanks — a wrong guess never touches a field you set.