S&T Card Manager — User Guide

Edition 4.6 · September 12, 2026

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.

BK Cards 71 CARD MANAGER COLLECTION FINANCIALS ACCOUNTING LEDGER SCAN 🛡 Clean ? ⚙ Kevin partner Sign Out 1 2 3 4 1 · The active tab is the one whose bottom edge merges into the page — the accent bar runs across its top. 2 · The integrity badge. Always visible. Click it to jump straight to the Integrity tab. 3 · “?” is the one entrance to Help & Support — guides, issue reports, and your password. 4 · The gear opens the Admin Console. (Its tooltip still reads “Settings (coming soon)” — ignore it, the console works.) Financials and Accounting appear only if your account has finance access.
Figure 1 — The app header: wordmark, six folder tabs, integrity badge, Help, gear, your name, role chip and Sign Out.
TabColourWhat it is forWho sees it
CollectiontealThe showcase. Big card images, price, grade badges. Read-only — nothing is edited here.Everyone. It is the landing tab.
FinancialsvioletExecutive dashboard for the card business: revenue, COGS, gross profit, ROI, aging, dead money, grading lift.Finance access only
AccountingemeraldThe books: the non-card expense ledger, the P&L, the partner capital waterfall, tax schedule, distributions.Finance access only
LedgeramberThe card inventory grid — 64 columns, filters, saved views, editing, selling, CSV export.Everyone
ScanskyIntake. Photograph a shoebox or paste PSA certs; AI proposes what each card is; you approve.Everyone can upload; managers scan and bring in
Naming note Two tabs are named differently in the code from what you see on screen, and one word is used for two different things. The tab labelled Financials is built from a file called Insights, and its page heading still reads Executive Dashboard. The tab labelled Accounting still shows the heading Finances, and it contains a sub-view also called Ledger — that inner Ledger is the non-card expense register, nothing to do with the card grid on the Ledger tab. When this guide says "the Ledger" without qualification, it means the card grid.

1.2Ten things, ten clicks

You want to…Do this
Record a saleLedger → click the card's name → Status = Sold → platform → total + net → Proceeds To → Confirm Sale
Sell a stack as one lotLedger → Select to Sell → tick the cards → Sell N selected →
Price a stack for a showLedger → filter down to the stack → read the live rollup line: You have $X across N cards
Add one card by handLedger → + Add Card → fill in → Save → then attach a photo
Turn a shoebox into inventoryScan → upload → pairs/fronts → Scan selected → review → Bring into App
Month-end eBayGear → Data Import → eBay → Sales → drop the orders report → review buckets → Bring in N sale(s)
Fix a bad number everywhereGear → Bulk Edit → filter → select → Edit selected
See what the business owes youAccounting → Statements → Total Owed (All Sources)
See where the books are wrongClick the integrity badge in the header
Totals look staleHard-refresh (Cmd/Ctrl + Shift + R) — the app caches aggressively for speed

1.3House rules the app enforces

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.

BK Cards 71 Sign in EMAIL kevin@bkcards71.com PASSWORD •••••••••• Sign In 1 Amber focus ring = the login accent There is no “forgot password” link here — a manager sends you a reset from the Admin Console.
Figure 2 — The sign-in screen. Amber is the login accent; the same amber appears on your role chip in the header.

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:

  1. At least 8 characters
  2. One uppercase letter
  3. One lowercase letter
  4. 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.

BK Cards 71 SET YOUR PASSWORD NEW PASSWORD ••••••••••• ✓ At least 8 characters ✓ One uppercase letter ✓ One lowercase letter ○ One number CONFIRM PASSWORD Set password On success the form is replaced by “Password set. Signing you in…” and the token is stripped from the URL, so a refresh cannot re-trigger the screen.
Figure 3 — Setting a password. The checklist updates on every keystroke; all four rules must be green.

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.

RoleMeaningManage users & dropdownsEdit cardsFinancials & Accounting
CompanyBKCards71 — the entityYesYesAlways
PartnerFull access, manages usersYesYesAlways
AdminFull access, manages usersYesYesAlways
UserCan edit cardsNoYesOnly if the finance switch is on
ViewerRead-onlyNoNoOnly 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.

Guardrail If you do not have finance access, the Financials and Accounting tabs are not rendered at all — there is no greyed-out tab to tempt you, and forcing the address does not mount the view either. Permanent deletion of a person is also gated: only User and Viewer accounts can ever be deleted, and only when no card references them.

2.4The account status ladder

Every person's account moves through a documented ladder. You will see these words on the Users tab.

StatusHow you get thereCan sign in?
invitedA manager sent an invitationOnly via the invite link
acceptedThe invitee set a password (a manager pressing Refresh on the Users tab confirms it)Yes
activeThey signed in and the app actually loadedYes
suspendedA manager suspended themNo — banned until reactivated
removedA manager removed the login; the accounting identity survivesNo 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

  1. Wordmark — S&T Card Manager over the small caps line CARD MANAGER.
  2. The six folder tabs (see 3.2). The sixth, Platform Connect, is where marketplaces are synced and listed (§11).
  3. The integrity badge — the health light (3.3).
  4. ? — Help & Support. Every role sees it.
  5. ⚙ — the Admin Console.
  6. Your name and the amber role chip.
  7. 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.

THE FOUR STATES (PLUS ONE SETTLING STATE) 🛡 Clean Every invariant reads zero. “Books clean — no sale-money residue, no status/disposition conflicts, every sold card attributable.” ⚠ 7 Needs attention — incomplete, not wrong. Sold cards with no platform or no sale year. The money is right; the metadata is not. ⛔ 3 Books broken — a contradiction. Sale money on an unsold card, or a status that disagrees with its Sale Type. Fix this first. ? — Check unavailable. The check itself failed. Reported honestly rather than shown as a false all-clear. ? ·· First run in flight — “Checking integrity…”. The slot is held so the header never jumps.
Figure 4 — The integrity badge. Four silhouettes — shield, triangle, octagon, question mark — so the state reads at a glance even in grayscale.

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 itemSeverityWhat it means
Sale data on a card that isn't soldbrokenA half-reversed sale — phantom revenue, or a hole where revenue should be.
Status and disposition disagreebrokenThe Status says one thing and the Sale Type says another.
Sold, missing platform or sale yearattentionRevenue that cannot be attributed. Losses and gifts are excluded — they are legitimately $0 with no platform.
Guardrail Archived and deleted cards can never light the badge. And if the disposition lookup cannot be read, the badge reports unknown rather than either a false all-clear or a screen full of false alarms.

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.

▦ ☰ Search items — player, set, year, brand… FOR SALE 1,125 $75.6K NOT FOR SALE 28 $3.1K SOLD 822 $85.4K Sort: All ▾ For Sale Not For Sale Sold Price: All ▾ Graded Rookie Autographed Category: All ▾ Year: All ▾ × Clear 1,125 cards 2024 PSA 10 Case A2 card image 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 $184.00 2023 SOLD SGC 8 card image 2023 BOWMAN CHROME PROSPECTS #BCP44 JACKSON HOLLIDAY $412.75 2021 RAW card image 2021 PANINI PRIZM #325 JOSH ALLEN SILVER No price set 2020 PSA 9 card image 2020 TOPPS CHROME #201 BO BICHETTE RC $64.50 1 2 3 4 1 · Year badge, top-left. Every card of the same year wears the same neon colour. 2 · Grade badge, bottom-left — colour-laddered by grade (10 emerald, 9 teal, 8 sky, 6–7 amber, below 6 orange, RAW slate). 3 · SOLD badge, top-right — only on sold cards. 4 · Show-location badge, bottom-right — “Case A2” or “Bin 3, B, 12”, only when a location is set. Cards with no photo show the built-in BK placeholder (“BK / Cards 71 / No photo yet”) — it never fails to load.
Figure 5 — Collection, grid view: sticky control region, the three stat blocks, and four tiles with their corner badges.

4.2The filter rail

The rail scrolls sideways on a phone and always keeps this order:

ControlOptions
SortNewest 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 pillsFor Sale · Not For Sale · Sold — independent toggles, not a radio group. They union together.
PriceUnder $15 · $15 – 25 · $25 – 50 · $50 – 100 · Over $100
Attribute pillsGraded · Rookie · Autographed
Category / YearBuilt from what you actually hold — categories alphabetically, years newest first
× ClearAppears 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.

How Rookie and Autograph are decided here Collection reads them out of the card's description text ("RC", "(RC)", "rookie"; anything starting "auto"), not from the database flags. They are only as good as the card name. The Ledger's Rookie / Auto / Relic columns are the real stored flags.

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:

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.

card front image PSA 10 Click card to flip CARD #1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 $184.00 asking Rookie Autograph StatusFor Sale PlayerLuis Arraez Year2024 CategoryBaseball BrandTopps GradePSA 10 Cert #104214318 LocationMonroe Edit details in the Ledger view. Close ×
Figure 6 — The Collection detail modal. Strictly read-only: the footer hint “Edit details in the Ledger view.” is the entire editing story here.

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.

Search ID, description, player, cert, brand… VIEW Show floor ▾ + Add Card Select to Sell Recent Sales Export View CSV Export Full DB CSV NET RETURN TOTAL -$4,717.42 CARDS SOLD 822 TOTAL SOLD $ $85,426.58 INVENTORY COUNT 1,125 MONEY IN INVENTORY $75,603.83 YEARS SOLD All 2025 2026 Status All 1,958 For Sale 1,125 Not For Sale 28 Sold 822 Archived 15 | You have $12.4K across 184 cards ☐ Show archived (15) Available: 1,125 Baseball: 642 · $41.2K Football: 288 · $19.8K Basketball: 141 · $9.6K ITEM IDENTITY STATUS & LOCATION GRADING COSTS VALUATION ID ▲ ⏷ CARD NAME STATUS ⏷ LOCATION ⏷ GRADE ⏷ CERT TOTAL COST ⏷ ASKING ⏷ NET RETURN ⏷ 1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 For Sale Monroe10 Pristine 104214318 $96.40 $184.00 1043 2023 BOWMAN CHROME PROSPECTS #BCP44 JACKSON HOLLIDAY Sold —8 0278119 $310.15 $425.00 $102.60 1044 2021 PANINI PRIZM #325 JOSH ALLEN SILVER Not For Sale Safe— — $45.00 set price 1045 2020 TOPPS CHROME #201 BO BICHETTE RC For Sale Show box 29 88214077 $52.75 $64.50 1046 2019 PANINI DONRUSS OPTIC #158 JA MORANT RC HOLO Sold —9.5 61120944 $188.00 $150.00 -$47.35 Showing 1,958 of 1,958 live rows. ✓ Data integrity · 1,958 live 1 2 3 4 5
Figure 7 — The Ledger, whole screen. 1 saved view · 2 Years Sold toggles · 3 the live filtered rollup · 4 the frozen ID + Card Name pair, with the grouped category band above · 5 the data-integrity count.

5.2The toolbar

ControlWhat it does
Search boxMatches 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 CardOpens the card editor empty, in insert mode, defaulted to For Sale.
Select to SellTurns on multi-select for a lot sale. Becomes Done selecting.
Recent SalesAll sold cards, newest first, sortable — unaffected by every grid filter.
Export View CSVExports exactly what you are looking at, post-filter and post-sort.
Export Full DB CSVPulls the entire database live, including archived rows.
Show archived (n)Far right. Appears only when archived cards exist.

5.3The KPI band

Edition 4.5. The band reads, left to right, Net Return · Net Sold Total · Gross Sold Total · Cards Sold · Current Inventory Count · Money in Inventory. The band, the chips and the column header are now frozen: only the rows scroll, the footer stays pinned and the page itself never scrolls. The search box is yellow italic and the ID column is left-justified.

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

