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.
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.
For each product row, the uploader:
- Creates a Chrome-like TLS client session.
- Adds the Vinted web auth cookies from
.env. - Warms up the homepage and extracts CSRF plus
anon_id. - Opens
/items/newto get an upload session id. - Uploads local or remote product images.
- Posts the item payload to Vinted.
- Appends
okorerrortooutput/upload_results.csv.
It also has optional proxy support and a CapSolver hook for DataDome challenges.
cp .env.example .env
cp examples/products.example.csv products.csv
go mod tidy
go run ./cmd -dry-run
go run ./cmdPut 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,,falseRequired:
titledescriptionbrand_idbrandsize_idcatalog_idpricecurrencypackage_size_idcondition_ids- one of
image_dirorphoto_urls
Optional:
color_ids: one or more color ids separated by|or;image_dir: local folder with.jpg,.jpeg,.png, or.webpfilesphoto_urls: remote image URLs separated by|or;is_unisex:trueorfalse
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
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=15sACCESS_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
Validate the CSV and image paths without calling Vinted:
go run ./cmd -dry-runUpload all products:
go run ./cmdUpload only the first three rows:
go run ./cmd -max 3Use a custom delay:
go run ./cmd -delay 60s -jitter 20sUse a different CSV or result file:
go run ./cmd -csv products.csv -results output/upload_results.csvAfter each row, the tool appends one line to output/upload_results.csv:
timestamp,title,status,item_id,item_url,errorThis file is ignored by git because it is runtime output.
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.