Methodology
Data sources
Public channel listings: a hand-curated seed, re-checks of known product-page URLs, and discovery candidates merged after review. Not a shop back-office feed, and not purchase receipts.
Pipeline (discover → review → snapshot)
- Discover: find new merchant product URLs and put them in a review queue; live prices are never changed directly.
- Review: merged into the catalog by a person or a high-confidence rule; manually locked fields are never blindly overwritten by a refresh.
- Snapshot: the full JSON is published to object storage; the site reads the current pointer and keeps the previous one if that fails.
- Refresh: only updates price / stock / warranty text on known merchant URLs. An HTTP or crawl failure is not treated as “sold out” — the last good observation is kept unless the page clearly says sold out or delisted, or the URL is confirmed dead and delisted.
Which shops we list (no marketplace stalls)
We only send readers to independent merchant shops: the merchant’s own domain and storefront. We do not list marketplace stalls — third-party seller pages inside another large marketplace. Those platforms (GamsGo, for example) show their own ratings, review scores and seller levels on each shop card, which is not the merchant’s warranty promise; mirroring them as dozens of independent shops would mean the platform, not the seller named on the row, actually delivers. Since 2026-11-04 such destinations are rejected at discovery, refresh, catalog validation and outbound, and existing entries have been removed.
Several shops on one domain are not a marketplace. Some card-shop sites host multiple shops on one host (this site lists some). As long as it is not “a market many third-party sellers live inside”, they stay — the test is whether a shop is someone else’s stall, not how many shops share a domain.
Other price-comparison aggregators (OpenPrice, AiCheap, Shuita) are used only as leads to find merchants’ own product pages; they are never an outbound destination of this site.
Update cadence
Irregular re-checks plus on-demand dead-link probing. Current snapshot version 2026-11-04T13-45-33-746Z (runtime source r2, in-isolate cache 60s). Pages may lag behind a merchant’s price changes.
Reading site-level freshness. Every board shows two numbers at the top: the snapshot build time (generatedAt, matching the version published to object storage) and “N rows in this view, M checked in the last 72 hours”. The build time only says when this data was packaged, not that every listing was re-read then — so it is shown separately from each row’s “Updated” column, and the number of unverified rows is stated outright.
Public pages (boards, shop pages, this page, official prices) carry an edge cache of s-maxage=60, so you may get HTML rendered up to 60 seconds ago; the snapshot time on the page is still that HTML’s own time and never looks fresher because of caching. Outbound /go is never cached and always shows a “You are leaving” page first: after you check the merchant domain and the disclaimer, “Continue” issues the 302 and records one click (shop, plan, time and referring page only; opening the leave page is not a click). The leave page also counts down (5 seconds by default) and continues on its own via the same confirm=1 link, so what is recorded is unchanged; to stay, press “Cancel auto-redirect” or “Back to comparison”.
“From” and comparable prices
The channel “From” price and lowest-price highlight only count listings that are in stock or low stock, not marked non-comparable, successfully checked by us within the last 72 hours, and with a known billing term. Sold-out, delisted, never-checked or unknown-term listings never take part.
Prices are compared only within one billing term: we take the most common term among a tier’s listings (usually monthly) and find the lowest price in that term only. A “10-day trial” therefore cannot undercut monthly prices, and an 18-month bundle is never ranked with monthly ones. The term is shown next to the price.
Table order follows the same rule as “From”. “Price ascending” is grouped by that main term: first recently checked in-stock listings in the same term, then unverified listings in the same term (in their own labelled block), and only then other terms, low stock and sold out. Every block heading says which stock band and term it covers, so when prices jump, the reason is on the page rather than in the reader’s guess. Ordering uses only published objective fields (stock, term, check time, price) — no scores or weighting.
When nothing qualifies, “From” shows “—” rather than a number we cannot verify. If the tier still has listings to show, the price summary is marked “(reference)” — the lowest listed price, not a verified low.
Filters
“In stock only” keeps listings whose band is in stock: low stock and sold out are both hidden, because they are not “in stock”. The “N in this view” at the top always equals the rows actually listed; rows hidden by filters are counted separately, with a one-click way to clear filters.
The “Updated” column
Shows only the last time we successfully read that merchant page. Listings never checked show “Unverified” instead of the catalog build time or any inferred value — so “Unverified” means that row’s price has not been confirmed by the current crawl.
Objective columns
- Warranty: the merchant’s own wording; empty or unstated → “No promise”.
- Mentions a warranty but no number of days → shown as “See listing (not quantified)” and not counted towards “Low with warranty”.
- Stock: in stock / low / sold out. If the merchant page states a quantity (e.g. “Stock: 12”, Dujiao’s exact-stock mode, GamsGo’s inventory field), the number follows the badge, e.g. “In stock 12”; otherwise only the band is shown, and we never invent a number from “in stock”.
- Term: as stated on the merchant page; when it cannot be determined it shows “Not stated” and is excluded from “From”.
- Type (top-up / ready account) is orthogonal to the SKU; the official reference price sits above the SKU and is never part of the listing order.
- All outbound links go through /go; we never take payment or handle the transaction.
Merging similar listings
The same SKU is often listed by many shops with near-identical titles. When two rows share tier, type, billing term and normalised title, they collapse into one row, “N similar listings”, which expands to show every shop; the price range shows only the lowest and highest price in that group.
Merging only removes duplicates and draws no conclusion: no featured slots, no reputation scores, no weighting. Rows with a different title or term are never merged (“1 month” vs “3 months”, “shared” vs “private” always stay apart), because they are different products.
Official vs channel prices
Official prices lists each vendor’s published subscription prices in several regions, with the source and read date on every row, checked by hand and not by the crawler; the CNY column is a fixed-rate conversion for reference. Official prices are a baseline: they never enter the listings table, “From” or any sort, and do not mean you can buy across regions.
The “official reference” at the top of a SKU page comes from the same table, the same row and the same rate (US monthly by default), so it always matches the official prices page; there is no separate hand-typed reference. It never affects ordering.
Shop names
Lists show the merchant’s own name with promo slogans, referral/invite codes, decorative symbols and leftover HTML entities removed. If a merchant title is only product keywords (a few product names strung together) or just a domain, we show the actual outbound domain instead — a domain is a fact; an invented shop name is not. Cleaning only affects display, never links, slugs or click attribution.
Advertised price ≠ verified shop price
Figures on this site come from public product pages or seed re-checks and may differ from posters, community chatter or what you actually pay at checkout. Always go by what the merchant page shows when you order.
Dead links and delisting
Outbound URLs are probed regularly. DNS failures, refused connections, persistent 404/410, parked pages or clear delisting pages are removed from the default catalog (no more “Visit”). An occasional WAF/403 or flaky 5xx never triggers a bulk delisting on a single failure.
No guarantees
Dingge does not guarantee price, stock, warranty or fulfilment; once you follow an external link, the risk of the transaction is yours to judge. We are not a transaction intermediary and publish no subjective scores such as trust ratings or blacklists.