NET RETURN TOTAL -$4,717.42 2025: -$6.1K 2026: $1.4K CARDS SOLD 822 2025: 582 2026: 240 TOTAL SOLD $ $85,426.58 2025: $58.9K 2026: $26.5K INVENTORY COUNT 1,125 MONEY IN INVENTORY $75,603.83 NOT FOR SALE 28 · $3,142 BK: 12 ($1.4K) Kevin: 9 Brian: 7 Year toggles scope the first three tiles only. Inventory Count, Money in Inventory and Not For Sale are point-in-time — a card in stock today has no sale year, so a year filter would be meaningless for it. Not For Sale renders only when the count is above zero, and always carries an owner split.
Figure 8 — The KPI band with two years enabled. Per-year sub-lines appear whenever more than one year is showing.
TileWhat it countsFollows the year toggles?
Net ReturnSum of Net Return over sold, non-archived cards. Red below zero, green above.Yes
Net Sold TotalSum of the net sale proceeds (after platform fees) on those cards.Yes
Gross Sold TotalSum of the gross sale price (what the buyer paid, before fees); falls back to net where gross is unknown. Ed. 4.5.Yes
Cards SoldCount of sold, non-archived cards.Yes
Current Inventory CountCards in for-sale inventory. Excludes sold, archived and Not-For-Sale.No
Money in InventoryTotal Cost of that same set — what you are into the stock for.No
Not For SaleCount · 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.

Guardrail Deselecting the last remaining year silently falls back to all years. You can never end up staring at an empty KPI band.

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.

Columns & Views 34 shown Reset to built-in × MY VIEWS ★ marks the view that loads automatically when you open the app. ★ Show floor • active Delete ☆ Sales only Delete ☆ Grading queue Delete Name this view (e.g. Sales only)… Save current Saved “Show floor” ✓ ITEM ☑ ID (locked) ☑ Card Name (locked) IDENTITY ☐ Player ☑ Card Year ☑ Brand ☐ Item Type ☑ Card Type ☐ Set ☐ Subset ☐ Parallel ☑ SKU STATUS & LOCATION ☑ Status ☑ Location ☑ Listed On ☐ Showcase ☐ Damaged COSTS ☑ Grade Fee ☑ Base Cost ☐ Tax ☐ Shipping ☐ Handling ☑ Total Cost 1 2 3
Figure 9 — Columns & Views. 1 the star sets your default view · 2 save the current layout under a name · 3 ID and Card Name are locked and cannot be unticked.
  1. Set the grid up the way you want it — tick columns, drag widths, click a header to sort.
  2. Open View … ▾, type a name in the box, press Save current. You get Saved "Show floor" ✓ in green.
  3. Click the ☆ beside a view to make it your default — it becomes ★ and that layout loads automatically next time you open the app.
  4. Click a view's name to apply it (Applied "Sales only"); Delete removes it.
  5. Reset to built-in restores the 34-column default layout, re-fits every column to its content and sorts by ID.
What a saved view stores Only the layout: which columns are visible, their widths, and the sort. Filters, search text, the card-type chip, the status facet, the photo filter and “Show archived” are not saved — a view called "Sales only" still needs its filters set by hand. Saving under an existing name updates that view rather than making a duplicate, and each partner has their own views and their own single default.
Column order is not user-controllable The moment you tick or untick any column, the grid re-orders itself into the canonical column order shown in 5.5. Applying a saved view does the same. So a view remembers which columns you had, not the order you dragged them into.

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.

#ColumnGroupFilterDefaultNotes
1IDItemPhoto coverage✓Frozen and locked. Its funnel is the Has Photo / No Photo filter. Hovering pops the card image.
2Card NameItem—✓Frozen and locked. Click it to open the card editor.
3PlayerIdentity—Searchable, not filterable
4Card YearIdentityMin–max✓Type 2024 in both boxes to pick one year
5BrandIdentityChecklist✓From the managed Brand dropdown
6Item TypeIdentityChecklistThe card_types lookup
7Card TypeIdentityChecklist✓The sports lookup — Baseball, Football, … This is what the chips filter
8SetIdentityChecklistSet/product name only, no year or brand
9SubsetIdentityChecklist
10ParallelIdentityChecklist
11Card NumberIdentityChecklist
12Intake TitleIdentityChecklistThe name the card arrived with
13Intake SourceIdentityChecklistscan, ebay, cdp-inventory, psa_return, app, reintake
14Name SourceIdentityChecklistcanonical, intake, user, grader
15Print RunIdentityMin–maxRenders as /399
16RookieIdentityChecklist (Yes/No)Amber badge
17AutoIdentityChecklist (Yes/No)Sky badge
18RelicIdentityChecklist (Yes/No)Fuchsia badge
19Name LockedIdentityChecklist (Yes/No)Locked names are skipped by Generate names
20SKUIdentityChecklist✓The importers' match key
21Listing NameIdentityChecklistThe title used on the marketplace
22Purchase NameIdentityChecklist
23CDP NameIdentityChecklistCard Dealer Pro's title
24StatusStatus & LocationChecklist✓Pill: Sold / For Sale / Not For Sale
25LocationStatus & LocationChecklist✓Where the card physically is
26Listed OnStatus & LocationChecklist (multi)✓A card can be listed in several places; a row passes if any ticked platform matches
27ShowcaseStatus & Location— (none)Sortable only — there is no funnel on this column
28DamagedStatus & Location— (none)Shows ⚠ Damaged; hover for the damage note. Sortable only
29Purchase DateAcquisition—Sortable, not filterable
30Purchase YearAcquisitionMin–max
31Purchase PlatformAcquisitionChecklist
32Owned ByAcquisitionChecklist✓Profit follows ownership
33Paid ByAcquisitionChecklist✓Cost recovery and losses follow the wallet
34Pay MethodAcquisitionChecklist✓
35Platform Purchase Order IDAcquisitionChecklist✓The buy-side order number
36GraderGradingChecklist✓PSA / SGC / BGS / …
37GradeGradingChecklist✓Shown combined, e.g. 10 Pristine; sorts numerically
38Cert NumberGrading—✓Searchable, not filterable. The photo importers' join key
39PSA Order #GradingChecklist
40Grading Paid ByGradingChecklistDrives the cross-partner grading rows in the waterfall
41Grade FeeCostsMin–max✓
42Base CostCostsMin–max✓What you paid for the card itself
43TaxCostsMin–max
44ShippingCostsMin–maxInbound shipping you paid
45HandlingCostsMin–maxAlso where return costs land after a refund
46Total CostCostsMin–max✓Calculated: base + tax + shipping + handling + grade fee
47Comp As IsValuationMin–max✓What it comps at in its current state
48Projected Profit As-IsValuationMin–max✓Calculated: comp − total cost. Red/green
49Expected Sale (10)ValuationMin–max✓What it would fetch as a 10
50Projected Profit (10)ValuationMin–max✓Calculated. Red/green
51Asking PriceValuationMin–max✓A blank asking price sorts and filters as 0, so a 0…0 range finds every unpriced card
52Projected Profit (Sale)ValuationMin–max✓Calculated. With no asking price it reads set price rather than a fake number
53Sale TypeSaleChecklist✓The disposition — Sold – Straight Sale, Gifted, Lost, …
54Date SoldSale—Sortable, not filterable
55Year SoldSaleMin–max✓Drives the tax buckets
56Sold PlatformSaleChecklist✓FB displays as Facebook
57Proceeds ToSaleChecklistWhich account the money landed in
58Platform Sale Order IDSaleChecklist✓Traceability back to eBay/CollX
59Platform Sale Item IDSaleChecklist✓eBay item number — stamped by the Listings importer
60Sold PriceSaleMin–maxThe gross the platform reported
61Net ProceedsSaleMin–max✓What actually landed after fees
62Net ReturnSaleMin–max✓Calculated: net proceeds + shipping margin − total cost. Blank on anything not sold
63HomeStorage LocationChecklist✓Where it lives when it is not at a show
64ShowStorage LocationChecklist✓Derived: Case A2 or Bin 3, B, 12
Guardrails in the columns themselves Net Return is suppressed for anything not sold — blank in the grid, sinks to the bottom on sort, excluded from its own range filter, and blank in the CSV. A card carrying a stale net return can never leak into a total. Projected Profit (Sale) never shows a number computed against a missing asking price. Blank values always sort last, in both directions.
Two names, three money columns Sold Price is the gross the platform reported. Net Proceeds is what you actually received. Net Return is profit. The Total Sold $ KPI sums the proceeds figure, so on a card where gross and net differ, the column and the KPI describe different things by design.

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.

FilterCountWhere
Global search fields7Toolbar box
Status facet buttons5All / For Sale / Not For Sale / Sold / Archived
Card-type chips1 + NAvailable plus one per card type in stock
Photo-coverage funnel1On the ID column header
Per-column checklist funnels37Column headers
Per-column min–max funnels19Column headers (numeric columns)
Show archived1Far right of the toolbar
× Clear all filters1Appears only when something is filtered

Status facet and card-type chips

Status All 1,958 For Sale 1,125 Not For Sale 28 Sold 822 Archived 15 Has Photo 1,004 × | You have $12.4K across 184 cards × Clear all filters Available: 1,125 Baseball: 642 · $41.2K Football: 288 · $19.8K Basketball: 141 · $9.6K Hockey: 38 · $2.1K Pokémon: 16 · $1.8K 1 2 3 4 1 · Facets are mutually exclusive and click-again-to-clear. Counts reflect the current search. 2 · When the photo funnel is narrowed, an echo pill appears here — click it to reset to all. 3 · The rollup is facet-aware: under Sold it totals sale proceeds, under For Sale it totals cost basis. 4 · “Available” always equals the sum of the per-type chips — count and dollars describe the same set. Sold, Not-For-Sale and archived cards never appear in a card-type chip.
Figure 10 — The filter row: status facet, active-photo echo pill, the live rollup callout, and the card-type chips with their money badges.

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.

CHECKLIST FUNNEL — 37 COLUMNS Sold Platform All Clear × ☑ eBay ☑ CollX ☐ Facebook ☐ Whatnot ☐ Card Show ☐ Private Sale ☐ (none) 2 selected Apply MIN–MAX FUNNEL — 19 NUMERIC COLUMNS Asking Price Clear × Min 100 Max — Leave a box blank for open-ended. Apply PHOTO COVERAGE — ON THE ID COLUMN Photo coverage Clear × ☑ Has Photo 1,004 ☑ No Photo 954 Counts reflect the current search. Clicking the ID label still sorts. Enter in either box applies. Bounds are inclusive, and a card with no value in that column is excluded as soon as either bound is set — a blank cannot satisfy a range. Trick: Asking Price min 0 / max 0 finds every unpriced for-sale card, because a blank asking price counts as zero. Ticking everything (or nothing) in a checklist is treated as “no filter”.
Figure 11 — The three kinds of funnel: a value checklist, a numeric min–max range, and the photo-coverage filter that lives on the ID column.
One sharp edge In the photo funnel, unticking both boxes shows zero rows, not everything. The echo pill in the status row does label that state honestly — No Photos Shown 0 — so if the grid goes empty, look there first.

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

5.8Rows: hover, open, select

HOVER THE ID CELL 1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ 1043 2023 BOWMAN CHROME PROSPECTS #BCP44 HOLLIDAY card image A 200 × 280 preview follows the cursor. It flips to the other side of the cell rather than running off screen, and cards with no photo show the BK placeholder. Click the Card Name instead and the full editor opens. SELECT TO SELL 4 selected Select all 184 in view Clear Sell 4 selected → Exit
Figure 12 — Hovering an ID pops the card image; clicking a Card Name opens the editor. In select mode the ID column grows a checkbox and the emerald banner appears.

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.

Recent Sales 822 sold · net $85,426.58 Filter by card, id, platform… × DATE SOLD ▼ YEAR CARD GROSS NET SALE PROFIT PLATFORM 2026-08-192026 #10432023 BOWMAN CHROME PROSPECTS #BCP44 JACKSON HOLLIDAY $425.00 $372.60 $102.60 eBay 2026-08-172026 #10462019 PANINI DONRUSS OPTIC #158 JA MORANT RC HOLO $150.00 $140.65 -$47.35 CollX 2026-08-142026 #09182022 TOPPS UPDATE #US47 JULIO RODRIGUEZ RC $88.00 $76.72 $21.14 Facebook 2026-08-112026 #07712018 PANINI PRIZM #12 LUKA DONCIC RC — $0.00 -$212.00 🎁 gift Click any card to close this modal and open it in the editor. Sortable by Date Sold, Year, Card, Gross, Net Sale, Profit and Platform — click a header, click again to flip. The list caps at 400 rows: “Showing the first 400 of 822 — use the filter to narrow.” The net headline still covers all of them.
Figure 13 — Recent Sales. A gifted card shows 🎁 gift in place of a platform.

5.10CSV export

Two buttons, two very different scopes:

Export View CSV 184 rows (current view) · 34 columns × Build your export here — it's independent of the grid. Choose a photo filter and which columns to include: Match visible columns Select all Clear ITEM ☑ ID ☑ Card Name PHOTO ◉ Both (all cards) ○ Has photo only ○ No photo only SALE ☑ Sale Type ☑ Year Sold ☑ Sold Platform ☐ Proceeds To ☑ Net Proceeds ☑ Net Return Header row uses column titles (e.g. “Cert Number”), then one line per card. Cancel Download View CSV Every export also carries two extra columns at the end — Front Photo URL and Back Photo URL. File name: bkcards71_view_184rows_2026-08-21.csv
Figure 14 — The export popup. The photo radios sit inside the Item group; the column list is grouped exactly like the grid's category bands.
Export guardrails Money exports as a plain number (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.

the Ledger, dimmed behind the drawer CARD #1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 × Status For Sale ▾ 🕘 History Cost basis $96.40 · Comp $210.00 Card Name canonical Generate from attributes Use intake Intake: 2024 Topps Chrome Update Luis Arraez Pink · from cdp-inventory ▸ Name history front photo Front · Replace front No back photo yet Back · Upload back IDENTITY Card Name 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 SKU BFL-EB14261 Brand Topps ▾ COSTS Base Cost $72.00 Grade Fee $18.99 Total Cost $96.40 (calc) VALUATION Asking Price $184.00 Proj. Profit (Sale) $87.60 (calc) Cancel Archive Update Save 1 2 3 4 1 · The Status dropdown starts every exit — sale, gift, write-off, or a simple flip. 2 · The provenance chip: canonical, intake, user, PSA or SGC. 3 · Grey with “(calc)” = the database computes it. There is no input to type into. 4 · Update saves and stays open; Save saves and closes.
Figure 15 — The card editor drawer. Green-bordered fields are yours to type; grey ones marked (calc) belong to the database.

6.2Green, grey and sky — the colour language

What you seeWhat it means
Green border, focus turns brighter greenEditable. 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 editableTemporarily locked while the platform's fee table computes it (Mark Sold's Net Sale).
Sky-blue bordered block at the bottomThe 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:

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.

Damaged is a condition, not an exit Ticking Damaged means the card is still in hand and still sellable — no money moves, and the cost stays in inventory. It only becomes a loss on the day it is actually discarded, via Status → Write Off… (lost / destroyed) → Destroyed.

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.

QualifierMeaning
MCMiscut (PSA)
MKMarks (PSA)
OCOff-Center (PSA)
OFOut of Focus (PSA)
PDPrint Defect (PSA)
STStaining (PSA)
PristineCGC / BGS 10
Black LabelBGS all-10
Gold LabelSGC

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.

Card Name canonical Generate from attributes Use intake Intake: 2024 Topps Chrome Update Luis Arraez Pink /399 · from cdp-inventory ▾ Name history canonical · 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 · 2026-08-20 intake · 2024 Topps Chrome Update Luis Arraez Pink /399 · 2026-08-14 HOW THE CANONICAL NAME IS ASSEMBLED 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 PSA 10 year · brand · set · #card number · player · subset · parallel · /print run · grader · grade Blanks drop out, everything is uppercased, and repeated words collapse — brand BOWMAN + set BOWMAN CHROME gives one BOWMAN. The card number goes before the player and the variety after — confirmed against real PSA slabs. Typing in the Card Name box by hand marks it user and locks it. A locked or grader-set name is never silently rewritten.
Figure 16 — The Card Name block, with the name history expanded, and the canonical assembly order beneath.
Provenance chipMeans
canonicalBuilt from the card's own attributes. It follows along automatically as you edit those attributes.
intakeThe name the card arrived with, restored by Use intake.
userYou typed it. Locked — nothing overwrites it, including bulk Generate names.
PSA / SGCGrader-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.

Sale Type drives Status. On an unsold card, choosing a Not for sale… Sale Type (Not For Sale — BK Card Inventory, Personal Card Kevin, Personal Card Brian) sets the Status to Not For Sale; Pending sets Pending; For Sale sets For Sale. You no longer set both.

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

front photo Replace front Front Remove front BK · Cards 71 No back photo yet Back · Upload back What happens on upload The file is stored in our own bucket, not linked from elsewhere. Front and back use separate paths and separate columns, so one can never overwrite the other. Removing a photo asks first — “Remove the front photo?” — and only clears the link; the stored file itself stays. In Add mode the tile reads “Save the card first, then click here to add a photo.” — a photo needs a card to belong to.
Figure 17 — The two photo tiles. Hovering shows Upload / Replace; Uploading… appears while it works.
The photo window (Ed. 4.5). Click either picture and it opens full-screen; click again, press × or Esc to close. Under each pocket the two words are simply Remove and Replace; an empty pocket is the Upload target. PSA-graded cards can get both sides from PSA automatically — see 15.4.

6.7Save, Update, Cancel

ButtonBehaviour
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 areaIf 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.

Two guards worth knowing Net Sale can never be negative — money received is never below $0 — and Net Sale can never exceed the gross — fees only ever reduce the sale price. These mirror a rule in the database itself, so you get plain English instead of a database error.

6.8Archive, Restore, Delete

There is no shortcut to deletion Every path to a permanent delete goes through Archive first, and only an admin sees the button. Note also that a hard delete leaves no audit row — the card is simply gone. Prefer Archive.

6.9The eBay What-If pad

eBay Net What-If Projected eBay price 220.00 Fee % 12.35 +$/order 0.40 Shipping $ 6 Tax % 6 eBay fee -$29.66 Net proceeds $190.34 Projected net profit $93.94 Fee on price + shipping + tax, + $/order. Assumes you charge shipping ≈ your cost. Preview only — nothing saved. This is the only place in the editor with hard-coded rates. Real sale estimates use the platform fee table in Admin → Settings.
Figure 18 — The What-If pad. A scratchpad for "what would this net me on eBay at $220?" — it never writes anything.

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, topRight column, top
live on eBay (⚡)Pictures → On eBay → eBay Net What-IfEssentials → Identity → Sale (Record a sale by hand →)
soldPictures → IdentityEssentials → Sale (the receipt); the What-If folded ▸ at the very bottom
for sale, not on eBayPictures → IdentityEssentials → 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.

Four numbers, never blended. Card Hedge's estimate, Card Hedge's last sale, your comp from ticked sales, and your own number are always named. Only → Comp As Is writes any of them onto the card, and only when you ask.

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 SaleA one-line confirm: Change status to "For Sale"?
Not For SaleChange status to "Not For Sale"? — the keeper pile
SoldThe 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.

The stale-tab guard Changing status never acts on what your browser happens to be holding. The app re-reads the card first. If it cannot reach the database you get "Couldn't reach the database to verify this card…" and nothing happens. If somebody changed the card elsewhere you get "This card changed elsewhere — it's actually 'Sold' now. The panel has been refreshed; pick again if you still want to change it." This exists because a stale tab once skipped the un-sell chooser entirely and stranded ghost sale data on a card.

7.2Mark Sold

Mark Sold Card #1042 Sale Type Straight Sale ▾ Date Sold 2026-08-21 Sold Platform eBay ▾ Total 184.00 Net Sale (−12.35% − $0.40) 160.87 🔒 computed from the platform fee Proceeds To BK MTB ▾ Enter Total (gross). eBay and CollX compute Net Sale for you (locked); all other platforms pre-fill Net = Total and stay editable. eBay's exact payout trues up on the next importer run. Net Return = Net Sale − Total Cost. Year Sold derives from Date Sold. Cancel Confirm Sale 1 2
Figure 19 — Mark Sold. 1 the platform drives the fee · 2 a platform with fee data locks Net Sale so it cannot drift from the maths.
  1. Open the card and set Status → Sold.
  2. Pick Straight Sale or Trade.
  3. Set Date Sold — Year Sold is derived from it, and Year Sold is what drives your tax buckets.
  4. Pick the Sold Platform. Net Sale fills itself immediately.
  5. Type the Total (the gross). Net Sale recomputes.
  6. Optionally set Proceeds To — which account the money landed in.
  7. 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.

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:

  1. Date Sold is required.
  2. Sold Platform is required.
  3. Sale Type is required.
  4. Total (gross) is required.
  5. Net Sale is required — pick a platform and it fills itself.
  6. Net Sale can't be negative — money received is never below $0.
  7. 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.

Gift Profit to BKCards71? Kevin owns this card and keeps the profit of $64.88. Optionally gift some or all of it to the BKCards71 profit pool. Gift Amount 32.44 25% 50% All Note (optional) The gift moves that amount from Kevin's kept profit into the company pool. Editable later in the Financial tab. No Gift Save Gift
Figure 20 — The sale-time profit gift. It appears only when the owner is a partner (not BKCards71) and the sale actually made money.
Two different “gifts” Gift Profit to BKCards71 moves money between partners on a sale that really happened. Gifted (free — write-off) in the Status dropdown gives the card away for nothing. They share a word and nothing else.

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

Write off this card What happened to it? ◉ Lost It's gone — can't find it, can't recover it. ○ Forgery Turned out fake — worthless, removed. ○ Ripped Off Stolen or scammed away from us. ○ Destroyed Damaged beyond sale and discarded. Date 2026-08-21 This card is gone — it books a $0 sale and its full cost ($96.40) writes off as a loss this year. Just damaged but still in hand? Cancel and tick the Damaged box instead. Cancel Confirm Write-Off
Figure 21 — Writing a card off. The story you pick is what appears in the Accounting tab's Write-Offs block.

Confirmation: Written off — Lost. Full cost books as this year's loss.

Refusal You cannot write off a card that is already Sold: "This card is Sold — its exit is already booked. Un-sell it first if the sale was wrong."

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.

