Skip to content

Repository files navigation

Depop Reseller

Desktop application for keyword-based Depop search scraping, local SQLite history, median/IQR valuation heuristics, deal scoring, and optional desktop / Discord alerts. Includes a CLI for automation and CSV export.

Important: Automated access may conflict with Depop’s terms of use. Use conservative rate limits, do not bypass authentication, and comply with applicable laws and platform rules. This project is provided for education and legitimate personal use only.

Screenshot

Depop Reseller main window — search panel, last-run log, and results table

Dark-themed desktop UI: keywords and options on the left, deals table on the right. If your Discord webhook is visible in a screenshot you share publicly, regenerate the webhook in Discord and treat the old URL as compromised.

Security (for contributors and GitHub)

  • Do not commit Discord webhooks, API keys, or personal data. Use environment variables (DEPOP_RESELLER_DISCORD_WEBHOOK) or a local config.toml / config.yaml — those filenames are gitignored.
  • Do not commit data/ (SQLite) or logs/; they stay local by default.
  • Never paste live webhook URLs into GitHub issues or public chats.

Releases (pre-built Windows zip)

Latest release includes a Windows amd64 zip built with PyInstaller. Extract it and run depop_reseller\depop_reseller.exe. You still need Chromium for Playwright on that machine (see the release notes or Build a Windows .exe).

Requirements

  • Python 3.10+ (3.11+ recommended; tomllib is built-in on 3.11+)
  • Windows, macOS, or Linux (GUI tested for Windows; PySide6 is cross-platform)
  • Playwright Chromium browser

Setup

cd "c:\Users\mpcon\Downloads\Depop Reseller"
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python -m playwright install chromium

Use python -m playwright (not bare playwright) if Windows reports 'playwright' is not recognized — the CLI often lives in %APPDATA%\Python\Python3xx\Scripts, which may not be on your PATH.

Development / CI: pip install -r requirements-dev.txt (includes everything in requirements.txt plus pinned dev tools).

Optional: copy config.example.toml to config.toml in the project root to tune delays, fees, and paths. (config.toml is not tracked by git.)

Quick start (Windows)

  1. Install Python 3.10+ and complete Setup once (venv, pip install, playwright as above).
  2. Double-click Run.bat in the project root. It activates .venv if present, then runs python -m depop_reseller, and pauses so you can read any errors.

Run (GUI)

python -m depop_reseller

Or after pip install -e .:

depop-reseller

GUI behavior

  • File → Export results as CSV… saves the current table using the same columns as the CLI export.
  • Last run panel shows per-keyword progress and errors without opening log files.
  • Window layout, keywords, and options (except the Discord webhook) are restored via Qt QSettings on this machine. Webhooks are not saved in QSettings for safety; use DEPOP_RESELLER_DISCORD_WEBHOOK or config.toml for a persistent default.
  • Brand multipliers default to the packaged depop_reseller/brands/brand_multipliers.json (default_brand_multipliers_path()), independent of the current working directory.

CLI (headless scan & export)

After pip install -e ., the console entry point is depop-reseller-cli. You can also run:

python -m depop_reseller.cli version
python -m depop_reseller.cli scan -k "carhartt jacket" --no-headless
python -m depop_reseller.cli scan --keywords-file keywords.txt --expand-typos
python -m depop_reseller.cli export-deals -k "carhartt jacket" -o deals.csv
  • scan — runs Playwright, writes to SQLite under data/ (or --data-dir).
  • export-deals — reads the existing DB and prints CSV to stdout or -o / --output.
  • version — prints the package version.

Common flags: --config path/to/config.toml, --data-dir to override the database directory, --max-pages, --concurrent (scan only).

Environment variables

  • DEPOP_RESELLER_CONFIG — path to config.toml / config.yaml
  • DEPOP_RESELLER_DISCORD_WEBHOOK — default Discord webhook URL
  • DEPOP_RESELLER_LOG_LEVEL — e.g. DEBUG

Architecture

depop_reseller/
  scraper/       Playwright search URL, scroll, DOM extract, rate limits, retries
  storage/       SQLite (listings, price_observations, scrape_runs), WAL
  processing/    Normalize prices, misspellings, CSV export
  models/        Median/IQR valuation, fees, deal score
  brands/        JSON multipliers + loader
  orchestration/ Async multi-keyword scan, ScanService for GUI/CLI
  gui/           PySide6 main window, results model, background worker
  notify/        Desktop (plyer), Discord webhook
  cli.py         argparse entry for scan / export-deals / version

Data flow: scraper → SQLite → valuation + deal scoring → GUI table / CSV / alerts.

Project layout (paths)

  • data/ — SQLite DB (created at runtime; gitignored by default)
  • logs/ — rotating depop_reseller.log
  • depop_reseller.spec — PyInstaller spec (root); output under dist/ / build/ (gitignored)

Tests & CI

pytest tests -q

GitHub Actions (.github/workflows/ci.yml) runs pytest on Python 3.11 and 3.12 on pushes/PRs to main/master.

Troubleshooting

Issue What to try
playwright not found python -m playwright install chromium
Empty Title in results Re-run scan; titles are inferred from card text if Depop omits aria-label.
Discord never alerts Alerts only when Score ≥ Alert min score. Use Test webhook to verify the URL.
Wrong Brand path Use Browse… or rely on the default packaged JSON; avoid fragile relative paths like brands\... from another working directory.

Build a Windows .exe (PyInstaller)

  1. Complete setup above and verify python -m depop_reseller runs.
  2. Run PyInstaller from the repository root (the folder that contains the depop_reseller package — needed if the path has spaces, e.g. Depop Reseller).
  3. Playwright browsers are not bundled in the zip; run python -m playwright install chromium on the target PC (or copy %LOCALAPPDATA%\ms-playwright from a machine that already has it).
cd "path\to\Depop Reseller"
pip install pyinstaller
pyinstaller depop_reseller.spec

Outputs appear under dist/depop_reseller/. Run dist\depop_reseller\depop_reseller.exe.

Notes:

  • First startup may be slow; Windows Defender sometimes flags PyInstaller binaries (false positives). Code signing reduces friction.
  • After copying the folder to another PC, install Chromium for Playwright on that PC if the app cannot find browsers.

Maintenance

Depop’s HTML changes. If scraping breaks, update selectors and extraction logic in depop_reseller/scraper/selectors.py and depop_scraper.py only.

Publishing to GitHub

Create an empty repository on GitHub (no README/license if you already have them in this folder). From the project root:

git init
git add .
git status
git commit -m "Initial commit: Depop Reseller"
git branch -M main
git remote add origin https://github.com/YOUR_USER/YOUR_REPO.git
git push -u origin main

Review git status before committing: you should not see config.toml, .env, data/, or logs/.

With GitHub CLI (gh auth login first):

gh repo create YOUR_REPO --public --source=. --remote=origin --push

License

MIT — see LICENSE.

About

Desktop Depop marketplace scanner

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages