Skip to content

JakobAIOdev/Vintrack-Vinted-Monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

375 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vintrack

Vintrack

Open-source Vinted monitoring platform for resellers.
Real-time scraping · Discord & Telegram alerts · Proxy rotation · Account linking · Beautiful dashboard

Monitors Next.js Go PostgreSQL Redis Docker

⭐ If you find Vintrack useful, please consider giving it a star on GitHub! It helps the project grow and reach more people. ⭐

Vinted Bot Scraper Reselling Monitor

Live DemoBrowser ExtensionSelf-HostingFeaturesCommunityArchitectureScreenshotsContributing


Live Demo

You can try Vintrack without hosting anything yourself:

Demo Quick Start

  1. Open https://vintrack.jakobaio.dev and sign in with Discord.
  2. Open Proxies and add your own proxy group if your account does not have server proxy access.
  3. Open Monitors or the dashboard and create a monitor with your Vinted search, region, price, size, brand, and country filters.
  4. Enable notifications:
    • Discord: paste your Discord webhook URL in the monitor notification dialog.
    • Telegram: click Connect Telegram, send the generated /connect ... command to the bot shown in the dialog, then enable Telegram for the monitor.
  5. Watch new items in the dashboard, live feed, Discord, or Telegram.
  6. Optional: install the browser extension and link your Vinted account from the Account page to like items, send offers, message sellers, and keep your Vinted session synced.

Demo Notes

  • Free demo accounts normally use their own proxies. Server proxies are not guaranteed on the public demo.
  • The demo is shared infrastructure, so monitoring reliability can vary.
  • Telegram users never need a bot token or chat ID. The public demo shows the bot username during the connect flow.
  • Discord notifications require your own Discord webhook URL.
  • Vinted account linking is optional, but it is required for actions such as liking items, sending offers, sending messages, and checkout-link tools.

Why Vintrack?

Vinted doesn't have a proper notification system — you either refresh manually or miss the deal. Vintrack solves this by monitoring listings and sending alerts to Discord or Telegram before anyone else can see the item.

Built for resellers who need speed. Open-sourced for the community.

  • Sub-2s detection — catch items faster than any other tool
  • Anti-detection — TLS fingerprint rotation with proxy support
  • Granular filters — price, size, category, brand, color, and country/region
  • Direct Interaction — Like items, send offers, and message sellers from the dashboard
  • Browser session sync — Chrome extension keeps linked Vinted sessions fresh without copying tokens manually
  • Experimental checkout tooling — browser-assisted checkout link creation with checkout-link history
  • Full dashboard — no CLI needed, everything from the browser
  • One-command deploydocker compose up and you're live

Features

Real-Time Monitoring

Create unlimited monitors with custom search queries. Each monitor polls the Vinted API independently with configurable intervals (default: 1.5s). Results are deduplicated via Redis — you'll never see the same item twice.

Advanced Filters

Fine-tune every monitor with:

  • Search query — keyword-based filtering
  • Price range — min/max price boundaries
  • Categories — over 900+ Vinted categories supported
  • Brands — filter by specific brands
  • Colors — filter by item colors
  • Sizes — clothing size filtering
  • Seller Origin — filter by seller country (e.g. only show items from France or Italy)
  • Region — choose the Vinted market per monitor (e.g. vinted.de, vinted.hu, vinted.fr)

Vinted Account Linking & Interactions

Link your Vinted account directly in the dashboard to interact with listings without leaving Vintrack:

  • Like / Unlike items — one-click like/unlike from the feed or monitor view
  • Send Offers — make price offers directly to sellers (with built-in 60% minimum price validation)
  • Message Sellers — start a conversation or ask questions instantly
  • Browser-assisted checkout — Vintrack opens the native Vinted checkout flow in your browser and stores checkout links for recovery
  • Multi-Image Preview — view extra images and high-res gallery directly in the dashboard
  • Account management — link/unlink with region selection (12 EU markets)
  • Browser Sync Extension — automatically refreshes the linked session when you log in to Vinted in the same browser
  • Status monitoring — see your linked account status, username, and domain at a glance

The recommended linking flow is the browser extension. Install it once, sign in to Vinted in the same browser, then connect it from the Vintrack Account page. Manual token linking still exists as a fallback, but normal users should not need it.