Un-sell card #1042 → For Sale Recorded sale: $161.28 net on 2026-08-11. What actually happened? ◉ Strike the sale — it was a mistake No money ever moved. Wipes the sale completely; the ledger takes zero penalty. Old values stay in the audit log. ○ Returned & refunded Buyer got their money back, card is back with us. Anything the round trip cost adds to this card's cost basis. Return cost to us 0.00 ○ Order canceled & refunded — the card never shipped Money came in and went straight back out. The card was never out of inventory. This is what eBay's “canceled” orders are. ○ We kept the money AND got the card back The sale stays on the books exactly as is. The card re-enters as a NEW card at $0 basis — no double counting either way. Cancel Un-sell
Figure 22 — The un-sell chooser. Picking Returned & refunded reveals the return-cost box.
StoryWhat it does to the moneyConfirmation
Strike the saleEvery sale field is cleared. Nothing else moves.Sale struck — clean, no ledger trace (audit kept).
Returned & refundedSale 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 & refundedSale cleared. The card never left inventory.Order canceled — sale reversed, card never left inventory. Recorded in the card journey.
We kept the moneyThe 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.
Nothing is lost when a sale is wiped Before any sale field is cleared, the app photographs all twelve of them — price, net, dates, platform, order and item numbers, shipping, gifted-to — and files that snapshot into both the audit log and the card's own journey. The card's columns lose the numbers; the timeline is where they survive forever.

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.

CARD JOURNEY · #1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 × 🛒 Bought · eBay 2026-03-04 cost $72.00 order 15-14761-19242 · by Kevin 📮 Sent to grading 2026-04-11 fee $18.99 🏅 Graded 2026-06-02 PSA 10 · cert 104214318 🏷 Listed · eBay 2026-06-19 💰 Sold · eBay 2026-08-11 gross $184.00 net $161.28 ↩ Returned & refunded 2026-08-15 $12.40 Buyer returned it; label and fees added to basis. added by hand + Add event History is a record, not a calculation — the card's own fields remain the source of truth for all money.
Figure 23 — The card journey. Reversed money is struck through in amber: it was recorded, then reversed.

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.

Filter and select cards, then Edit selected to change one or more fields across all of them at once. Or click a card's description to open just that card in the full editor. Archived cards are excluded. Derived values are never bulk-editable. Search ID, SKU, description, player… Refresh Edit selected (42) Generate names (42) Status ▾ 1 Card Type ▾ Item Type ▾ Brand ▾ Grader ▾ 1 Location ▾ Owner ▾ Card Year ▾ Clear all filters ☑ ID ▲ DESCRIPTION CARD TYPE STATUS OWNER GRADE LOCATION COST ☑1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 BaseballFor Sale KevinPSA 10 Monroe$96.40 ☑1045 2020 TOPPS CHROME #201 BO BICHETTE RC BaseballFor Sale BrianPSA 9 Show box 2$52.75 ☐1046 2019 PANINI DONRUSS OPTIC #158 JA MORANT RC HOLO BasketballSold BKCards71PSA 9.5 —$188.00 ☑1051 2023 PANINI PRIZM #201 CJ STROUD RC SILVER FootballFor Sale Kevin— Monroe$41.00 Showing 128 of 1,958 · 42 selected clear selection 1 2 1 · Facets AND across, OR within · 2 · Clicking a description opens that one card in the full editor.
Figure 24 — Bulk Edit. The header checkbox selects everything in the current filter, and your selection survives changing that filter.

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.

Edit 42 cards Tick the fields to change. Untouched fields are left alone. Blank = clear the value. ACQUISITION ☑ Owned By Kevin ▾ ☐ Paid By — (clear) ☑ Purchase Date 2026-02-14 COSTS ☑ Base Cost 12.50 ☑ Notes (nothing typed) 💰 12 of these 42 cards are already SOLD. You're changing Base Cost, which rewrites Total Cost → Net Return → the P&L, the tax-year totals and the partner waterfall for sales already on the books. ☐ I understand and want to change the cost basis anyway. 🧨 This will ERASE values on all 42 card(s): Notes is ticked with nothing typed in, so it will be cleared. Untick the field if you didn't mean to. ☐ I want to clear this value. 4 fields selected Cancel Apply Apply stays disabled until both boxes above are ticked.
Figure 25 — The bulk edit popup with both acknowledgements showing. Neither can be dismissed; Apply is blocked until each is ticked.

The three safety layers

  1. Tick to arm. Nothing is written for a field you did not tick.
  2. 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.
  3. 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.
Honest counting When Bulk Edit is opened from an Integrity drill-down the rows are only partially loaded. Rather than pretending an unseen row is safe, the popup counts it as unknown, still demands the cost acknowledgement, and says so plainly in the confirm: "(Estimate only: 8 of the 42 selected rows aren't fully loaded here, so the overwrite count above may be low.)"

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.

Locked names are never clobbered Any card whose name is locked — a PSA/SGC-authoritative name, or one you typed by hand — is skipped and counted. If nothing is eligible you get "Nothing to generate: the selected cards are all locked/authoritative or have no attributes to build from." The confirm spells out the numbers, and finishes: "This overwrites the current Card Name on the N unlocked card(s)." Result: Generated 34 canonical name(s) · 8 locked skipped.

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.

Bulk Sale · 4 cards Date Sold 2026-08-21 Platform Card Show ▾ Total Sale (Gross) $500.00 Order ID platform order # Gross$500.00 Platform fee-$0.00 Net proceeds $500.00 # CARD ASKING GROSS NET 1042 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PINK /399 $184.00 $213.87 $213.87 1045 2020 TOPPS CHROME #201 BO BICHETTE RC $64.50 $74.97 $74.97 1051 2023 PANINI PRIZM #201 CJ STROUD RC SILVER $95.00 $110.42 $110.42 1063 2022 TOPPS UPDATE #US47 JULIO RODRIGUEZ RC $86.00 $100.74 $100.74 Totals $429.50 $500.00 $500.00 The allocated gross and net land exactly on the order totals — no rounding leak, ever. One order incurs one fee: a per-order charge is applied once for the lot, not once per card. Book 4 sales Every card must have an asking price — the split is weighted by it.
Figure 26 — Bulk Sale. The Totals row is the proof: the per-card shares add up to the order exactly.
  1. In the Ledger, press Select to Sell and tick the cards (filter and sort freely — the selection follows the cards, not the rows).
  2. Press Sell N selected →.
  3. 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.
  4. Set the date, pick the platform, type the Total Sale (Gross), and optionally the order id.
  5. Check the preview table — the Totals row must equal your order.
  6. 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."
Differences from selling one at a time A bulk sale writes no Proceeds To, offers no Trade sale type, and never raises the profit-gift prompt. It also records the whole lot in each card's journey, so any one card can reconstruct the order it was part of. If a card fails mid-way the run stops there — earlier cards stay booked, so fix the failing card and re-run the rest.

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.

Two rules for the whole tab (Ed. 4.4). One thing on screen — every sub-tab is a strip; one body shows at a time, nothing stacks. A card opens in place — click any card anywhere (a Highlights tile, a Market row, a Player's card) and the Card View slides in from the right over what you were looking at; Close or Esc puts you back exactly where you were with your results intact. You are never bounced to another tab to see a card.

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.

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:

When it is called — the rule. Card Hedge is never called before Apply on a data road. CollX purchases read the order screenshots; Search Cert asks PSA; a slab photo dropped on a row reads the label only. The switch Pair + value with Card Hedge · after Apply on every review grid is off by default; tick it and each card is paired and valued after it has been added or matched, and the Result column says so. The one road whose identification is Card Hedge is the AI Card Scan — that is what the scan is for. If Card Hedge is not on your plan, the switch is grayed and says so.
Values are information, never bookkeeping. A market value never touches cost basis, net return, the ledger, the waterfall or tax. Sets, lots and boxes are never sent — singles only.

10.2Uploading photos

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

  1. Tick the tiles (or Select all) and click Scan selected.
  2. 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.
  3. 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.

  1. 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).
  2. 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.
  3. 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:

  1. Open Intelligence → My Card Values.
  2. 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.
  3. Narrow further with the search box, the grader filter, or the value-state filter (never valued / stale / recent).
  4. Tick individual rows or use Select all, then click Check Value (n) — the button shows how many you selected.
  5. 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:

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.

Values are information, never bookkeeping. A market value never touches cost basis, net return, the ledger, the waterfall, or tax. It cannot change your books.

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.

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:

Nothing here writes to your Ledger. The Card View is for cards you are thinking about, whether you hold them or not. To bring a card in, use Scan, Search Cert or Add Card.

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

  1. Click the gear → Platforms.
  2. Under eBay, click Connect eBay.
  3. 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.
  4. 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.
  5. 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.

Who connects? Only partners and admins can connect or disconnect. The connection belongs to the organization, not the person who clicked the button.

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:

StageDirectionWhat it doesStatus in this edition
First-time synceBay → appPulls 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 — Flightsapp → eBayBuild 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.
OrderseBay → booksEvery 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

WordMeansTouches eBay?
Add to collectionPull a listing down and create the card in the appNo
ConfirmThis listing is a card already in the app — stamp the eBay item number and “managed by” on that cardNo
ManageThe app takes that listing over on eBay. Only possible when nobody else manages itYes (later build)
Leave aloneNothing happensNo
List on eBayCards 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

  1. 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.
  2. 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…).
  3. 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.
  4. 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.
  5. 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).
  6. 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.
Honest count. On BK Cards 71's first run: 4,452 live listings, about 1,800 in the app (all 855 CDP-made ones among them), a few dozen Possible, about 2,600 not in the app — cards on eBay that were never entered. The matcher never removes a listing; it only decides which box it sits in.

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:

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

StageMeansWhat you do
Not in the appeBay sold something the app can't pin to a card.Match it (below) or Add to the app →.
Sold — not shippedMatched to a card; the label hasn't been printed yet.Nothing. Print the label on eBay as you always do.
BookedSold 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).
RefundedOnly 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.
canceledNever shipped, and refunded.Nothing.
Shipped outside eBay? If you mailed it without an eBay label, choose Shipped outside eBay… on the row — it confirms, marks the line shipped, and the next check books it.

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.

The pull is the bible for eBay's fields. Sold, shipping, tax, fee, dates and ids are eBay's and are refreshed on every check. The app's own fields — which card, whether it is booked, the shipping cost you typed, what you accepted in Check — are never touched by a pull.
The sale alert. When a sale lands, plain words with a small triangle appear after the tabs on every screen — eBay sale posted — check Orders — until you click them (they take you to Orders) or open Platform Connect.

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.

  1. 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.
  2. 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.
  3. 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 ✕.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
When one sells. eBay doesn't know which physical card the buyer took — they're identical. When the order ships the app books the sale to the oldest-cost copy first, with that copy's own cost and owner; two bought = two copies booked, the order's price, fee and shipping split evenly. The count comes down (5 left), each card gets a Journey note, and when the last one sells the listing ends on its own.

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.

Once, first. Multi-buy needs an eBay Store and a permission eBay only grants at sign-in. Reconnect your eBay account one time — gear → Platforms → Disconnect → Connect — and the consent screen will include it. Your listings, Flights and Orders are untouched by a reconnect.

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.

Executive Dashboard Card-trading performance only — operating expenses, capital, and partner distributions live in the Financial tab. SALES YEAR All 2025 2026 CFO Board Briefing · all sold history Get a CFO's open-the-meeting read across the whole dashboard — health, position, biggest opportunity, biggest risk, and where to focus. Brief the board ↗ REVENUE $85.4K 822 cards sold COST OF GOODS SOLD $90.1K GROSS PROFIT -$4.7K Margin -5.5% ROI -5.2% INVESTED CAPITAL $75.6K 1,125 in inventory UNREALIZED P/L $18.2K on 42% w/ comps AVG DAYS TO SELL 146d TOP-CARD CONC. 3.4% 1 2 3 1 · The year pill filters sold cards only. Inventory figures are always as-of-now — a card in stock has no sale year. 2 · Invested Capital, Unrealized P/L and Top-Card Concentration never move when you click a year. 3 · “on 42% w/ comps” is the honesty line: this number describes only the inventory that actually has a comp set.
Figure 30 — Financials: page header, the Sales-year pills, the CFO briefing panel and the eight KPI tiles.

12.1Scope — the single most important thing on this page

The year pill filters far less than it looks like it does Sales year narrows the set of cards sold in that year. It does not touch inventory — inventory has no sale year, so aging, dead money, the mix pies and the price bands are always whole-dataset and as-of-now. In total, only six figures on the whole page move when you click a year: five KPI tiles and the Gross Profit by Platform chart.
VisualFollows the year pill?
Revenue · COGS · Gross Profit · ROI · Avg Days to SellYes
Invested Capital · Unrealized P/L · Top-Card ConcentrationNo
Gross Profit by PlatformYes
Gross Profit by Year · Revenue vs COGS by Year · Units Sold Over Time · ROI Distribution · Grade Lift · Best & Worst FlipsNo — they show every year on purpose
Everything in Inventory & Velocity, Mix & Exposure, Buying Discipline, Grade Distribution, Grading Spend, Data QualityNo

12.2The eight KPIs

TileWhat it isHow to read it
RevenueGross sales of the cards sold in scopeSub-line gives the card count
Cost of Goods SoldTotal cost of those same cards — basis + grading + shippingThe gap to Revenue is gross profit
Gross ProfitRevenue − COGSGreen above zero, red below; margin shown beneath
ROIGross profit ÷ COGSLifetime, not annualised — a one-week flip and a three-year hold count the same
Invested CapitalCost basis tied up in unsold, for-sale inventoryExcludes Not-For-Sale
Unrealized P/LComp − cost across only the inventory that has a compIf coverage is 42%, the number describes 42% of the book. Directional, never a balance-sheet figure
Avg Days to SellMean purchase-to-sale timeYour cash conversion speed
Top-Card ConcentrationBiggest single card as a share of invested capitalSingle-name risk

12.3The seven sections

Capital Health Gross Profit by Year $4K $0 -$4K 2025 2026 A red bar is a year that lost money on realised sales alone. Gross Profit by Platform eBay $8.2K Card Show $4.4K Facebook $1.9K CollX -$5.1K Whatnot -$4.2K A long red bar is a channel whose fees or buyer mix is eating the margin. This is the one chart that respects the Sales-year pill.
Figure 31 — Two of the fourteen Financials charts. Bars are red below zero and green (or teal) above, everywhere on the page.
SectionContainsWhat it is for
Capital HealthGross Profit by Year · Capital Position (six mini-stats)The shape of the business over time and where the money sits right now
Sales PerformanceRevenue vs COGS by Year · Gross Profit by Platform · Units Sold Over Time · ROI DistributionWhich 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 DisciplineAvg 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 & VelocityInventory Aging · Money in Inventory by Sport · Dead MoneyThe red 90+ d bar is your problem. Aging counts from purchase, not from listing
Grading PerformancePipeline chips · Grade Distribution · Grade Lift · Grading Spend by PayerThe Raw bar in Grade Lift is the control group — the case for grading is every bar that clears it
Mix & ExposureValue by Sport · Value by Brand · Asking-Price Bands · Top 10 Cards by Cost BasisConcentration risk in plain sight
Best & Worst FlipsTop Winners · Worst Losers, eight rows eachRanked by absolute profit, not ROI — a $2 card that returned 900% will never appear here
Dead Money — inventory 90+ days old (214 cards · $18,442.90) # CARD AGE COST ASKING SUGGESTED ACTION 0771 2018 PANINI PRIZM #12 LUKA DONCIC RC 412d $620.00 $899.00 Reprice — above comp 1102 2021 TOPPS CHROME #220 WANDER FRANCO RC 288d $188.00 — Set an asking price 0944 2022 PANINI SELECT #44 JAYSON TATUM SILVER 201d $142.50 $165.00 Promote / discount Showing the 40 largest by cost · 174 more. Data Quality These flags don't break anything — they tell you where the numbers above lean on incomplete data. Cleaning them sharpens every metric. 17 Listed with no asking price A buyer can see it on a marketplace with no price — fix now. 263 For sale, no asking price (unlisted) Backlog inventory to price when you list it. 9 Sold, missing Date Sold Weakens time-to-sell + monthly trend. 4 Sold for $0 Drags revenue + margin down. 122 $0 total cost Inflates ROI on those cards. 652 Inventory w/o comp No unrealized P/L for these.
Figure 32 — The Dead Money worklist (with its suggested-action column) and the six Data Quality tiles. Red tiles are the ones actively distorting a number above.

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

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.

Financials vs Accounting — the one number that legitimately differs Financials' Gross Profit is revenue − COGS. Accounting's Gross Profit is revenue − COGS plus the shipping margin (what buyers paid for shipping, less what the labels actually cost). They differ by exactly that term. It is not a bug, and chasing it is a waste of an afternoon.

13.1The Ledger sub-view

Finances BUSINESS BOOKS · NON-CARD + Add Entry All 2025 2026 Ledger Entry surface — you type it Statements Computed — finance & tax OPERATING EXP $18,204.55 CAPITAL EQUIP $3,410.00 WRITE-OFF $1,286.44 OWNER CAPITAL $17,637.11 PERSONAL (EXCL.) $842.00 TOTAL · IN BOOKS $40,538.10 DATE ▲ TITLE CATEGORY ⏷ VENDOR ⏷ PAID BY ⏷ UNIT COST FREQ ⏷ REIMB ⏷ TOTAL 2025-01-15 Card Dealer Pro subscription Operating Expense (Non-Card) – Software CDP Kevin $49.00 Monthly ×7 Y $343.00 2025-02-02 Card show table — Monroe Operating Expense (Non-Card) – Shows Monroe Expo Brian $220.00 — Y $220.00 2025-03-18 Card scanner + light box Capital Equipment Amazon BKCards71 $3,410.00 — — $3,410.00 2025-04-04 Dinner with Marcus personal Operating Expense (Non-Card) – Meals — Kevin $84.00 — — $84.00 2025-05-09 Owner capital — Kevin Owner Capital Contribution — Kevin $12,000.00 — — $12,000.00 54 entries · business, counts-in-books total $40,538.10 1 2 1 · “Monthly ×7” means this one rule has produced 7 occurrences in the selected year — Unit Cost × 7 = Total. 2 · A personal entry is dimmed, chipped, excluded from every business total, and shown separately in the summary band.
Figure 33 — The Accounting ledger. The summary band recomputes live as you filter the table beneath it.

The five summary stats plus the total:

StatWhat it collects
Operating ExpBusiness, counts-in-books entries whose category starts with "Operating Expense"
Capital EquipCategories flagged as capital equipment (CapEx)
Write-OffCategories whose name contains "Write-Off"
Owner CapitalCategories flagged as capital contributions
Personal (excl.)Every personal-scope entry, whatever its category — counted here and nowhere else
Total · in booksEverything 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

the ledger, dimmed behind the drawer Add Entry ✕ DATE 2026-08-21 TITLE Card Dealer Pro subscription DESCRIPTION CATEGORY Operating Expense (Non-Card) – Software ▾ + VENDOR CDP ▾ + PAID BY (CONTRIBUTOR) Kevin ▾ PAID BY METHOD BK Amex ▾ AMOUNT 49.00 FREQUENCY Monthly ▾ START DATE 2025-01-15 End Date (blank = runs until stopped) SCOPE Business ▾ COUNTS IN BOOKS Yes ☑ Reimbursable REIMBURSED? Partial ▾ REIMBURSED AMOUNT 98.00 TO Kevin ▾ Add Entry Cancel
Figure 34 — The entry drawer. The recurring block appears only for a recurring frequency; the reimbursement fields appear only when Reimbursable is ticked.

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.

Two dropdowns need a follow-up when you add them here A category created from this panel has no capital/CapEx flags set, so it will not land in any summary bucket until those flags are set in the database. A frequency created here has no month interval, so it behaves as a one-off no matter what you call it — type "Quarterly" and you will get a single occurrence. Ask an admin to finish either one.

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.

There is no Active checkbox (Edition 4). Dates are the whole system: no End Date means the rule is running; an End Date stops it after that month. The entry panel states which is true in plain words — green “Active — runs every period until you set an end date,” or “Ends {date} — stops generating after that month.”

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.

The balance follows the amount, not the label The outstanding figure is amount paid − amount reimbursed. The three-way state is a human label only. Marking an entry Fully reimbursed while leaving the reimbursed amount at $0 leaves the whole thing showing as owed. Always type the number. Over-reimbursement clamps at zero — it never becomes a debt back to the company — and Reimbursed To and Reimbursed Date are an audit trail only, not part of any sum. Recurring reimbursables are not properly supported: the cost multiplies by the occurrence count but the reimbursed amount does not.

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.

GROSS PROFIT -$3,982.10 NET ORDINARY INCOME -$23,473.09 CAPITAL RECOVERED $85,426.58 TOTAL STILL OUT (COHORT) $44,218.93 P&L Bridge Sales COGS OpEx Write-Off Net Income Business Accounting · P&L (sold-year, IRS basis) · All Years Gross Sales (cards sold) $85,426.58 Cost of Goods Sold -$90,143.62 Gross Profit -$3,982.10 Operating Expenses (non-card) -$18,204.55 Inventory Write-Off -$1,286.44 Net Ordinary Income -$23,473.09 CapEx $3,410.00 (amortized in capital, not expensed here) · Owner capital contributions $17,637.11 Cards Only · Capital Waterfall · Purchase Cohort: All purchase years KEVIN BRIAN BKCARDS71 Cost advanced (cards bought) $96,428.10 $41,204.55 $28,112.30 + Grading paid for others $1,842.00 $0.00 $612.44 − Grading others paid for you -$0.00 -$1,842.00 -$612.44 = Adjusted capital advanced $98,270.10 $39,362.55 $28,112.30 − Recovered on sale (to receiver) -$49,879.04 -$18,918.25 -$52,729.29 = Still out (your money on the table) $48,391.06 $20,444.30 -$24,616.99
Figure 35 — Statements: the four headline tiles, the P&L bridge, the six-line P&L, and the per-partner capital waterfall.

The three rules that drive every partner number

  1. Cost recovery → the payer. Whoever fronted the money is credited back what they put in, capped at cost.
  2. 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).
  3. 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.

#BlockWhat it tells you
1Four KPI tilesGross Profit · Net Ordinary Income · Capital Recovered · Total Still Out
2P&L BridgeFive magnitudes: Sales, COGS, OpEx, Write-Off, Net Income
3Net Owed by Company → PartnerOne bar per partner
4Capital: Recovered vs Still OutStacked, by purchase cohort
5Operating Expenses by CategoryDonut of the OpEx mix
6Business Accounting · P&LThe six-line statement. CapEx and owner capital sit outside it, on purpose
7Cards Only · Capital WaterfallCost advanced → grading adjustments → recovered → still out, per partner
8Shipping Ledger (Both Legs)Collected from buyers, less what labels cost, = shipping margin
9Write-OffsGifted · Lost · Forgery · Ripped Off · Destroyed, with a separate amber watch line for damaged-but-still-held cards
10Non-Card Position (Ledger)Out-of-pocket unsettled + capital contributions = non-card owed
11Total Owed (All Sources)Card capital still out + non-card owed − distributions taken
12ReconciliationWhy the three partners do not sum to zero
13DistributionsMoney actually taken out. + Record to add one
14Out-of-Pocket by Payer & OwnerThe payer × owner matrix
15Loss Carried by PartnerThe figure that flows to a personal return
16Partner Accounting · Tax pass-throughProfit kept − losses carried = net to personal return
17Profit GiftsEvery gift of partner profit into the company pool
18Profit DistributionSliders that split the company pool by percentage, per year
19Tax SchedulePer-card gain/loss, sorted biggest-loss-first — the harvesting worklist
Never add the shipping margin twice The Shipping Ledger is a breakdown of a number that is already inside every card's Net Return and inside Gross Profit. The block says so itself: "(already inside each card's Net Return — this is the breakdown, not an extra line)".
Why the partner totals do not sum to zero The Reconciliation block explains it in the app: "If every dollar were just owed between partners, this would be $0. It isn't — it equals the realized gain/loss: money truly made or lost on cards. A negative figure is value that left the system entirely, not a debt between partners."

