MtG Csv Helper
The purpose of this tool is to automate the conversion between several collection formats for Magic the Gathering used by popular tools.
TL;DR
You are welcome to try out the web app here.
- Upload input csv file
- Select input and output format
- Click "Convert". In case of a larger collection, please allow for some processing time.
- Download converted output csv file
Currently supported:
-
Moxfield
-
DragonShield
-
Manabox
-
Topdecked
-
Deckbox
-
Potentially added by demand
- Cardkingdom (Low info, only 4 columns - Export only)
- Mtggoldfish
- TcgPlayer
- ???
-
More formats can be added in appsettings.json
Project Info
-
Created this tool for my own use since I like to keep my MtG collection up-to-date by using a card scanner.
-
The best ones I found for this purpose are Manabox and MtG DragonShield Card Manager
-
You can export data from their site, but there is no easy way to import it to some of the most popular other collection managers such as Moxfield or Deckbox
-
The other use case, unrelated to card scanners, is to keep your collection in sync across multiple sites
-
The manual conversion process is quite cumbersome, one always has to replace the corresponding Csv Headers, and replace some values that are slightly different. For example
- Card name: infuriatingly, some sites do not properly encode the full name of double-faced cards, but only front-side.
- Set information: set name or set code missing, non-standard set names
- Foil status;: encoded widely different across formats *Card condition: some sites use a scale of 6, some of 7 conditions. These need to be mapped. Loss of information is inevitable when mapping to lower resolution, though.
- Language: (code vs full name)
- Price: (various formats with various currencies, with or without currency symbol, leading or trailing position)
- etc
-
Some columns which are not common to most tools are not supported
This tool defines configurable mappings addressing the above issues in appsettings.json
How to use
Browser
- A static webapp is available at https://hottemax.github.io/MtgCsvHelper/
- As opposed to the console version, there is currently no way to access the configuration (appsettings) and customize the app's behavior
- However, it is more user-friendly and should work across a wide range of default scenarios
Console
-
Prerequisite: Installed .NET Runtime, Version >= 7.0.
-
You can download from the Releases tab on the right, or you can build from source yourself
- For building from source, unzip the source folde, and run dotnet build in the root directory of the unzipped folder
-
Run the provided MtgCsvHelper.
- Usage info can be found running it with the --help flag
-
Some additional configurability for end user via appsettings.json etc.
Troubleshooting
You can report bugs and issues on Github by creating a new issue. After the release of a new version, the browser data/cache should to be cleared to force the new version of the site to be loaded, since static webapps are kept in the browser's cache.
Current state
-
In appsettings.json, there are a lot of predefined mappings for popular sites
- DRAGONSHIELD
- MOXFIELD
- DECKBOX
- MANABOX
- TCGPLAYER
- MTGGOLDFISH
- CARDKINGDOM
-
You can add a new configuration for a site that is not yet supported, or even better, create a pull request for it.
-
The format should be self-documenting. This is an example configuration for MOXFIELD:
"MOXFIELD": {
"Quantity": "Count",
"CardName": {
"HeaderName": "Name",
"ShortNames": false
},
"SetCode": "Edition",
"SetName": null,
"SetNumber": "Collector Number",
"Finish": {
"HeaderName": "Foil",
"Normal": "",
"Foil": "foil",
"Etched": "etched"
},
"Condition": {
"HeaderName": "Condition",
"Mint": "Mint",
"NearMint": "Near Mint",
"Excellent": "Near Mint",
"Good": "Good (Lightly Played)",
"LightlyPlayed": "Played",
"Played": "Heavily Played",
"Poor": "Damaged"
},
"Language": {
"HeaderName": "Language",
"ShortNames": false
},
"PriceBought": {
"HeaderName": "Purchase Price",
"Currency": "EUR",
"CurrencySymbol": "Absent"
}
}
- The left hand side of the mappings should be adapted to match the desired format (csv header row)
- For some columns, there is additional configuration needed (for example, how the Finish is encoded
- For the Condition category, note that different sites use different scales (sometimes 6, sometimes 7 different values, as well as different naming schemes). Hence, there is no canonical mapping
- Some formats (e.g. CARDKINGDOM) should not be used for imports, since they contain very few columns
TODOs
- Support more formats by popular demand
- Add support for token cards (widely different encodings)
Examples:
Token: (TODO)
Moxfield: "1","1","Clue","tmh2","Near Mint","English","","","2022-11-15 13:00:49.057000","14"
DragonShield: 1,Clue Token,Modern Horizons 2 Tokens,TMH2,14,NearMint,German,Normal
Deckbox: 1,0,Clue,Extras: Modern Horizons 2,14,Near Mint,German,,,,,,,,$0.00
Double-sided: (FIXED)
Moxfield: "1","1","Ambitious Farmhand // Seasoned Cathar","mid","Near Mint","German","","","2022-11-14 16:57:33.500000","2"
DragonShield: Other,1,0,Ambitious Farmhand,MID,Innistrad: Midnight Hunt,2,NearMint,Normal,German,0.01,2022-01-29,0.08,0.02,0.14
Deckbox: 1,0,Ambitious Farmhand // Seasoned Cathar,Innistrad: Midnight Hunt,2,Near Mint,German,,,,,,,,$0.00
Basically, we would want to default to Scryfall's syntax (which would mean using the full double-sided name, and omitting the "Token"