How OneZeroTwo works
The whole method, in the order the app runs it.
1. Identity comes first
Before any price is fetched, the app has to know exactly which card you mean. Card identity comes from the Pokemon TCG API: the name, the set, the printed number, the rarity and the release date. That catalog is mirrored into a local index on the server, so a search runs in milliseconds and keeps working when the upstream API is slow.
Identity matters more than it sounds. A card number parsed out of the wrong field, or a set code mistaken for a species name, quietly prices the wrong card, and a wrong price delivered confidently is worse than no price at all. Matching runs through a confidence gate, and a sealed product such as an elite trainer box is never allowed to match a single card.
2. Where the prices come from
- PriceCharting is the price backbone. It supplies sold-price history per grade tier, which is the tape every value, trend and projection on the site is computed from. Its graded coverage is mostly PSA, and that caveat is shown wherever it matters.
- eBay supplies active listings, and only active listings. Those are asking prices, not sales. They live in their own panel, clearly labeled, and they are deliberately excluded from the sold-comp analysis, the value estimate, the chart and the stored history. Real sold comps from eBay would need Marketplace Insights access, which this app does not have. Showing asks as if they were sales is the single easiest way to overvalue a collection, so the app refuses to blur them together.
- Sold comps accumulate. Every lookup deepens a local record of that card's sales, so a card you check repeatedly builds a longer tape than any single fetch would return.
eBay asks are also identity checked before you see them: a listing whose card number contradicts the card you asked about is rejected outright, a listing naming a different Pokemon is rejected, and asks far outside a plausible band around the PriceCharting figure are hidden. Every listing filtered out is counted and disclosed rather than silently dropped.
3. The market value rule
One number is shown as the card's value, and every surface in the app uses that same number, so the lookup page, a trade, and your collection total can never disagree with each other. The rule is a dealer's rule rather than a statistician's:
- If the five most recent sales all landed within two days of each other, report their average. The card is trading live, and the middle of a live cluster is where it is actually changing hands.
- Otherwise, report the most recent sale. Sales that are spread out over months cannot be averaged honestly, and a vintage card that sells once a month must not be dragged down to a stale median.
An outlier guard drops fat-finger typos and wrong-grade leaks before either branch runs, using a band anchored on the whole tape so a handful of bad entries cannot fabricate a new price level.
4. Two different estimates, two different accuracy claims
This is the distinction people most often get wrong about price tools, so the app keeps the two apart everywhere.
- The nowcast answers "what will the next sale be". It is a robust, recency-weighted estimate off the sold tape, with outlier rejection. Backtested walk-forward, it lands within roughly 2 to 3 percent median absolute error on liquid, densely traded cards. On sparse or volatile cards it reports low confidence instead of pretending, because there the variance is genuinely irreducible.
- The 3-month projection answers "where is this going". It is a damped continuation of the trailing quarter with an uncertainty cone. Backtested over walk-forward three-month windows it lands at roughly 16 percent median error. A one-year horizon was tested and rejected outright because it performed worse than assuming the price stays flat, which is why nothing here projects further out than three months.
Both are labeled heuristics. The 2 to 3 percent figure belongs to the nowcast alone and says nothing about the projection, and the 16 percent figure belongs to the projection alone. Anyone quoting one as though it were the other is quoting it wrong.
A Trend Score sits on top: a transparent weighted composite from 0 to 100 that shows its own signed breakdown, so you can see which factors pushed it up or down. It is a labeled heuristic too, not a machine-learning model.
5. Grades
PSA is the primary grade throughout. Every source in the app that can return graded prices must surface PSA, CGC and BGS, and when you pick a tier such as PSA 10 every graded source shows you that same tier rather than quietly answering with a different one. Where a source's CGC or BGS data is thin, the PSA figure is shown as a proxy and labeled as one. A source that can only see raw prices is labeled raw, so a raw number can never be mistaken for the graded tier you asked for.
6. Japanese, Chinese and Korean cards
The Pokemon TCG catalog is English only, so regional promos are not in it at all. Those are found through a local index of PriceCharting's own regional listings instead, and matched on the exact printed promo number. Exact is the point: a Japanese promo and its English sibling can share a name and a species and still be completely different cards at completely different prices, so a near-miss on the number is treated as a non-match rather than a close-enough one.
7. What the app will not do
It will not show you a number it does not have. When a source fails or has nothing for a card, that source reports the failure and the rest of the page carries on. One source going down never takes the others with it, and it never gets silently replaced by a guess.