Recording a distribution

+ Record opens a small drawer: Date (drives fiscal year), Partner, Amount Taken, Kind and a note. Kind matters:

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:

  1. P&L Summary — the six lines, plus CapEx, owner capital and the sold count
  2. Tax Schedule — per card, with owner and payer, and a TOTALS row
  3. Partner Positions — still out, non-card owed, distributions, net owed
  4. Out-of-Pocket — the payer × owner matrix
  5. Partner Tax — recovered, realized loss, profit kept, profit gifted, net to return
  6. Capital Waterfall — the six lines per partner, with the cohort label
  7. Non-Card Ledger — the raw entries
  8. Distributions — year-filtered
  9. Profit Gifts — the gift trail with a total
One export caveat The Non-Card Ledger sheet exports the unit amount for a recurring entry and handles the year scope differently from the screen. That sheet will not foot to the on-screen ledger total. Use the P&L Summary sheet for totals.

13.7Numbers that must tie

These are the internal identities the app maintains. If one of them fails, something is wrong and worth raising:

AssertionWhere you can see it
Per-card gain/loss adds up to Gross ProfitThe Tax Schedule footer literally prints Gross Profit as its column total
Gross Profit = Gross Sales − COGS + shipping marginP&L block
Net Ordinary Income = Gross Profit − OpEx − Write-OffP&L block (CapEx and owner capital excluded by design)
Adjusted capital advanced = cost advanced + grading for others − grading by othersWaterfall rows 1–4
Still out = adjusted advanced − recoveredWaterfall rows 4–6
Grading paid for others totals the same as grading others paid for youWaterfall rows 2 and 3 — if they differ, a partner name failed to match
Cost out − recovered = loss, in every matrix cellOut-of-Pocket footnote
Total owed = non-card owed + still out − distributions takenTotal 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.

Finances BUSINESS BOOKS · NON-CARD Export CSV Import Receipt Photos Import Statement + Add Entry All · 2025 · 2026 A lit (blue-ringed) button means its panel is open. Cancel ✕ inside the panel closes it.
Figure 51 — The Ledger toolbar. Importer buttons are activators: fixed labels, lit while open, one panel at a time.

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:

GroupWhat happens and why
TransfersSkipped. A credit-card payment appears in both accounts — that is the same money twice, not an expense.
Income already on cardsSkipped. Marketplace payouts are your sale proceeds; they already live on each sold card as its Net Sale.
Card costsSkipped. Card purchases and grading charges ride on the cards themselves — booking them here would double-count.
Shipping labelsSkipped as expenses. Label costs belong on the sale they shipped (the Shipping Ledger), never in OpEx.
Covered by a recurring ruleMarked “covered,” never booked twice. The matching rule is named on the line. If the amount ever drifts from the rule, it is flagged.
Bank feesPre-ticked, ready to book under Bank Fees with the bank as vendor.
New — needs reviewEverything else. Titles are editable in place; pick a category, tick, book.
NEW — NEEDS REVIEW · 3 titles are editable — click to reword 08/03 AMAZON MKTPL*562SQ9FA0 $81.86 — category — already in ledger BANK FEES · 2 ✓ 2 booked successfully ✓ 08/10 M&T Service Charge - 0898 $3.00 ✓ booked ✓ 2 booked successfully. Book 1 ticked entry
Figure 52 — The statement review. Skips are explained, booked rows go green and can never be sent twice, duplicates arrive un-ticked.

Three guardrails you will notice:

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.

  1. 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.
  2. 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.
  3. Quantities survive: “2 @ $15.94” is shown on the line and saved into the entry’s description along with the order number — permanently searchable.
  4. 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.
  5. An unknown card offers the full introduction: name it, choose whether purchases on it are always reimbursable and to whom — answered once, remembered forever.
  6. 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

Where it lives (Ed. 4.3). Data Import — with Photo Import, Purchases and Bulk Edit — is under the ⇅ Data In & Out button beside Sign Out. The gear now holds only configuration (My Profile, Users, Dropdowns, Settings, Platforms, Plans & Billing).

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.

Drop to identify eBay · CollX · CDP · PSA — I'll read the header and open the right importer Detected 3 file(s) Clear eBay-OrdersReport-2026-08-01.csv eBay orders report HIGH CONFIDENCE books money Data Import → eBay → Sales — Books sales — gross, net, shipping and order number onto matched cards. matches the EbaySales.jsx header test (9/11 known columns) — sales record number,order number,item number,custom label,… inventory-export.csv CDP batch export MEDIUM CONFIDENCE Data Import → CDP — Matches by cert or SKU and fills attributes and photos. ⚠ only 6 of 17 columns CDP reads are present — the import will be thin Screenshot 2026-08-19.png Unrecognised file NO CONFIDENCE Nothing in this file matched a known importer signature. no header row in the first 40 lines matched a known importer These don't all belong to one importer, so nothing was switched — pick the importer you want above, then drop the matching files onto its own panel.
Figure 36 — The drop overlay and the verdict panel. Colour follows confidence, so "I'm sure" and "I'm guessing" never look alike.
ConfidenceMeaning
highThe gate matched and most of the columns that importer reads are present. Only high-confidence single-importer drops are loaded for you automatically.
mediumThe gate matched but fewer than half the useful columns are there — the import will be thin.
lowThe 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.
noneNothing matched.

Three things the drop layer will tell you honestly:

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.

IMPORT Generic CSV PSA PSA Grading Return EBAY Purchases Listings Sales COLLX Sales CDP CDP Batch The eBay order is deliberate and matches the life of a card: Purchases → Listings → Sales, not alphabetical. Only the active importer is loaded, so switching modes puts its file away — which is why each keeps its own hand-off.
Figure 37 — The seven importers, grouped under coloured band lines exactly like the Ledger's category bands.

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

CSV Import — any file, propose → review → approve Tell the tool what each column means. Known headers are pre-mapped — check them. At minimum map Cert Number or Card Name so rows can match. august-repricing.csv · 214 data rows Start over CSV COLUMN SAMPLE VALUES MEANS Certification Number 104214318 · 0278119 · 88214077 Cert Number (matching + fill if empty) Title 2024 Topps Chrome Update #US200 Luis Arraez… Card Name (matching + optional rename) Start Price 184.00 · 64.50 · 425.00 Asking Price Serial Number 150 · 399 · 75 — ignore — Player Luis Arraez · Bo Bichette · Jackson Holliday Player (improves matching) ☑ Also propose adopting the CSV's card name as the description (name normalisation — every rename is shown for review) Match & review 1 1 · “Serial Number” is the print run (/150), not a certification number — it is left unmapped on purpose.
Figure 38 — The mapping screen. A mapped column turns emerald; each role can only be used once.

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:

How rows are matched

TierTest
CERTThe cert number matches exactly
SKUThe SKU matches exactly
EXACTThe normalised card name is identical
STRONGA close fuzzy name match (0.80 or better)
MAYBEA weaker fuzzy match (0.45 or better)
NO MATCHNothing

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.

Select FILLS · CERT+SKU+EXACT Select FILLS · STRONG Select OVERWRITES · CERT+SKU+EXACT Clear selection Apply selected (42 changes on 38 cards) Every change has its own checkbox — nothing is pre-selected. FILL = the field is empty and gets a value; OVERWRITE = an existing value would be replaced. MAYBE rows and multi-match rows are always manual. TIER CSV ROW MATCHED CARD PROPOSED CHANGES (TICK EACH ONE TO APPLY) CERT 2024 Topps Chrome Update #US200 Luis Arraez #1042 2024 TOPPS CHROME UPDATE #US200… ☑ Asking Price: (empty) → $184.00 fill SKU 2020 Topps Chrome #201 Bo Bichette RC #1045 2020 TOPPS CHROME #201 BO BICHETTE RC ☐ Asking Price: $64.50 → $72.00 overwrite STRONG 0.87 2023 Bowman Chrome BCP44 Holliday #1043 2023 BOWMAN CHROME PROSPECTS #BCP44… Sold Price: (card is not Sold) → $425.00 (skipped) MAYBE 0.52 2021 Prizm Josh Allen Silver #1044 2021 PANINI PRIZM #325 JOSH ALLEN SILVER multi-match tick individually NO MATCH 2016 Topps Update Anderson — Matched: CERT 118 · SKU 41 · EXACT 22 · STRONG 19 · MAYBE 8 · no match 6. Proposed changes: 96 fills · 14 OVERWRITES. There is deliberately no “select overwrites · STRONG” button, and MAYBE can never be bulk-selected at all.
Figure 39 — The Generic CSV review. Every change carries its own checkbox and its own fill/overwrite chip.
Generic CSV guardrails Nothing is pre-selected. Overwrites are only ever selected by their own button or your own tick. Sold Price and Date Sold only write to cards already marked Sold — on any other card the value is shown greyed with (card is not Sold) and a trailing (skipped), so you can see the tool saw the value and refused it. This tool never changes a card's status. Archived cards are never matched. And when two CSV rows land on one card, both are chipped multi-match and excluded from every bulk selection.

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.

eBay Sales 🚨 2 REFUNDED ORDERS ARE BOOKED AS REVENUE Refunds are detected by arithmetic, not by a column — eBay's report has none. An order whose Sold For + Shipping + Tax add up while its Total Price is $0.00 was refunded in full. Checked per order, never per line. Refunded lines can never be applied. These cards are booked against the very order eBay refunded, so revenue is overstated by roughly $412.60. Open each one and un-sell it. Lines: 514 New sale: 128 Mismatch: 11 Done: 351 Not in app: 6 ⚠ Two new sales claim one card: 2 ⛔ Skipped (refunded / canceled / $0): 18 Bring in 128 sale(s) ✓ STATUS HOW EBAY TITLE → CARD GROSS NET SHIP DATE ☐ 🚨 REFUND BOOKED AS SALE 2022 Topps Chrome #150 Paul Skenes → #1188 $212.60 2026-08-02 ☐ ⛔ SKIPPED 2021 Prizm #325 Josh Allen — REFUNDED — the buyer was made whole ($88.00 returned) ☑ NEW SALE Item# 2024 Topps Chrome Update #US200 Luis Arraez → #1042 $184.00 $160.87 $5.62 2026-08-11 ☐ MISMATCH Title 86% 2019 Optic #158 Ja Morant → #1046 Order #: 12-98221-44112 → 15-14761-19242 · Sold $: $150.00 → $162.00 ☐ NOT IN APP 1984 Fleer #7 Jim Dwyer — tick to create the card from the sale, marked Sold $12.00 ☐ NEW SALE Title 41% 1984 Fleer #9 Dan Ford → #2303 ⚠ Another row in this file also matched card #2303. At most one of them is right. Auto-ticked: only NEW SALE rows matched better than a guess and not competing with another row for the same card.
Figure 40 — eBay Sales. Six buckets, a permanent refund sweep, and a duplicate-target warning.
BucketMeaningAuto-ticked?
NEW SALEA matched card that is not yet sold — this is the sale to bookYes, unless it was a weak guess or two rows claim the same card
MISMATCHThe card is already Sold under a different order, and the numbers differ. Every difference is listed old → newNo — never written unless you tick it
DONEAlready sold under this order. Left alonen/a
NOT IN APPNo card matched. Tick it and the card is created from the sale, already marked SoldNo
⛔ SKIPPEDRefunded, canceled, $0 gross, or a net that computes to zero or less. Shown so you know they were seenNever — they can never be written
🚨 REFUND BOOKED AS SALEThis file proves the order was refunded and a card is booked against that exact orderNever
Zero-total refund detection eBay's report has 82 columns and not one of them says "refunded". A full refund is only visible arithmetically: the order's parts (Sold For + Shipping + Tax) add up to a real number while Total Price is $0.00, because eBay zeroes the total when the money goes back to the buyer. The check runs per order, never per line — a multi-item order carries its total on one line only — and it ignores old orders whose money columns are simply blank. The sweep is shown even when the answer is none: ✓ Refund sweep: no refunded orders in this file. A silent screen cannot tell you it checked.

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.

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