Browser Extension

The extension is the easiest way to use linked Vinted accounts on the live demo and in self-hosted installs.

  • Chrome download: vintrack-browser-sync-extension.zip
  • Firefox download: vintrack-browser-sync-extension-firefox.xpi
  • Source: apps/vintrack-browser-sync-extension
  • Install in Chrome: open chrome://extensions, enable Developer mode, click Load unpacked, and select the extracted extension folder
  • Install in Firefox: open about:debugging#/runtime/this-firefox, click Load Temporary Add-on, and select the Firefox build during development. For normal users, publish a Mozilla-signed .xpi.
  • Connect in Vintrack: open Account, click Download Extension if needed, then Link With Installed Extension
  • What it syncs: access_token_web, refresh_token_web, Vinted domain, browser user agent, and the Vintrack light/dark theme
  • What it does not sync: the full cookie header or full cookie jar

For distribution, attach vintrack-browser-sync-extension.zip and the Mozilla-signed vintrack-browser-sync-extension-firefox.xpi to every GitHub release. The live demo and documentation can point to /releases/latest/download/..., so users do not need to browse the repo.

Experimental Buy Disclaimer

Vintrack includes an experimental buy module for controlled checkout tests. It is intentionally separated from the normal monitoring workflow.

  • The buy module is experimental and may break when Vinted changes authentication or checkout protection.
  • Use a dedicated buy account for this module, not your main personal Vinted account.
  • The browser-assisted checkout flow uses the shipping address and checkout context already stored on your linked Vinted account.
  • Vintrack opens the native Vinted checkout link; the user chooses the payment method and completes payment manually.
  • Vintrack does not replace or override your delivery address or payment method in this flow.
  • The extension is strongly recommended, otherwise automatic session recovery may fail.
  • Use experimental buy actions only if you understand that Vinted may reserve an item before payment is completed.

Discord & Telegram Notifications

Rich alerts sent instantly when a new item is found:

  • Item image, title, price (including fees), size, condition
  • Seller region & rating (enriched via HTML scraping)
  • Direct buy link + app deep link + dashboard link
  • Discord webhooks per monitor
  • Telegram account connection via one-time bot code — users never see the bot token or chat ID
  • Per-monitor notification toggles

Live Feed

Server-Sent Events (SSE) stream items directly to the dashboard in real-time. See every new listing appear the moment it's detected — no manual refresh needed.

Proxy System

Two-tier proxy architecture designed for scale:

  • Server proxies — shared pool for premium users
  • User proxy groups — BYOP (Bring Your Own Proxies) for free users
  • Automatic rotation with tls-client TLS fingerprint spoofing
  • Input validation — garbage lines are silently skipped
  • Supports http://, https://, socks4://, socks5://, and host:port:user:pass formats
  • Note: vinted.co.uk does not support IPv6 proxies. Use IPv4 proxies for UK monitors.

Multi-User & Roles

Built-in role system with Discord OAuth:

Role Server Proxies Own Proxies Admin Panel
Free
Premium
Admin

Community & Support

Need help, want to exchange setups with other users, or report a bug?

  • Join the Vintrack Discord server: https://discord.gg/WbEpEjaWjP
  • Use the server for community support, feature feedback, setup questions, and bug reports
  • For reproducible code issues, GitHub issues and PRs are still welcome

Screenshots

Preview

Dashboard Live Feed

Create Monitor Admin Panel

Send Message Dialog Send Offer Dialog

Account Page Discord Alert


