Appearance
Reading balances
Which stores let us check a gift card's balance, and how. Researched 2026-10-22 from the brands' own help pages; cells marked unverified could not be confirmed. This decides where the till can sell: a store we cannot read is a store where a buyer's "it didn't scan" cannot be checked (see the roadmap's headline problem).
Why it matters
After a scan, one read of the retailer's balance page says whether value left the card. A drop means the buyer scanned it and pays; no drop means they are refunded. That read is the whole defense. Readers exist for Best Buy, Nike, and Target (Target's runs inside a saved Target sign-in: pnpm spike:target-balance --guided once, then TARGET_SESSION_PATH; with no session Target stays blind).
Top brands
| Brand | Public page, no login | Asks for | Bot wall | Phone line | Transfer or combine | In-store scan |
|---|---|---|---|---|---|---|
| Target | No: the page needs a Target sign-in (measured 2026-10-23: it redirects to login). Reader built 2026-10-23 inside a saved Target session | number + access number | sign-in | yes | not stated | yes |
| Walmart | Yes | number + PIN | yes, "hold to confirm you're human" | yes | not stated | physical yes |
| Best Buy | Yes (reader built) | number | unverified | yes | no | yes |
| Home Depot | Login required | account | unverified | no balance line | not stated | yes |
| Lowe's | Yes | number + PIN | unverified | yes | no | yes |
| Starbucks | Yes | number + code | unverified | no balance line | yes, store moves a balance to a new card | yes, app barcode |
| Nike | Yes (reader built) | number + PIN | unverified | no balance line | not stated | yes |
| Sephora | Yes | number + PIN | unverified | yes | not stated | yes |
| Ulta | Yes | number + PIN | unverified | yes | no | physical yes |
| Macy's | Yes | number + CID | captcha confirmed; two failures can lock 24 to 48 h | customer care | not stated | yes |
| Kohl's | Yes | number + PIN | reCAPTCHA confirmed | yes | not stated | yes, app wallet |
| TJ Maxx | Yes | number + PIN | unverified | unverified | no | yes |
| Costco | Yes | number + PIN | unverified | none found | not stated | yes |
| CVS | Yes | unverified | unverified | unverified | not stated | yes |
| Walgreens | Yes | unverified | unverified | yes | not stated | yes |
| Chipotle | Yes | unverified | unverified | yes | cash back under $10 | yes |
| Amazon, Apple, Uber, DoorDash, Airbnb, Google Play, PlayStation, Xbox | No: the balance lives in the account once redeemed | account | none | no | no register | |
| Visa / Mastercard prepaid | Issuer-specific (Vanilla: yes) | number + expiry + CVV | unverified | yes | card network, not a scan |
14 of the 17 in-store brands have a public page. The 8 digital brands have no page and no register: the card loads into an account, which is a different lane (a Salvo-held account holds the value and shows every transaction).
The long tail
A sample of 20 mid-size brands: 14 have a public page (Panera, Dunkin', AMC, REI, Bath & Body Works, Old Navy, Dick's, Olive Garden, Chili's, Southwest, Delta, Lululemon, H&M, Barnes & Noble), 1 unverified (Michaels), 5 none (Petco, Wayfair, and the account-bound Etsy, Spotify, Steam). About 70%; among stores with registers, 14 of 16.
Small merchants mostly run their gift cards on a processor, which hosts the balance page per merchant:
| Processor | Page | Pattern | Asks for | Notes |
|---|---|---|---|---|
| Square | per seller | seller-specific link from the dashboard | number + PIN, or QR | no single page |
| Toast | per restaurant | the restaurant's "E-Gift Lookup" link | number | Toast says there is no Toast-wide page |
| Givex | per merchant | <host>.givex.com/cws4.0/<merchant>/check-balance/ | number + PIN | no captcha seen |
| Paytronix | per brand | <brand>.paytronix.com/en-us/guest/nologin/account-balance | number, some need PIN | |
| Valutec | per client key | valutec.net/CardRegistration/Generic/Balance.aspx?ClientKey=... | number + captcha | captcha |
| Factor4 | one portal, scope unconfirmed | factor4gift.com/getyourbalance | unverified | |
| Heartland | likely one site | heartlandgiftcard.com | unverified | |
| Shopify | per store, by emailed link | link or last 4 | largely no | |
| Clover, Lightspeed, Fiserv SVS | no consumer page found | cashier or merchant lookup only |
One adapter per processor plus a merchant-to-URL directory reaches roughly 55 to 70% of small in-store merchants by count. Low confidence; nobody publishes merchant counts. The residue: Clover, Lightspeed and SVS merchants, login-only brands, phone-only stores, and the digital brands.
How the reads can be done
- Our own scrapers: a headless browser behind residential proxies with a captcha service. About 1 to 4 cents a read. Breaks when a page changes. Retailers walled these pages after a 2017 botnet checked 4 million cards an hour, so a fleet looks like that attack.
- The buyer's own phone, with a proof (zkTLS): on "it didn't scan", the phone loads the balance page itself and proves to us what it showed. No fleet, no proxies, no bot wall; the party who wants the refund does the read. Young technology; each scheme has its own trust assumptions.
- Processor APIs: Blackhawk, InComm, Givex and Fiserv have balance inquiry for merchants and integrators with credentials, not for the public. A partner deal.
How the incumbents do it
Raise (GCX) must verify a balance before listing, refuses brands it cannot check, charges sellers up to $0.30 for a manual check, and holds some brands 5 to 45 days. CardCash does "a balance and fraud check" before paying and gives buyers a 45-day guarantee. Neither says how. Nobody automates it well.