CollX — Sales 1,958 cards loaded · platform “CollX” 3 orders 4 ready to book 1 needs a card Net to book $482.44 Apply 4 sale(s) 7VWGJW2CHYBK 2026-08-14 · Marcus T (@mtcards) · COMPLETED gross $228.00 · fee $22.80 · protection $0.00 · net $205.20 ✔ Just booked — 2 card(s) written to the ledger by this import. Locked. COLLX ITEM GRADE GROSS NET CARD IN THE LEDGER Luis Arraez — 2024 Topps Chrome Update sku BFL-EB14261 PSA 10 $184.00 $165.60 ✔ SKU #1042 2024 TOPPS CHROME UPDATE #US200… cert 104214318 · cost $96.40 · asking $184.00 · Monroe Bo Bichette — 2020 Topps Chrome CollX id 88214 — not ours raw $44.00 $39.60 choose the card → Search by anything — card id, cert number, player, set, sku. Pick exactly one. e.g. 157190099 · 1789 · marcelo mayer lunar glow Best guesses · radio-select one · already-SOLD rows dim and warn
Figure 41 — A CollX order. The green banner distinguishes "you just booked this" from "this was booked before".
ConceptWhat CollX does
GrossThe item price on the page — what the card actually sold for.
NetSeller's Proceeds — what CollX actually paid you. Shipping Protection is already inside it; never subtract it again.
Never the CSVThe 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 ladderSKU exactly → cert number → name + set + grade → the picker → typing a card id.
Multi-item ordersThe order's net is split across the cards weighted by item price, to the penny.
CollX guardrails An order that already carries cards is locked and cannot be re-booked: ✅ Already in the ledger — 2 card(s) already carry this order number, booked before this import. Locked so it can't be double-booked. A refunded or canceled order books nothing, ever. One card may serve exactly one line across the whole batch. A card that is already Sold can still be chosen, but it shouts first. And auto-ticking only happens when one candidate is clearly ahead of the next — anything closer than that is a decision, and decisions belong to a human.

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

Cards: 831 Fills: 1,204 Overwrites: 214 Review: 11 No match: 56 Apply 1,204 selected ☑ #1042 2024 TOPPS CHROME UPDATE #US200 LUIS… 6/6 Asking Price FILL (empty) → $184.00 Set FILL (empty) → Chrome Update Listed On FILL (empty) → eBay · CollX Grader FILL (empty) → PSA ☐ Asking Price OVERWRITE $210.00 → $184.00 ☐ Card Type REVIEW CDP category “Tcg” has no dropdown match — pick one ▾ Photos 56 matched card(s) are missing a front or back that this file can supply. Attach 56 missing …16/56 processed (12 fronts, 9 backs) DONE. fronts=41 backs=15 failed=0 Only the missing side is ever sent — an existing image is never overwritten. Not in the app — 56 row(s) 52 of these look like cards you already have. A SKU can drift, so a miss on the exact keys is not proof a card is new. Those rows show the likely existing card and can't be ticked — creating one would make a duplicate. If a suggestion is genuinely wrong, use “different card” on that row to unlock it. ☐ (locked) 2020 Topps Chrome #201 Bo Bichette RC PSA 9 · BFL-EB99201-d2z7v · $64.50 ↳ looks like #1045 2020 TOPPS CHROME #201 BO BICHETTE RC · BFL-EB99201 · 87% [different card]
Figure 42 — CDP proposals. Fills are pre-ticked, overwrites are not, and a REVIEW change has no value at all until you pick one.
CDP guardrails Dropdown values are never invented. If CDP sends a Card Type or Brand that is not in your dropdown, you get a picker and a hint, not a guess. Listed On is additive only — the importer can add a marketplace but never remove one, because removing a listing is a destructive edit and this importer only ever adds. A card that matched but is archived is refused, with the note matched #1188 but it is ARCHIVED — skipped. And the duplicate guard above is the big one: a miss on cert and SKU is not proof a card is new, so the row is blocked and the likely existing card is shown. Creating a duplicate is the single worst outcome this importer could produce.

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

PSA Grading Return PSA order # 26599795 Total grading bill $ 1420.00 Destination (all cards) MONROE ▾ = $47.33/card · 3 set manually Pool: 42 Auto: 26 Cluster: 4 New: 3 Low: 2 Unassigned: 1 Apply 29 to cards CERT # GR FEE $ PSA NAME → BECOMES ASSIGN APP CARD DEST. CONF. 104214318 10 47.33 2024 TOPPS CHROME UPDATE #US200 LUIS ARRAEZ PSA 10 #1042 2024 TOPPS CHROME UPDATE… MONROE high 104214319 9 62.00 auto 2023 BOWMAN CHROME PROSPECTS #BCP44 HOLLIDAY PSA 9 #1043 2023 BOWMAN CHROME… medium 104214320 10 2021 PANINI PRIZM #325 JOSH ALLEN SILVER PSA 10 #1042 2024 TOPPS CHROME UPDATE… low 104214321 8 2019 PANINI DONRUSS OPTIC #158 JA MORANT PSA 8 ➕ Create as NEW card will be inserted, graded ⛔ Two certs are assigned to the same app card — fix the highlighted rows first. 💾 Save draft · Resume: 26599795 · 2026-08-20 14:22 ▾ · ⤓ Pull PSA photos now The candidate pool is only cards sitting at the “PSA Grading” location — the cards you actually sent in. The grading bill is spread evenly across the certs; type a fee on any row to pin it and the rest re-spread around it.
Figure 43 — PSA Grading Return. A duplicate assignment tints the row and disables Apply entirely.
  1. Drop the PSA order CSV. The order number auto-fills from the file name if it contains a long number.
  2. Type the Total grading bill $ — you will see the per-card spread appear.
  3. Set the destination location for the returning cards.
  4. Press Run AI match. Each cert gets a suggested card and a confidence.
  5. Fix anything wrong: pick a different card, choose ➕ Create as NEW card, or leave it — skip / unassigned —.
  6. Pin any individual grading fee that differs; the rest re-spread automatically.
  7. 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.

The AI proposes; you dispose The matcher is told to ignore grades when judging identity (the cards you sent in are ungraded, after all), to use each candidate card at most once, and to answer "no confident match" rather than guess. It writes nothing at all — the app applies only what you confirm.

14.9Things that can never be written, anywhere

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.

Admin Console CONFIGURATION · USERS · DATA ✕ My Profile Users Dropdowns Photo Import Data Import Purchases Integrity Bulk Edit Settings Managers land on Users; everyone else lands on My Profile and sees nothing else. Clicking the header's integrity badge instead opens this console pre-navigated to Integrity.
Figure 44 — The Admin Console tab bar. A non-manager can never be dropped onto a manager pane, even by a deep link.

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

+ Invite user Activity log Refresh Refresh also promotes anyone who has just set their password from “invited” to “accepted”. NAME EMAIL ROLE FINANCE STATUS ACTIONS Kevin Reid you kevin@bkcards71.com Partner Yes active Edit Reset pw Brian Doyle brian@bkcards71.com Partner Yes active Edit Reset pw Suspend Remove login Dana Whitfield dana@example.com User No invited Edit Resend Reset pw Sam Ortega sam@example.com Viewer Yes suspended Edit Reactivate Delete Company, Partner and Admin always have Finance & Insights access, and their accounting identity is permanent — their login can be removed but the record stays so historical cards keep their owner and payer. Only User and Viewer accounts can be permanently deleted. Server guardrails you cannot click past · You cannot suspend, remove or delete your own account. · “Cannot remove the last active manager.” — the system is never left without one. · “This user is referenced by 412 card(s) and cannot be deleted. Remove their login instead.” · Every action is written to the activity log with who did it, to whom, and when.
Figure 45 — The Users tab. Row actions change with each person's status; the destructive ones all confirm first.
ActionShown whenWhat happens
EditAlwaysInline first/last name, role and finance switch. Promoting to a manager role forces finance access on.
ResendStatus is invitedSends the invitation again.
Reset pwThey have an email and are not removedSends them a password-reset email.
SuspendNot you, status activeConfirms "Suspend dana@example.com? They will not be able to sign in."
ReactivateNot you, status suspendedLifts the block.
Remove loginNot 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.
DeleteNot you, and role is User or Viewer"PERMANENTLY delete sam@example.com? This cannot be undone." Blocked if any card references them.

Inviting someone

  1. + Invite user.
  2. First name, last name, email. (First name and email are required.)
  3. 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.
  4. Set Finance & Insights access — for a manager role this is replaced by Always granted for Partner.
  5. 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.

Brand Card Type Purchase Platform Pay Method Grader Location Listing Platform Sold Platform Proceeds To Add a new Brand… Add ☐ Show retired values 14 value(s) Topps Active Rename Retire Panini Active Rename Retire Bowman Active Rename Retire Sage Retired Rename Restore There is no delete. Retiring hides a value from future dropdowns without touching cards that already use it. Renaming updates the label in place — every card that used it follows along. Adding a duplicate is refused: “Topps” already exists. Sale Type (disposition) is deliberately not managed here — it carries accounting behaviour.
Figure 46 — Dropdowns. Nine lists, retire instead of delete, and duplicates are caught case-insensitively.

The nine lists: Brand, Card Type, Purchase Platform, Pay Method, Grader, Location, Listing Platform, Sold Platform, Proceeds To.

15.4Photo Import

Edition 4.5 layout. The screen now reads like Data Import: the status line (With fronts · Missing fronts · Missing backs · PSA certs ready to try), then one row of pills — PSA Cert · CDP CSV · Raw Matching — and only the chosen job's panel open beneath it; Photo Coverage by Grader moved to the bottom. PSA Cert now fetches backs as well as fronts for cards that already have a front, and shows the PSA lookups today ticker inside its panel — used of 100 (photos · data), left, and when PSA's day turns over (midnight Pacific). Its log speaks plainly: “PSA front photo added · PSA back photo added”, “S&T Card Manager front present · PSA back photo not available — recorded”, “PSA photos not available for this cert — recorded”. A cert PSA has nothing for is never asked twice; when PSA's picture service answers with an error for an old slab, the batch checks once that PSA is up, records the cert as having no pictures, and keeps going — it only stops when PSA itself is down or says the day's limit is reached.

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.

