A macOS desktop app for managing your Pokemon card collection. Track inventory, grading, sales, and photos — all stored locally in an Excel workbook.
- Add cards by pasting a Cardmarket URL (auto-fills name, set, card number) or manually
- Collection view with filtering (All / Collection / For Sale / Sold / Grading)
- Grading tracker — submit cards for grading and record results
- Partial selling — sell part of your stock, track sales with profit calculation
- eBay integration — create draft listings or publish directly from your inventory
- Photo upload from your phone via local WiFi (built-in web server)
- Cardmarket links — double-click a card to open its Cardmarket page
- Statistics tab with investment totals, grading overview, and sales summary
- Auto-update — check for new versions directly from the app
- Excel-based storage — your data lives in a standard
.xlsxfile you can open anytime
- macOS
- Python 3.10+
- Dependencies:
openpyxl,Pillow
git clone https://github.com/Werizu/PokemonCardManager.git
cd PokemonCardManager
chmod +x install.sh
./install.shThis will:
- Create
~/Pokemon-Sammlung/with your data folders - Set up a Python virtual environment and install dependencies
- Create an empty Excel workbook with the correct structure
- Place a Poke Inv app on your Desktop (with icon)
Double-click Poke Inv on your Desktop, or run:
~/Pokemon-Sammlung/.venv/bin/python3 ~/Pokemon-Sammlung/pokemon_card_manager.py- Go to the Add tab
- Paste a Cardmarket URL — name, set, and card number fill automatically
- Select language, condition, source, and enter price/quantity
- Click Save
When the app is running, it starts a local web server for phone uploads:
- Look at the bottom of the window for the upload URL (e.g.
http://192.168.1.x:8080) - Open that URL on your phone (same WiFi network)
- Select the card ID and upload a photo
- Select a card in the Collection tab
- Click Mark Sold
- Enter sale price, platform, fees, and quantity to sell
- The inventory quantity decreases; a sales record is created
The app can create listings on eBay directly from your inventory — either as API drafts or published live.
- Go to developer.ebay.com and sign in with your eBay account
- Go to My Account > Application Access Keys
- Click Create a keyset and choose a name (e.g. "Pokemon Card Manager")
- If your keyset shows "disabled", click Apply for exemption under Marketplace Account Deletion and select "I do not persist eBay data"
- Note your App ID (Client ID) and Cert ID (Client Secret)
- On the Application Keys page, click User Tokens next to your keyset
- Select OAuth (new security)
- Click Get a Token from eBay via Your Application
- Click Add eBay Redirect URL and enter:
- Auth Accepted URL:
https://yourdomain.com/ebay/callback(any HTTPS URL you own) - Auth Declined URL:
https://yourdomain.com/ebay/declined - Privacy Policy URL:
https://yourdomain.com/privacy - Display Title: e.g. "Pokemon Card Manager"
- Auth Accepted URL:
- Save — eBay will generate a RuName (e.g.
Your_Name-AppName-PRD-xxxxxx)
Note: eBay requires a real HTTPS domain —
localhostis not accepted. The redirect URL does not need to actually host anything. After authorizing, you simply copy the URL from your browser and paste it into the app.
- Open the app and click eBay Settings
- Enter your Client ID, Client Secret, and RuName
- Select your Marketplace (e.g.
EBAY_DEfor Germany) - Click Save & Connect
- Your browser opens the eBay login page — log in and grant access
- After authorization, eBay redirects to your redirect URL. The page may show an error — that's normal
- Copy the full URL from your browser's address bar (it contains
?code=...) - Paste it into the dialog in the app
- Done — the app exchanges the code for an access token automatically
- Select a card in the Collection tab
- Click List on eBay
- Set your price and quantity
- Choose:
- Save as Draft — stores the offer in the eBay API for later publishing
- Publish Now — creates a live listing on eBay immediately
The app automatically handles:
- Condition mapping — ungraded cards use eBay's card condition descriptors (Near Mint, Excellent, etc.); graded cards include the grading service (PSA, BGS, CGC, ...) and grade
- Photo upload — if the card has a photo, it is uploaded to eBay automatically
- Duplicate detection — if an offer already exists for the card, it is updated instead of creating a duplicate
Click Check for Updates in the Collection tab to check for a newer version on GitHub. If an update is available, the app downloads the latest code and restarts automatically.
Only the application code is updated — your data is never touched:
| Preserved (your data) | Updated |
|---|---|
Pokemon-Inventar.xlsx |
pokemon_card_manager.py |
Fotos/, Karten/ |
|
.ebay_config.json |
|
.app_config.json, .card_urls.json |
All data is stored locally in ~/Pokemon-Sammlung/:
| Path | Content |
|---|---|
Pokemon-Inventar.xlsx |
Inventory, sales, and dashboard |
Fotos/ |
Card photos (named by card ID) |
Karten/ |
Card data as JSON files |
.card_urls.json |
Cardmarket URLs per card |
.app_config.json |
Window size and preferences |
.ebay_config.json |
eBay credentials and tokens (do not share) |
MIT