Wes Ellis./ a personal notebook
Technology. Stories. Side projects.
A few things worth writing down.
← Back to Side Projects

Side Projects

eBay Auction Scraper: A Quick Look at What Things Are Going For

A flea market table covered with vintage radios, gadgets and odds and ends.

Part 1 of the thread Desktop tinkering

PROJECT AT A GLANCEOpen source · experimental
What it is
Open-source tool
My role
Creator
Year
2025
Built with
  • Python
  • requests
  • BeautifulSoup4
  • aiohttp
  • lxml
THE SHORT VERSION4 points
  • Give it a list of search terms and it scrapes current eBay auction listings and prices into an HTML report.
  • Runs async by default for speed, with a synchronous mode and a test mode that compares the two.
  • It's a basic scraper: no price history, no deal detection and no alerts yet, despite what the name suggests.
  • Scraping the page instead of using eBay's API means layout changes can break it.

Before you buy something used, or list something of your own, you want to know what it's actually selling for. eBay's search will show you, but flipping through pages for three or four different search terms gets old fast.

ebay-auction-scraper is a Python script that does the flipping. You give it search terms, it goes and pulls the auction listings, and you get one HTML page with the lot. It's for personal price research: a quick snapshot, not a trading bot.

What it does

  • Scrapes eBay auction listings for multiple search terms in one run
  • Extracts and formats prices
  • Does basic duplicate detection, so the same listing turning up under two searches only shows once
  • Writes an HTML report to the output/ folder

The example config in the README searches for Game Boy Advance hardware, which gives you a good sense of the intended use. If you've been shopping for a handheld, this is the kind of question it answers: what do these go for right now?

How it works

The code is split into a few pieces under src/: a core package with the scrapers and data models, generators for the HTML report (with a fallback generator), and utils for text processing, helpers and performance monitoring. Parsing is BeautifulSoup with lxml underneath.

It has three modes:

Mode What it does
Optimized (default) Async requests with aiohttp, for faster runs
Standard Plain synchronous requests
Test Runs both and compares performance

There are knobs for concurrent request limits, connection pooling, memory caps and request timeouts, all in the config.

Using it

Clone it, install the requirements, run it:

git clone https://github.com/wesellis/ebay-auction-scraper.git
cd ebay-auction-scraper
pip install -r requirements.txt
python main.py

What it searches for lives in src/config.py. Search terms use + between words, and you can cap how many listings it pulls per search and in total:

SEARCH_TERMS = [
    "gameboy+advance",
    "gba+sp",
    "nintendo+handheld"
]

SCRAPING.max_listings_per_search = 30
SCRAPING.max_total_listings = 100

Heads up

You're responsible for respecting eBay's Terms of Service and following rate limits. eBay may rate-limit you anyway, and the scraper only has basic delays, so keep your listing caps modest and don't run it in a tight loop.

Rough edges

I'll be straight about this one, because the README is. The project name promised price tracking over time and a deal-spotting algorithm, and neither exists yet. There's no database, so every run is a fresh snapshot, and there are no notifications, watchlists, scheduling or charts.

Works today Not there yet
Async and sync scraping Price history database
Multiple search terms Deal detection
HTML reports Alerts for price drops
Price extraction CSV or JSON export
Basic duplicate detection Built-in scheduling

It also scrapes the web page rather than using eBay's official API, so a change to eBay's HTML can break parsing without warning. Error handling and retries are minimal, and there are no automated tests.

Note

The README calls it a personal project for learning web scraping, and that's the right way to think about it. Good for one-off auction research, not for ongoing monitoring.

If I pick it back up, the order is roughly: an SQLite table for price history, then deal detection on top of that history, then a move to eBay's Finding API so it stops being at the mercy of page layout. It's in the same batch of small utilities as YouTube Subscription Copier, and pull requests are welcome.