Front
Back
Price history · PSA 10
image from latest verified sale
1988 GARBAGE PAIL KIDS STICKERS
#479a GULPIN' GABE
STICKERS
PSA 10
— Loading
Pop
10
Garbage Pail Kids
TCA Value
iTCAxis Value is a recency-weighted market value from REAL sales of this exact card+grade (recent comps count most, outliers stripped) — steadier and harder to game than a single 'last sale', which can be one lucky auction or a shill bid. When a card has few or no recent comps, we estimate transparently from its own older sales, its other grades, and comparable cards (same subject/set/rarity tier), factoring subject trend and scarcity — and we LABEL it as an estimate until real sales arrive.
—
—
Confidence
★★★★★
—
Last Sale
—
—
Avg Sale (30d)
—
across — sales
Volume (30d)
—
— vs prior 30d
Comp Sales (All)
—
all grades
Now vs 1 mo ago
—
Now vs 2 mo ago
—
Now vs 3 mo ago
—
High —
Low —
Avg —
— sales
Subject trend —
Current values by grade
| PSA 10 | $55 |
Recent sales
| 2026-06-02 | PSA 10 | $60 |
| 2026-04-05 | PSA 10 | $50 |
';
document.body.appendChild(a);
var oldLogo = document.querySelector('header img, nav img'); if (oldLogo) oldLogo.style.visibility='hidden';
} catch(e){}
}
const FIRST_CERT = "64000427";
const fmt = v => v == null ? '—' : '$' + Math.round(Number(v)).toLocaleString();
function searchGo(q) {
q = (q || '').trim();
if (!q) return;
if (/^\d{6,12}$/.test(q)) { window.location = '/cert/' + q; return; }
window.location = '/?q=' + encodeURIComponent(q);
}
function openLightbox(src) {
document.getElementById('lightboxImg').src = src;
document.getElementById('lightbox').classList.add('open');
}
function selectTab(name) {
document.querySelectorAll('.tab-btn').forEach(b => b.classList.toggle('tab-active', b.dataset.tab === name));
document.querySelectorAll('.tab-panel').forEach(p => p.classList.toggle('hidden', p.id !== 'tab-' + name));
}
document.querySelectorAll('.tab-btn').forEach(b => b.addEventListener('click', () => selectTab(b.dataset.tab)));
async function load() {
let data;
// Bill 2026-06-10: surface errors visibly instead of silently bailing.
const setBadgeErr = (msg) => {
const b = document.getElementById('axisScore');
if (b) { b.className = 'badge'; b.style.background='rgba(248,113,113,.2)'; b.style.color='#fca5a5'; b.style.padding='8px 14px'; b.textContent = msg; }
};
// Bill 2026-07-02: checklist / never-sold cards have pop + an estimate value
// but no VETTED cert, so /api/cert returns 'not yet vetted'. Rather than bail
// (a wall of dashes), populate hero value + pop + grade ladder from the spec.
// Bill 2026-07-06: sales history must load even when /api/cert is empty/broken
// (fragmented GPK cards). Extracted so the fallback path can call it too.
var __allGradeSales = [];
function loadSales(fallbackSales){
var sales = fallbackSales || [];
__allGradeSales = sales;
fetch('/api/spec/' + encodeURIComponent(SPEC_ID) + '/all-grade-sales').then(function(r){return r.json();}).then(function(d){
__allGradeSales = (d.sales || sales || []);
var _ts=document.getElementById('totalSales'); if(_ts && __allGradeSales.length) _ts.textContent = __allGradeSales.length.toLocaleString();
renderSales(__allGradeSales);
var gset = [...new Set(__allGradeSales.map(function(s){return s.psa_grade || s.grade;}).filter(Boolean))].sort(function(a,b){return (+b)-(+a);});
var gsel = document.getElementById('salesGrade');
if(gsel){
gsel.innerHTML = '';
gset.forEach(function(g){ var o=document.createElement('option'); o.value=g; o.textContent='PSA '+g; gsel.appendChild(o); });
var _curG = String(SPEC_ID.split('|').pop());
if (gset.map(String).includes(_curG)) { gsel.value = _curG; renderSales(__allGradeSales); }
}
}).catch(function(){ renderSales(sales); });
var sf=document.getElementById('salesFilter'); if(sf && !sf._wired){ sf._wired=1; sf.addEventListener('input', function(){ renderSales(__allGradeSales); }); }
var sg=document.getElementById('salesGrade'); if(sg && !sg._wired){ sg._wired=1; sg.addEventListener('change', function(){ renderSales(__allGradeSales); }); }
}
async function populateFromSpec(neverSoldHint) {
try {
const sr = await fetch('/api/spec/' + encodeURIComponent(SPEC_ID));
const sd = await sr.json();
const sp = (sd && sd.spec) || {};
const st = sp.tca_status || '';
const priced = (sp.slabaxis_value > 0) && (st === 'ok' || st === 'ok_thin');
const neverSold = (neverSoldHint === true) ? true : (neverSoldHint === false ? !priced : (st === 'estimate' || !priced));
document.getElementById('tcaValue').textContent = fmt(sp.slabaxis_value);
document.getElementById('tcaSubtext').textContent =
'PSA ' + (sp.grade || '') + (neverSold ? ' · estimate — never sold' : ' · this grade');
var pbg = sp.pop_by_grade || sp.psa_pop_by_grade;
if (typeof pbg === 'string') { try { pbg = JSON.parse(pbg); } catch(e){ pbg = null; } }
var popTotal = null;
if (sp.psa_pop_total != null) popTotal = Number(sp.psa_pop_total);
else if (pbg) popTotal = Object.values(pbg).reduce(function(a,b){return a+(Number(b)||0);},0);
document.getElementById('popValue').textContent = (popTotal != null) ? popTotal.toLocaleString() : '—';
if (pbg) {
var grades = Object.keys(pbg).sort(function(a,b){return parseFloat(b)-parseFloat(a);});
var gl = document.getElementById('gradeLadder');
if (gl) gl.textContent = 'All grades — ' + grades.map(function(g){return 'PSA '+g;}).join(' / ');
}
var b = document.getElementById('axisScore');
if (b) { b.className='badge'; b.style.background='rgba(148,163,184,.2)'; b.style.color='#cbd5e1'; b.style.padding='8px 14px'; b.textContent = neverSold ? 'Never sold — estimate' : 'Catalog card'; }
try {
var _ff = sp.psa_image_front || sp.cardhedger_image || sp.image_front || sp.display_image;
if (_ff) { var _fw=document.getElementById('frontImgWrap')||document.getElementById('imgWrap'); if(_fw) _fw.innerHTML = '