Feature Deep Dive

Pricing intelligence

Every card in SlabTrack carries multiple comp prices from different sources. The Strategist + buyer-facing UIs use a priority chain to pick "the" comp value — but you can audit, override, and tune which sources win when.

The price fields on a card

FieldSourceUsed for
asking_priceOperator hand-setSource of truth for sales price (winPrice/losePrice math)
sportscardspro_psa10SCPro API, PSA 10 gradeComp baseline for PSA 10 cards
sportscardspro_psa9 ... sportscardspro_psa7SCPro API, lower gradesComp for non-perfect graded
sportscardspro_bgs10 / cgc10 / sgc10SCPro API, alt gradersSame but for BGS/CGC/SGC
sportscardspro_rawSCPro API, ungradedRaw card baseline
ebay_avg / ebay_low / ebay_higheBay sold scrapeLive market comp; fallback when SCPro is empty
ebay_sample_sizeeBay scrapeHow many sold listings the avg is based on (confidence indicator)
comp_value (computed)Pricing service priority chainThe "canonical" comp price — what the Strategist uses

The comp_value priority chain

Computed by backend/services/channel-scoring/index.js via cardCompValue(card):

  1. If card is graded AND grading_company + grade are set → use the matching SCPro field
    • PSA 10 → sportscardspro_psa10
    • BGS 10 → sportscardspro_bgs10
    • etc.
  2. If no SCPro grade match → try sportscardspro_raw
  3. If still 0 → ebay_avg
  4. If still 0 → asking_price (operator's hand-set)
  5. If still 0 → 0 (card has no pricing — flagged as needs_review in Strategist)

Price audit page

/admin/price-audit shows pricing health across your whole inventory:

Bulk actions: refresh all SCPro, bulk-update asking from comp, mark cards "no comp available".

Quick-price (one-card AI)

/quick-price: paste cert OR upload card image → SlabTrack identifies the card via vision/PSA → fetches all comp sources → suggests an asking price. Used for receipts ("how much should I list this for?") + manual price overrides.

Comp refresh schedule

Operator price overrides

asking_price is the operator's source of truth. Even if SCPro says $100, if you hand-set asking to $80, that's what the satellite sees and the buyer pays. The comp fields stay informational — they don't auto-overwrite asking unless the operator triggers it via "bulk update asking from comp".

Code references