Haves List
Your cards for sale or trade, priced your way, in one link.
Reading the card list…
How the numbers are made, and where they come from
How the numbers are made
Prices
Every card is priced at its own printing and finish. The list's rule picks one base for the whole list, and every price on the page says which base and which day:
- TCGplayer market, US dollars (the site's main price): TCGplayer's figure from recent sales of that printing and finish, as Scryfall publishes it, from Scryfall's printing file (read {D['scryfall'] or 'at the last build'}) and any newer refresh this browser holds.
- The lowest store asking price, US dollars: the lowest of TCGplayer retail, Card Kingdom and Mana Pool, from MTGJSON's price files (MIT license), which gather the stores' public feeds; the stores' own terms for that data aren't published. The file keeps a printing when a US store asks 25 cents or more for it, so a card with no asking price on file uses its TCGplayer market price instead, and the page counts and says how many do. Etched foils have no store price there.
- Cardmarket, euros: Scryfall's Cardmarket price for nonfoil cards and MTGJSON's Cardmarket foil column for foils; a list priced in euros compares with Cardmarket throughout.
- Not offered: TCGplayer's low price, which isn't in any data this site may use.
raw = base price (cents) x percent / 100 x condition share / 100
bulk: a card of a rarity the bulk rule names whose base price is under its threshold costs the bulk price
otherwise each = raw rounded to the cent, or to 5, 10 or 25 cents or a dollar: up, or to the nearest with halves up
each = at least the minimum; a price the seller types for a card replaces all of the above
total = the sum of each x copies over the cards with a price; share of market = each / market price
The arithmetic is whole numbers of cents, so the page, a buyer's copy and a hand count agree to the cent. The condition shares are the Trade Calculator's (the middle of each range in TCG Price Lookup's guide, 2026): Near Mint 100%, Lightly Played 85%, Moderately Played 65%, Heavily Played 45%, Damaged 25%; the seller can switch them off. A line that names no printing (a plain "4x Lightning Bolt") is priced at the card's cheapest printing in its finish by the site's one price rule (a printing you can play in a paper game, serialized ones aside, English first), worked out again each day, the choice the Trade Calculator makes. A card with no price on file is listed and left out of the totals, and the totals say how many.
Live or locked
A live list carries the rule, not the prices: whoever opens it sees it priced by the seller's rule with the prices on their copy of the site that day, and the page says so with the day. A locked list carries each card's price as the seller's page worked it out on the day the link was made, and the page says those are the seller's prices of that day; the market price beside each is the reader's own day's. Either way the share of market beside a price is a fact about two numbers, not a judgment of the price.
The link
The whole list rides in the link after the #, which browsers never send to a server, so nothing is uploaded and nothing is stored anywhere but the seller's own browser. The code is bytes, packed (deflate) and written in URL-safe base64: the title, name and note, the rule and the day, then the cards grouped by set, each set's collector numbers sorted and written as the gaps between them (most gaps are one or two), odd numbers such as 123a or 54* as text, one byte a line for finish, condition and whether a count, a language or "any printing" follows, and the counts over one. A card this site's data doesn't hold rides as its name. A list of 30 cards or fewer also carries two bytes of each card's name, so its page reads only those cards' printing files; a longer list reads all of them. Locked prices add each card's price in cents. Measured on lists made on the page, with a title, a note and the preview: 800 to 877 lines from 12, 25 and 40 recent sets came to 1,357, 1,628 and 1,881 characters live, and 1,957, 2,345 and 2,612 locked. A binder spread wider runs longer: 877 lines from 45 sets (2018 to 2026, Commander decks, The List, 4 lines in 10 holding doubles) came to 2,327 characters live, so the page offers to split it.
Before the # the link can carry a short preview (?p=): the title, the count, the total, the rule, its day, the seller's name and the Scryfall id of the most valuable card's picture, nothing else. The site's link worker writes those into the page's preview tags, every value checked and escaped, so a chat app shows the list's own title, facts and card art; anything malformed gets the plain page.
Discord holds 2,000 characters a message (4,000 with Nitro). A link longer than that can't be posted whole, so the page says so before it is shared and offers live prices (when the list is locked), splitting the list into several links that each fit, or a small file holding the link to attach.
Discord
The post is the title, the count and total at the rule with its day, the note, the most valuable cards (ten at most, fewer when the link is long) and the link on its own line so Discord shows its preview; it is kept under the limit by dropping cards from the bottom. The buyer's message is a short heading, the count and total, any offer, one line a card ("2x Repel Calamity (BLB 27) NM $0.35 each"), the total again and a link back to the list with the picks in it, in angle brackets so Discord shows no preview for it (without its ?p= preview when that makes it fit; left out with a note when it still doesn't). When it is longer than one message it is split into numbered parts between card lines, never inside one. Names, titles, notes and collector numbers are escaped for Discord's formatting: the characters that format text and every @, so a note can never mention a channel.
Buyers
Search, filters and sorts run on the list in the buyer's browser. Groups follow a card's colors (lands apart). On my wishlists and hide cards I own read the Collection in that browser and change nothing in it: a wishlist card matches any printing of the same name, and owned counts paper copies on hand (proxies, Arena and Magic Online binders and copies sold or lost left out), as the Trade Calculator's shared lists do. Picks never go past the count listed. They ride in the page's own address, so a reload keeps them and the address is the picks link; a picks link opened by someone else shows the picks marked and on their own, with the offer. Open as a trade saves a new trade in the Trade Calculator with the picks on the "you get" side (300 lines at most, a trade's limit), at the printing, finish and condition listed, priced there by that page's own rules.
Camera. Intake's camera reader (camread.js) reads the set code and collector number on each card from the phone's camera in this browser; frames never leave the device. A sure read adds that exact printing to the side or list it was opened for; a read it isn't sure of waits for you to confirm or type it.
About Haves List
What it does
- Cards in from anywhere: paste a list from Moxfield, Arena, MTGO, ManaBox, TCGplayer or Deckbox (text or CSV), take the copies you marked for trade in Collection, or a saved deck. Lines that don't read are listed, never dropped.
- One price rule for the whole list: TCGplayer market, a percentage of it, the lowest store asking price, or Cardmarket in euros, with rounding, a minimum, a bulk price for commons and uncommons, lower prices for played cards, and your own price on any card. Every price says its source and its day.
- Live or locked: a live list is priced by your rule with the prices of the day a buyer opens it; a locked one carries your prices in the link. The buyer always sees which.
- One link, nothing uploaded: the whole list rides inside it, about 1,400 to 1,900 characters for an 877 line list, with a preview chat apps show. Copy the Discord post (the count, the total, your note, your top cards and the link), send it from a phone, or show a QR code.
- For buyers: search, filter by color, type, rarity, set, finish and price, sort, a picture view, and the cards on your wishlists marked, from your own Collection in your browser.
- Pick cards, add an offer, and copy a message for the seller that fits Discord's 2,000 characters (in numbered parts when it doesn't), with a link that opens the list on your picks. Or open the picks as a trade in the Trade Calculator.
- Lists save in this browser to edit and share again. No account, no ads.
Why
Bulk lists are posted in Discord channels today as links to deck sites: a buyer scrolls hundreds of cards and types out what they want by hand, and the seller reads prices off a page that changes under them. A list that rides in its own link, priced by a rule the seller states, lets the buyer pick in a few taps and send back exactly what they picked, in a message Discord takes.
Asked for by players
- Bulk lists of cards for sale with a price rule: full price, a percentage, the lowest price, fair market price. shipped
- Shareable links buyers can interact with, made for Discord, with a way to send everything picked in one message. shipped
- TCGplayer's low price as a rule. It isn't in any data the site may use; the lowest store asking price is the nearest figure.
On the list because players asked for them in public feature requests and forums, September 2026.
Changelog
- A Camera button adds cards to the list being edited. A buyer opening a link reads a buyer's line, not the seller's.
- New: Haves List. A bulk list for sale or trade from a paste, your Collection's cards marked for trade or a deck; one price rule (TCGplayer market, a percentage, the lowest store asking price or Cardmarket, with rounding, a minimum and a bulk price), live or locked; a link that carries the whole list with a chat preview, a Discord post, a QR code. Buyers filter, mark their wishlist cards, pick, and copy a message in parts that fit Discord, with a link back to their picks, or open them as a trade.