Auction Resale Scout
A ranked buy list for ShopGoodwill auctions, ready each morning.

What it does
At 05:00 each morning, cron starts a run that collects about 1,200 ShopGoodwill auctions, prices the listings it can match against 120,000+ past auctions, and sends a ranked buy list. It does the daily research for my resale side business (~$1,500/month) and uses no paid services.
When a title is too vague to price, the tool sends the listing photos to a vision model on my own GPU server and asks for the brand and model number. The run still finishes if that server is offline; those rows are marked as not photo-checked.
How it works
- One worker waits 2–5 seconds between requests and stops after three failures in a row.
- API responses are cached locally, so a parser change can be re-run without fetching again.
- The vision model is told to leave the model number blank when it can't read it, instead of guessing.
- A failed photo check is recorded on that row and the run moves on.
Built with
Python · SQLite · cron · local vision model
Selected code
| File | What it shows |
|---|---|
| auction_api.py | Read-only API requests with pacing, retries, and a local response cache. |
| photo_check.py | Photo checks against an optional local vision server. |
| scheduling.md | The daily cron schedule. |
Design notes
- The API client has no bidding endpoint or other write action.
- The vision server is optional and configured only through
VISION_HOST. An unreachable server is treated as a normal result.