Architecture

                         ┌──────────────────┐
                         │     Internet     │
                         └────────┬─────────┘
                                  │
                         ┌────────▼─────────┐
                         │      Caddy       │
                         │  (Auto HTTPS)    │
                         └────────┬─────────┘
                                  │
                    ┌─────────────▼──────────────┐
                    │      Control Center        │
                    │  Next.js 16 · React 19     │
                    │  Prisma · NextAuth · SSE   │
                    └──┬──────────┬──────────┬───┘
                       │          │          │
          ┌────────────▼──┐  ┌────▼────────┐ │
          │  PostgreSQL   │  │    Redis    │ │
          │   (Storage)   │  │(Cache+Dedup)│ │
          └────────────▲──┘  └──▲────────▲─┘ │
                       │        │        │   │
              ┌────────┴────────┴──┐  ┌──┴───▼──────────┐
              │     Go Worker      │  │ Vinted Service  │
              │ tls-client · proxy │  │ Account linking │
              │  rotation · scrape │  │ Likes · Offers  │
              └──────┬──────────┬──┘  └────────┬────────┘
                     │          │              │
            ┌────────▼──┐  ┌───▼───────┐  ┌───▼────────┐
            │ Vinted API │ │ Alerts    │  │ Vinted API │
            │ (Proxied)  │ │Discord/TG │  │  (Authed)  │
            └────────────  └───────────┘  └────────────┘

Data flow:

  1. User creates a monitor via the dashboard
  2. Go Worker detects the new monitor within 5s and starts a goroutine
  3. Goroutine polls Vinted API through rotating proxies
  4. New items are deduplicated via Redis, stored in PostgreSQL, published via SSE
  5. Discord and Telegram notifications fire immediately for configured monitors
  6. Users with a linked Vinted account can like items, send offers, and message sellers directly via the Vinted Service

Tech Stack

Layer Technology Purpose
Frontend Next.js 16, React 19, Tailwind CSS 4, shadcn/ui Dashboard & UI
Backend Next.js Server Actions, API Routes API & auth
Worker Go 1.25, tls-client, goroutines High-perf scraping
Vinted Service Go 1.25, TLS client, Redis sessions Account linking & item actions
Database PostgreSQL 15 + Prisma ORM Persistent storage
Cache Redis 7 Deduplication & SSE pub/sub
Auth NextAuth.js v5 (Discord OAuth2) Authentication
Proxy tls-client with SOCKS4/5 & HTTP(S) Anti-detection
Reverse Proxy Caddy 2 Auto HTTPS via Let's Encrypt
Deployment Docker Compose One-command orchestration

Self-Hosting

Use this section if you want to run your own Vintrack instance instead of using the public demo.

What You Need

Before starting, prepare:

  • Docker & Docker Compose v2
  • Discord Developer App (for OAuth2 login)
  • Proxies for Vinted monitoring (residential recommended)
  • A public HTTPS domain for production
  • Optional: a Telegram bot from @BotFather if you want Telegram notifications

Proxy Recommendation (Referral)

If you need proxies, I currently recommend Webshare Proxy Server as the better option. Webshare also offers a small amount of free proxies, which can be enough for short initial tests.

1. Clone the Repository

git clone https://github.com/JakobAIOdev/Vintrack-Vinted-Monitor
cd vintrack

2. Create the Environment File

cp .env.example .env

Edit .env and configure at least the required auth values:

# Generate with: openssl rand -base64 32
AUTH_SECRET=your-random-secret

# From Discord Developer Portal
AUTH_DISCORD_ID=your-discord-client-id
AUTH_DISCORD_SECRET=your-discord-client-secret

# Local development
AUTH_URL=http://localhost:3000
DASHBOARD_URL=http://localhost:3000

For production, both URLs must use your public HTTPS domain:

AUTH_URL=https://your-domain.com
DASHBOARD_URL=https://your-domain.com

DASHBOARD_URL is used for dashboard links in notifications. If it is missing or set to localhost, Telegram item alerts still send, but the Telegram dashboard button is omitted because Telegram rejects local URLs.

3. Configure Discord OAuth

In the Discord Developer Portal:

  1. Create an application.
  2. Open OAuth2.
  3. Add your redirect URL:
    • Local: http://localhost:3000/api/auth/callback/discord
    • Production: https://your-domain.com/api/auth/callback/discord
  4. Copy the client ID and client secret into .env.

4. Add Proxies

Add one proxy per line:

nano apps/worker/proxies.txt

Example:

http://user:pass@host:port

Free users can also add their own proxy groups from the dashboard. Admin and premium users can use server proxies when configured.

5. Start Vintrack

docker compose up -d --build

Open:

http://localhost:3000

Environment Variables Reference

The most important variables are:

# Required — generate with: openssl rand -base64 32
AUTH_SECRET=your-random-secret

# Required — from Discord Developer Portal
AUTH_DISCORD_ID=your-discord-client-id
AUTH_DISCORD_SECRET=your-discord-client-secret

# Required in production — public app URL used by auth and dashboard links
AUTH_URL=https://your-domain.com
DASHBOARD_URL=https://your-domain.com

# Optional — Telegram notifications
TELEGRAM_BOT_TOKEN=your-telegram-bot-token
TELEGRAM_BOT_USERNAME=your_bot_username_without_at
TELEGRAM_WEBHOOK_SECRET=your-random-webhook-secret

Telegram Setup for Self-Hosted Instances

Telegram support uses a secure connect-code flow. The bot token stays on the server; users connect from the dashboard by sending a generated /connect VT-... command to your bot.

  1. Create a Telegram bot with @BotFather.
  2. Set these variables in the root .env:
TELEGRAM_BOT_TOKEN=your-telegram-bot-token
TELEGRAM_BOT_USERNAME=your_bot_username_without_at
TELEGRAM_WEBHOOK_SECRET=your-random-webhook-secret
  1. Make sure DASHBOARD_URL points to your public HTTPS dashboard:
DASHBOARD_URL=https://your-domain.com
  1. After deploying Vintrack on HTTPS, register the webhook:
curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/setWebhook?url=https://your-domain.com/api/telegram/webhook&secret_token=$TELEGRAM_WEBHOOK_SECRET"
  1. Verify delivery:
curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getWebhookInfo"
  1. In Vintrack, open a monitor's notification dialog, click Connect Telegram, send the generated command to the bot shown in the dialog, then enable Telegram for that monitor.

Users do not need to know the bot token or chat ID. They only need the bot username shown in Vintrack and the one-time connect command.

Local Telegram Testing

Telegram webhooks require a public HTTPS URL. For local testing, expose localhost:3000 with ngrok or Cloudflare Tunnel.

Example with an ngrok URL:

AUTH_URL=http://localhost:3000
DASHBOARD_URL=https://your-ngrok-subdomain.ngrok-free.dev
TELEGRAM_BOT_TOKEN=your-telegram-bot-token
TELEGRAM_BOT_USERNAME=your_bot_username_without_at
TELEGRAM_WEBHOOK_SECRET=your-random-webhook-secret

Then register the webhook against the tunnel URL:

curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/setWebhook?url=https://your-ngrok-subdomain.ngrok-free.dev/api/telegram/webhook&secret_token=$TELEGRAM_WEBHOOK_SECRET"

Recreate the services after changing .env:

docker compose up -d --force-recreate control-center worker

Production Deployment

For a first production deployment from the published images:

docker compose pull
docker compose up -d

If you want to build the images directly on the server instead:

docker compose up -d --build

Make sure your domain points to the server and ports 80 and 443 are available for Caddy.

Production Updates & Database Migrations

For release updates on a server, pull the new images and run the migration service before recreating the app services:

git pull
docker compose pull
docker compose up --force-recreate control-center-migrate
docker compose up -d --force-recreate control-center worker vinted-service caddy

The control-center-migrate service uses the same pulled control-center image and runs npx prisma migrate deploy, so new Prisma migrations are applied even when deploying with docker compose pull.

Do not use prisma db push --accept-data-loss in production. Schema changes should be represented as committed Prisma migrations.

Proxy Formats

Vintrack accepts multiple proxy formats (one per line in apps/worker/proxies.txt):

http://user:pass@host:port
socks5://user:pass@host:port
host:port:user:pass
host:port

Invalid lines are automatically skipped with a warning in logs.


Roadmap

  • Vinted Account Linking
  • Like / Unlike items
  • Send offers to sellers
  • Send messages to sellers
  • One-click buy
  • Auto-buy with price rules
  • Auto Chat Module
  • Price history tracking & charts
  • Saved searches / favorites
  • Rate limiting per user
  • API tokens for external integrations
  • Mobile app (React Native)

Contributing

Contributions are welcome! Here's how:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please make sure to:

  • Follow existing code style
  • Test your changes with docker compose up --build
  • Update documentation if needed

Acknowledgements


License

This project is licensed under the MIT License.


Built with ❤️ for the reselling community
If Vintrack helped you catch a deal, consider giving it a ⭐