Scryfall Scraper: MTG Cards, Prices & Legalities
Pricing
Pay per event
Scryfall Scraper: MTG Cards, Prices & Legalities
Scrape Scryfall Magic: The Gathering cards with the full Scryfall search syntax: USD, EUR and foil prices, Standard, Modern and Commander legalities, EDHREC rank, oracle text and images. Fuzzy name lookups and all 1,053 sets. Export CSV, Excel, JSON. No login or API key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
RecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Scryfall Scraper: MTG Cards, Prices & Legalities
The Scryfall Scraper exports Magic: The Gathering cards from Scryfall as a flat dataset. Type any Scryfall search such as "c:red cmc<=2 t:instant" or "f:commander usd>=50", or fill the set and format boxes, and get USD, EUR, foil and MTGO prices, legality in 23 formats, EDHREC rank, oracle text, card faces and image URLs for each card. Optional rulings and an only-new mode for repeat runs. Export CSV, Excel, JSON or XML. No login, no API key. Priced at $12 per 1,000 card rows on the Free tier ($10.29 from Gold); failed or empty lookups are free.
Scryfall is the reference MTG database, with 1,053 sets and 32,116 Commander-legal cards at the time of writing. This actor turns any search you can type on Scryfall into a priced, legality-tagged table, without API code, pagination or rate limits.
๐ What does the Scryfall Scraper do?
- Scrape MTG cards by search query. Full Scryfall syntax with automatic pagination, or use the
setandformatinputs instead. - Legality in 23 formats. Standard, Modern, Commander, Pauper and more, each as its own column (legal, not_legal, restricted or banned).
- Sort 15 ways, ascending or descending.
uniquereturns one row per card, per artwork or per printing. - Look up cards by name, even misspelled ("blak lotus"), through Scryfall's fuzzy match.
- Double-faced cards. A
cardFacesarray holds every face. - Rulings (optional).
includeRulingsadds one row per official ruling after each card. - Only-new mode.
onlyNewreturns only cards that no earlier run of the same search delivered. Skipped cards are not charged. - Export all Magic sets, one row per set.
๐ What data can you extract from Scryfall?
| Field | Description |
|---|---|
recordType | card, set or ruling |
scryfallId, oracleId, name, url | Card ids, card name, Scryfall page link |
manaCost, cmc, typeLine, oracleText, keywords | Cost, mana value, type, rules text |
power, toughness, loyalty, defense | Stats (where they exist) |
colors, colorIdentity, producedMana | Color and mana arrays |
cardFaces, relatedCards | One object per face; tokens and combo pieces |
rarity, setCode, setName, collectorNumber, releasedAt | Printing details |
priceUsd, priceUsdFoil, priceUsdEtched, priceEur, priceEurFoil, priceTix | Market prices as text (only when Scryfall has a price) |
priceUsdAmount, priceEurAmount, priceTixAmount and twins | The same prices as numbers |
edhrecRank, pennyRank | Popularity ranks (only when ranked) |
legalStandard, legalModern, legalLegacy, legalCommander and 19 more | Legality per format |
artist, isReserved, isGameChanger, finishes | Artist and print flags |
imageUrl, imageLarge, imagePng, imageArtCrop and more | Card image links hosted by Scryfall |
tcgplayerUrl, cardmarketUrl, edhrecUrl, gathererUrl | Marketplace links and ids |
rulingsCount, rulingSource, rulingDate, rulingText | Rulings (only with includeRulings) |
setType, cardCount, block, parentSetCode, printedSize, iconUrl | Set rows only |
scrapedAt | UTC timestamp |
Up to 125 fields in total. Fields without a value are omitted, so there are no always-empty columns.
๐ Sample output of the MTG card export
Real row (query c:red cmc<=2 t:instant, sorted by EDHREC rank), trimmed: newer columns listed above are not shown.
{"recordType": "card","scryfallId": "7673784e-db4b-43a1-8d55-1bb9fc1e284f","name": "Lightning Bolt","cmc": 1,"typeLine": "Instant","oracleText": "Lightning Bolt deals 3 damage to any target.","rarity": "uncommon","setCode": "MSC","releasedAt": "2026-06-26","priceUsd": "0.82","priceEur": "1.98","edhrecRank": 157,"legalStandard": "not_legal","legalModern": "legal","legalCommander": "legal","imageUrl": "https://cards.scryfall.io/normal/front/7/6/7673784e-db4b-43a1-8d55-1bb9fc1e284f.jpg?1783903008","url": "https://scryfall.com/card/msc/806/lightning-bolt?utm_source=api","scrapedAt": "2026-10-04T05:12:55.625Z"}
Prices are the daily market prices Scryfall publishes; a card without one (for example Black Lotus) has no priceUsd field.
๐ต How much does it cost to scrape Scryfall?
Pay per event. Prices on the free Apify plan tier (paid plans get volume discounts):
| Event | Price | Charged when |
|---|---|---|
| Card row | $0.012 (from $0.01029 on Gold) | One card row is saved to the dataset |
| Set row | $0.010 | One Magic set row is saved to the dataset |
| Ruling row | $0.001 | One ruling or Scryfall note row is saved to the dataset |
Worked examples: 1,000 cards cost 1,000 x $0.012 = $12.00 on the Free tier and about $10.29 on Gold. The full set list (1,053 sets) costs about $10.53. Ruling rows cost a flat $0.001 each ($1.00 per 1,000), at most 100 per run, counting towards Max Items. Example: 100 cards with 250 rulings cost 100 x $0.012 + 250 x $0.001 = $1.45 on the Free tier.
Error rows, "card not found" rows, rejected queries, empty searches, cards skipped by only-new mode and failed runs are never charged. The run stops cleanly at your maximum charge limit. Free users get a 10-row preview per run.
๐ How to scrape Scryfall in 3 steps
- Type a Scryfall search (for example
r:mythic), or pick a set and a format, or add card names, or switch on the set list. Set Max Items. - Click Start, then download the dataset as CSV, Excel, JSON or XML.
โ๏ธ Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Any Scryfall search. If all inputs are empty, the sample query c:red cmc<=2 t:instant runs. |
set | string | One set code or several separated by commas (OR). Adds set:<code> to the query. |
format | select | One of 23 formats, or any. Adds f:<format> to the query. |
sortBy | select | 15 options, edhrec (default), usd, eur, tix, released, name, rarity, cmc and more |
sortDirection | select | auto (default), asc, desc |
unique | select | cards (default), art, prints |
includeExtras | boolean | Also return tokens, planes, schemes and emblems |
cardNames | string list | Exact or misspelled card names, one row each |
includeSets | boolean | Add one row per Magic set |
includeRulings | boolean | Add one row per ruling after each card (one extra request per card), $0.001 per ruling |
onlyNew | boolean | Skip cards that an earlier run of the same search already delivered |
stateKey, resetSeen | string, boolean | Name of the onlyNew memory (empty derives it from your search); clear it before the run |
maxItems | integer | Row limit (cards, sets and rulings together). Free users: 10 |
{"searchQuery": "usd>=20","format": "commander","sortBy": "power","sortDirection": "desc","onlyNew": true,"maxItems": 100}
Scryfall lists cards with no value for the sort key first, so add a filter such as usd>0 to a price sort. An invalid sortBy value is rejected before the run starts.
๐ฆ Output
Dataset views: Cards, Prices, Legalities, Sets and Rulings. Cards not found, searches with no matches and searches Scryfall rejects add one uncharged error row. If Scryfall cannot be reached and no rows were delivered, the run fails instead of finishing empty, and nothing is charged.
๐ Scryfall scraper vs alternatives
Read from the public Apify Store listings on 2026-10-10. A cell says "not stated in their listing" when the page shows nothing about it.
| This actor | parseforge/scryfall-mtg-scraper | chrisp1211/mtg-cards-scraper-max | |
|---|---|---|---|
| Price per 1,000 | $12.00 Free tier, $10.29 Gold | from $6.00 (README $6.50) | $0.60 |
| Legality | 23 formats, one column each | 8 formats listed | 3 formats listed |
| Filters and sorts | Syntax, set, format, 15 sorts with direction | Query, set, format, 10 sorts | Syntax or names, rarity, color |
| Faces, rulings, only-new | Faces, optional rulings, only-new | Not stated in their listing | Not stated in their listing |
| Fuzzy names, set rows | Yes, both | Not stated in their listing | Names inside queries; sets not stated |
We cost more per row than every rival we read. benthepythondev lists $1.20 to $1.50 per 1,000 and ninhothedev from $0.50, both with a short field list and no legalities in their listings. If you only need bare card rows in bulk, a cheaper actor is the better buy. This one fits when you need legality columns, rulings, faces, numeric prices or only-new repeat runs.
๐ก Use cases
Card shops (price sheets), collectors and investors (usd>=X watchlists), deck builders, judges and rules tools (rulings next to each card) and app developers (seeded card database with images and legalities) use this data.
๐ Run the Scryfall Scraper via API and integrations
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('RecordsData/scryfall-mtg-cards-scraper').call({ set: 'mh3', searchQuery: 'r:mythic', maxItems: 50 });
Schedule runs or connect the dataset to Make, Zapier, n8n, Google Sheets or Airbyte.
๐ค Scryfall Scraper MCP server for AI agents
AI agents can call this Actor through the Apify MCP server at https://mcp.apify.com?tools=RecordsData/scryfall-mtg-cards-scraper. The URL loads only this Actor as a tool.
MCP client configuration (Claude Desktop, Cursor, VS Code):
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=RecordsData/scryfall-mtg-cards-scraper"}}}
Example agent prompt:
Use the Scryfall Scraper with the query "usd>=50", format commander, sorted by usd descending, 25 rows, and list each card's name, USD price and EDHREC rank so I can pick which ones to sell.
Tool description: choose this Actor when an agent needs Magic: The Gathering card data from Scryfall (prices, legality, EDHREC rank, faces, rulings, images) for a search query, a set, card names or the full set list, or only cards not seen before. It takes the same fields as the Input table above.
โ๏ธ Is it legal to scrape Scryfall?
The actor calls Scryfall's public API with a descriptive User-Agent and keeps to its published rate limits (about 600 ms between searches). It collects card and set data only, no personal data. Card text and images belong to Wizards of the Coast. Scryfall's terms forbid paywalling or simply repackaging its data; check them before republishing images or data commercially. Scryfall also asks high-volume users to use its daily bulk data files, which this actor does not use.
โ Frequently asked questions
What query syntax does the Scryfall Scraper support?
The Scryfall Scraper passes Scryfall's own search syntax through unchanged, so anything you type on scryfall.com works in the searchQuery field: c: for colors, t: for types, set:, r: for rarity, f: for format, usd>=, cmc<=, a: for artist and the rest of the syntax guide. The set and format inputs add set: and f: for you. A query Scryfall rejects gives one free error row with Scryfall's own explanation.
Where do the Scryfall Scraper card prices come from?
The Scryfall Scraper reads prices from Scryfall's own price fields: USD, USD foil, USD etched, EUR and MTGO tix, as text and as numbers. Scryfall updates these fields daily, so they are market estimates, not live store quotes. When Scryfall has no price for a card, such as Black Lotus, the price fields are left out of that row.
Why did the Scryfall Scraper return 0 results?
Either your query matches no cards on Scryfall, in which case the Scryfall Scraper ends with a free "No cards matched" row, or the cardNames could not be matched. With onlyNew on, a repeat run returns 0 rows when nothing new appeared. Test the query on scryfall.com first. Nothing is charged for empty runs.
Does the Scryfall Scraper work with misspelled card names?
Yes. The cardNames input uses Scryfall's fuzzy name match, so a misspelling such as "blak lotus" still finds Black Lotus and returns one card row. A name that cannot be matched returns an uncharged error row, so a typo costs nothing. A list that keeps failing stops after about 25 misses.
Can the Scryfall Scraper scrape all Magic cards?
Yes, in principle. Use a broad Scryfall query with a high maxItems, or unique: prints for every printing, but expect a long run and a large bill, because each card row costs $0.012 on the Free tier. One run reaches roughly 15,000 rows before the one-hour timeout. Narrow queries by set, format or price are cheaper.
How do I limit what I spend with the Scryfall Scraper?
Set a maximum charge limit in the Apify run options, and set maxItems to the number of rows you want. The Scryfall Scraper checks the limit after every card row and stops cleanly when it is reached, so a run never spends more than you allow. Error rows, empty searches, duplicates and cards skipped by only-new mode are never charged.
Is there a free trial for the Scryfall Scraper?
Free Apify accounts can run a 10-row preview of the Scryfall Scraper, enough to check the price columns, legalities and image URLs. Paid Apify plans lift the 10-row limit and get volume discounts on the $0.012 card row price, down to $0.01029 from Gold.
What happens if I send an empty or invalid input to the Scryfall Scraper?
An invalid sortBy value is rejected by the Apify platform with a 400 error before any Scryfall Scraper run is created. An empty input {} runs the sample query c:red cmc<=2 t:instant limited to 10 rows. Any other input mistake ends the run as SUCCEEDED with one free error row (for example errorType: invalid-input) and nothing charged.
Can I get only the Magic set list from the Scryfall Scraper?
Yes. Leave searchQuery empty, switch on includeSets and set maxItems to 1100 or more. The Scryfall Scraper then returns one row per Magic set. The list had 1,053 sets at the time of writing and costs $0.01 per set row, about $10.53 in total.
How does the only-new mode of the Scryfall Scraper work?
Switch on onlyNew and run the same search again later. The Scryfall Scraper remembers the Scryfall ids it already delivered in a named store of your own Apify account, one memory per search, and returns only new cards. Skipped cards are not charged. Use stateKey to share or separate memories and resetSeen to start over.
Do the rulings cost extra?
Yes, a little. With includeRulings the Scryfall Scraper adds one ruling row per official ruling or Scryfall note after each card, at the cost of one extra request per card. Each ruling row costs $0.001, so 250 rulings add $0.25. At most 100 are delivered per run, and they count towards Max Items.
๐ด Want more game and collectibles data?
- Pokemon Cards Scraper for Pokemon TCG cards and prices.
- LEGO Scraper for LEGO sets and prices.
- Steam Charts Scraper for Steam player counts and rankings.
๐ Support
Open the Issues tab on this actor's page or write to contact.punkrecordsdata@gmail.com. Custom versions are available on request.
Last updated: 2026-10-11