WITH FRONTS 1,004 MISSING FRONTS 954 MISSING BACKS 1,420 PSA CERTS READY TO TRY 137 Photo Coverage by Grader CARDS COMPLETE (F+B) FRONT ONLY BACK ONLY NO PHOTOS READY TO TRY (PSA) PSA 642 318 204 6 114 137 SGC 188 60 98 0 30 — Raw 1,128 112 206 0 810 — TOTAL 1,958 490 508 6 954 137 Buckets are mutually exclusive: Complete + Front Only + Back Only + No Photos = Cards. Click any count to see exactly which cards it includes (with a CSV download). Ready To Try = PSA cards with a cert, no front photo, and no recorded PSA verdict yet. PSA Cert Photos 100 free PSA calls per day · progress is remembered CDP CSV Photos (by cert) Cards that already have a photo are never overwritten Raw Photo Matching propose → review → approve · nothing attaches until you say so
Figure 47 — Photo Import: the live counts, the coverage table (every number is clickable), and the three loaders.

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:

Quota discipline PSA allows about 100 calls a day. Every definitive answer — image found, no image exists, hard error — is recorded so that cert is never asked again. Transient failures are deliberately not recorded, so they retry. And the back image rides along on the same call, free.

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:

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:

  1. 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 ✓.
  2. 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

No tab of its own. Integrity is opened from the health light in the header — click it whether it reads clean or not — and it lands you directly here. It was removed from the tab strip so the console stays focused on configuration.

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

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.

ColumnWhat it shows — and what you can do
PhotoDrop 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 foundThe 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 photoThe 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 / ConditionPSA 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.
LocationPer row; default From the source (CollX: Completed → Monroe, In Transit → In Transit).
Paid / Cost basisFrom 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 rulingAdd · 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.
ResultAfter 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.

Match, in one line. "This is card #id — fill in what it is missing." Grade, cert, a photo if it has none, year / number / variety if blank. Never the name, the cost, the order or the photos already there. Same cert already in the app → always Match, never Add; a cert belongs to exactly one card.

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

  1. In the CollX app: My Purchases → an order → Order Detail. Screenshot it.
  2. ⇅ Data In & Out → Data Import → CollX · Purchases → drop up to ten screenshots in the box (or Choose screenshots…).
  3. 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.
  4. 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).
  5. 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.
  6. 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.
  7. 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

  1. Data Import → PSA · Search Cert → paste one or many cert numbers → Search.
  2. 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.
  3. 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.

  1. ⇅ → Data Import → under PSA, click Attribute (the row reads Grading Return · Search Cert · Attribute).
  2. 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.
  3. 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.
  4. 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.
  5. 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.

About the allowance. PSA allows about 100 calls a day on the key, tells us nothing about how many are left, and doesn't say when its day turns over. The app counts every call it makes and shows the count; when PSA says stop, the ticker turns red and says so — PSA says its limit is reached (PSA does not publish its own count) — and the run stops. Run again after midnight Pacific.

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

Standing data-quality checks, grouped by area. Archived cards are excluded. Click any count to see the exact cards, with a CSV download. 1,284 total flagged. Refresh Sale & financial consistency 31 flagged Sold, missing details 14 SOLD cards missing a sale year, price, or platform. (An exact day is optional — the year drives accounting.) View 14 cards → Sale data on unsold card 2 Not-sold cards still carrying a sale — price, net, date, year, platform, or marketplace order number. View 2 cards → Status and disposition disagree clean ✓ Every card's status matches its disposition. Sold with no order number 9 Sold on a marketplace but no order number recorded — a refund on it would never be spotted. View 9 cards → Wrong sale year 3 Year Sold does not match the Date Sold — this corrupts your 2025/2026 tax buckets. View 3 cards → Sold for $0 or less 3 SOLD cards with a $0 or negative sale price — confirm gift vs. data error. View 3 cards → Cost & acquisition 1,183 flagged Grading 44 flagged Ownership & references 22 flagged Impossible / sanity all clean Collection-facing 1 flagged Scanned 1,958 live cards (1,973 incl. archived). Colour is category identity, not severity — inside this tab every flagged check is amber and every clean one is emerald.
Figure 48 — The Integrity tab. A flagged check is amber with a count; a clean one is slate with an emerald clean pill and the reassuring sentence.

16.1Sale & financial consistency — 6 checks

CheckWhat it meansWhat 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

CheckWhat it meansWhat 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

CheckWhat it meansWhat 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

CheckWhat it meansWhat 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

CheckWhat it meansWhat 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

CheckWhat it meansWhat 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 lineSeverityTab equivalent
Sale data on a card that isn't soldbrokenCheck 2
Status and disposition disagreebrokenCheck 3
Sold, missing platform or sale yearattentionA 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

Missing / $0 cost 1,183 cards · Click an ID/Description to edit, or fix inline. Edit selected (3) Download CSV × ☑ ID DESCRIPTION FIX: BASE COST CERT GRADE STATUS SOLD $ ☑ #1102 2021 TOPPS CHROME #220 WANDER FRANCO RC 42.00 Save — — For Sale ☑ #1144 2022 PANINI SELECT #44 JAYSON TATUM SILVER 0.00 — For Sale ☑ #1188 2022 TOPPS CHROME #150 PAUL SKENES 0.00 104219981 10 Sold $212.60 Three ways to fix from here: 1 · Type in the emerald Fix column and press Save (or Enter) — the row disappears from the list as it resolves. 2 · Click an ID or description to open that card in the full editor. 3 · Tick several and press Edit selected for a bulk change across all of them. Empty state: “All fixed — nothing left in this check.”
Figure 49 — An Integrity drill-down. The seven fixable checks show an emerald Fix column; every check offers CSV, click-to-edit and bulk edit.

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

Opening a card from here is safe Clicking through to the editor fetches the whole card first, precisely so that pressing Save cannot blank a column the drill-down did not show.

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.

Help & Support GUIDES · REQUESTS · ACCOUNT × GUIDES User Guide Function Reference ASK Submit an Issue Request a Feature CONTACT Contact Us ACCOUNT Password Something broken, wrong, or confusing? Describe it and it goes straight onto the fix list. Area of the app Ledger ▾ How bad is it? Annoying — there's a workaround ▾ Card ID(s) — optional e.g. 1042, 877 Subject Net Return blank on a card I just sold What happened What did you do, what did you expect, and what happened instead? Submit issue Submitting as Kevin · your name and role ride along automatically. MY REQUESTS In progress Issue Export View CSV missing Net Return Ledger · 8/19/2026
Figure 50 — Help & Support. Four groups, three forms, and a live status list of everything you have submitted.

Guides

Beneath them sit six quick recipes, the same ones reproduced in §1.2.

The three forms

FormUse it whenExtra 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

Sales and reversals

Imports and AI

People and data

Display and totals

19Troubleshooting & known quirks

SymptomCause and fix
The grid is suddenly emptyCheck 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 importHard-refresh: Cmd/Ctrl + Shift + R. The app caches aggressively for speed.
The integrity count badge is redThe 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 0Expected. 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 filtersViews store layout only — columns, widths and sort. Filters, search and the archived tick are never saved.
My column order jumped aroundAny column toggle re-orders the grid into the canonical order. Column order is not user-controllable.
Recent Sales does not show everythingIt caps at 400 rows with a notice. The net total in the header still covers every sale.
A recurring cost is one occurrence shortThe 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 nothingCorrect — that checkbox is inert. Set an End Date to stop a rule.
A "Fully reimbursed" entry still shows as owedThe balance follows the amount, not the label. Type the reimbursed amount.
Financials and Accounting show different Gross ProfitThey differ by exactly the shipping margin, by design. See §13.
The Accounting year toggle has no 2027That list is fixed in the code and needs a developer to extend.
A newly added Frequency behaves as one-offA 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 screenKnown: that sheet exports unit amounts for recurring entries. Use the P&L Summary sheet for totals.
An importer refuses my fileRead 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 itLook 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 stoppedPSA 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 skippedEvery 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

TermMeaning
Asking PriceWhat 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 CostWhat you paid for the card itself, before tax, shipping, handling and grading.
Card TypeThe sport or product family — Baseball, Football, Pokémon. This is what the Ledger chips filter.
Canonical nameThe 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 IsWhat the card comps at in its current condition. Feeds Unrealized P/L and Projected Profit As-Is.
Counts in FinancialsA per-card switch for whether it belongs on the books at all.
Disposition / Sale TypeHow 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 OverwriteImporter 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 ProfitRevenue minus cost of goods sold. In Accounting it also carries the shipping margin.
Item TypeThe kind of item — card, pack, lot. Distinct from Card Type.
Live cardAny card that is not archived. Every KPI in the app is computed over live cards.
Net Proceeds / Net SaleWhat actually landed in your account after the platform's fees.
Net ReturnProfit 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 ByWho owns the card. Profit follows ownership.
Paid ByWho fronted the money. Cost recovery and losses follow the wallet.
Potential cardA row in Scan's holding area. Not inventory, not money, until you bring it in.
Print RunThe serialled quantity — the 399 in /399. Not a cert number.
Proceeds ToWhich account a sale's money landed in.
Shipping marginWhat the buyer paid for shipping, less what the label actually cost. Already inside every card's Net Return — never add it again.
ShowcaseA flag marking a card for display in Collection.
SKUYour own stock number, e.g. BFL-EB14261. A match key for the eBay and CDP importers, which is why collisions matter.
Sold PriceThe gross the platform reported, before fees.
Still outA partner's money that has not come back yet: adjusted capital advanced minus what they have recovered.
Total CostBase cost + tax + shipping + handling + grade fee. Database-calculated.
Year SoldDerived from Date Sold, and the field that drives every tax bucket.

21Index of figures

Fig.TitleSection
1The app header, tabs and right cluster1.1
2The sign-in screen2.1
3Setting a password2.2
4The integrity badge — four states3.3
5Collection, grid view4.1
6The Collection detail modal4.4
7The Ledger, whole screen5.1
8The KPI band5.3
9The Columns & Views popup5.4
10Status facet, rollup callout and card-type chips5.6
11The three kinds of column funnel5.6
12Hover thumbnail and the Select-to-Sell banner5.8
13The Recent Sales modal5.9
14The CSV export popup5.10
15The card editor drawer6.1
16The Card Name block and canonical assembly6.4
17Front and back photo tiles6.6
18The eBay Net What-If pad6.9
19The Mark Sold modal7.2
20Gift Profit to BKCards717.3
21The write-off modal7.5
22The un-sell chooser7.6
23The card journey timeline8
24The Bulk Edit picker9.1
25The bulk edit popup and its acknowledgements9.2
26Bulk Sale and the penny-exact split9.4
27Scan intake — PSA certs and the dropzone10.1
28The Scan gallery10.3
29The Review potential card panel10.4
30Financials — header, briefing and the eight KPIs11
31Gross Profit by Year and by Platform11.3
32Dead Money and the Data Quality tiles11.3
33The Accounting ledger and summary band12.1
34The Add Entry drawer12.2
35Statements — P&L bridge, P&L and the capital waterfall12.5
36The drop overlay and detection verdicts13.1
37The seven importers and their group bands13.1
38Generic CSV — the mapping screen13.2
39Generic CSV — the review screen13.2
40eBay Sales — buckets and the refund sweep13.3
41A CollX order and its card pickers13.6
42CDP proposals and the duplicate guard13.7
43PSA Grading Return review13.8
44The Admin Console tab bar14
45The Users tab14.2
46The Dropdowns tab14.3
47Photo Import — coverage by grader14.4
48The Integrity tab15
49An Integrity drill-down with inline fixes15.8
50The Help & Support overlay16
51The Financial Ledger toolbar & importer activators12.8
52Bank statement review groups & booking feedback12.9

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

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.