I want to play a custom MTG format where the card pool is defined by a Scryfall search and updated twice a year. For example, my search might be f:standard f:penny usd<=1
.
How can I export, share, and import the list of legal cards with other people so that we can all check card legality and use a deck builder with the same pool of cards?
✅ This will create a fully Moxfield-compatible CSV with all cards from a Scryfall search.
import requests import csv import time QUERY = "f:standard f:penny usd<=1" BASE_URL = "https://api.scryfall.com/cards/search" PARAMS = { "q": QUERY, "unique": "cards", "format": "json" } OUTPUT_FILE = "moxfield_import.csv" FIELDNAMES = [ "Count", "Tradelist Count", "Name", "Edition", "Condition", "Language", "Foil", "Tags", "Last Modified", "Collector Number", "Alter", "Proxy", "Purchase Price" ] def fetch_all_cards(): url = BASE_URL params = PARAMS.copy() while True: resp = requests.get(url, params=params) resp.raise_for_status() data = resp.json() for card in data.get("data", []): yield card if not data.get("has_more"): break url = data["next_page"] params = None time.sleep(0.2) def write_cards_to_csv(filename): with open(filename, "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=FIELDNAMES) writer.writeheader() for card in fetch_all_cards(): row = { "Count": 1, "Tradelist Count": "", "Name": card.get("name"), "Edition": card.get("set"), "Condition": "", "Language": card.get("lang"), "Foil": "Yes" if card.get("foil") else "No", "Tags": "", "Last Modified": "", "Collector Number": card.get("collector_number"), "Alter": "", "Proxy": "", "Purchase Price": "" } writer.writerow(row) if __name__ == "__main__": write_cards_to_csv(OUTPUT_FILE) print(f"Saved all cards to {OUTPUT_FILE}")
My first try was using this script:
Query Scryfall + dump card names out for easy import into Moxfield❯ python scryfall_search.py -q "f:standard f:penny usd<=1" --output-as-file "$HOME/desktop/out.csv" Running Scryfall search on f:standard f:penny usd<=1 legal:commander Found 1,197 total matches!
But when I tried importing the output csv in Moxfield, I got a bunch of
No card name found on line x
errors.That’s pretty straightforward with Powershell
$url = 'https://api.scryfall.com/cards/search?q=f%3Astandard f:penny usd<=1' $data = @() DO { $response = $(Invoke-WebRequest $url).Content | ConvertFrom-Json $data = $data + $response.data $url = $response.next_page } WHILE ($response.has_more) FOREACH ($card in $data) { ECHO $card.name }
This gives you a plain list of card names
Is there a deckbuilder that allows using just that list to build decks? How would I import it?
#!/bin/bash url="https://api.scryfall.com/cards/search?q=f%3Astandard+f%3Apenny+usd<=1" data=() while [ -n "$url" ]; do response=$(curl -s "$url") data_chunk=$(echo "$response" | jq -c '.data[]') while read -r card; do data+=("$card") done <<< "$data_chunk" has_more=$(echo "$response" | jq -r '.has_more') if [ "$has_more" = "true" ]; then url=$(echo "$response" | jq -r '.next_page') else url="" fi done for card_json in "${data[@]}"; do echo "$card_json" | jq -r '.name' done
deleted by creator
If you do a Scryfall search the URL will match the parameters of the search. So you can just copy and share the link.
Scryfall will update Standard/Penny Dreadful rotation and price as it changes, so the list will always be current.
The list needs to be static. How can you create decks for a format that is constantly changing? What I need is a way to share a consistent list of legal cards so that everyone can search within the same list, rather than each person having a different version.