Reading a Graded Card's Label: PSA, BGS, CGC and the Rest
A graded card’s label is a summary, and the certificate number printed on it is the key to the grader’s record of the card. PSA’s guarantee is its “assurance that we stand behind our opinions as to the authenticity and/or grade of each item we encapsulate, as reflected on each PSA label”; on my reading, the label states that opinion and the look-up by its number is how a buyer checks that it still stands. The six graders this post reads (PSA, Beckett, CGC, SGC, TAG and ACE) each publish a look-up by that number, and PSA’s guarantee, which covers a card’s grade and its authenticity, applies only if the card “had an active certification number on the cert lookup feature of the PSA website at the time it was purchased” by the person making the claim.12 The words beside the grade change what the number means: a PSA “Mint 9oc” is a 9 with centering below the 9’s standard, a CGC label reading 9.5 is either a legacy Gem Mint, which CGC now counts as a 10, or a current Mint+, which sits below one, and the top of the scale is worded differently at each grader: CGC, SGC and TAG grade a Pristine 10 apart from a Gem Mint 10, while Beckett’s only 10 is Pristine, its Gem Mint is a 9.5, and its black label sets a Pristine 10 with four 10 subgrades apart from the rest.3456789 The numbers themselves differ by grader: SGC’s are 7 digits on black labels and “11 characters (XXXXXXX-XXX)” on green and white ones, TAG’s are “typically 1 Letter followed by 7 Numbers,” and ACE’s own records carry six and five digits.10111213 I ran a Python copy of the label reader in my app, Kiradex, over sixteen synthetic labels built from those published formats, two of them in layouts no grader page shows: it read 3 of 16 whole, cut 2 certificates short, and did not recognize 4 slabs at all, every ACE label among them.1415 This is each grader’s label as its own pages describe it, with the dates of the redesigns, what a collector checks, and the brief that fixes the reader.
TL;DR
- The number is the key, not the paper. Each of the six graders this post reads publishes a look-up by certificate number. PSA’s guarantee runs through that look-up and “does not apply to Items that arrive with tampered or counterfeit holders and/or labels (regardless of certification status).”12
- A grade is a number and the words beside it. PSA defines six qualifiers (OC, ST, PD, OF, MK, MC) and an “AUTHENTIC” outcome with no number; seven of its nine no-grade codes can still lead to a holder labeled Authentic or Authentic Altered, at the grader’s discretion and on the submitter’s request, and PSA says it “does not always print the term “Altered” on the label itself” for technical reasons.16115 CGC’s current scale has its own “Mint+ 9.5” below Gem Mint 10, while its legacy Gem Mint 9.5 now counts as a 10.45
- Label dates come from the grader’s own announcements. PSA’s dated changes are February 12, 2008, November 12, 2013, June 14, 2017 (the LightHouse label), January 1, 2019, May 14, 2024 (a new holder) and June 19, 2024 (a blue label for autograph-only items); CGC’s new label was announced June 20, 2023. No PSA label redesign dated 2023 was found on psacard.com.17181920212223
- Security features are published by PSA and CGC; TAG describes a scan check. PSA lists fugitive ink, a UV logo pattern, the LightHouse logo and a QR code; CGC lists “microprinting, UV ink, holographic foil and a unique certification number and barcode”; TAG puts a Proof Mark behind its QR code. Beckett gives one sentence, the SGC pages read here describe none, and ACE’s describe only an address check.242511262728
- Beckett is read from archive copies, and its outage began earlier than the centering post said. The status page is dated October 2, 2026, but an archive capture of September 19, 2026 already shows Beckett’s platforms offline, while its card look-up was live in a capture of August 19.293031
- What this gives Kiradex. The brief: read each grader’s certificate in its published shape (SGC’s hyphen, TAG’s letter, ACE’s five and six digits), keep the words beside the grade (qualifier, designation, Pristine or Gem), offer each grader’s own look-up as a link and never fetch it, say plainly what was and was not read, and offer only the grades each grader gives.14323334
1. What a label is for
A slab is a sealed case with a printed label inside it (or, at TAG, text printed into the case itself), and, on my reading, the label is a short summary of a record that lives with the grader. Two graders say in so many words that the number belongs to one card. PSA’s glossary: “PSA gives every graded card a certification number,” and its FAQ calls the Cert ID “the unique number found on your PSA-graded label”. CGC’s 2020 holder article: “a unique certification number identifies a card,” and its label today carries “a unique certification number and barcode.”3353625 The others say less. TAG’s process page says “Unique ID numbers are assigned to both the cards and the order” at its purchase-and-submission step, without saying that this ID is the certificate number; Beckett’s FAQ names “a specific id and a bar coded serial number”; the SGC and ACE pages read here do not say.3726 PSA puts the number on before the card is graded: the fifth step of its process reads “Order ID stickers with unique certification numbers are placed on each Card Saver in the order,” and the research, the grading and the printed label follow.38 The copy editor in my own app already tells the collector the same thing in its footer: “The certificate number is printed on the case’s label. It is that case’s alone.”34
Three things the graders say make the number, not the paper, the thing to check.
PSA’s guarantee runs through the look-up. It applies “provided that the Card had an active certification number on the cert lookup feature of the PSA website at the time it was purchased” by the person making the claim, and it “does not apply to Items that arrive with tampered or counterfeit holders and/or labels (regardless of certification status).”1
The graders say plainly that slabs are attacked. PSA’s guarantee page: “some unscrupulous people occasionally try to defraud collectors by removing Items from PSA holders, replacing them with lower grade, altered, and/or counterfeit Items, and then resealing the holders. In some cases, they may also tamper with a genuine label and/or replace it with a fraudulent label altogether.”1 TAG keeps a page for numbers it has withdrawn, which says “This TAG Certification number is no longer active.” and lists seven reasons, among them “The slab was cracked, altered, or resealed.” and “The certification was voluntarily surrendered.”3915
Every grader offers a check by number. PSA’s communications page (an undated entry) says its “online Certification Verification page and PSA app allow customers to scan the barcode on their item and verify its authenticity.”38 CGC’s 2020 holder article sent collectors to “CGCcards.com/verify.”36 ACE’s site offers to “Lookup an Ace Grading graded collectible by certification number,” and its authentication page tells collectors scanning its labels to “check the URL in your browser” and names the address, “https://acegrading.com”.4028 Beckett, SGC and TAG each have a look-up page of their own, set out grader by grader below.311041
What the fields are
No grader’s pages read here lay out every field on its label. Beckett’s FAQ and CGC’s 2023 announcement each name what the label carries in one sentence, and the others name fields in passing, so the list below is assembled from what each one’s pages name, and PSA’s part of it is my reading of its guarantee.1262312
- Year and set. PSA’s guarantee excludes “mechanical errors” such as a label whose date “does not match the date printed on the Item,” which places a date on the label; Beckett’s FAQ says “Each label will feature the set name, the grade and a specific id and a bar coded serial number”; ACE’s certificate record lists “Release Year” and “Set.”12612
- The card, its number and its variety. The same PSA clause covers a mislabel “with respect to the Item’s specification, set, variation, or parallel”; CGC’s 2023 label “provides a detailed description of the card”; ACE’s record lists “Name,” “Number,” “Language” and “Variant.”12312
- The grade, as words and a number. Since PSA’s change of February 12, 2008, “the grade number (8) will now appear directly below the description of the grade (NM-MT) on the right side of the label.”17
- A qualifier or a designation. PSA’s OC, ST, PD, OF, MK and MC go with the number, and its glossary writes one joined to it, “Mint 9oc”; ACE’s Off-Center qualifier means “appending OC to the grade”; PSA’s “AUTHENTIC” stands where no number is given; CGC “will print Authentic Altered in the grade box”.163424
- The certificate number and a barcode. Beckett’s label carries “a bar coded serial number”; CGC’s “a unique certification number and barcode”; PSA’s glossary says of the certification number, “It can be found on the PSA label,” and its app scans “the barcode on their item”.2625338 Which side of the label carries the number is stated on only one saved page: CGC’s 2020 holder article, “On the back of the label, a unique certification number identifies a card.”36 PSA’s pages, Beckett’s FAQ and CGC’s current holder page do not say; TAG puts the number “left of the QR code”.24262511
- A QR code on the back of the label at PSA (since the 2017 label) and on CGC’s current label, as its holder page describes it; CGC’s 2020 article names a QR code without placing it.242536
So I read a PSA label as carrying at least a year, a set, the card and its variety, beside the grade and the certificate number; no PSA page read here gives a field list.143
The fields the graders’ own pages name, drawn as generic boxes with placeholder text; TAG prints into the case instead of on paper.44
2. Each grader’s label, from its own pages
I read each grader’s own pages on October 5, 2026 and saved them; where a grader’s page is a script that builds its text in the browser (SGC), a headless browser rendered it. Pages the centering post saved the day before are reused and dated October 4.45 Before quoting, I checked who publishes each page: PSA’s pages carry “© 2026 Collectors Holdings, Inc.”; CGC’s carry “Certified Guaranty Company, LLC” and “CGC is part of the Certified Collectibles Group”; SGC’s “SGC, LLC”; TAG’s site is Technical Authentication & Grading’s; ACE’s is Ace Grading Ltd’s, registered in England and Wales.45 Search results also turned up collector tools and seller sites with grader-like names; they are leads only, and nothing below rests on them.46
Four kinds of page could not be read. Beckett’s site is offline, so Beckett is read from its status page and from Wayback Machine captures, each named with its date. The research notes record that PSA’s certificate pages and population report, CGC’s certificate look-up, and ACE’s look-up index and population report answered automated requests with HTTP 403 and a Cloudflare bot check; nothing was done to get past it, so those pages were not reached, and the folder keeps no copy of those challenge responses. The one file saved under PSA’s population report is a different barrier: PSA’s sign-in page, described below. SGC’s look-up form carries a reCAPTCHA; its text was read and the form was not used.4547484910
PSA
How a card gets its label. PSA’s process, in its own steps: “Order ID stickers with unique certification numbers are placed on each Card Saver in the order”; “Your cards are researched so they can be properly identified on the PSA label”; “PSA’s LightHouse labels are printed showing each card’s information and grade”; “The card and LightHouse label are sonically sealed in PSA’s tamper-evident holder” for security.38
The grade words. PSA’s standards pair each number with a short descriptor, and PSA’s 2008 label article shows one of them on the label with its number: “the grade number (8) will now appear directly below the description of the grade (NM-MT)”. So I read the list below as the words a PSA label prints with the number:161715
| PSA grade | Words |
|---|---|
| 10 | GEM-MT |
| 9 | MINT |
| 8 | NM-MT |
| 7 | NM |
| 6 | EX-MT |
| 5 | EX |
| 4 | VG-EX |
| 3 | VG |
| 2 | GOOD |
| 1.5 | FR |
| 1 | PR, and a second entry, PR-FR |
Half grades exist only in a band: “Cards that exhibit high-end qualities within each particular grade, between PSA 2 and PSA 9, may achieve a half-point increase.”16 I read that as no 9.5 at PSA; FR 1.5 is a grade of its own in the list above.16
The six qualifiers. PSA defines six two-letter qualifiers, and four of them share one rule.1615
- OC, off center: “Cards that are off center will either by designated “OC” or will have a numerical grade that reflects the minimum centering allowed for the grade.”16
- ST, staining: “Cards with staining will either by designated “ST” or will have a numerical grade that reflects the minimum staining allowed for the grade.”16
- PD, print defect: “Cards with printing defects will either be designated “PD” or will have a numerical grade that reflects the minimum print defects allowed for the grade.”16
- OF, out of focus: “Cards that are out of focus or out of register with either be designated “OF” or will have a numerical grade that reflects the minimum focus standards allowed for the grade.”16
- MK, marks: “Any and all cards with writing, ink marks, pencil marks, etc. or evidence of the impression left from the act of writing will be designated “MK.”“16
- MC, miscut: “Any and all cards that exhibit an atypical cut for the issue, which may result in portions of the subject card being cut off or more than one card being visible, will be designated “MC.”“16
The wording varies between “by” and “be” in PSA’s own text, and the quotations keep it. The glossary writes a qualified grade with the letters joined to the number: a card that meets the standard for Mint 9 but falls short on centering “would be designated Mint 9oc.”3 It does not say how the label spaces it. On my reading of the rule’s two halves together, a PSA 9 with OC is a different statement from a PSA 9 without it: the plain 9 meets the 9’s centering, and the OC card does not.16
When there is no number. PSA’s standards name two outcomes that carry no numerical grade:16
- AUTHENTIC (grade code N0): “This means that PSA is only certifying that the item is genuine, without a numerical grade.” The same entry gives the reasons it may happen: “This may be due to the existence of an alteration, one with malice or otherwise, a major defect or the original submitter may have requested that PSA encapsulate the card without a grade.” And it sums the label up: “The “Authentic” label means that the item, in our opinion, is real but nothing more.”16
- ALTERED AUTHENTIC (AA): “This means that while PSA is certifying that the item is genuine, due to the existence of alterations, the item cannot receive a numerical grade.” Such items are “genuine with the presence of some type of alteration,” and the designation “is used on a case-by-case basis, space permitting, and “AA” must be listed on the submission form as the desired minimum grade.”16
The nine no-grade codes, and what each lets happen to the card. PSA lists nine codes, N1 Evidence of Trimming through N9 Don’t Grade, under one heading: “If your card is returned without a numeric grade in a card saver sleeve, that determination was made based on one of the following reasons”. So each code is a reason a card comes back ungraded. Each code’s own text then says whether the card can still be encapsulated, and the nine split four ways:1615
- Five can be encapsulated as Authentic Altered: N1 Evidence of Trimming, N2 Evidence of Restoration, N3 Evidence of Recoloration, N5 Altered Stock and N7 Evidence of Cleaning each say that “this designation can qualify for encapsulation as “Authentic Altered” at the grader’s discretion and if “AA” is listed on the submission form as the desired minimum grade.”
- Two can be encapsulated as Authentic: N6 Minimum Size Requirement, a card “significantly undersized according to factory specifications,” “can qualify for encapsulation as “Authentic” only,” and N8 Miscut, where “the factory cut is abnormal for the issue,” “can qualify for encapsulation as “Authentic”,” each “at the grader’s discretion and if “Auth” is listed on the submission form as the desired minimum grade.”
- One never: N4 Questionable Authenticity, a card that “appears to be counterfeit,” “would never qualify for encapsulation under any circumstance”.
- One not, unless the decision is reversed: N9 Don’t Grade “does not qualify for encapsulation,” but “If additional information from two or more verified or hobby-approved resources are provided for the issue, the decision could be reversed upon resubmittal.”
PSA’s FAQ gives the default for the same codes: an item rejected for trimming, restoration, recoloration, questionable authenticity, altered stock or cleaning “will be returned not encapsulated,” and items that receive N6, N8 or N9 “will not be charged grading.”35 The standards add the route the FAQ leaves out: a card returned under seven of the nine codes can reach a holder, on the grader’s judgment and the submitter’s request on the form. Neither page says whether the code itself is printed on such a label.1635
What an AUTHENTIC or AUTHENTIC ALTERED label can therefore mean, in PSA’s words. An AUTHENTIC label is a card PSA calls “real but nothing more,” for a reason PSA’s texts name: “an alteration, one with malice or otherwise,” “a major defect,” a submitter’s request “that PSA encapsulate the card without a grade,” or, through N6 and N8, a card “significantly undersized according to factory specifications” or one whose “factory cut is abnormal for the issue”.16 An AUTHENTIC ALTERED label is a card PSA judged “genuine with the presence of some type of alteration,” the route N1, N2, N3, N5 and N7 leave open.16 And the first can stand for the second. PSA’s guarantee “does not differentiate between the “Authentic” and “Authentic Altered” designations,” because “PSA does not always print the term “Altered” on the label itself for technical reasons (e.g., such as character and spacing limitations)”, and it says items labeled “Authentic” “must be viewed as potentially interchangeable with “Authentic Altered”“.1 The standards page drops the “potentially” and keeps the scope: the “Authentic” only designation “is to be considered interchangeable with “Authentic Altered”” for the purposes of PSA’s guarantee.16 So an AUTHENTIC label alone does not tell a collector whether the card was altered, and, on my reading, the standards’ “space permitting” for AA and the guarantee’s “character and spacing limitations” give the same reason from two pages.161
How PSA names Pokémon sets. PSA publishes no naming rule that I found, so this is my reading of three of its own pages.505152
- CardFacts heads its Base Set entries “1999 Nintendo Pokemon Game,” and a card page in that set carries a heading in capitals that begins “1999 POKEMON GAME 74” and goes on with the card’s name and 1ST EDITION: year, game, number, card, variety. The page does not call it label text; I read it as the wording a label carries.50
- Japanese sets carry “Japanese” inside the set name, in two spellings on PSA’s own pages: CardFacts “2011 Nintendo Pokemon Japanese Black & White Psycho Drive” and the price guide “2020 Pokémon Japanese S Promo.”5152
- So, on my reading of its CardFacts heading, a PSA label’s set text is not the set’s printed name: for Base Set it would be “Pokemon Game,” not “Base Set.” An app that matches a label’s set text against English set names would not find it for those sets, which section 6 traces in the app’s code.5053
Label generations, from PSA’s dated articles.171819202122
| Date (PSA’s article) | What PSA says changed |
|---|---|
| February 12, 2008 | New labels “to distinguish cards graded after the new half-point system launch from those graded previously”; they “contain the same general information,” with the grade number directly below the grade words, on the right |
| November 12, 2013 | A new holder whose top piece “envelops the bottom”; the back of the insert label gets “a reflective hologram” in place of “the simple, silver foil stamp” |
| June 14, 2017 | The LightHouse label: “The front of the label still features a red border,” with “fugitive ink” behind the label copy; the front’s PSA hologram “has been upgraded to proprietary Lighthouse” technology (“Gone are the days of standard holograms”); a UV logo pattern and a QR code on the back |
| January 1, 2019 (article of February 15, 2019) | PSA/DNA, after “20 years of using blue labels,” moves to “red labels across the board”; PSA/DNA-authenticated items “will receive a red label with only a generic description of the item (i.e., TRADING CARD)” |
| May 14, 2024 | A new standard holder, “Starting with sports card submissions this May with plans for a wider rollout”: a new polymer, “20% heavier,” “no Mylar, no sleeve”; the article does not describe the label as changed |
| June 19, 2024 (article of June 5, 2024) | A blue label for autograph-only items: “Blue PSA Label : autograph-only authentication and grading. Red PSA Label : item authentication and grading (Dual Service included).” |
The label’s color says what was certified. Red is the item and its grade; blue, from June 19, 2024, is the autograph only.22 Before January 1, 2019, PSA/DNA’s encapsulated autographs used blue labels too, so on my reading a blue PSA label’s meaning depends on when it was made.2022 PSA’s 2019 article adds a test that, on my reading, fits red labels made from January 1, 2019 until the blue label began on June 19, 2024: “If they see an autographed card with the designation ‘trading card’ on the LightHouse label, that means that PSA has only authenticated the autograph.”20
Before 2008. No PSA page I found describes earlier labels; the 2008 article says only that the new labels “contain the same general information”.17
Security features, as PSA publishes them. PSA’s security page lists, for the front of the LightHouse label, a “PSA LightHouse logo with on/off illumination effect,” “Classic PSA red trim connects to LightHouse,” and a “Fugitive ink graphic pattern to prevent label washing”; for the back, a “PSA logo with UV logo pattern,” the LightHouse logo, the fugitive ink, and a “QR Code for instant access to Cert Verification”.24 The 2017 article explains the ink: “The same technology used on checks to prevent check washing, fugitive ink will dissolve and wash away when exposed to cleaning chemicals. Each label is adorned both front and back with this fugitive ink.” It adds that “These features come in addition to other covert security features,” which it does not describe.19 The security page dates the label’s upgrade: “In 2017, PSA enhanced the security features found on the label used inside the PSA holder.”24
The holder. “Tamper-evident means that if someone does attempt to violate the holder, it will leave some evidence that the holder has been compromised.” PSA says that “Since 1991, PSA has utilized a tamper-evident holder” to encapsulate collectibles.35
Pictures on the record. PSA images cards and uploads them “to its online Certification Verification site,” which it calls “extremely useful for collectors looking to verify the details of an item, including its cert number, before making a purchase.”35
Looking a number up. The look-up page is psacard.com/cert, linked from 22 of the 23 PSA pages saved for this post; the 23rd is the population-report file described below, which has no links at all.245415 PSA’s own pages link single certificates as /cert/<number>: the CardFacts page for one Base Set card links 231 times to that form, for 201 distinct numbers, every one of them eight digits, in its table of recorded sales.505415 That is a count on one saved page, not a format PSA publishes. A longer form, https://www.psacard.com/cert/<number>/psa, appeared in search-index results, which are not saved, and on no saved PSA page. The research notes record that the look-up page and an address of the longer form answered an automated request on October 5, 2026 with HTTP 403 and a Cloudflare bot check; no copy of either response was kept, and no certificate record was read here.47 PSA also runs a public API that answers one question: “We currently offer access to data from Cert Verification for single item searches by cert number.” It needs a token made from the user’s own PSA login; its sample number is the eight-character 00000000; and a number “containing non-numeric or too few characters” comes back as “Invalid CertNo”.55
A wrong label is fixed free. “PSA will correct any mislabeled item(s) free of charge,” through a Label Correction Request.35 The guarantee itself “does not cover clerical errors, or what we call “mechanical errors,”” so a wrong label is a correction, not a claim.1
The population report. PSA’s own description, in an undated market report by Joe Orlando: “a tally of every single card we have ever graded and encapsulated,” broken down “by set, player and grade.” And its limit: “The population numbers do not represent ALL CARDS IN EXISTENCE, they merely represent the ones that have been graded by PSA. The numbers also do not include all the cards that have been rejected for evidence of alteration, restoration or questionable authenticity.”56 The report itself, at psacard.com/pop, was not reached. The research notes record that it answered an automated request with HTTP 403 and a Cloudflare bot check. The one file saved under its name is not that response and not the report: it is PSA’s sign-in page. Its own contents say so: the route it carries is the sign-in page, signin?b=psa&r= followed by the address psacard.com/pop, encoded, which I read as the address to return to after signing in; the page script it loads is the sign-in page’s; and it has no title and no visible text. So the report sat behind a bot check, as the notes record it, or behind a sign-in, as the saved file shows it, and either way it was not read.47
Beckett (BGS)
The site is offline, so Beckett is read from the archive. Beckett’s status page, dated October 2, 2026, says that “we detected suspicious technical activity and, out of caution, took our platforms offline,” that “The extended downtime reflects the time needed to conduct a thorough forensic investigation,” and that “Core certification, grade records, and historical population databases remain intact and uncompromised.”29 Services return in phases, and the look-up is in the first: “Phase 1: Customer Accounts, Online Submission Center, Certificate Look-up and Pop Reports”.29 Requests on October 5 for Beckett’s grading scale and card look-up were redirected to that maintenance site.2945 Every Beckett fact below therefore comes from a Wayback Machine capture, named by its date, and may differ when the site returns.
What the label says. Beckett’s FAQ, in the capture of March 26, 2025: “A label will run partially across the top of the holder. Each label will feature the set name, the grade and a specific id and a bar coded serial number.”26 The overall grade is worked out from “the 4 sub grades on the front label of the card holder,” so, on my reading, a Beckett label with subgrades carries five numbers, and the overall is the grade.26
Label errors are the one dispute Beckett takes. “Disputed grades on cards are limited to typographical errors on the label (i.e., the wrong set name).”26
Security, in Beckett’s words, is one sentence: “Extreme precautions have been taken to prevent counterfeiting of the label and the holder.” No Beckett page saved describes the features.26
The black label, from November 28, 2014. Beckett’s post of that date, read from a capture of August 16, 2022: “A card worthy of four “10” subgrades is worthy of a special label. Starting today, each card that reaches this quad-10 level will receive a special black label showing that the ultimate grade has been reached.” It goes on: “The black label is for modern cards only,” and “not valid for any BVG cards (1980 and older).”9 The post frames it against “the elusive BGS Pristine 10,” and Beckett’s scale has no other 10: its top grades are “Pristine 10” and “Gem Mint 9.5.”98 So, on my reading, Beckett’s split at the top is between two labels on one grade: a Pristine 10 with four 10 subgrades, on black, and a Pristine 10 on the standard label.98
Gold and silver labels. On the saved Beckett pages, a label color other than black comes up only in a comment thread, not in a post: under the 2014 black-label post, a comment signed “Mike” and dated November 29, 2014 says “BGS 9.5’s and 10’s will always be Gold,” unless a 10 has four 10 subgrades, which takes the black label. The page does not identify the commenter; the same name signs three comments in that thread, one of them answering a relabeling question for BGS and another praising BGS. Beyond that comment, gold labels are described only on secondary sites, and no saved Beckett page mentions a silver one, so this post does not set out a color scheme for Beckett’s other grades.946
Grading services open, in two saved copies of the maintenance page. Asked “Which grading services are currently available?”, the September 19, 2026 capture answers: “Base (with subgrades), Standard, and Express are currently available through the temporary submission form.” It adds that “Availability may change”.30 The same page as saved on October 4, 2026, when beckett.com’s grading pages redirected to it, answers the same question: “Express is currently available through the temporary submission form,” and, asked why Base and Standard are unavailable, “Base and Standard card grading submissions are temporarily paused as we focus on existing orders and maintaining estimated turnaround times.”57 So on October 4 only Express was open to new submissions. Whether Standard and Express labels carry subgrades is not stated in either copy.3057
Looking a number up. The card look-up, live in the capture of August 19, 2026: “Verify the validity of Beckett certificates by entering the cert number,” with a choice of BGS, BVG or BCCG, and an invitation to sellers: “You can link directly to this page from your auction ads of eBay and other auction sites.”31 The page is a form, with fields named item_type and item_id in its source; no Beckett page read here gives a web address that carries a certificate number.31
The number’s format and place: “a specific id and a bar coded serial number.” No Beckett page read here gives its length, and the FAQ does not say which side of the label carries it.26 (The test in my app uses a ten-digit placeholder.)58
The population report, in the 2025 FAQ: “Our Population Report is available at no extra charge. Cards graded by Beckett Grading Services can be verified on our Graded Card Look Up site.” And: “It is updated daily”.26
The grades, by the archived grading scale of May 3, 2026, run from “Poor 1” to “Pristine 10,” with “Gem Mint 9.5” the grade below the top; Beckett has no Gem Mint 10. The black label is not a separate grade but a label for four 10 subgrades.89
CGC Cards
The 2023 label. On June 20, 2023, the Certified Collectibles Group announced that “In July, CCG will combine CGC Trading Cards® and Certified Sports Guaranty® (CSG®) into CGC Cards,” with “a sleek new label that blends seamlessly with cards.” The label “provides a detailed description of the card, along with its grade, its unique CGC certification number and a QR code to facilitate quick verification.”23
The Pristine 10 label. The same announcement promised “a lux, gold label worthy of the chase grade” for Pristine 10.23 Today’s scale: “All cards that merit a CGC Pristine 10 grade will receive a special CGC Cards Pristine 10 label.”4
CGC describes its Pristine 10 two ways on one page. The label section says the label is for “cards that are flawless under 10-times magnification”; the grade text says “A Pristine 10 is a virtually flawless card to the naked eye.” Both sentences are on the grading-scale page as saved; I quote them as written and do not reconcile them.4
The grade changes that came with the label. “Cards previously graded Gem Mint 9.5 are exactly equivalent to Gem Mint 10 under the updated grading scale”; “The Perfect 10 grade, which was seldom used, will no longer be assigned”; “Sub-Grades will also no longer be offered.”23 The scale keeps a legacy key: “CGC Trading Cards Gem Mint 9.5” and “CSG Gem Mint 9.5” map to “CGC Cards Gem Mint 10,” and both Perfect 10s are a “Retired grade; retains Perfect 10 status”.4
So an older CGC label can read 9.5 and mean 10. CGC’s help center says collectors can keep their Gem Mint 9.5s, “and they will be considered Gem Mint 10s in Verify CGC Cards Certification, the CGC Cards Population Report and the CGC Cards Registry,” without reholdering.5
And a current CGC label can read 9.5 and mean something else. Today’s scale has its own Mint+ 9.5, “a card that displays premium eye appeal for a Mint card,” below Gem Mint 10.4 So “9.5” on a CGC label is either a Gem Mint, now a 10, or a Mint+, below a 10. On the label itself the words beside it, GEM MINT or MINT+, tell which, and so, on my reading, does the kind of label: Gem Mint 9.5 belongs to the CGC Trading Cards and CSG labels, which CGC says “are no longer being offered,” and its 2023 announcement says a Gem Mint 9.5 reholdered onto the new CGC Cards label “will receive the CGC Cards Gem Mint 10 grade”.523 CGC’s current list of twenty grades for standard cards:415
| Words | Number |
|---|---|
| Pristine | 10 |
| Gem Mint | 10 |
| Mint+ | 9.5 |
| Mint | 9 |
| NM/Mint+, NM/Mint | 8.5, 8 |
| Near Mint+, Near Mint | 7.5, 7 |
| Ex/NM+, Ex/NM | 6.5, 6 |
| Excellent+, Excellent | 5.5, 5 |
| VG/Ex+, VG/Ex | 4.5, 4 |
| Very Good+, Very Good | 3.5, 3 |
| Good+, Good | 2.5, 2 |
| Fair | 1.5 |
| Poor | 1 |
The 2020 label. CGC Trading Cards’ holder article of July 13, 2020: “If requested, CGC Trading Cards provides Sub-Grades, which give a more nuanced description of a card’s condition”; “On the back of the label, a unique certification number identifies a card”; “A QR code enables you to quickly look up a card and its images at CGCcards.com/verify.”36 On my reading, a CGC slab labeled between 2020 and the 2023 change may carry subgrades, and one labeled after it does not. The 2020 article is the only saved CGC page that says which side carries the certificate number; the 2023 announcement and today’s holder page name the number without placing it.362325
Designations instead of a number. “Authentic AU” is “used for cards that are authentic and unaltered but cannot receive a numeric grade”; for “Authentic Altered AA,” “CGC Cards will print Authentic Altered in the grade box if a card is authentic but has been altered”; “Authentic ART” is “used for cards with custom art applied to the surface.”4
A label’s color carries the guarantee. CGC’s guarantee says a collectible “has not been overgraded,” and the same clause makes an exception by label color: “Grade is NOT guaranteed for cards encapsulated with CGC’s green Qualified Grade Label”. (The guarantee lists other exclusions too, for autographs among them.)59
Security features, as CGC publishes them. “To prevent against counterfeiting, the CGC Cards label features microprinting, UV ink, holographic foil and a unique certification number and barcode.” The case is “ultrasonically-welded” and “resists impacts and tampering,” and “On the back of the label, a QR code enables you to quickly look up a card and its images on the CGC Cards website.”25
Looking a number up. The tool is at https://www.cgccards.com/certlookup/, and single certificates appear in search indexes at https://www.cgccards.com/certlookup/<number>/, with a ten-digit example in a search-index title (the title was seen in search results, not on a saved page). The research notes record that both answered an automated request on October 5, 2026 with HTTP 403 and a Cloudflare bot check; they were not reached.48 No CGC page read here gives a certificate format.43
The population report is organized “by game, era and set” for trading-card games. Its disclaimer: “Census / Population Reports only reflect the quantities and types of collectibles previously graded by the CCG Companies, and are not an indicator of value or rarity.”60 When a card is not found there, CGC says to enter the certification number at its verify tool, where “Below the card images, you will find a link to see your card in the CGC Cards Population Report.”61
SGC
Two certificate formats, by label color. SGC’s look-up page: “For black labels, enter all 7 digits. For green and white labels, enter all 11 characters (XXXXXXX-XXX).”10
The look-up is a form with a reCAPTCHA, at gosgc.com/cert-code-lookup, and no SGC page read here gives a web address that carries a certificate code.10 SGC’s app offers the same check: “Use the Cert Verification feature to access high-resolution images and look up important information about your SGC cards.”62
Label fields and security features: not described on the SGC pages read. I rendered SGC’s scale, services, app, support and population pages, and none lists what the label prints or what protects it. Descriptions of SGC’s holder and label colors beyond the look-up page’s black, green and white are on secondary sites only, and this post leaves them out.2746
The grade words. SGC’s scale names its grades as “10 PRI” (Pristine), “10 GM” (Gem), “9.5” (MINT+), “8.5” (NM/MT+), “7” (NRMT) and so on; its two 10s are separate grades.6
The population report is a set search, with a note: “With over 28 years of data included in the SGC Pop Report, inconsistencies may be present.”63
TAG
No paper label. “Say goodbye to distracting paper flips. Instead, the TAG grades and data are permanently inscribed directly inside the slab.”64 TAG’s process page calls it “UV-cured text inside the slab, as well as the QR code to access the card’s DIG report and Proof Authentication features for authenticity verification”.37
Where the number is, and what it looks like. “Simply locate the card’s CERT# (left of the QR code),” and “The CERT# format is typically 1 Letter followed by 7 Numbers.”11 The cert-search page says “Enter any card’s 8 digit CERT # below”.41 And TAG’s help center: “All TAG Grading certification numbers are a mix of numbers and letters which are generated randomly.”65 Those three descriptions are all TAG’s own, and they are not fully consistent: a letter and seven numbers is eight characters, but not eight digits, and “a mix” allows other arrangements.114165
The look-up address. TAG’s cert-search page builds it in its own script, const TAG = "https://my.taggrading.com/card/";, followed by the number typed.41 No record was fetched for this post.
Checking the slab itself. “Locate the Proof Mark on the back of the slab, directly behind the QR code,” and scan it with the free Proof Authentication app; “Every Proof Mark is confirmed & scanned before leaving the TAG facility.”11
A withdrawn number says so. “This TAG Certification number is no longer active.” The page lists seven reasons, from “The slab was tampered with or compromised.” to “The certification was voluntarily surrendered.”3915
Two 10s, and a 1,000-point scale; on my reading, every card is scored on it, and the score is shown in full with one report tier. TAG’s scale gives its Pristine 10 a score of 990 to 1000 and its Gem Mint 10 950 to 989, and “Half points are included on every grade level except for between 9 and 10.”7 TAG describes its grading system as scoring on the 1,000-point scale: it “scores on a precise 1000 point scale & translates into an industry standard 1-10 Grade,” and its process page says the system generates “overall scores for the card on a 1-10 and 1000-point TAG Score scale.”6437 What reaches the owner depends on the report tier, in the home page’s own words: “Standard DIGs focus on the core defects that impacted the grade, aka the “DINGS.” DIG Plus Reports breakdown the card into further detail with precise 3 digit scoring.” The same page says “Slabs graded with DIG Report Plus receive a precise 1000 pt TAG Score,” and the DIG page says the leaderboard rank “is only available to cards which have been graded via the TAG S service as a 3 digit score is needed”.6466 TAG does not say in so many words that every card is scored or that a standard report hides the score; both are my reading of those sentences.
The population report is at my.taggrading.com/pop-report, with a Pokémon category linked from the taggrading.com pages saved; it was not fetched.67
ACE
Three label types. ACE names “Standard,” “Colour Match” and “Ace” labels, and says “Ace Labels are hand drawn exquisite addons for cards, which enhance the overall appearance of a collectible.” Its certificate pages report population by label type.4012
What a certificate record holds. ACE’s record page lists “Label,” “Name,” “Release Year,” “Set,” “Number,” “Language” and “Variant” (or “Additional Information” for a promo), the grade with its word (“MINT 9” on one, “GEM MINT 10” on the other), and four subgrades, for Surface, Centering, Edges and Corners.1213
ACE’s numbers are short. The two records read carry six and five digits, the second zero-padded: #242548 and #02289. No ACE page read here states a format.121343
Looking a number up. ACE’s site offers to “Lookup an Ace Grading graded collectible by certification number.” The record address is https://acegrading.com/cert/<number>, and both records answered normally. The research notes record that the index page, /cert, answered an automated request with HTTP 403 and a Cloudflare bot check, as did /pop, and neither was reached.401249
Checking a scanned label. “Please check the URL in your browser,” followed by the address, “https://acegrading.com,” “When scanning our authentication labels.” No other security feature is described on the pages read.28
ACE’s qualifiers are in its grading scale, which lists two groups under that heading: MC and OC, which a slabbed card can carry, and A, C and QA (Altered, Counterfeit, Questionable Authenticity), for cards it returns raw.42 Off-center: “The Off-Center modifier is given to a card where the grade for centering is 2 grades or more below the overall card grade. The Off-Center qualifier means that the overall grade isn’t affected as much, instead appending OC to the grade.”42 Miscut: “Sometimes a miscut card can not fit in the Ace slab,” and when a card “cannot be encapsulated due to a miscut,” “it will be sent back raw”; the page does not say how a miscut card that does fit is labeled.42 ACE’s other three qualifiers, Altered, Counterfeit and Questionable Authenticity, each end the same way: “The card will not be encapsulated and will be returned raw.”42 So, on my reading, ACE’s scale gives an altered card no route into a slab, where PSA’s gives five of its no-grade codes one.4216 Its scale lists whole grades from 10 to 1 and no half grades.42
3. The six side by side, and what changed when
| Label | Where the number is | Number format, in the grader’s words | Look-up by web address | Bot check on October 5, 2026, as the research notes record it | |
|---|---|---|---|---|---|
| PSA | Paper insert: red (the item) or blue (the autograph only, from June 19, 2024) | “on the PSA label”; which side is not stated; QR code on the back (2017 label) | None for card labels on the pages read (PSA/DNA’s autograph stickers carry “a unique, six-digit, alphanumeric certification number”); the API’s sample is 00000000; one saved CardFacts page links 201 numbers, all eight digits |
psacard.com/cert/<n>, as PSA’s own CardFacts page links it |
Cloudflare challenge (the population-report file saved is a sign-in page) |
| BGS | Paper label across the top; subgrades on the front; black for a Pristine 10 with four 10 subgrades (from November 28, 2014) | “a bar coded serial number” on the label; which side is not stated | None on the pages read | None; a form with BGS, BVG or BCCG | Site offline |
| CGC | Paper label; gold for Pristine 10 (from 2023); green is the Qualified label | Back of the label on the 2020 label; today’s pages name it without placing it; QR code on the back | None on the pages read; ten digits in the indexed example | cgccards.com/certlookup/<n>/ |
Cloudflare challenge |
| SGC | Black, green or white | Not stated on the SGC pages read | “7 digits” (black); “11 characters (XXXXXXX-XXX)” (green, white) | None; a form with a reCAPTCHA | None (the form’s widget only) |
| TAG | No paper: text and a QR code inside the case | “left of the QR code” | “typically 1 Letter followed by 7 Numbers”; “8 digit”; “a mix of numbers and letters” | my.taggrading.com/card/<n> |
None |
| ACE | Standard, Colour Match or Ace | Not stated on the ACE pages read | None on the pages read; 5 and 6 digits on its own records | acegrading.com/cert/<n> |
On the look-up index and the population report; the two record pages answered normally |
Sources: the pages cited in section 2.222433555544726931292359253648106411416540121349
Each grader’s certificate shape, character by character, against the 7-to-10-digit run my app’s reader looks for, and what that reader returned for each.1444
Label changes, with the grader’s own date
The table in section 2 holds PSA’s six dated changes. With Beckett’s and CGC’s, they make the timeline below; a change with no date on a grader’s own page is left off, and nothing before February 12, 2008 has a PSA date.17181920212293623
Label changes dated by the graders’ own announcements, and Beckett’s by an archive copy of its post.44
Why a label date needs the grader’s own word. The plan for this post first called PSA’s LightHouse label a 2023 change. PSA’s own article dates it June 14, 2017, and PSA’s security page says “In 2017, PSA enhanced the security features found on the label used inside the PSA holder.”1924 I found no PSA label redesign dated 2023 on psacard.com; PSA’s 2024 changes were a new holder (May 14, 2024) and a blue label for autograph-only items (announced June 5, effective June 19, 2024).2122 The 2023 redesign belongs to CGC, announced June 20, 2023 for July.23 Collector guides that number PSA’s “label styles” or date them otherwise exist; I used them only as leads.46
Ten grader pages behind the centering post have not changed
The centering post rests on grader pages saved on October 4, 2026. Ten of them I compared with copies saved on October 5, line by line: PSA’s grading standards (the plain page) and glossary, CGC’s grading scale and its “other grading topics” FAQ, TAG’s rubric, scale and DIG page, ACE’s grading scale, SGC’s rendered scale and Beckett’s status page all read “unchanged,” ten pairs of ten.6815 One part was not re-checked: PSA’s per-grade texts live in a script bundle that was not rendered again, and the plain page shows only the PSA 10 slide.68 Nor were the centering post’s other saved pages, among them PSA’s centering guide, CGC’s FAQs and TAG’s glossary, none of which this post cites; the Beckett FAQ and scale both posts read are archive captures, fixed by their dates.68268
Two findings about the centering post
These are findings of this post; the centering post itself is unchanged.69
Beckett’s outage began before the October 2 notice. The centering post dates Beckett’s outage from that notice (“Beckett’s site has been offline since a notice dated October 2, 2026”).69 The Wayback Machine’s capture of Beckett’s maintenance page on September 19, 2026 already reads: “Beckett’s digital platforms, including Beckett.com and the Beckett mobile app, remain temporarily offline while we complete infrastructure enhancements.”30 Its card look-up was still live in a capture of August 19, 2026.31 So the site went offline at some point in the 31 days between those two captures, at least 13 days before the notice, and the October 2 notice gives the reason for what it calls “The extended downtime”.2915 No Beckett page dates the start; the window rests on two archive captures.3031
TAG’s system scores on a 1,000-point scale; on my reading, every card is scored on it, and the owner sees the score in full with one report tier. The centering post says TAG “scores out of 1,000 to answer “how strong of a 10 is this”“.69 TAG’s own pages describe the system that way: it “scores on a precise 1000 point scale & translates into an industry standard 1-10 Grade,” generating “overall scores for the card on a 1-10 and 1000-point TAG Score scale.”6437 What the owner receives is tied to the report tier (no price for it is quoted here): “Standard DIGs focus on the core defects that impacted the grade,” while “DIG Plus Reports breakdown the card into further detail with precise 3 digit scoring”; “Slabs graded with DIG Report Plus receive a precise 1000 pt TAG Score”; and the rank “is only available to cards which have been graded via the TAG S service as a 3 digit score is needed”.6466 So, on my reading, every TAG card is scored on the 1,000-point scale, and the score is shown in full with the Plus report; TAG does not say in so many words that a standard report leaves it out. That is a qualification of the centering post, not a contradiction: the TAG pages it cites, the rubric, scale and DIG page, are among the ten and have not changed.6869
4. Reading a slab in hand, and checking it
What follows puts the graders’ own statements in the order a collector meets them, holding a slab. The order is mine; each step’s content is the grader’s.
1. Find the grader and the certificate number, and look the number up at that grader. This is the step every grader offers and the one PSA’s guarantee depends on: the card must have had “an active certification number on the cert lookup feature of the PSA website at the time it was purchased” by the person making the claim.1 Look for the number on the label: PSA’s glossary says only “It can be found on the PSA label,” Beckett’s FAQ calls it “a bar coded serial number,” CGC’s current pages name it beside a barcode without saying which side, and CGC’s 2020 label printed it on the back. TAG puts it “left of the QR code” in the case, and SGC’s look-up wants all seven digits on a black label and all eleven characters, hyphen included, on green and white.32625361110 Where a grader shows pictures on the record, compare them with the card in your hand: PSA calls its imaged records “extremely useful for collectors looking to verify the details of an item, including its cert number, before making a purchase,” and SGC’s app offers “high-resolution images” with its check.3562
2. Read what the record says, not only the label. A TAG number that has been withdrawn says “This TAG Certification number is no longer active.”39 CGC says its certificate look-up counts a legacy Gem Mint 9.5 as a Gem Mint 10.5 Beckett, whose look-up is offline, says its “Core certification, grade records, and historical population databases remain intact and uncompromised” and lists the look-up in its first phase of return.29
3. Read the words beside the number. On a PSA label, OC, ST, PD, OF, MK or MC changes what the number says. AUTHENTIC means PSA is “only certifying that the item is genuine,” a card “real but nothing more” in PSA’s words, and it may stand for an altered card, because PSA “does not always print the term “Altered” on the label itself”; five of PSA’s no-grade codes for alterations can still lead to an Authentic Altered holder.161 On a CGC label, a 9.5 needs its words: GEM MINT (now a 10) or MINT+ (below a 10).45 At CGC, SGC and TAG, a 10 needs its words too: Pristine or Gem Mint.467 At Beckett the words split differently: its only 10 is Pristine, Gem Mint is its 9.5, and the black label marks a Pristine 10 with four 10 subgrades.89 At ACE, OC appended to the grade means centering graded “2 grades or more below the overall card grade.”42
4. Read the label’s color where the grader gives color a meaning. PSA: red for the item, blue for the autograph only since June 19, 2024 (and blue for PSA/DNA encapsulations before January 1, 2019).2220 Beckett: black for four 10 subgrades.9 CGC: gold for Pristine 10, and green for a Qualified grade that CGC does not guarantee.2359 SGC: black labels carry seven-digit numbers, green and white labels eleven characters.10
5. Check the features the grader publishes, and only those. PSA describes, on its current label, the LightHouse logo “with on/off illumination effect,” a “Fugitive ink graphic pattern to prevent label washing,” a “PSA logo with UV logo pattern” on the back, and a QR code to its look-up; its holder is tamper-evident, which PSA defines as leaving “some evidence that the holder has been compromised.”2435 CGC lists “microprinting, UV ink, holographic foil and a unique certification number and barcode,” and a case that “resists impacts and tampering.”25 TAG’s check is its Proof Mark, scanned with its own app: “Locate the Proof Mark on the back of the slab, directly behind the QR code.”11 ACE’s is the address a scanned label opens, which should be “https://acegrading.com”.28 Beckett’s archived FAQ gives one sentence and no list, and the SGC pages read here describe no feature, so a collector holding those slabs has the look-up and little else from the grader.2627 This post describes no more than the graders publish, and nothing about how a label or case could be faked.
6. Know what a label date tells you. A PSA label with the grade number under the grade words dates from February 12, 2008 or later; the LightHouse label with fugitive ink from June 14, 2017; a blue autograph-only label from June 19, 2024, though blue alone does not date it: “Prior to January 1, 2019, PSA/DNA used blue labels” for autograph authentication too, so a blue label may be from before 2019 or from June 19, 2024 on.17192220 A CGC Cards label is from the 2023 change, and a CGC Trading Cards label with subgrades from before it.2336 That is my reading of the graders’ dated announcements; none of their pages read here is a guide to dating labels.
7. Read a population report as a count of slabs. PSA’s report counts “every single card we have ever graded and encapsulated,” not “ALL CARDS IN EXISTENCE,” and not the cards rejected “for evidence of alteration, restoration or questionable authenticity”; CGC calls its report “not an indicator of value or rarity”; SGC warns that “inconsistencies may be present.”566063 Nothing in this post is financial advice: it describes what the graders print and publish, and it makes no claim about what any slab is worth.
8. When a look-up page refuses an automated request, that is the page working. Several of these look-ups put a check in front of scripts. The research notes record that PSA’s certificate pages and population report, CGC’s look-up, and ACE’s look-up index and population report answered my requests with HTTP 403 and a Cloudflare challenge; the one file saved for PSA’s population report is PSA’s sign-in page, so that report also sits behind a sign-in; and SGC’s form carries a reCAPTCHA. My scripts stopped there, and those pages were not reached. A collector opening the same pages in a phone’s browser is the user they are built for; whether each one then shows a record was not checked for this post.47484910
5. The craft, as rules with numbers
These are the rules the sections above support, each with where it comes from. They state what the graders publish and what was measured; they are not grading advice.
| Element | Rule | Source |
|---|---|---|
| The key | The certificate number is the label’s key. PSA stands behind its opinions “as reflected on each PSA label”; on my reading, the look-up by the number is how a buyer checks that the opinion still stands. PSA’s guarantee, which covers a card’s grade and authenticity, needs “an active certification number” at purchase and excludes tampered or counterfeit labels “regardless of certification status” | PSA guarantee; my reading |
| The check | Look a slab up by its number before relying on the label; each of the six graders read here publishes a look-up; PSA, CGC, TAG and ACE add a QR code or a scan check, and TAG a Proof Mark behind its QR code | the six graders’ pages |
| Certificate shapes | SGC: 7 digits on black labels, 11 characters (XXXXXXX-XXX) on green and white. TAG: “typically 1 Letter followed by 7 Numbers.” ACE: 5- and 6-digit numbers on its own records. PSA’s pages read here give none for card labels (its FAQ gives PSA/DNA’s autograph stickers “a unique, six-digit, alphanumeric certification number”), and Beckett’s give none; PSA’s API sample is 8 characters, and one saved PSA CardFacts page links 201 numbers, all 8 digits (a count, not a published format); the CGC number seen is 10 digits | SGC, TAG, ACE, PSA FAQ, API and CardFacts links, CGC (search index) |
| A 10 is not one grade | CGC’s Pristine 10 apart from its Gem Mint 10, with a gold label for Pristine (since 2023); SGC’s 10 PRI apart from 10 GM; TAG’s Pristine at a score of 990 to 1000 apart from Gem Mint at 950 to 989. Beckett’s only 10 is Pristine (its Gem Mint is 9.5), and its black label marks a Pristine 10 with four 10 subgrades (since November 28, 2014) | CGC, SGC, TAG, Beckett (archive) |
| A 9.5 is not one grade at CGC | A legacy Gem Mint 9.5 equals today’s Gem Mint 10; today’s Mint+ 9.5 sits below it | CGC scale, CGC help center |
| Half grades | PSA’s run “between PSA 2 and PSA 9,” with FR 1.5, so no 9.5; TAG’s skip “between 9 and 10”; ACE lists whole grades only; Beckett has a 9.5 | PSA, TAG, ACE, Beckett (archive) |
| Letters beside the number | PSA: OC, ST, PD, OF, MK, MC, and AUTHENTIC or ALTERED AUTHENTIC with no number. CGC: AU, AA, ART, and a green label whose grade “is NOT guaranteed”. ACE: OC appended to the grade when centering is “2 grades or more below the overall card grade,” and MC listed as a qualifier | PSA, CGC, ACE |
| Authentic at PSA | “Real but nothing more,” and may be an altered card: PSA “does not always print the term “Altered” on the label itself” for technical reasons. Five of PSA’s nine no-grade codes can still be encapsulated as Authentic Altered and two as Authentic, at the grader’s discretion and if the submitter asks on the form; N4 never, N9 not unless the decision is reversed | PSA guarantee, standards and FAQ |
| Color at PSA | Red: the item. Blue, from June 19, 2024: the autograph only; blue also marked PSA/DNA encapsulations before January 1, 2019 | PSA, 2019 and 2024 |
| PSA’s dated changes | February 12, 2008 (grade under the grade words), November 12, 2013 (hologram on the back of the insert), June 14, 2017 (LightHouse, fugitive ink, UV, QR), January 1, 2019 (red for all encapsulation), May 14, 2024 (new holder, starting with sports cards), June 19, 2024 (blue for autograph only) | PSA articles |
| CGC’s dated changes | July 13, 2020 (CGC Trading Cards label, subgrades if requested); June 20, 2023 (CGC Cards label for July, gold Pristine 10, no subgrades, Gem Mint 9.5 now a 10) | CGC articles |
| Published security | PSA: LightHouse logo, fugitive ink front and back, UV logo pattern, QR, tamper-evident holder. CGC: microprinting, UV ink, holographic foil, certificate number and barcode, ultrasonic weld. TAG: Proof Mark. Beckett: one sentence. SGC: none on the pages read. ACE: the address check only | the graders’ pages |
| Population reports | Count slabs, not cards: PSA’s are not “ALL CARDS IN EXISTENCE” and leave out the rejected ones; CGC’s are “not an indicator of value or rarity”; SGC’s may have “inconsistencies” | PSA, CGC, SGC |
| PSA’s set names | Its own: “1999 Pokemon Game” for Base Set, and “Japanese” inside Japanese set names, so the label’s set text is not the printed set name | PSA CardFacts and price guide; my reading |
| The app, measured | Of sixteen synthetic labels built from the published formats (two in layouts no grader page shows), my app’s reader reads 3 whole, gets the grade (or its absence) right but drops a word that changes its meaning on 6, and gets 7 wrong: 1 grade lost, 2 certificates cut short, 4 slabs missed | Python copy of the reader |
Sources for the table: PSA’s guarantee, standards, FAQ, glossary and articles;116353171819202122 PSA’s security page, API, CardFacts links and population article;24555456 PSA’s set pages;505152 Beckett’s archived pages;2698 CGC;45233659256048 SGC;1066327 TAG;11741 ACE;12132842 and the measurement.1415
Two of those rules carry most of the weight. The key rule is why a label read by eye or by camera is only a pointer: PSA stands behind its opinions “as reflected on each PSA label,” and on my reading the look-up by the number is how a buyer checks that the opinion still stands.1 And the letters rule is why a grade is never just a number: the same “9” on a PSA label is two different statements with and without OC, and the same “9.5” on a CGC label is two different grades depending on the words beside it.164
6. The Apple way: what Kiradex’s label reader does today
Kiradex is my card-collecting app, and its scanner reads a slab’s label off the camera and stores the grader, the grade and the certificate number on the copy of the card in the collection. What follows is what the code does in the working tree as I read it on October 5, 2026, and then what it gets right and wrong against the graders’ published formats. The code was read, not run on a phone or a Simulator; the measurement below runs a Python copy of the reader over typed text, which is the honest limit of what this section can claim.3214
Reading the text
The scanner hands each camera frame to Vision. A VNRecognizeTextRequest runs at the .accurate recognition level, in English (and in Japanese plus English for the Japanese catalog), with language correction turned off; the comment says why: “Card names are not dictionary words, and a “corrected” collector number is a wrong one.” Each line it finds comes back with its text, its height and where it sits.70 Everything after that is string work on those lines.
Finding the grader, the number and the grade
Six graders. The app’s Grader type has six cases, psa, bgs, cgc, sgc, tag, ace, shown as “PSA,” “BGS,” “CGC,” “SGC,” “TAG” and “ACE.”32
The grader, by name. Each grader has “marks,” looked for as whole words: the frame’s text is split at anything that is not a letter, a digit or a period, and each piece is folded, which drops case, accents and the periods. The marks are psa; beckett or bgs; cgc; sgc; taggrading or tag; acegrading or ace. Because cards themselves print “TAG TEAM” and “ACE SPEC,” TAG and ACE carry a flag, isAlsoCardText, set for the whole grader, and its comment says “Such a name only means a grader beside a certificate number.” In the code the condition is that the frame holds a certificate anywhere (certNumber != nil), and it applies to every mark of the grader, acegrading and taggrading included. The first grader in that order that passes wins.3253
The certificate, by length. “The certificate: the longest run of 7 to 10 digits,” found by the pattern (?:^|\D)(\d{7,10})(?!\d).32
The grade, by its words. “The grade: a number from 1 to 10, on or right beside a line with a grade word (“GEM MT 10”); failing that, the tallest such number.” The grade words are gem, mint, mt, nm, ex, vg, good, fair, poor, pristine; SGC’s gm and pri are not among them. The number may not follow a letter, a digit, an underscore, a period, a slash or a #, and may not be followed by a letter, a digit, an underscore, a period or a slash, which is why “9OC” yields no grade.3214
Several looks, merged. A label is read over more than one frame: “A label is small print, and often read a look late,” so a card read for certain gets looksForALabel = 2 more looks before rapid mode takes it for a raw card. Later readings fill in what earlier ones missed, keeping the later grade and the longer certificate, and only when the grader is the same.7172
The label helps find the card. A PSA-style “#4” counts as a loose number (“Numbers given without a set size: a grading label’s “#4”“), and the latest year printed scores a set by year. A set’s name scores only when the text holds the index’s English set name (or, for the Japanese catalog, its Japanese name).53
What it keeps, and what it offers
Three fields. A copy stores graderRaw (empty for a raw card), grade (“1 to 10 in halves; 0 when there is none”) and certNumber, and the CloudKit schema carries the same three: CD_graderRaw, CD_grade, CD_certNumber.3373 Nothing else from the label is kept: no qualifier, no designation, no subgrades, no label type or color, no Pristine or Gem, no date.33
Editing. The copy editor’s grade picker offers “Grades as labels print them: 10 down to 1, in halves,” for every grader, plus “Not noted,” and the certificate field opens a number pad.34
One look-up link per grader, or none. verificationURL(cert:) returns https://www.psacard.com/cert/<cert> for PSA and https://www.cgccards.com/certlookup/<cert>/ for CGC, and nothing for BGS, SGC, TAG and ACE; its comment says a grader gets a link only “if it has a public page that takes the number in its address.” The editor shows a “Look Up at” button with the grader’s name only when a link exists.3234
Duplicates. A copy whose grader and certificate already belong to a copy of the same card is refused with a toast built as "\(grader.name) \(details.certNumber) is already registered." The check looks at one card’s copies, not across the collection.3374
What the scan sheet shows. The grade and number, as in the UI test’s “PSA 10” and “49392218,” and no centering line for a graded copy, because “a case hides the card’s edges.”7576
What is proven. Unit tests on typed text cover a PSA, a Beckett and a CGC label, raw cards, and the “TAG TEAM” and “ACE SPEC” guards; a UI test scans a drawn fixture label printed with “2026 KIRA BASE,” “PSA,” “GEM MT,” “10” and “49392218”.58777876 On a phone, the roadmap is plain: “Focus distance, zoom, speed, glare on foil, and slabs behind plastic are all unproven; the Simulator has no camera.”79
Where it goes wrong, measured
What was run. A Python script copies SlabLabel.init?(reading:) and Grader.verificationURL(cert:) line for line. Before anything else it checks itself against the app’s own tests. Those read a label eight times across two test files, and one reading, “TAG TEAM,” is in both files, so the script runs seven distinct readings: the PSA, Beckett and CGC labels, the raw card, “TAG TEAM,” “ACE SPEC,” and an ACE label with a seven-digit number (for which the app’s test asserts only that the grader is ACE, and the script compares only that). All seven pass. Two other expectations in those files are not part of this check: the PSA look-up address the PSA test asserts, and a test that compares the whole label read through the scanner. It then builds sixteen synthetic labels from the published formats, two of them in layouts no grader page shows (PSA’s OC written apart from the number, where the glossary writes it joined, and the third ACE label below): the grader’s name, “CARD NAME,” “SET NAME,” the grade as that grader words it (PSA’s GEM MT 10 as its CardFacts page writes it, the glossary’s “Mint 9oc,” CGC’s, TAG’s and ACE’s grade names, and SGC’s 10 GM and, for its 8, which has no letters in its grade name, the quality word beside it, NM/MT 8), and a certificate number in that grader’s shape, using PSA’s API sample, the ten-digit CGC example, SGC’s two formats, two TAG shapes (one of them a made-up mix of letters and digits, since TAG publishes “a mix of numbers and letters” with no fixed order), and ACE’s two published records. The third ACE label adds the site name, ACEGRADING.COM, on a line of its own; ACE’s authentication page names that address as the one a scanned label should open and does not say the label prints it, so that layout is an assumption.141550628 Three limits: this is a Python copy, not the Swift; the input is typed text, as if the camera had read every character perfectly, not a camera reading; and how each grader lays its label out is not published, so the lines are in a plausible order, not a measured one.14 The script also carries a separate section that runs a sketch of the brief’s proposed rules (section 7), kept apart from the measurement of today’s reader. Every run of it, all on October 5, 2026 but those of October 15, and each listed in the note, returned the same readings from today’s reader for the sixteen labels.14
| Synthetic label (format source) | The app reads | Verdict |
|---|---|---|
PSA, GEM MT 10, 00000000 (PSA’s API sample) |
PSA, 10, 00000000 |
right |
PSA, MINT 9OC (the glossary’s “Mint 9oc”) |
PSA, no grade, 00000000 |
grade lost; OC lost |
PSA, MINT 9 OC |
PSA, 9, 00000000 |
OC lost |
PSA, AUTHENTIC |
PSA, no grade, 00000000 |
AUTHENTIC stored as “no grade” |
CGC, PRISTINE 10, ten digits |
CGC, 10, 3732635008 |
Pristine lost: stored like a Gem Mint 10 |
CGC, GEM MINT 10, ten digits |
CGC, 10, 3732635008 |
right |
CGC, GEM MINT 9.5 (legacy, now a 10) |
CGC, 9.5 | stored like a current Mint+ 9.5 |
CGC, MINT+ 9.5 (current) |
CGC, 9.5 | stored like a legacy Gem Mint 9.5 |
CGC, AUTHENTIC ALTERED |
CGC, no grade | designation stored as “no grade” |
SGC black label, 10 GM, 1234567 |
SGC, 10, 1234567 |
right |
SGC green or white label, NM/MT 8, 1234567-001 |
SGC, 8, 1234567 |
certificate cut short |
TAG, A1234567 |
TAG, 10, 1234567 |
the certificate’s letter dropped |
TAG, a mixed code, K4X93B27 |
nothing | slab missed: no 7-to-10-digit run, so TAG is taken for card text |
ACE, MINT 9, 242548 |
nothing | slab missed: no 7-to-10-digit run, so ACE, by any of its marks, is taken for card text |
ACE, GEM MINT 10, 02289 |
nothing | slab missed, for the same reason |
ACE, MINT 9, 242548, with ACEGRADING.COM on a line of its own (an assumed layout) |
nothing | slab missed, for the same reason; the address does not change it |
Source: measure_slab_parser.out.txt, last re-run October 15, 2026.14
Sixteen synthetic labels built from the published formats, two of them in assumed layouts, through a Python copy of the app’s reader: 3 whole, 6 with a meaning-changing word lost, 7 wrong.141544
The count, over one denominator. Of the sixteen, 3 (18.75%) come through whole: grader, certificate, grade and every word that changes the grade’s meaning. Nine (56.25%) have the grader, the certificate and the grade (or, for the two designations, its absence) right, and 6 of those nine lose a word that changes what the number means: OC, AUTHENTIC, PRISTINE, GEM MINT on a legacy 9.5, MINT+ on a current 9.5, and AUTHENTIC ALTERED. Seven (43.75%) are wrong: 1 grade lost, 2 certificates cut short, and 4 slabs (25%) not recognized as slabs at all.15 The script’s own summary line counts the same run differently and agrees: “9 of 16 read grader, cert and grade number as the label states; 7 did not; 7 cases lose a qualifier or designation the label prints,” the seventh being the joined “9OC,” which also lost its grade.1415
By grader, as the output prints it.1415
- PSA, 4 labels: 1 whole; 2 with the grade right and a word lost (OC written apart, AUTHENTIC); 1 with its grade lost (OC written joined, the glossary’s way). Every PSA certificate was read right. Whether PSA prints OC joined to the number or apart is not published on the pages read, so both spellings were run.14
- Beckett: not run, because no Beckett page read here gives a certificate format; the app’s own Beckett test (ten digits, subgrades on one line, the 9.5 the tallest number) passes in the copy.1458
- CGC, 5 labels: 1 whole (Gem Mint 10); 4 with the number right and the word that gives it meaning lost (Pristine, legacy Gem Mint 9.5, Mint+ 9.5, Authentic Altered). Every CGC certificate was read right.14
- SGC, 2 labels: the black label whole; the green or white label’s certificate cut to its first seven digits.14
- TAG, 2 labels: the letter-and-seven-digits code cut to its digits; the mixed code not read as a slab.14
- ACE, 3 labels: none read as a slab.14
The certificate-shape figure in section 3 draws the same failures character by character: the shaded band, a run of 7 to 10 digits, is the only shape the reader keeps.1444
A certificate cut short is worse than a missing one. The SGC and TAG failures return a number, and it is the wrong one.14
- SGC green and white labels:
1234567-001is read as1234567. SGC says to “enter all 11 characters”. The app would store seven, and since its duplicate check compares the stored number, on my reading two different green-label slabs of the same card that shared a seven-digit stem would be refused as one case.1033 - TAG:
A1234567is read as1234567. TAG says the format is “typically 1 Letter followed by 7 Numbers,” so a look-up of the stored number would not be the card’s number.11 - The copy editor shows the wrong number with no warning, above a footer telling the collector the number “is printed on the case’s label.”34
Every ACE slab with a five- or six-digit number, as both of ACE’s own records are, is read as a raw card, and the cause is the number’s length. ACE’s numbers on its own pages are five and six digits; the reader keeps only a run of seven to ten. With no such run anywhere in the frame, certNumber is nil, and the guard that keeps “ACE SPEC” cards from reading as ACE slabs, which is set for the whole grader, turns ACE away by any of its marks. That is what happens to all three ACE labels in the Python copy, and it would happen with the address unfolded: the guard rejects ACE before it matters which mark matched.12133214 The fold is a second, smaller barrier. It drops the period, so “ACEGRADING.COM” becomes acegradingcom, which is not the whole word acegrading; that would matter only on a label that printed the address and no standalone “ACE,” with a number the reader accepted, and no ACE page read here says its label prints the address at all.325328 In rapid mode, after its two further looks, such a card would be registered as raw, with whatever condition the scanner is set to note for raw cards and possibly a centering reading taken through the case.717475
“1999 POKEMON GAME” names no set in the index. On my reading of its CardFacts heading, PSA’s labels call Base Set “Pokemon Game,” and the app scores a set by name only when the index’s English set name appears in the text, so a PSA label gives the matcher only its year and its loose number.5053 The app’s own test records the result: a PSA label for Base Set number 4 is not certain, and “The name, the number and the year together put Base Set first.”58 On my reading, that works for a 1999 card whose name and number belong to one 1999 set, cannot tell apart two printings with the same name and number in one year, and has no mapping from PSA’s set names to the index’s sets to fall back on; PSA’s set list could not be read to build one, because its population report was not reached (a bot check in the research notes, a sign-in page in the saved file).5347
One number, two labels. The stored model is a grader, a grade and a certificate number, so these printed grades collide in it. The summary line is the grader’s name and the number, or the name alone where there is no number, so it reads the same for both members of each pair, for instance CGC 10, CGC 9.5 or PSA 9.3314
- CGC Pristine 10 and CGC Gem Mint 10, though CGC gives the first a gold label of its own.23
- CGC’s legacy Gem Mint 9.5 and its current Mint+ 9.5: one is now a 10, the other below it.4
- SGC 10 PRI and SGC 10 GM.6
- TAG Pristine 10 (990 to 1000) and TAG Gem Mint 10 (950 to 989).7
- Beckett Pristine 10 with four 10 subgrades, the black label, and Beckett Pristine 10 without.9
- PSA MINT 9 and PSA MINT 9 OC, which PSA’s rule makes two different statements.16
- PSA AUTHENTIC and a PSA copy with no grade noted; likewise CGC AUTHENTIC ALTERED and a CGC copy with no grade noted. Each pair stores its grader and a grade of 0, and its summary is the grader’s name alone.1643314
The picker offers grades a grader does not give. Against each grader’s own scale, on my reading: PSA has no 9.5, its half grades sitting “between PSA 2 and PSA 9”; ACE lists whole grades only; CGC, SGC and TAG each have two 10s, which the picker cannot tell apart; TAG has no 9.5 (“Half points are included on every grade level except for between 9 and 10”); Beckett’s 9.5 is Gem Mint and its only 10 is Pristine, and the black label is a label, not a grade.1642467834
The links, grader by grader.
- PSA: the app builds
https://www.psacard.com/cert/<n>, and PSA’s own pages use that form: the CardFacts page saved for this post links 231 times to/cert/<n>, for 201 distinct numbers, in its table of recorded sales, and none of its links adds/psa.325415 The longer formhttps://www.psacard.com/cert/<n>/psawas seen only in search-index results, which are not saved. The research notes record that both forms answered scripts with a Cloudflare challenge, so whether either shows a record in a phone’s browser was not checked.47 - CGC: the app’s
https://www.cgccards.com/certlookup/<n>/matches the indexed form, which the research notes record as also behind a challenge for scripts.3248 - TAG:
https://my.taggrading.com/card/<n>is built by TAG’s own page; the app has no TAG link.4132 - ACE:
https://acegrading.com/cert/<n>served both records read; the app has no ACE link.1232 - SGC: a form with a reCAPTCHA and no address for a number; the app has no SGC link.10
- Beckett: a form with a choice of BGS, BVG or BCCG and the number, offline since before September 19, 2026; the app has no Beckett link.3130
What it costs
Unmeasured. Nothing in this post was run on a phone, so there is no time per label, no battery figure and no camera accuracy figure. The app’s own tests were read, not run, for this post. The only things executed against the app’s logic were Python: the copy of the reader and the sketch of the brief’s rules. Other scripts ran on the saved pages and outputs, not on the app: the arithmetic, the link count, the page comparison and the figure scripts.141554684479
7. The brief: what Kiradex builds and the checks it must pass
The tree moved after this post was written. Everything below was written against the reader at commit 5a344e3f (October 5, 2026), and every sentence that says “today” means that build; the latest commit, fc9d4876 (October 15), still carries the same SlabLabel.swift. On October 15 the Kiradex working tree held uncommitted changes to the reader that carry part of this brief: a certificate shape per grader ([A-Z]\d{7} for TAG, \d{7}(?:-\d{3})? for SGC, \d{4,7} for ACE, \d{7,9} for PSA) and a look-up link for ACE at acegrading.com/cert/; and, beyond this brief, a read(code:) that reads the label’s QR code. Its ACE shape, four to seven digits, is wider than the five or six item 1 asks for; its TAG shape takes only a letter and seven digits, so item 1’s mixed-code check (K4X93B27) would not pass against it; and its PSA shape is seven to nine digits, where item 1 keeps seven to ten. Its verificationURL also gives a link only for a number in the grader’s own shape, where item 3 shows the button for any noted number and leaves the shape to item 4’s footer. Uncommitted code can still change or never ship, so the brief stands as the record of what was asked and as the acceptance checks; a dated section with captures follows once a build carries the change.80
The label reader’s job is to carry the grader’s own words into the collection accurately and then send the collector to the grader’s record. It cannot judge whether a slab is genuine, and it should never sound as if it had. PSA’s guarantee covers a card’s grade and authenticity provided its number was active on PSA’s look-up when the claimant bought it, and PSA stands behind its opinions “as reflected on each PSA label”; on my reading, the look-up is how a buyer checks that the opinion still stands, and the app has only read text.1 Six items follow, each with the files it changes and a check a unit test, a UI test or a script can run. New tests use generic placeholders (CARD NAME, SET NAME) and no creature names; the existing tests’ card names are left as they are. Proposed wording is set in code type, to keep it apart from quotations.
1. Read the certificate by grader, in the grader’s published shape, and let the collector type it
Find the grader first, then the number in that grader’s shape, in Kiradex/Scanner/SlabLabel.swift:101165121332
| Grader | Accept | Source |
|---|---|---|
| SGC | \d{7}, a hyphen and \d{3} first, with any dash read as a hyphen and spaces about it allowed; else a token that is \d{7} and is not followed, after spaces or a dash, by more digits |
“For black labels, enter all 7 digits. For green and white labels, enter all 11 characters (XXXXXXX-XXX).” |
| TAG | an 8-character run of letters and digits with at least one of each, [A-Z]\d{7} first |
“typically 1 Letter followed by 7 Numbers”; “a mix of numbers and letters” |
| ACE | a run of 5 or 6 digits standing alone on its line | ACE’s records #02289 and #242548 |
| PSA, CGC, BGS | today’s 7 to 10 digits | no format on the pages read |
Match each shape against the whole token it sits in, never against part of one. For SGC, first read every dash a camera may return (U+2010 to U+2015 and the minus sign, U+2212) as a hyphen, and take seven digits, a hyphen and three digits as one code even with spaces about the hyphen, stored as 1234567-001. SGC’s black-label shape, seven digits, is the start of its green-label one, so seven digits followed, after spaces or a dash, by more digits are not a black-label code: 1234567 001 and 1234567-0012 are in neither shape, and nor is a line that ends in seven digits followed by a line that begins with a dash, or with three digits and no fourth, which is the same code returned as two lines; in each case the number is left unread and the scan sheet asks for it (item 4), rather than stored as 1234567, which is not the label’s number. The rule has two side effects: a black-label number with the grade after it on the same line (1234567 10), or with a line below it that begins with a three-digit set number (025/198), is also left unread. No label read here shows either.1014 Keep certificates as strings, leading zeros and hyphens included. Fold a camera’s O-for-0 and I-for-1 only inside a run already judged a certificate, and, on my reading of TAG’s “a mix of numbers and letters,” never inside a TAG code, where an O or an I may be the letter it looks like.6553
The guard follows the cause. Today every ACE label with a number like ACE’s own records is lost, because those five- and six-digit numbers are not a run of 7 to 10, so certNumber is nil and the isAlsoCardText guard turns ACE away by any of its marks (section 6). Keep the guard, since cards print “ACE SPEC” and “TAG TEAM,” but in each grader’s own shape: ACE counts when a standalone line holds 5 or 6 digits and the line that names it has no SPEC; TAG counts when its 8-character code is present.3214
No folded-word change. Matching acegrading inside a folded word (acegradingcom) is not part of this item. With the guard above, every ACE label in the measurement reads without it, including the one with the address on it, because each also prints “ACE”; and no ACE page read here says its label prints the address, so the change would be built for a layout nobody has shown. It is left out. If a real ACE label turns up with the address and no standalone “ACE,” that label is the test to write the change against.2814
The certificate field takes letters and a hyphen. The copy editor’s certificate field opens a number pad (the copy-certificate field in Kiradex/Views/Card/CopyEditor.swift, with .keyboardType(.numberPad)), so a collector cannot type TAG’s letter or SGC’s hyphen, while item 4 and the takeaways tell the collector to type the number. Change it to .keyboardType(.asciiCapable) with .textInputAutocapitalization(.characters) and .autocorrectionDisabled().341110
Checks (new tests in KiradexTests/ScannerTests.swift unless named). Each check label below also carries a CARD NAME line, as the sketch’s do. Section 4 of the measurement output prints today’s reading beside the brief’s for each reader check below: the SGC green-label, TAG and ACE lines fail under today’s reader, and the SGC black-label and card-text lines already pass and are there to keep passing.14
- The number’s shape, SGC:
SGC+10 GM+1234567-001gives the certificate1234567-001;SGC+10 GM+1234567gives1234567. - A malformed SGC code is left unread:
SGC+NM/MT 8+1234567-0012gives grader SGC, grade 8 and no certificate, and so does1234567-01. Today’s reader stores1234567for both.1014 - A green-label code read with another dash or with spaces is still one code:
SGC+NM/MT 8+1234567and001joined by an en dash (U+2013) gives1234567-001, and so does1234567 - 001;1234567 001gives no certificate, and so does1234567with-001on the next line. Today’s reader stores1234567for all four.1014 - The number’s shape, TAG:
TAG+GEM MINT 10+A1234567gives grader TAG and certificateA1234567;TAG+GEM MINT 10+K4X93B27gives grader TAG and certificateK4X93B27. - The number’s shape and the guard, ACE:
ACE+MINT 9+242548gives grader ACE, grade 9, certificate242548;ACE+GEM MINT 10+02289gives02289, zero kept. - The guard still holds for card text: the existing
wordsCardsPrintAreNotGraderscases still return nil, written with placeholders:CARD NAME+ACE SPEC+153/162, andCARD NAME+TAG TEAM+33/181.77 - One existing expectation changes. The same test’s third expectation (
wordsCardsPrintAreNotGradersinKiradexTests/ScanSessionTests.swift) expects grader ACE fromACE+10+GEM MINT+ a card name +1234567. Under the new ACE rule a seven-digit number is not an ACE certificate, so that reading returns nil and the line fails as written. Its number changes to242548, ACE’s six-digit record, standing alone on its line, and it keeps its expectation of grader ACE.7712 - The keyboard, in
KiradexUITests/KiradexUITests.swift, in a new test method of its own,testTheCertificateFieldTakesLettersAndAHyphen, launched with the same arguments astestScanningAGradedCardKeepsItsLabel(-fixtureCatalog,-scanFixture kira1-2,-scanSlab YES): it tapsScan, waits for the find as that test does (scan-found-name, thenscan-found-details), then tapsscan-details, clearscopy-certificate, typesA1234567and asserts the field’s value isA1234567; then clears it, types1234567-001and asserts that value; and it ends there, never tappingscan-have, so nothing it types is registered. It does not go intotestScanningAGradedCardKeepsItsLabel: the editor the scan sheet opens is bound to the sheet’s own details (ScanResultPanelpasses$detailstoCopyEditor),scan-haveregisters whatever those details hold, and that test later asserts that the registered copy’s row contains49392218, which a number typed over the scanned one would break. No existing expectation changes for this check. This check touches only the keyboard change: the field’s value does not pass through the reader. It was not run; if it passes before the change, the run is not typing through the on-screen keyboard, and the check needs another form.76757434 - A Python sketch of these rules and item 2’s, added to the measurement script as a section of its own (section 4 of
measure_slab_parser.out.txt, kept apart from the measurement of today’s reader), reads 16 of the 16 labels with grader, certificate and grade number right (today’s reader: 9 of 16), and all 39 check labels in items 1 and 2 as this brief says, with the 15 summary strings item 2 writes out matching its summary rule, and merges all 10 of item 2’s successive looks as item 2 says. Under it, 6 of the 7 existing expectations the port check runs hold, and the seventh is the ACE expectation that changes, above; of two further existing expectations it runs, one changes, as item 2 says. The sketch is not the app: the Swift change has to pass the tests above on its own.1415
2. Keep the words beside the number
Add three fields to SlabLabel and to CopyDetails and CardCopy, each with a default, as CloudKit requires; the schema in docs/cloudkit-schema.ckdb gains them and is deployed before release:3373
gradeWords: the grade’s words as printed, upper-cased: the grade’s line with its number and any qualifier the grader lists taken out (GEM MT,PRISTINE,MINT+, SGC’sPRIorGM), or the grade-word line beside it when the number stands alone; empty when none was read. The reader’s grade words become every word of the six graders’ grade names as their saved scale pages print them: today’s ten, plusexcellent,fr,gm,near,nrmt,perfect,pr,priandvery. So CGC’s legacyPERFECTover10and PSA’sPRover1keep their words, which today’s list would lose. Four of the new words count only where the scales use them, so that a small number on a set line does not become the grade:nearonly beforemint,veryonly beforegood, and PSA’sPRandFRonly as a whole descriptor line or directly before the number PSA gives them, 1 and 1.5. A small number besideEXon a set line is read as a worded grade today, and stays so; no label read here shows it.3216846742qualifier: for PSA, one of OC, ST, PD, OF, MK or MC; for ACE, OC or MC, the two of its listed qualifiers a slabbed card can carry; read when printed with the number, joined (9OC) or apart (9 OC). A joined code is read only from a token on a line that itself carries a grade word, asMINT 9OCdoes; elsewhere a number with letters joined to it is no grade at all, as it is for today’s reader, so the1STof a1ST EDITIONline, which the PSA reading in the app’s own tests carries, is neither grade 1 nor qualifier ST. And where a bare grade number is worded on the same or a neighboring line, it wins over a number with a code joined to it, so a camera line that runs1ST EDITIONintoGEM MTstill gives the 10;MINT 9OCalone still reads as 9 with OC. Among numbers with a code joined to them on one line, the one that directly follows a grade word wins, soMINT 9OCbeats1STon a line that runs1ST EDITIONintoMINT 9OC. ACE says it appends “OC to the grade”; how it prints MC is not stated, so MC is read the same way on an assumption. Other graders get no qualifier list, since none of their pages read here gives one. A code a grader does not list, such as OC on a CGC label, is not a qualifier for that grader and is not dropped: it stays ingradeWords, whether printed joined to the number or apart, with the number taken out, so nothing printed on the grade’s line is lost.163425032designation: AUTHENTIC, ALTERED AUTHENTIC or AUTHENTIC ALTERED, AUTHENTIC ART, read where no number is printed.164
CopyDetails.summary shows them as stored, in capitals as read, and never title-cased: title case would turn PSA’s GEM MT into Gem Mt and SGC’s NM/MT into Nm/Mt, spellings no saved grader page uses, and the scan sheet already sets its headline in capitals (the headline in ScanResultPanel carries .textCase(.uppercase)). The order is fixed: the grader, the grade’s words, the number, the qualifier; or the grader and the designation where no number is printed. So the summaries read PSA MINT 9 OC, CGC PRISTINE 10, CGC MINT+ 9.5 and PSA AUTHENTIC; the order is the app’s, not each label’s, so SGC’s 10 GM reads SGC GM 10. Nothing is inferred and nothing rewritten: a legacy CGC GEM MINT 9.5 reads CGC GEM MINT 9.5, with the note CGC now counts this as Gem Mint 10, which is CGC’s own legacy key, and is never changed into a 10.4575506
The words travel with the label, through four places, and each has to carry them:33727134
CopyDetails.init(label:), inKiradex/Models/CardCopy.swift, copies the three new fields from the label.merged(with:), inKiradex/Scanner/Sighting.swift, rebuilds a label from its grader, grade and certificate when a later look fills in an earlier one. As written today it would drop the words a first look read as soon as a second look merged in. The new fields do not merge one by one: the grade’s statement, its number,gradeWords,qualifieranddesignation, moves as one. A later look that reads neither a number nor a designation has not read the statement, and leaves the earlier one whole. A later look with a different number, or with a designation where the earlier had a number, or the reverse, has read a different statement, and all four fields take its values, empty ones included, soMINT 9 OCfollowed byGEM MT 10isPSA GEM MT 10, neverPSA GEM MT 10 OC. A later designation that contains the earlier one, or is contained in it, keeps the longer: a look that reads onlyAUTHENTICafter one that readALTERED AUTHENTIChas missed a word, not read another outcome. A designation that neither contains nor is contained in the earlier one, such asAUTHENTIC ARTafterAUTHENTIC ALTERED, is a different statement, and replaces it. A later look with the same number, or the same designation, keeps its own words and qualifier where it read them and the earlier look’s where it read none: the reader cannot tell a look that missedOCfrom a label printed without it, and a look that read the letters beside the same number is taken as the fuller reading. The certificate keeps the longer reading, as today, andsetText(item 6) the first.CopyDetails’ memberwise initializer, inCardCopy.swift, gains the three as parameters with empty defaults.CardCopy.details, also inCardCopy.swift, is the computed property whose getter builds aCopyDetailsfrom the stored fields through that initializer and whose setter writes them back. Both gain the three new stored fields. The inspector’s row for a copy showscopy.details.summary, and its identifier iscopy-followed by that summary (CopiesSection, inKiradex/Views/Card/CopyEditor.swift), so a getter left as it is would turn a savedPSA GEM MT 10back intoPSA 10.
Checks:
PSA+MINT 9OC+00000000gives grade 9, qualifier OC and the summaryPSA MINT 9 OC;PSA+MINT 9 OC+00000000gives the same.PSA+AUTHENTIC+00000000gives no grade and designation AUTHENTIC, and the summaryPSA AUTHENTIC.CGC+PRISTINE 10andCGC+GEM MINT 10(each with3732635008) give differentgradeWordsand different summaries,CGC PRISTINE 10andCGC GEM MINT 10, neither with a note.CGC+GEM MINT 9.5+3732635008gives the summaryCGC GEM MINT 9.5with the legacy note;CGC+MINT+ 9.5+3732635008givesCGC MINT+ 9.5with no note.SGC+10 PRIandSGC+10 GM(each with1234567) give differentgradeWords(PRI,GM) and the summariesSGC PRI 10andSGC GM 10, so SGC’s two 10s stay apart.ACE+MINT 9 OC+242548gives grade 9 and qualifier OC, andACE+MINT 9OC+242548the same. No ACE label with OC was among the sixteen measured, and today’s reader would miss it before the qualifier mattered, since it reads no ACE label carrying ACE’s own five- or six-digit number; the Python sketch reads both as this check says.4214ACE+MINT 9 MC+242548gives qualifier MC, on the assumption above about how ACE prints it;CGC+MINT 9 OC+3732635008gives grade 9 and no qualifier, since CGC lists none, withgradeWordsMINT OCand the summaryCGC MINT OC 9;CGC+MINT 9OC+3732635008gives the same. The letters are not a qualifier for CGC, and they are not dropped either: they stay in the grade’s words, with the number taken out, so the summary’s fixed order puts them before the number.42414PSA+CARD NAME+1ST EDITION+GEM MT 10+00000000gives grade 10, no qualifier,gradeWordsGEM MTand the summaryPSA GEM MT 10;CGC+CARD NAME+1ST EDITION+MINT 9+3732635008gives grade 9, no qualifier,gradeWordsMINTand the summaryCGC MINT 9. PSA’s CardFacts heading for a first-edition card ends in1ST EDITION, and the PSA reading the app’s tests type carries the same line, with#4between it and the grade’s words, so those tests do not meet this case. A reader that takes a joined code from any number reads both labels as grade 1, the PSA one with qualifier ST; today’s reader reads both right, because its grade pattern takes no letter after the number, and the Python sketch reads both as this check says.50583214- If the camera runs the two columns together, the bare number still wins:
PSA+CARD NAME 1ST EDITION GEM MT 10+00000000gives grade 10 and no qualifier, and so doesPSA+1ST EDITION GEM MT+10+00000000. With the joined-code rule alone, both lines carry a grade word,1STcounts, and the first of two equally tall numbers is kept, so both read as grade 1 with qualifier ST; today’s reader gives 10 for both. The check asserts only the grade and the qualifier: on a run-together line,gradeWordsholds the rest of that line as read, card text included. Whether the camera ever reads a PSA label’s columns as one line has not been measured.3214 - Run together beside a qualified grade, the code after the grade word wins:
PSA+CARD NAME 1ST EDITION MINT 9OC+00000000gives grade 9 and qualifier OC. Without that rule there is no bare number to prefer,1STis the first of two equally tall numbers with a code joined to them, and the label reads as grade 1 with qualifier ST; today’s reader reads no grade from it, since it takes no letter after the number.3214 CGC+CARD NAME+PERFECT+10+3732635008givesgradeWordsPERFECTand the summaryCGC PERFECT 10;PSA+CARD NAME+PR+1+00000000givesgradeWordsPRandPSA PR 1. Both put the words on a line of their own above the number, the layout of the app’s own PSA test reading.4165814- A set line’s small number is not the grade:
PSA+2007 POKEMON POP SERIES 5+CARD NAME VERY+#4+NM-MT+8+00000000gives grade 8 andgradeWordsNM-MT, andPSA+2019 POKEMON PR 5+CARD NAME+#4+MINT+9+00000000gives grade 9 andgradeWordsMINT, as today’s reader does. Countingveryandprwherever they appear would read both as grade 5.14 - Successive looks, in unit tests of
merged(with:), each pair with the same certificate:PSA MINT 9 OCthenPSA GEM MT 10givesPSA GEM MT 10with no qualifier;GEM MT 10thenMINT 9 OCgivesPSA MINT 9 OC;MINT 9 OCthenMINT 9givesPSA MINT 9 OC;GEM MT 10then a bare10keepsGEM MT;MINT 9 OCthen a look with no grade read keepsPSA MINT 9 OC;MINT 9thenAUTHENTICgives no grade, designation AUTHENTIC andPSA AUTHENTIC;AUTHENTICthenGEM MT 10givesPSA GEM MT 10with no designation;ALTERED AUTHENTICthenAUTHENTICkeepsPSA ALTERED AUTHENTIC;CGC AUTHENTIC ALTEREDthenCGC AUTHENTIC ARTgivesCGC AUTHENTIC ART; andCGC GEM MINT 10thenCGC PRISTINE 10givesCGC PRISTINE 10. No merged label carries both a grade and a designation. The Python sketch runs all ten; under the rule this replaces, each field kept where the later look has one,MINT 9 OCthenGEM MT 10givesPSA GEM MT 10 OC, two more store a designation beside a grade, and theALTERED AUTHENTICpair losesALTERED.7214 - Saved and read back, in
KiradexTests/CopyTests.swift: a copy added withaddCopy(of:details:)from the labelPSA+MINT 9OC+00000000, then read back through a secondModelContexton the same in-memory container, givesgradeWordsMINT, qualifier OC and the summaryPSA MINT 9 OC; one fromPSA+AUTHENTIC+00000000gives designation AUTHENTIC and the summaryPSA AUTHENTIC. This is the check thatCardCopy.detailsstores and returns the words.8133 - A copy saved before the change, with the new fields empty, still reads
PSA 10: the existing summary expectation inaRawCopyKeepsItsCentring, inKiradexTests/CopyTests.swift, passes unchanged.8114 - Existing expectations that change.
aGradedCardCarriesItsLabel, inKiradexTests/ScanSessionTests.swift, compares the whole label with one built from a grader, a grade and a certificate; its reading printsGEM MT 10, so under this item the label also carries thegradeWordsGEM MT, and the expected label gains them (the sketch runs this one and finds it changes so). IntestScanningAGradedCardKeepsItsLabel, inKiradexUITests/KiradexUITests.swift, the fixture printsGEM MTbeside10. If the reader takes them as the grade’s words, as this item means it to, two of its expectations change. The scan sheet’s headline (scan-found-details), which the test expects to containPSA 10, readsPSA GEM MT 10 · Cert 49392218, so the expected text becomesPSA GEM MT 10. The copy’s row, whose identifier is built from the summary, becomescopy-PSA GEM MT 10, so the button the test looks up becomes that. Its expectation thatscan-found-readingsdoes not exist does not change: item 4 keeps that line empty for a graded copy. The sketch does not model the drawn fixture, since its line order depends on how the camera reads the picture.777634757814
3. Offer each grader’s look-up, as a link and only as a link
Change Grader.verificationURL(cert:) and the copy editor’s Look Up at button (in Kiradex/Views/Card/CopyEditor.swift, shown today only when a link exists):3234
| Grader | Link | Button |
|---|---|---|
| PSA | https://www.psacard.com/cert/<n>, unchanged: the form PSA’s own CardFacts page links |
Look Up at PSA |
| CGC | https://www.cgccards.com/certlookup/<n>/, unchanged |
Look Up at CGC |
| TAG | https://my.taggrading.com/card/<n> |
Look Up at TAG |
| ACE | https://acegrading.com/cert/<n> |
Look Up at ACE |
| SGC | https://www.gosgc.com/cert-code-lookup |
Copy Number, Open SGC Look-Up (copies the code first) |
| BGS | https://www.beckett.com/grading/card-lookup |
Copy Number, Open Beckett Look-Up |
Sources for the links: PSA’s own CardFacts links, CGC’s indexed form, TAG’s own cert-search script, ACE’s record pages, SGC’s look-up page and Beckett’s archived look-up.544841121031
Keep PSA’s link unless a phone shows it failing. The app’s PSA link is https://www.psacard.com/cert/<n>, the form PSA’s own CardFacts page uses for every certificate it links (231 links, 201 numbers, none with /psa after the number).325415 The form /cert/<n>/psa rests only on search-index results, which are not saved. The research notes record that both forms answered scripts with a bot check, so neither was seen to reach a record.47 Nothing changes unless a check on a phone shows the current form failing: open https://www.psacard.com/cert/<n> in Safari on a phone with a number the collector owns; if it shows the record, the link stays as it is; only if it does not, and /cert/<n>/psa does, does the link switch. Beckett’s link redirects to its maintenance page until its look-up returns in “Phase 1”.29
The app opens the grader’s page in the browser and never fetches it itself. The research notes record bot checks in front of PSA’s, CGC’s and ACE’s look-ups; the file saved for PSA’s population report is a sign-in page; SGC’s form has a reCAPTCHA; and PSA’s API needs a token made from the collector’s own PSA login.4748491055 For the same reason the app shows no “verified” state of its own: it has looked nothing up.
Checks:
- The button’s action is one function,
Grader.lookUp(cert:), which returns the page to open and the text to copy, if any; the button writes that text to the pasteboard and then opens the page. A unit test of that function asserts each grader’s page for a sample number, including02289(ACE, zero kept) andA1234567(TAG); that SGC’s and BGS’s pages carry no number and their text to copy is the certificate as given (1234567-001,0012345678); and that the other four graders copy nothing. The button shows for any noted number, whatever its shape, and the test asserts that too: a number in another grader’s shape, such as49392218under SGC, still gets SGC’s page and is copied as given. Item 4’s footer, not the button, is what flags a number in the wrong shape. - A new UI test of its own,
testTheGraderPickerOffersEachGradersLookUp, launched with the same arguments astestScanningAGradedCardKeepsItsLabel(-fixtureCatalog,-scanFixture kira1-2,-scanSlab YES), tapsScan, waits for the find as that test does (scan-found-name, thenscan-found-details), then tapsscan-details, where the fixture’s PSA label has already put49392218in the certificate field (the look-up button shows only when a number is noted), sets the Grader picker to SGC and asserts that a button titledCopy Number, Open SGC Look-Upexists; then sets it to BGS and assertsCopy Number, Open Beckett Look-Up. It never tapsscan-have, so the copy is not registered. It does not go intotestScanningAGradedCardKeepsItsLabel, for the reason given in item 1’s keyboard check: the picker writes the scan sheet’s own details, so that test would register a BGS copy, and its look-up of the rowcopy-PSA GEM MT 10(item 2) would fail. No existing expectation changes for this check. It does not tap the button: the tap opens the page throughopenURL, which sends the app to the browser, so what is copied is asserted in the unit test above and not read back from the pasteboard in the UI test.767534 - A script check fails if any Swift file under
Kiradex/callsURLSessionwith a grader’s host (psacard.com, beckett.com, cgccards.com, gosgc.com, taggrading.com, acegrading.com). - The PSA link stays
https://www.psacard.com/cert/<n>(the existing link assertion inaPSALabelGivesGraderGradeAndCertificate, inKiradexTests/ScannerTests.swift, passes unchanged); a switch to/cert/<n>/psaships only with a note in the change’s description naming the phone check, its date, that the current form failed and that the other showed the record.58
4. Say what was and was not read
Each new string has one place, and none repeats what its screen already shows. The scan sheet’s reading line stays what it is today, a line for raw cards only: ScanResultPanel’s readings returns nil for any copy with a grader, so no graded-copy string goes there. Each string comes from a function the view calls, the way the editor’s centering footer comes from CenteringNote.text(for:) today, so a unit test can assert it.75347471
| Situation | Where it goes | Say | Why |
|---|---|---|---|
| A graded copy with its number, read or typed | the copy editor’s footer for a graded copy, after the sentence it shows today | Check the number at PSA before you rely on the label. The scan sheet’s headline already shows the grade and number (PSA MINT 9 OC · Cert 00000000), so this string does not repeat them |
PSA’s guarantee runs through the look-up |
| Grader read, number not | the scan sheet’s headline, after the summary, where the number would be | PSA 10 · Cert not read. Type it from the label, or hold the case closer. |
the number is the key |
| Grader and number read, and neither a grade nor a designation | the scan sheet’s headline, after the number | PSA · Cert 00000000 · Grade not read. Pick it as the label prints it. |
the joined “9OC” loses its grade today |
| A noted number in a shape the grader does not use | the copy editor’s footer for a graded copy | This number doesn't match TAG's certificate format (8 letters and numbers, typically a letter and 7 numbers). Check it against the label. The test is item 1’s own shape for the grader, so the footer shows only for a number the reader would also turn away: for TAG, anything but 8 letters and digits with at least one of each |
TAG’s published shapes: “typically” a letter and 7 numbers, and “a mix of numbers and letters” |
| Nothing read after the label looks | the scan sheet’s reading line for a raw copy, after the centering line in the wording the centering brief gives it, once the looks for a label (ScanSession.looksForALabel) have passed with none |
No grading label read. If this card is in a case, add the grader and number by hand. |
ACE slabs today |
| A number already on another card | the warning toast ScanView shows today for a number already registered, in place of its wording |
PSA 00000000 is already on CARD NAME in your collection. |
the duplicate check looks at one card only |
Sources for the reasons: PSA’s guarantee, the measurement, TAG’s TAGD page and the app’s duplicate check.1141133
What the existing UI tests see. On the fixture label both the grade and the number are read, so this item adds nothing to its headline. In testScanningAGradedCardKeepsItsLabel, the expectations on scan-found-details change only as item 2 says, and the expectation that scan-found-readings does not exist holds as it is. In testScanningACardRegistersIt, a raw card, the two expectations on scan-found-readings ask that it contain up to a 10 and not judged. The first is the centering brief’s to change, not this one’s: that brief drops “Allows up to a” and “ceiling” from the app’s strings, the scan sheet’s line among them, and puts the grader’s published front figure in their place, so this brief adopts that wording for the line, and the expectation becomes front figure, the phrase in that brief’s replacement for “Allows up to a 9” (“Inside PSA’s and SGC’s published front figure for a 9”) and in its wording for a 10 (“within PSA’s published 55/45 front figure for a 10”), which that brief gives in place of “PSA 10 centering”; that the 10 wording is the line a card drawn dead center would carry is my reading. The expectation of not judged stays: that brief does not drop it. This item’s sentence goes after the line whatever its wording, and adds nothing to a graded copy’s sheet.69 The new UI checks of items 1 and 3 change none of these, since each is a test method of its own that never registers a copy; the one check this brief adds inside testScanningAGradedCardKeepsItsLabel, item 6’s, only reads a field and types nothing into it.7675
Keep “verified,” “authentic,” “genuine” and “certified” out of the app’s own voice, outside the designation it is quoting from the label: the app has read text, not checked a record. And keep anything about value out of it.
Checks:
- Unit tests build each situation from synthetic readings or copy details and assert the string from the function that places it.
- A script check fails on “verified” or “authentic” as whole words, in capitals or not, in any Swift string literal under
Kiradex/, with one named exception: the reader’s own designation list inKiradex/Scanner/SlabLabel.swift, where item 2 putsAUTHENTIC,ALTERED AUTHENTIC,AUTHENTIC ALTEREDandAUTHENTIC ART. The check reads string literals only, not code: a plain line search would trip on StoreKit’s.verifiedcase inKiradex/Services/PatronStore.swift, which is code, not copy.82 The designation a summary shows comes from the stored field, not from a literal, and the pickers’ Authentic entries (item 5) live in bundled data, not in Swift. No Swift string literal underKiradex/holds either word today, by a search of the working tree on October 5, 2026, as committed at5a344e3f. The working tree of October 15 adds the literal"Professional Sports Authenticator", PSA’s full name, which a whole-word match passes and a substring match would not; a whole-word search of that tree finds neither word.80 isRegisteredgains a variant that searches everyCardCopyfor the grader and number; a test registersPSA 00000000on one card and expects the warning when the same number is added to another.33
5. Offer the grades each grader gives
The copy editor’s grade picker (the Grade picker in CopyEditor.swift, which today offers CopyEditor.grades, 10 down to 1 in halves, for every grader) takes its list from the grader:34
- PSA: 10, 9, 8.5 down to 2, then 1.5 and 1, with no 9.5, plus Authentic and Altered Authentic, the two outcomes item 2 reads as designations.16
- BGS: halves from 1 to 10, the 10 named Pristine and the 9.5 Gem Mint, as Beckett’s scale names them; the black label is not a grade and is not in the list.89
- CGC: its twenty standard-card grades, Pristine 10 and Gem Mint 10 apart; the designations AU, AA and ART; and the legacy key’s grades, CGC Trading Cards and CSG Gem Mint 9.5 (which CGC counts as Gem Mint 10) and Perfect 10 (a “Retired grade; retains Perfect 10 status”), each marked as legacy, so that an older label can be entered as printed and a legacy 9.5 is never forced into Mint+ 9.5 or Gem Mint 10.4
- SGC: its scale’s grades, 10 PRI and 10 GM apart.6
- TAG: halves with no 9.5, Pristine 10 and Gem Mint 10 apart.7
- ACE: whole grades from 1 to 10.42
Keep the lists as bundled data with the source address and the date read, the way the centering brief keeps its tolerances, so a changed scale is one data edit and a test.69
Check: a test loads the data and asserts that PSA has no 9.5 and has its two designations, ACE has no halves, CGC, SGC and TAG each have a Pristine 10 and a Gem Mint 10 as distinct entries (CGC also has its two legacy Perfect 10s, CGC Trading Cards’ and CSG’s), CGC has AU, AA and ART and its legacy entries each marked as legacy, and every list has a source and a read date.
6. Keep PSA’s set text as printed
No change to the matcher yet. Whenever a PSA label is read, record the label’s set text verbatim in the copy’s existing notes field (CopyDetails.notes and CardCopy.notes), so a map from PSA’s set names to the index’s sets can later be built from real labels. Do not build that map from secondary lists.50533346
Which line is the set text. The first line of the reading that begins with a four-digit year, a space and a letter (^\d{4} [A-Z]). On the fixture label that is 2026 KIRA BASE, the first of the six lines it draws; the fixture’s certificate, 49392218, also begins with four digits but not with a space after them, so it does not count. On the PSA label the app’s tests type, it is 1999 POKEMON GAME. A label with no such line records nothing.785877
How it reaches the copy. SlabLabel carries the line as setText, for PSA only; CopyDetails.init(label:) writes it into notes; and merged(with:) keeps the first look’s where a later look has none, as item 2 has it do for the words. No new stored field is added. The Notes field in CopyEditor has no accessibility identifier today; the change gives it copy-notes, for the check below. Because aGradedCardCarriesItsLabel compares the whole label and its reading begins with 1999 POKEMON GAME, its expected label gains that setText as well as item 2’s words. The Python sketch does not model this item.3372347714
The rule fires on every PSA label, not only on an uncertain match, so that the check below does not depend on how certain the fixture’s match is. On my reading of CardIndex.match(_:), where a match is certain when exactly one card read by its number also has its name read, the fixture card, whose name and full collector number are both drawn on it, matches for certain; a rule limited to uncertain matches would never fire on it. That reading was not run.5378
Check: scanning the fixture label with -scanSlab YES puts 2026 KIRA BASE in the scanned copy’s notes; the UI test testScanningAGradedCardKeepsItsLabel, at the point where it already opens the details (scan-details) and checks the certificate field, also asserts that the field copy-notes holds 2026 KIRA BASE. It only reads the field, types nothing and taps nothing else, so the copy that test goes on to register is the one the scanner read, and the summary its later row look-up depends on does not include the notes.767834
Not in this brief
- Fetching any grader’s record from inside the app. Bot checks, a sign-in page, a reCAPTCHA and account tokens stand in front of PSA’s, CGC’s and SGC’s look-ups, and Beckett’s is offline; ACE’s two records answered normally and no TAG record was tried, and the brief treats those two graders the same way, as links.474810552912
- Judging whether a slab or a label is genuine. The app can say what it read and send the collector to the grader.
- Graders other than the six in
Grader; no pages were read for them. - Prices or population counts in the app. A population report counts slabs, not cards, and is “not an indicator of value or rarity,” in CGC’s words.60
- Grader logos, label colors or slab images, in the app or in anything it shows.
Key Takeaways
If you collect
- Look every slab up by its certificate number at the grader that made it. PSA stands behind its opinions “as reflected on each PSA label”; on my reading, the look-up is how a buyer checks that the opinion still stands, and PSA’s guarantee needs the number to have been active on PSA’s look-up when the claimant bought the card.12
- Read the words, not only the number. PSA’s OC, ST, PD, OF, MK and MC change what a number says; AUTHENTIC may be an altered card; a CGC 9.5 is a legacy Gem Mint (now a 10) or a current Mint+ (below one); CGC, SGC and TAG grade a Pristine 10 apart from a Gem Mint 10; and at Beckett, whose only 10 is Pristine and whose Gem Mint is a 9.5, the black label marks a Pristine 10 with four 10 subgrades.161456789
- Type the whole number. SGC’s green and white labels take all eleven characters, hyphen included, and TAG’s numbers carry a letter.1011
- Check only what the grader publishes: PSA’s LightHouse logo, fugitive ink and UV pattern; CGC’s microprinting, UV ink and holographic foil; TAG’s Proof Mark with its app; ACE’s address when a scanned label opens. For Beckett and SGC the look-up is the check.242511282627
- Read a population report as a count of slabs, not of cards and not of value.5660
If you build the app
- Find the grader first, then read the number in that grader’s shape, and let the certificate field take letters and a hyphen; today’s reader reads 3 of 16 synthetic labels built from the published formats whole, and its single “7 to 10 digits” rule cuts SGC’s and TAG’s numbers short and, because ACE’s own records are shorter, misses every ACE slab numbered as those records are.14153234
- A wrong certificate is worse than a missing one: store certificates as strings, zeros and hyphens included, and flag a number whose shape the grader does not use.141011
- Store the grade’s words, the qualifier and the designation beside the number; a grader, a number and a certificate cannot tell a Pristine 10 from a Gem Mint 10, or PSA’s 9 from its 9 OC.3314
- Link to each grader’s own look-up and never fetch it: bot checks, a sign-in page, a reCAPTCHA and account tokens stand in front of PSA’s, CGC’s and SGC’s look-ups, and Beckett’s is offline.4748105529
- Date a label change only from the grader’s own announcement: this post’s own plan dated PSA’s LightHouse label 2023, and PSA’s article dates it June 14, 2017; the 2023 redesign was CGC’s.1923
FAQ
How do I verify a PSA, CGC or Beckett slab?
Look the certificate number up at the grader that made the slab. PSA’s look-up is at psacard.com/cert and its app can scan the label’s barcode; CGC’s is at cgccards.com/certlookup, and its label’s QR code looks the card up on CGC’s site; Beckett’s card look-up is a form with a choice of BGS, BVG or BCCG, offline at the time of writing and due back in Beckett’s first phase of return. PSA’s guarantee depends on the number having been active on its look-up when the claimant bought the card, and excludes tampered or counterfeit holders and labels “regardless of certification status”.38242531291
What does OC mean on a PSA label?
Off center. PSA’s standards say cards that are off center “will either by designated “OC” or will have a numerical grade that reflects the minimum centering allowed for the grade,” and its glossary’s example is a card meeting the standard for Mint 9 except for centering, which “would be designated Mint 9oc.” PSA defines five more: ST (staining), PD (print defect) and OF (out of focus) under the same either-or rule, and MK (marks) and MC (miscut), which go on “Any and all cards” with writing or an atypical cut.163
What does “Authentic” mean on a graded card’s label?
At PSA, “AUTHENTIC” means “PSA is only certifying that the item is genuine, without a numerical grade”; in PSA’s summary, the item “is real but nothing more.” PSA names the reasons a card may get it: an alteration, “a major defect,” or a submitter’s request. Its no-grade codes for an undersized card (N6) and a factory miscut (N8) can lead to it too, and five more, for trimming, restoration, recoloration, altered stock and cleaning, can lead to “Authentic Altered”; in each case only at the grader’s discretion and if the submitter asks for it on the form. PSA’s guarantee says items labeled “Authentic” “must be viewed as potentially interchangeable with “Authentic Altered,”” because PSA “does not always print the term “Altered” on the label itself”; its standards page, for the purposes of that guarantee, calls the “Authentic” only designation “interchangeable” with Authentic Altered, without the “potentially”. At CGC, “Authentic AU” is for cards that are authentic and unaltered but cannot get a numeric grade, and Authentic Altered is printed in the grade box. At ACE, by its scale, an altered card is not encapsulated at all: it “will be returned raw.”161442
Is a CGC 9.5 the same as a CGC 10?
It depends on the words beside it. A legacy “Gem Mint 9.5” from CGC Trading Cards or CSG is “exactly equivalent to Gem Mint 10” under CGC’s updated scale, and CGC’s look-up, population report and registry count it as a 10. A current “Mint+ 9.5” is a grade below Gem Mint 10.2354
When did PSA change its label?
PSA’s own articles date six changes: February 12, 2008 (the grade number under the grade words), November 12, 2013 (a hologram on the back of the insert, with a new holder), June 14, 2017 (the LightHouse label, with fugitive ink, a UV logo pattern and a QR code), January 1, 2019 (red labels for PSA/DNA encapsulations too), May 14, 2024 (a new holder, starting with sports cards) and June 19, 2024 (a blue label for autograph-only items). I found no PSA label redesign dated 2023.171819202122
How many digits is a TAG, SGC or ACE certificate number?
SGC: “For black labels, enter all 7 digits. For green and white labels, enter all 11 characters (XXXXXXX-XXX).” TAG: “typically 1 Letter followed by 7 Numbers,” and its help center says its numbers “are a mix of numbers and letters which are generated randomly.” No ACE page read here gives a format; its own records carry six and five digits, the second zero-padded.1011651213
Why is Beckett’s certificate look-up down?
Beckett’s status page, dated October 2, 2026, says it “detected suspicious technical activity and, out of caution, took our platforms offline,” and that “Core certification, grade records, and historical population databases remain intact and uncompromised”; the look-up is in its first phase of return. Archive captures show the site already offline on September 19, 2026, and its look-up live on August 19.293031
Related on this site: How Card Centering Is Judged, and How to Measure It is the companion post on the same six graders: their published centering tolerances and the gauge in Kiradex that measures them; Pokémon Card Rarity and Set Symbols, English and Japanese reads the card’s own bottom line, the part a label’s set and number summarize; Prepare Your App for iPhone Duo is the walk-through that introduced Kiradex; and Pixel-Art Worlds on iPhone, Pixel-Art People: Characters and a Creator on iPhone and Pixel-Art Structures: Houses, Halls and Interiors on iPhone cover Kiradex World, the pixel town where the collection lives.
Sources
-
Collectors Holdings (PSA), “PSA Guarantee” (financial guarantee), https://www.psacard.com/financialguarantee, fetched October 5, 2026 and saved as
psa-guarantee.txtin the author’s evidence folder for this post. Carries, in its opening paragraph, PSA’s “assurance that we stand behind our opinions as to the authenticity and/or grade of each item we encapsulate, as reflected on each PSA label”; the “active certification number on the cert lookup feature” condition, the exclusion of tampered or counterfeit holders and labels “regardless of certification status,” the “unscrupulous people” passage, the “mechanical errors” clause (a label date that “does not match the date printed on the Item”; a mislabel of “specification, set, variation, or parallel”), and the “Authentic” and “Authentic Altered” passage (the Guarantee “does not differentiate between” them, and items labeled “Authentic” “must be viewed as potentially interchangeable with “Authentic Altered”“). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
The six graders’ look-ups, as read for this post: PSA, https://www.psacard.com/cert (linked from 22 of the 23 PSA pages saved for this post, all but the population-report file; counted by
r1_psa_cert_links.py); Beckett, https://www.beckett.com/grading/card-lookup (Wayback Machine capture of August 19, 2026); CGC, https://www.cgccards.com/certlookup/; SGC, https://www.gosgc.com/cert-code-lookup (rendered October 5, 2026); TAG, https://taggrading.com/pages/cert-search; ACE, https://acegrading.com/cert/. Each is cited with its own page below. ↩↩↩ -
Collectors Holdings (PSA), “Collecting Lingo” glossary, https://www.psacard.com/Resources/Lingo, fetched October 5, 2026 (
psa-lingo-20261005.txt; identical to the October 4 copy the centering post used). Carries the OC entry and its example, “would be designated Mint 9oc,” and the Certification Number entry, “PSA gives every graded card a certification number. It can be found on the PSA label,” which does not say which side. ↩↩↩↩↩↩↩↩↩↩ -
CGC Cards, “Grading Scale,” https://www.cgccards.com/card-grading/grading-scale/, fetched October 5, 2026 (
cgc-grading-scale-20261005.txt; identical to the October 4 copy). Carries the Pristine 10 label section (“flawless under 10-times magnification”) and grade text (“virtually flawless card to the naked eye”), the twenty standard-card grades with Mint+ 9.5, the designations Authentic AU, Authentic Altered AA and Authentic ART, and the Legacy Grade Key. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
CGC Cards help center, “CGC Cards Merger” FAQ, https://www.cgccards.com/about/help-center-faqs/about-cgc-cards/cgc-cards-merger/, fetched October 5, 2026 (
cgc-faq-merger.txt). Carries, at line 210, that “the original CGC Trading Cards and CSG labels are no longer being offered” and that such cards “must be reholdered with the CGC Cards label”; and “they will be considered Gem Mint 10s in Verify CGC Cards Certification, the CGC Cards Population Report and the CGC Cards Registry.” ↩↩↩↩↩↩↩↩↩↩ -
SGC, “Grading Scale,” https://gosgc.com/card-grading/scale, all twenty tabs clicked and saved by the centering post’s
render_sgc_tabs.py(sgc-grade-tabs.txt, rendered October 5, 2026, 05:22 UTC); the rendered page compared unchanged with a second render of October 5 (sgc-scale-20261005.rendered.txt). Carries the grade names “10 PRI” (Pristine), “10 GM” (quality “GEM”), 9.5 MINT+, 8.5 NM/MT+, 8 with the quality NM/MT, 7 NRMT and the rest. ↩↩↩↩↩↩↩↩↩↩↩ -
TAG Grading, “Grading Scale,” https://taggrading.com/pages/scale, fetched October 5, 2026 (
tag-scale-20261005.txt; identical to the October 4 copy), with the rubric’s score bands (tag-rubric-extracted.txt, from https://taggrading.com/pages/rubric, October 4, 2026). Carries Pristine 10 at 990 to 1000, Gem Mint 10 at 950 to 989, and “Half points are included on every grade level except for between 9 and 10.” ↩↩↩↩↩↩↩↩↩ -
Beckett Grading Services, “Grading Scale,” https://www.beckett.com/grading/scale, read from the Wayback Machine capture of May 3, 2026, https://web.archive.org/web/20260503161916/https://www.beckett.com/grading/scale, saved by the centering post (
bgs-grading-scale-wayback-20260503.txt). Carries “Pristine 10” and “Gem Mint 9.5” as the top two grades, with no other 10, down to “Poor 1.” ↩↩↩↩↩↩↩↩↩↩↩ -
Beckett, “Introducing BGS Black” (news post dated November 28, 2014), https://www.beckett.com/news/introducing-bgs-black/, read from the Wayback Machine capture of August 16, 2022, https://web.archive.org/web/20220816001507/https://www.beckett.com/news/introducing-bgs-black/ (
bgs-news-introducing-black-wayback-20220816.txt). Carries “the elusive BGS Pristine 10,” the quad-10 black label, “for modern cards only,” and “not valid for any BVG cards (1980 and older).” Its comment thread holds, at line 451 of the saved text, a comment signed “Mike” and dated November 29, 2014: “BGS 9.5’s and 10’s will always be Gold,” unless a 10 has four 10 subgrades, which it calls the black label. The page does not identify the commenter; the same name signs comments at lines 405 and 423, the first answering a relabeling question for BGS, the second praising BGS. No saved Beckett page mentions a silver label. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
SGC, “Cert Code Lookup,” https://www.gosgc.com/cert-code-lookup, rendered in headless Chromium on October 5, 2026, 14:14 UTC (
sgc-cert-lookup.rendered.txtand.html; the HTML carries the reCAPTCHA widget, and the form was not used). Carries “For black labels, enter all 7 digits. For green and white labels, enter all 11 characters (XXXXXXX-XXX).” Footer: “SGC, LLC.” ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
TAG Grading, “TAGD” page (headed “YOUR CARDS ARE TAG’D”), https://taggrading.com/pages/tagd, fetched October 5, 2026 (
tag-tagd.txt). Carries “locate the card’s CERT# (left of the QR code),” “The CERT# format is typically 1 Letter followed by 7 Numbers,” and the Proof Mark steps, including “Every Proof Mark is confirmed & scanned before leaving the TAG facility.” ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
ACE Grading, certificate record #242548, https://acegrading.com/cert/242548, fetched October 5, 2026 with a normal response (
ace-cert-242548.txt). Carries the record fields “Label,” “Name,” “Release Year,” “Set,” “Number,” “Language” and “Variant,” the grade “MINT 9,” four subgrades, and population by label type (Standard, Colour Match, Ace). Card names on the record are not reproduced here. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
ACE Grading, certificate record #02289, https://acegrading.com/cert/02289, fetched October 5, 2026 with a normal response (
ace-cert-02289.txt). Carries a five-digit, zero-padded number, the grade “GEM MINT 10,” four subgrades, and “Additional Information” in place of “Variant” for a promo. ↩↩↩↩↩↩↩↩ -
Measurement:
measure_slab_parser.py, outputmeasure_slab_parser.out.txt, in the author’s evidence folder for this post. A line-for-line Python copy ofSlabLabel.init?(reading:)andGrader.verificationURL(cert:)(the Kiradex repository’sKiradex/Scanner/SlabLabel.swift, lines 54 to 102 and 41 to 49; every Kiradex line named in this note was re-read October 5, 2026 at 16:53 and again at 17:15 PDT, with HEAD at commitcf3beb1e, and at 17:28 and 17:29 PDT, with HEAD at the two commits after it,1a2c2e9dand5a344e3f, every line unchanged, while the tree was being edited that day), checked first against the app’s tests:KiradexTests/ScannerTests.swift(lines 243 to 277) andKiradexTests/ScanSessionTests.swift(lines 196 to 201) read a label eight times between them, and the TAG TEAM reading is in both files (ScannerTests line 276, ScanSessionTests line 199), so the script runs seven distinct readings, all of which pass. Not in that check: the look-up address asserted at ScannerTests line 250, and the label expectation ofaGradedCardCarriesItsLabel(ScanSessionTests line 192), which compares the whole label read through the scanner; the output’s section 4d runs that one under the brief’s rules. The script then runs sixteen synthetic labels made from each grader’s published certificate format and grade wording, with “CARD NAME” and “SET NAME” placeholders. Its runs: on October 5, 2026, the research’s first run; a re-run for the draft, identical to the saved output (checked withcmp); and re-runs that compared only the grader for the ACE expectation, sinceScanSessionTests.swiftline 200 asserts only?.grader == .ace; gave the two SGC labels SGC’s own grade names (10 GM,NM/MT 8); added section 4, a Python sketch of the brief’s items 1 and 2 kept apart from sections 1 to 3, with its summary rule and checks; added section 4d for two existing expectations on the whole label or the summary; and wrote out the rule for a two-letter code a grader does not list. On October 15, 2026, re-runs checked the brief’s later rules: joined codes and a1ST EDITIONline, including lines the camera runs together; SGC codes read with a malformed tail, another dash or spaces, or returned as two lines; grade words read from the six graders’ saved scale pages and counted only where those scales use them; and a section 4e that merges successive looks. Each earlier version of the script and its output is kept beside it, and each run from the addition of section 4 on was repeated from a scratch copy with the same output, byte for byte. Under the sketch: 16 of 16 labels right, all 39 of the brief’s check labels as it says, 15 of 15 summary strings, 10 of 10 successive looks merged as the brief says, 6 of the 7 port-check expectations held (the seventh is the line 200 change), and in section 4d the line 192 expectation changes whileCopyTests.swiftline 175 holds. What today’s reader returns for the sixteen labels is the same in every run. The Swift was not executed; the inputs are typed text, not camera readings; label layouts are not published, so line order is assumed.K4X93B27is a made-up instance of TAG’s “a mix of numbers and letters”. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Author’s arithmetic:
arith.py, outputarith.out.txt, kept beside the post’s draft, run October 5, 2026 and re-run October 15, 2026. Derives every count and share in the post from files on disk, over one stated denominator for the reader run (sixteen synthetic labels): 3 whole (18.75%), 9 with grader, certificate and grade right (56.25%), 6 of those with a meaning-changing word lost, 7 wrong (43.75%: 1 grade lost, 2 certificates cut short, 4 slabs missed, 25%), and per grader as printed; it also asserts that the output’s own summary line agrees. From the saved pages it counts PSA’s six qualifiers and nine no-grade codes, PSA’s twelve grade descriptors, CGC’s twenty standard-card grades, TAG’s seven decertification reasons (the list items intag-decertified.html), and the ten unchanged page pairs; and it computes the intervals between dated events (31 days between Beckett’s August 19 and September 19 captures; 13 days from September 19 to the October 2 notice). It also sorts PSA’s nine no-grade codes by what each code’s text says (5 can be encapsulated as “Authentic Altered,” 2 as “Authentic,” 1 never, 1 not unless the decision is reversed), re-reads the brief-rules counts from section 4 of the measurement output (4a apart from 4d; 39 check labels, 16 for item 1 and 23 for item 2; 15 summary strings; 10 successive-look checks in 4e), and counts port checks in section 1 only. Last run October 15, 2026; its output is identical under hash seeds 0, 1 and 7. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Collectors Holdings (PSA), “PSA Grading Standards,” https://www.psacard.com/gradingstandards. The grade list is a carousel; its texts live in a message bundle the page loads, saved by the centering post on October 4, 2026 (
psa-grade-messages-1.json, a Next.js chunk served from psacard.com), from whichextract_psa_messages.pyprinted the qualifier, no-grade, “Authentic” and half-point texts intopsa-qualifiers-extracted.txt(re-run twice on October 5, 2026, each time byte-identical, by SHA-256, to the copy saved before any re-run). The grade descriptors (GEM-MT to PR, and PR-FR) are the bundle’sdescriptorvalues. The plain page fetched October 5 (psa-gradingstandards-20261005.txt, unchanged from October 4) carries the same nine no-grade codes, N1 to N9, with the same encapsulation clauses. Carries the AUTHENTIC (N0) entry with its reasons, “real but nothing more,” and its statement that the “Authentic” only designation “is to be considered interchangeable with “Authentic Altered”” for the purposes of the PSA Financial Grade Guarantee (the bundle’sauthentic.description1anddescription2); the ALTERED AUTHENTIC (AA) entry with “space permitting”; the heading “If your card is returned without a numeric grade in a card saver sleeve”; and, code by code, “can qualify for encapsulation as “Authentic Altered”” (N1, N2, N3, N5, N7), “as “Authentic”” (N6, N8), “would never qualify” (N4) and “does not qualify” with “could be reversed upon resubmittal” (N9). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
PSA, “UPDATE: New PSA Labels,” February 12, 2008, https://www.psacard.com/articles/articleview/5242/update-new-psa-labels, fetched October 5, 2026 (
psa-article-5242-new-labels.txt). Carries the half-point reason for the change, “the same general information,” and the grade number “directly below the description of the grade (NM-MT) on the right side of the label.” ↩↩↩↩↩↩↩↩↩ -
PSA, “PSA Introduces Safety and Security Improvements to Its Holders,” November 12, 2013, https://www.psacard.com/Articles/ArticleView/7946/psa-introduces-safety-security-improvements-its-holders, fetched October 5, 2026 (
psa-article-7946-holder-security.txt). Carries the holder whose top piece “envelops the bottom” and the insert label’s “reflective hologram” replacing “the simple, silver foil stamp”. ↩↩↩↩↩ -
PSA, “PSA Labels Get New Look, New Technology,” June 14, 2017, https://www.psacard.com/articles/articleview/9234/psa-labels-get-new-look-technology, fetched October 5, 2026 (saved as
psa-label-2023-article.txt, a file name that predates the date check; the article’s own date is June 14, 2017). Carries the red border kept, “fugitive ink,” the front hologram upgraded to Lighthouse technology (“Gone are the days of standard holograms”), the UV logo pattern, the QR code on the back, the fugitive-ink explanation, and “other covert security features.” ↩↩↩↩↩↩↩↩↩ -
Terry Melia, PSA, “PSA News Update: PSA Moves to Red Labels Across the Board,” February 15, 2019, https://www.psacard.com/articles/articleview/9801/psa-news-update-moves-red-labels-across-board, fetched October 5, 2026 (
psa-red-labels.txt). Carries the change effective January 1, 2019 after “20 years of using blue labels,” the “generic description of the item (i.e., TRADING CARD),” and the ‘trading card’ test. ↩↩↩↩↩↩↩↩↩ -
PSA, “Meet The New Standard,” May 14, 2024, https://www.psacard.com/articles/articleview/11060/meet-the-new-standard, fetched October 5, 2026 (
psa-article-11060-new-holder.txt). Carries “Starting with sports card submissions this May with plans for a wider rollout” (line 61), the new polymer, “20% heavier,” and “no Mylar, no sleeve”; the article does not describe a label change. ↩↩↩↩↩↩ -
PSA, “New Blue PSA Label for Autograph-Only Authentication,” June 5, 2024, https://www.psacard.com/articles/articleview/11062/new-blue-psa-label-for-autograph-only-authentication, fetched October 5, 2026 (
psa-article-11062-blue-label.txt). Carries “Beginning June 19” and the red and blue label definitions. ↩↩↩↩↩↩↩↩↩↩↩ -
Certified Collectibles Group, “CGC Trading Cards and CSG Will Combine to Become the World’s Second-largest Card Grading Service,” June 20, 2023, https://www.cgccomics.com/news/article/11754/cgc-cards-merger/ (the saved page’s canonical address is on cgcgrading.com), fetched October 5, 2026 (
cgc-merger-2023.txt). Carries “In July,” the “sleek new label,” what the label provides, the gold Pristine 10 label, Gem Mint 9.5 as “exactly equivalent to Gem Mint 10,” the end of Perfect 10 and of Sub-Grades, and the reholder offer under which “any cards with a grade of Gem Mint 9.5 will receive the CGC Cards Gem Mint 10 grade” (line 75). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Collectors Holdings (PSA), “PSA Security,” https://www.psacard.com/security, fetched October 5, 2026 (
psa-security.txt). Carries the LightHouse label’s front and back features, “In 2017, PSA enhanced the security features found on the label used inside the PSA holder,” and the link to psacard.com/cert. ↩↩↩↩↩↩↩↩↩↩↩↩ -
CGC Cards, “Holder and Label,” https://www.cgccards.com/card-grading/holder-label/, fetched October 5, 2026 (
cgc-holder-label.txt). Carries “microprinting, UV ink, holographic foil and a unique certification number and barcode,” the “ultrasonically-welded” case that “resists impacts and tampering,” and the QR code on the back of the label; it does not say which side carries the certificate number. ↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Beckett Grading Services, “Grading FAQ,” https://www.beckett.com/grading/faq, read from the Wayback Machine capture of March 26, 2025, https://web.archive.org/web/20250326181354/https://www.beckett.com/grading/faq, saved by the centering post (
bgs-faq-wayback-20250326.txt). Carries the label description, “the 4 sub grades on the front label of the card holder,” the typographical-error dispute rule, the one-sentence security statement, and the population report paragraph. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
SGC pages rendered October 5, 2026 and read for label fields and security features, with none found: the grading scale (
sgc-scale-20261005.rendered.txt), TCG services (sgc-tcg-services.rendered.txt), card grading (sgc-card-grading.rendered.txt), the app page (sgc-app.rendered.txt), collector support (sgc-collector-support.rendered.txt) and the population report (sgc-pop-report.rendered.txt). ↩↩↩↩↩ -
ACE Grading, “Authentication,” https://acegrading.com/auth, fetched October 5, 2026 (
ace-auth.txt). Carries “Please check the URL in your browser,” “https://acegrading.com” and “When scanning our authentication labels.” It names the address a scanned label should open; it does not say the label prints the address. ↩↩↩↩↩↩↩↩↩ -
Beckett, “Tech Updates,” dated October 2nd, 2026, https://maintenance.beckett.com/techupdates, fetched October 5, 2026 (
bgs-techupdates-20261005.txt; unchanged from the October 4 copy). Carries the “suspicious technical activity” sentence, “The extended downtime,” the intact certification and population records, and the three phases, the first being “Customer Accounts, Online Submission Center, Certificate Look-up and Pop Reports”. ↩↩↩↩↩↩↩↩↩↩↩↩ -
Beckett maintenance page, https://maintenance.beckett.com/, read from the Wayback Machine capture of September 19, 2026, https://web.archive.org/web/20260919125301/https://maintenance.beckett.com/, fetched with curl after the archive rate-limited the first fetcher, converted by
html2txt.py(bgs-maintenance-wayback-20260919.txt). Carries “Beckett’s digital platforms, including Beckett.com and the Beckett mobile app, remain temporarily offline while we complete infrastructure enhancements” and, under “Which grading services are currently available?”, “Base (with subgrades), Standard, and Express are currently available through the temporary submission form,” with “Availability may change”. It does not say whether Standard and Express labels carry subgrades. ↩↩↩↩↩↩↩ -
Beckett, “Beckett Graded Card Lookup - BGS | BVG | BCCG,” https://www.beckett.com/grading/card-lookup, read from the Wayback Machine capture of August 19, 2026, https://web.archive.org/web/20260819092524/https://www.beckett.com/grading/card-lookup (
bgs-card-lookup-wayback-20260819.txtand.html, whose form fields areitem_typeanditem_id). Carries “Verify the validity of Beckett certificates by entering the cert number,” the BGS, BVG and BCCG choice, and the invitation to link from auction ads. ↩↩↩↩↩↩↩↩↩↩↩ -
Kiradex,
Kiradex/Scanner/SlabLabel.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 4 to 21 (the six graders and their names), 23 to 33 (the marks), 35 to 39 (isAlsoCardText, true for the whole of TAG and of ACE, with its comment), 41 to 49 (verificationURL(cert:), PSA and CGC only), 54 to 102 (SlabLabelandinit?(reading:)), 60 to 61 (the grade words), 73 (the text split at anything but a letter, a digit or a period, then folded), 75 to 79 (the certificate pattern), 81 to 84 (the first grader with a mark wins, and TAG or ACE only whencertNumber != nil), 87 to 101 (the grade; at 95 its pattern, which takes no letter, digit, period or slash after the number, and at 101 the tallest worded number, the first of equals kept; lines 54 to 102 re-read October 15, 2026 as committed at5a344e3f, from the repository’s stored objects, with no git command run). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Kiradex,
Kiradex/Models/CardCopy.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): line 64 (CopyDetails.notes), lines 69 to 73 (CopyDetails.init(label:), which copies the grader, grade and certificate), 75 to 86 (CopyDetails’ memberwise initializer), 91 to 106 (CopyDetails.summary, “PSA 10”; line 95 builds the grader’s name and the number, or the name alone), 110 to 113 (gradeText), 133 to 138 (graderRaw,grade“1 to 10 in halves; 0 when there is none,”certNumberandnotes), 153 to 175 (CardCopy.details: the getter, 154 to 164, builds aCopyDetailsfrom the stored fields through the memberwise initializer, and the setter, 165 to 174, writes them back), 189 to 194 (isRegistered, which looks at one card’s copies). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Kiradex,
Kiradex/Views/Card/CopyEditor.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 9 (@Binding var details), 16 to 17 (grades, 10 to 1 in halves), 41 to 45 (theGraderpicker, bound todetails.grader), 46 to 51 (theGradepicker and “Not noted”), 52 to 54 (the certificate field,.keyboardType(.numberPad)at line 53, identifiercopy-certificateat 54), 55 to 59 (the “Look Up at” button, shown only when a number is noted and a link exists, which callsopenURL), 70 to 74 (the footer, whose graded-copy sentence is at 73), 86 to 87 (the Notes field, with no accessibility identifier), 117 to 122 (CenteringNote.text(for:), the centering footer’s text), 124 to 195 (CopiesSection), 156 and 166 (each copy’s row showscopy.details.summary, and its identifier iscopy-followed by that summary), 158 to 161 (the row’s “Cert” and number). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Collectors Holdings (PSA), “FAQ,” https://www.psacard.com/support/faq, fetched October 5, 2026 (
psa-faq.txt). Carries the tamper-evident definition and “Since 1991,” the imaging of cards “to its online Certification Verification site,” free label corrections, the app’s text search for “the unique number found on your PSA-graded label,” PSA/DNA’s autograph sticker with “a unique, six-digit, alphanumeric certification number” (line 223), and the “No Grade” entry: items rejected for N1 to N5 or N7 “will be returned not encapsulated,” and N6, N8 or N9 items “will not be charged grading.” ↩↩↩↩↩↩↩↩↩↩ -
CGC Trading Cards, “CGC Trading Cards Holder,” July 13, 2020, https://www.cgccards.com/news/article/8436/cgc-trading-cards-holder/ (canonical address on cgcgrading.com), fetched October 5, 2026 (
cgc-tc-holder-2020.txt). Carries Sub-Grades “If requested,” “On the back of the label, a unique certification number identifies a card” (the only saved CGC page that says which side carries the number), and the QR code to “CGCcards.com/verify.” ↩↩↩↩↩↩↩↩↩↩↩ -
TAG Grading help center, “What Are The Steps of TAG’s Grading Process?,” https://help.taggrading.com/en/articles/10091666-what-are-the-steps-of-tag-s-grading-process, fetched October 5, 2026 (
tag-help-process.txt). Carries, at the purchase-and-submission step, “Unique ID numbers are assigned to both the cards and the order in this step” (it does not say this ID is the certificate number); the “UV-cured text inside the slab” and its QR code; and the image-processing stage that generates “overall scores for the card on a 1-10 and 1000-point TAG Score scale.” ↩↩↩↩ -
Collectors Holdings (PSA), communications page, https://www.psacard.com/communication, fetched October 5, 2026 (
psa-communication.txt). Carries the grading process steps (Order ID stickers, research, LightHouse labels printed, the sonic seal) and an undated entry saying the Certification Verification page and PSA app “allow customers to scan the barcode on their item and verify its authenticity.” ↩↩↩↩↩ -
TAG Grading, “Decertified,” https://taggrading.com/pages/decertified, fetched October 5, 2026 (
tag-decertified.txtand.html). Carries “This TAG Certification number is no longer active.” and a list of seven reasons. The research notes for this post counted six; the saved page’s list has seven items, “Ownership disputed or flagged as stolen” among them, and the post follows the page. ↩↩↩ -
ACE Grading, home page, https://acegrading.com/, fetched October 5, 2026 (
ace-home.txt). Carries the Standard, Colour Match and Ace labels, “Ace Labels are hand drawn exquisite addons for cards, which enhance the overall appearance of a collectible,” and the menu entry “Lookup an Ace Grading graded collectible by certification number.” ↩↩↩↩ -
TAG Grading, “Cert Search,” https://taggrading.com/pages/cert-search, fetched October 5, 2026 (
tag-cert-search.txtand.html). Carries “Enter any card’s 8 digit CERT #,” and in the page’s own script,const TAG = "https://my.taggrading.com/card/";. No record was fetched. ↩↩↩↩↩↩↩↩ -
ACE Grading, “Grading Scale,” https://acegrading.com/grading-scale, fetched October 4, 2026 by the centering post (
ace-grading-scale.txt) and again October 5 (ace-grading-scale-20261005.txt, unchanged). Carries whole grades from “10 - GEM MINT” to “1 - POOR”; the qualifiers MC and OC, with the Off-Center modifier “appending OC to the grade” and the miscut card that “can not fit in the Ace slab” being “sent back raw”; and the Altered, Counterfeit and Questionable Authenticity outcomes, each “will not be encapsulated and will be returned raw.” ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Not found or not reachable on October 5, 2026, from the research notes for this post: a field list for PSA’s label (the fields are inferred from PSA’s guarantee, the 2008 article and a CardFacts heading); a PSA rule for naming sets; a certificate format for PSA’s card labels (PSA’s FAQ gives a format only for PSA/DNA’s autograph stickers), or from Beckett, CGC or ACE; Beckett’s certificate length, label colors other than black (beyond one 2014 comment under its black-label post), and current layout; SGC’s label fields and security features; ACE’s label security beyond the address check; any PSA label change dated 2023; and any PSA date for labels before February 12, 2008. ↩↩↩
-
Figures: drawn by
make_figures.py(withsvgkit.py), the figure scripts kept beside the post’s draft, October 5, 2026. The field schematic checks each field’s sources against a verbatim fragment of the saved grader page before drawing and stops if one is missing; the reader grid and the certificate-shape grid are parsed frommeasure_slab_parser.out.txt; the timeline checks every date against a verbatim fragment of the grader’s page, and its note gives PSA’s January 1, 2019 change as reported in the article of February 15, 2019, the date that article carries, not as an announcement date. No logo, label art, slab photograph, card image or real card name is used; every label is generic boxes and placeholder text. ↩↩↩↩↩↩ -
Research notes for this post, compiled October 5, 2026: every page fetched that day (UTC) and saved as HTML and text, or rendered in headless Chromium where the page builds its text in a script (SGC); the centering post’s saved pages reused with their October 4 date; publisher identity checked from each page’s footer or legal text before quoting (PSA “© 2026 Collectors Holdings, Inc.”; CGC “Certified Guaranty Company, LLC” and “CGC is part of the Certified Collectibles Group”; SGC “SGC, LLC”; TAG “Technical Authentication & Grading, LLC”; ACE “Ace Grading ® Ltd,” registered in England and Wales); and the HTTP status of each request as recorded at fetch time, including the redirects (302) of beckett.com’s grading pages to maintenance.beckett.com on October 5 (the centering post saved the same redirect on October 4 as
bgs-live-maintenance.txt). ↩↩↩↩ -
Leads only, not relied on for any fact in this post: collector-tool and seller sites with grader-like names returned by searches (among them cardgrade.io, pregradecards.com, figoca.com, blacklabelgrading.com, banktcg.com and allvintagecards.com), secondary descriptions of Beckett’s gold and silver labels (https://allvintagecards.com/beckett-card-grading-guide/) and of SGC’s holder and labels (https://hobbycardindex.com/guides/sgc-grading-guide/), and a collector’s numbering of PSA “label styles” (https://www.banktcg.com/tools/psa-label-museum), all seen October 5, 2026. ↩↩↩↩↩
-
PSA’s certificate and population pages, requested October 5, 2026: https://www.psacard.com/cert, https://www.psacard.com/cert/92176757/psa (an address of the form seen in search results, titled “Cert Verification” plus the number there) and https://www.psacard.com/pop each answered HTTP 403 with a Cloudflare challenge page, as recorded in the research notes; nothing was done to get past it, and the pages were not reached. The folder keeps no copy of any of those challenge responses. The one file saved under the population report’s name,
psa-pop.html(21,219 bytes), is not the report and not a challenge page: by its own contents it is PSA’s sign-in page. Its router state carries the routesignin?b=psa&r=followed by https://www.psacard.com/pop, URL-encoded twice; it loads the page scriptapp/(auth)/signin/page-3fb4febd59cd3148.jsand aSignInLayout; it has no title and no visible text; and it is the one saved PSA page with no link to /cert. Reading therparameter as the address to return to after signing in is the author’s reading. Whether /pop answered 403 or redirected to sign-in at the moment the notes recorded it cannot be told from the folder; either way the report was not read. ↩↩↩↩↩↩↩↩↩↩↩ -
CGC Cards’ look-up, requested October 5, 2026: https://www.cgccards.com/certlookup/ and https://www.cgccards.com/certlookup/3732635008/ (an address of the form seen in search indexes, titled “Verify Trading Card Certification”) answered HTTP 403 with a Cloudflare challenge, as recorded in the research notes; not reached. The ten-digit example and the address shape come from a search-index title. ↩↩↩↩↩↩↩↩↩↩
-
ACE Grading’s look-up index and population report, requested October 5, 2026: https://acegrading.com/cert and https://acegrading.com/pop answered HTTP 403 with a Cloudflare challenge, as recorded in the research notes; not reached. The two record pages answered normally and are saved. ↩↩↩↩↩
-
PSA CardFacts, the page for card 74 of “1999 Nintendo Pokemon Game” (1st Edition), https://www.psacard.com/cardfacts/non-sports-cards/1999-nintendo-pokemon-game/item-finder-1st-edition-74/605468, fetched October 5, 2026 (
psa-cardfacts-item-finder.txt). Carries the set heading “1999 Nintendo Pokemon Game” and a heading in capitals that begins “1999 POKEMON GAME 74” and continues with the card’s name and 1ST EDITION (the page does not call it label text), and a table of recorded sales whose Cert column links each slab’s number as/cert/<n>(counted byr1_psa_cert_links.py; no price or sale from the page is used). ↩↩↩↩↩↩↩↩↩↩↩ -
PSA CardFacts, “2011 Nintendo Pokemon Japanese Black & White Psycho Drive,” https://www.psacard.com/cardfacts/non-sports-cards/2011-nintendo-pokemon-japanese-black-white-psycho-drive/32712, fetched October 5, 2026 (
psa-cardfacts-jp-psycho-drive.txt). ↩↩↩ -
PSA Price Guide, “2020 Pokémon Japanese S Promo,” https://www.psacard.com/priceguide/non-sports-tcg-card-values/2020-poke-mon-japanese-s-promo/3370, fetched October 5, 2026 (
psa-priceguide-jp-s-promo.txt). Read for the set name only; no price from it is used. ↩↩↩ -
Kiradex,
Kiradex/Scanner/CardIndex.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 291 to 297 (fold, which keeps only letters and digits, so periods are dropped), 394 (match(_:)), 415 to 432 (in it, a match is certain when exactly one card read by its number also has its name read), 559 to 595 (a set scored by its mark, by its English name “as a grading label gives it” or, for the Japanese catalog, its Japanese name, and by the latest year printed), 625 to 629 (loose numbers, “a grading label’s “#4”“), 677 to 681 (the#number pattern). ↩↩↩↩↩↩↩↩↩ -
Measurement:
r1_psa_cert_links.py, outputr1_psa_cert_links.out.txt, in the author’s evidence folder for this post, run October 5, 2026, and re-derived byarith.py(section 9). It reads every saved PSA page (psa-*.html, 23 files) and counts the links to psacard.com’s/certpath. The CardFacts item page (psa-cardfacts-item-finder.html) holds 231 links of the form/cert/<n>, for 201 distinct numbers, all eight digits, and none of the form/cert/<n>/psa; 22 of the 23 pages link the look-up page itself, andpsa-pop.htmllinks nothing. This is a count of links on saved pages, not a certificate format PSA publishes. No page was fetched, and no price or sale from the CardFacts page is used. ↩↩↩↩↩↩↩↩ -
Collectors Holdings (PSA), “PSA Public API Documentation,” https://www.psacard.com/publicapi/documentation, fetched October 5, 2026 (
psa-publicapi-docs.txt). Carries single-certificate searches only, the login-based access token, the sample number00000000, and the “Invalid CertNo” response for “non-numeric or too few characters”. ↩↩↩↩↩↩ -
Joe Orlando, “Market Report: Population Perspective,” PSA, undated on the saved copy, https://www.psacard.com/articles/articleview/3631/market-report-population-perspective, fetched October 5, 2026 (
psa-article-3631-pop.txt). Carries what the population report counts and does not count. ↩↩↩↩ -
Beckett, maintenance site, https://maintenance.beckett.com/, as served on October 4, 2026 in place of beckett.com’s grading pages, which redirected to it, and saved by the centering post (
bgs-live-maintenance.txt, titled “Express Submissions Remain Open”). Under “Which grading services are currently available?” (line 33) it carries “Express is currently available through the temporary submission form” (line 35), and under “Why are Base and Standard temporarily unavailable?” (line 38) “Base and Standard card grading submissions are temporarily paused” (line 40). It does not say whether Express labels carry subgrades. ↩↩ -
Kiradex,
KiradexTests/ScannerTests.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 241 to 285 (aPSALabelGivesGraderGradeAndCertificateat 243, its reading beginning “1999 POKEMON GAME” at 245, with “1ST EDITION” and then “#4” before “GEM MT” (re-read October 15, 2026 as committed at5a344e3f, from the repository’s stored objects, with no git command run) and the look-up address asserted at 250; the Beckett and CGC label tests; the raw-card test, with TAG TEAM at 276; and the PSA label’s loose number with “The name, the number and the year together put Base Set first.”). Not run for this post. ↩↩↩↩↩↩↩↩ -
Certified Collectibles Group, “Guarantee,” https://www.cgcgrading.com/legal/guarantee/, fetched October 5, 2026 (
cgc-guarantee.txt). Carries the clause that a collectible “has not been overgraded” with its exception, “Grade is NOT guaranteed for cards encapsulated with CGC’s green Qualified Grade Label,” and other exclusions, among them the grade of autographs. ↩↩↩↩ -
CGC Cards, “Population Report,” https://www.cgccards.com/population-report/, fetched October 5, 2026 (
cgc-pop.txt). Carries the organization “by game, era and set” and the disclaimer “not an indicator of value or rarity.” ↩↩↩↩↩ -
CGC Cards help center, “CGC Cards Pop Report” FAQ, https://www.cgccards.com/about/help-center-faqs/cgc-cards-website/cgc-cards-pop-report/, fetched October 5, 2026 (
cgc-faq-pop.txt). Carries the route from the verify tool to the population report. ↩ -
SGC, “SGC Grading App,” https://gosgc.com/sgc-grading-app, rendered October 5, 2026, 14:15 UTC (
sgc-app.rendered.txt). Carries the Cert Verification feature and its “high-resolution images”. ↩↩ -
SGC, “Pop Report,” https://gosgc.com/pop-report, rendered October 5, 2026, 14:15 UTC (
sgc-pop-report.rendered.txt). Carries “With over 28 years of data included in the SGC Pop Report, inconsistencies may be present.” ↩↩↩ -
TAG Grading, home page, https://taggrading.com/, fetched October 5, 2026 (
tag-home.txt). Carries “Say goodbye to distracting paper flips,” the grades “permanently inscribed directly inside the slab,” “Slabs graded with DIG Report Plus receive a precise 1000 pt TAG Score,” the grading system that “scores on a precise 1000 point scale & translates into an industry standard 1-10 Grade,” and, under DIG Reports, “Standard DIGs focus on the core defects that impacted the grade, aka the “DINGS.” DIG Plus Reports breakdown the card into further detail with precise 3 digit scoring.” ↩↩↩↩↩↩ -
TAG Grading help center, “Are sequential TAG Grading certification numbers available?,” https://help.taggrading.com/en/articles/10566747-are-sequential-tag-grading-certification-numbers-available, fetched October 5, 2026 (
tag-help-sequential.txt). Carries “All TAG Grading certification numbers are a mix of numbers and letters which are generated randomly.” ↩↩↩↩↩↩ -
TAG Grading, “DIG” page, https://taggrading.com/pages/dig, fetched October 5, 2026 (
tag-dig-20261005.txt; identical to the October 4 copy). Carries the rank that “is only available to cards which have been graded via the TAG S service as a 3 digit score is needed”. ↩↩ -
TAG Grading population report, https://my.taggrading.com/pop-report/Pok%C3%A9mon, linked from the taggrading.com pages saved on October 5, 2026 (for example
tag-cert-search.html); not fetched. ↩ -
Measurement:
measure_page_drift.py, outputmeasure_page_drift.out.txt, in the author’s evidence folder for this post; run October 5, 2026 and re-run for the draft with an identical output. Compares, on non-blank text lines, ten grader pages saved October 4 with copies saved October 5: PSA’s grading standards (plain fetch) and glossary, CGC’s grading scale and “other grading topics” FAQ, TAG’s rubric, scale and DIG page, ACE’s grading scale, SGC’s rendered scale and Beckett’s status page; all ten “unchanged.” PSA’s per-grade bundle was not re-rendered, and the centering post’s other saved pages (among them PSA’s centering guide, CGC’s FAQs and TAG’s glossary) were not compared. ↩↩↩↩↩ -
Blake Crosley, “How Card Centering Is Judged, and How to Measure It,” blakecrosley.com, October 5, 2026, https://blakecrosley.com/blog/how-card-centering-is-judged, read October 5, 2026. Its FAQ dates Beckett’s outage from the October 2 notice (“Beckett’s site has been offline since a notice dated October 2, 2026”), its TAG section says TAG “scores out of 1,000,” and its brief keeps the graders’ tolerances as bundled data with a source and a read date. Its brief also drops “Allows up to a” and “ceiling” from the scan sheet, saying instead, for a 9, “Inside PSA’s and SGC’s published front figure for a 9,” and, for a 10, “within PSA’s published 55/45 front figure for a 10,” and adds a check that “searches the app’s Swift sources for the same four phrases in string literals” (lines 495, 498 and 505 of the published file, read again October 15, 2026). The TAG pages it cites are the rubric, the scale and the DIG page. Not edited by this post. ↩↩↩↩↩↩
-
Kiradex,
Kiradex/Scanner/CardReader.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 10 to 15 (the recognition languages for each catalog) and 28 to 45 (VNRecognizeTextRequest,.accurate, the recognition languages, language correction off with its comment, and each line’s text, height and position). ↩ -
Kiradex,
Kiradex/Scanner/ScanSession.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 42 to 45 (looksForALabel = 2and “A label is small print, and often read a look late”) and 133 to 136 (later readings merged into the label, at 135). ↩↩↩↩ -
Kiradex,
Kiradex/Scanner/Sighting.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): line 37 (the whole reading goes toSlabLabel(reading:)), line 100 (a later look merged into the label) and lines 131 to 143 (merged(with:), lines 134 to 142, which rebuilds a label from its grader, grade and certificate: the later grade, the longer certificate, the same grader only). ↩↩↩↩ -
Kiradex,
docs/cloudkit-schema.ckdb, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 8, 12 and 13 (CD_certNumber,CD_grade,CD_graderRaw). ↩↩ -
Kiradex,
Kiradex/Views/Scan/ScanView.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 76 to 83 (rapid mode registers a raw card afterlooksForALabellooks), 286 (the panel’shavecallsregister(found.card, details: $0, …)), 299 to 300 (the duplicate check and its warning toast, “is already registered”) and 304 (registeradds a copy with the details it was handed). ↩↩↩↩ -
Kiradex,
Kiradex/Views/Scan/ScanResultPanel.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 24 (the sheet’s owndetails, a@State), 52 to 57 (with no label, a copy gets the condition and the centering), 79 to 83 (scan-have, whose action ishave(details)at 80), 96 to 98 (the details sheet:CopyEditor(card: card, details: $details)at 97, so the editor edits the sheet’s own details), 168 to 172 (the headline set in capitals,.textCase(.uppercase)at 171, with the identifierscan-found-detailsat 172), 174 to 180 (the reading line, identifierscan-found-readingsat 179), 196 to 203 (the headline: the summary, then “Cert” and the number, at 200), 205 to 214 (readings: nil for any copy with a grader, at 207, with the comment “a case hides the card’s edges” at 209 to 210; for a raw card, the centering and what it allows). ↩↩↩↩↩↩↩↩ -
Kiradex,
KiradexUITests/KiradexUITests.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run); the file was last modified at 10:32 that day: lines 783 to 820 (testScanningACardRegistersIt, a raw card, whose expectations onscan-found-readingsat 798 to 800 ask that it contain “up to a 10” and “not judged”), 822 to 858 (testScanningAGradedCardKeepsItsLabel, its comment at 822 to 823; launched with-fixtureCatalog,-scanFixture kira1-2and-scanSlab YESat 825; “PSA 10” asserted, case aside, at 833, “49392218” at 834 and no readings line at 835; at lines 839 to 842 it opens the details (scan-details) and reads thecopy-certificatefield; it tapsDoneat 844 andscan-haveat 846, registering the copy; at 854 it looks for the copy’s row ascopy-PSA 10, and at 856 asserts that the row’s label contains “49392218”); before any of that, at 826 it tapsScan, and at 828 to 832 it waits up to 20 seconds forscan-found-nameand up to 10 forscan-found-details(lines 825 to 832 re-read October 15, 2026 as committed at5a344e3f, from the repository’s stored objects, with no git command run). Not run for this post. ↩↩↩↩↩↩↩ -
Kiradex,
KiradexTests/ScanSessionTests.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 188 to 201 (aGradedCardCarriesItsLabel, whose reading begins “1999 POKEMON GAME” at 190 and whose expectation at 192 compares the whole label;wordsCardsPrintAreNotGraders, with ACE SPEC at 198, TAG TEAM at 199 and the seven-digit ACE line at 200). Not run for this post. ↩↩↩↩↩↩ -
Kiradex,
Kiradex/Scanner/FixtureScan.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 32 to 50 (the drawn fixture label, six lines: “2026 KIRA BASE” at 35, the card’s name at 36 and “49392218” at 37 in one column; “PSA,” “GEM MT” and “10” at 41 to 43 in the other) and 14 and 56 to 63 (the card’s name and its number, drawn as three digits over three, on the card itself). ↩↩↩↩↩ -
Kiradex,
docs/ROADMAP.md, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run); the file was modified at 16:09 and again at 17:29 that day, between the last two re-checks, and the cited lines read the same at both: lines 72 to 73 (“Run it on a phone,” with slabs behind plastic among what is unproven). ↩↩ -
Author’s reading of the Kiradex working tree, October 15, 2026: uncommitted changes on top of commit
fc9d4876(refs/heads/main, committed at 17:45 Pacific that day), whoseKiradex/Scanner/SlabLabel.swiftis byte for byte the file at5a344e3f(both read from the repository’s stored objects, with no git command run). The working tree’sSlabLabel.swift, which differs from the committed file, was copied at 22:51 Pacific into the author’s evidence folder asSlabLabel.swift.worktree-20261015(8,938 bytes; SHA-25611984a36f2ce8ddcf85e438057965ef4f765c191a927d6db708faf33c26284e5, recorded beside it). That copy holds at lines 76 to 81 the per-grader certificate patterns (#/\d{7,9}/#for PSA,#/\d{7}(?:-\d{3})?/#for SGC,#/[A-Z]\d{7}/#for TAG,#/\d{4,7}/#for ACE), at line 109URL(string: "https://acegrading.com/cert/\(cert)")and at line 117static func read(code: String) -> (grader: Grader, cert: String)?. None of it was committed when read. That copy also holds, at line 30, the string literal"Professional Sports Authenticator"; a search of the working tree’s Swift files underKiradex/on October 15 at 23:58 Pacific found no string literal with “verified” or “authentic” as a whole word, and that one literal with “authentic” inside a longer word. The post’s other Kiradex readings are of commit5a344e3fand are dated. ↩↩ -
Kiradex,
KiradexTests/CopyTests.swift, read October 5, 2026 between 16:44 and 16:53 PDT and re-checked at 17:15 PDT with HEAD at commitcf3beb1e, and re-checked at 17:28 and 17:29 PDT with HEAD at the two commits after it,1a2c2e9dand5a344e3f, with every line cited here unchanged (the working tree was being edited that day, so the lines are as of that read; read only, no git command run): lines 11 to 17 (emptyContext(), an in-memoryModelContainer) and 163 to 176 (aRawCopyKeepsItsCentring, whose line 175 expects a graded copy’s summary to be “PSA 10”). Not run for this post. ↩↩ -
Kiradex,
Kiradex/Services/PatronStore.swift, as committed at5a344e3fand read October 16, 2026 from the repository’s stored objects, with no git command run: lines 31, 63 and 73 match StoreKit’s.verifiedcase (if case .verified(let transaction) = update,guard case .verified(let transaction) = result), which is code, not a string literal. ↩