Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PokeVision Intelligence System

A Flask dashboard that scans eBay for Pokemon card listings, compares them to PriceCharting market prices, and classifies each one as avoid, hold, or flip based on projected profit.

Built for personal use to surface mispriced cards worth buying for resale.

How it works

For every card you add, the app:

  1. Scrapes the current market price from PriceCharting (requests + BeautifulSoup).
  2. Scrapes active eBay Buy-It-Now listings via Playwright (with a persistent browser profile and US locale spoofing to avoid foreign listings).
  3. Filters out junk titles (custom, proxy, display case, fan art, replica, DIY, PSA-graded, lots, bulk).
  4. Calculates the economics per listing:
    • Cost basis = listing price + 6.5% sales tax + shipping
    • Gross profit = market price − cost basis
    • Resale expenses = 14% of market price (eBay/marketplace fees)
    • Net profit = gross profit − resale expenses
  5. Classifies the listing:
    • avoid — gross profit < 0
    • hold — gross profit > 0 but net profit < 0
    • flip — net profit > 0
  6. Stores everything in a local SQLite database and renders a dashboard with totals, top flips, and per-listing detail.

Tech stack

  • Python 3 / Flask — web app
  • Playwright (Chromium, persistent context) — eBay scraping
  • requests + BeautifulSoup — PriceCharting scraping
  • SQLite — local storage (pokevision.db, gitignored)

Setup

# 1. Clone
git clone https://github.com/Nathanzo/pokevision-intelligence-system.git
cd pokevision-intelligence-system

# 2. Install dependencies
pip install flask requests beautifulsoup4 playwright

# 3. Install the Playwright browser
playwright install chromium

# 4. Run the app
python app.py

Then open http://localhost:5002 in your browser. The SQLite database initializes automatically on first run.

Usage

  • Add Card — paste a PriceCharting URL and an eBay search query (e.g. pikachu ex 276). The card's image is fetched from PriceCharting and saved.
  • Scan Listings — pick which saved cards to scan. The app pulls up to 20 active listings per card from eBay, scores each one, and writes the results to the dashboard.
  • Home — see total scans, counts by classification, top 3 flips by net profit, and the full list of hold + flip candidates.

Project structure

app.py          # Flask routes and dashboard context
main.py         # Profit math and the per-card scan pipeline
scraper.py      # PriceCharting + eBay (Playwright) scrapers
database.py     # SQLite schema, inserts, queries
templates/      # Jinja templates (home, add_card, scan_listings, base)

Notes

  • The eBay scraper spoofs a US location (Massachusetts, ZIP 02493) so search results match what a US buyer would see.
  • The Playwright browser profile (playwright_profile/) is gitignored — it can contain session cookies.
  • The local database (pokevision.db) is also gitignored. The schema is recreated on first run.
  • Scrapers are subject to breaking whenever eBay or PriceCharting change their HTML. The selectors live in scraper.py.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages