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

Part 1 of the thread Desktop tinkering
- What it is
- Open-source tool
- My role
- Creator
- Year
- 2025
- Built with
- Python
- requests
- BeautifulSoup4
- aiohttp
- lxml
- 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.