Skip to content

JakobAIOdev/vinted-product-uploader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vinted CSV Uploader

Small Go example for uploading Vinted products from a CSV file.

It is intentionally simple: one command reads products.csv, uploads each row with its images, waits between rows, and writes the result to output/upload_results.csv.

Use it only for accounts and listings you control.

Disclaimer

This project is provided for educational purposes only. It is not affiliated with, endorsed by, or sponsored by Vinted. You are responsible for using it in compliance with Vinted's Terms of Service and all applicable laws. The authors are not responsible for account restrictions, listing removals, or any other consequences resulting from misuse.

What It Does

For each product row, the uploader:

  1. Creates a Chrome-like TLS client session.
  2. Adds the Vinted web auth cookies from .env.
  3. Warms up the homepage and extracts CSRF plus anon_id.
  4. Opens /items/new to get an upload session id.
  5. Uploads local or remote product images.
  6. Posts the item payload to Vinted.
  7. Appends ok or error to output/upload_results.csv.

It also has optional proxy support and a CapSolver hook for DataDome challenges.

Quick Start

cp .env.example .env
cp examples/products.example.csv products.csv
go mod tidy
go run ./cmd -dry-run
go run ./cmd

Put real product photos into a folder and set image_dir in products.csv.

Example:

images/test-product/photo-1.webp
images/test-product/photo-2.webp

CSV:

title,description,brand_id,brand,size_id,catalog_id,price,currency,package_size_id,color_ids,condition_ids,image_dir,photo_urls,is_unisex
Test Jacke,Uploaded with the Go Vinted uploader example,14,Adidas,103,1908,10,EUR,1,1|10,3,images/test-product,,false

CSV Columns

Required:

  • title
  • description
  • brand_id
  • brand
  • size_id
  • catalog_id
  • price
  • currency
  • package_size_id
  • condition_ids
  • one of image_dir or photo_urls

Optional:

  • color_ids: one or more color ids separated by | or ;
  • image_dir: local folder with .jpg, .jpeg, .png, or .webp files
  • photo_urls: remote image URLs separated by | or ;
  • is_unisex: true or false

Vinted metadata ids such as brand_id, size_id, catalog_id, color_ids, and condition_ids can be looked up in my dataset repo:

https://github.com/JakobAIOdev/vinted-dataset

Environment

Create .env from .env.example:

DOMAIN=vinted.de
ACCESS_TOKEN=
REFRESH_TOKEN=
GA_CLIENT_ID=
CAPSOLVER_KEY=
PROXY_FILE=proxies.txt
CSV_FILE=products.csv
RESULTS_FILE=output/upload_results.csv
DELAY=45s
DELAY_JITTER=15s

ACCESS_TOKEN is the access_token_web cookie value. REFRESH_TOKEN is optional but recommended if you already have it.

proxies.txt is optional. Supported formats:

ip:port:user:pass
http://user:pass@ip:port

Commands

Validate the CSV and image paths without calling Vinted:

go run ./cmd -dry-run

Upload all products:

go run ./cmd

Upload only the first three rows:

go run ./cmd -max 3

Use a custom delay:

go run ./cmd -delay 60s -jitter 20s

Use a different CSV or result file:

go run ./cmd -csv products.csv -results output/upload_results.csv

Output

After each row, the tool appends one line to output/upload_results.csv:

timestamp,title,status,item_id,item_url,error

This file is ignored by git because it is runtime output.

Notes

This is an example project for understanding the upload flow. Vinted can change its frontend, internal endpoints, or anti-bot behavior at any time, so expect maintenance work.

About

Small Go example for uploading Vinted products from a CSV file.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages