DEV Community

Cover image for Watch + Read: How to Find Cross-Country Arbitrage on Vinted in 6 Seconds
KazKN
KazKN

Posted on

Watch + Read: How to Find Cross-Country Arbitrage on Vinted in 6 Seconds

A real arbitrage on Vinted, found this morning: the same Nike Air Max 90 sells for €25 in Spain and €105 in France. That's a +320% spread on the exact same model, every day, hidden by Vinted's default search.

Most resellers never see it because Vinted hides seller country in search by default. You'd have to open 5 tabs in 5 languages, normalize 5 currencies, and manually compare — most people give up before they find the spread.

I built Vinted Smart Scraper on Apify to remove that friction. One query, 19 European markets, ranked by price spread, in 6 seconds.

This article is the written companion to the 6-minute video tutorial below. Watch the walkthrough, or skim the steps in text — both cover the same flow.

Watch the tutorial (6 min)

What you'll get

The Actor returns a structured dataset with:

  • Title, price (normalized to EUR via the ECB rate), currency, country code
  • Brand, size, condition, photos, favorites count, view count
  • Seller info (id, username, profile URL)
  • ScrapedAt timestamp

Ranked by price ascending, the cheapest cross-country listing surfaces first. Sort, filter, export to JSON / CSV / Excel / Google Sheets / webhook.

Step 1 — Navigate

Head to apify.com/kazkn/vinted-smart-scraper. Click Try for free.

If you don't have an Apify account, sign up with Google. The free tier covers 9,000 results per month — no credit card required.

Step 2 — Configure the input

Three modes are available:

  • SEARCH — single country, one query
  • CROSS_COUNTRY — arbitrage detection across all selected markets
  • URL — direct item URLs (for sellers tracking specific listings)

For arbitrage, always pick CROSS_COUNTRY. SEARCH mode misses the cross-market spread by definition.

Example input:

{
  "mode": "CROSS_COUNTRY",
  "query": "nike air max 90",
  "countries": ["fr", "de", "es"],
  "maxItems": 20
}
Enter fullscreen mode Exit fullscreen mode

Each item costs €0.005 (half a cent), so 20 items per query is €0.01 total. The Actor normalizes prices to euros via the European Central Bank rate, so you compare apples to apples across markets.

Step 3 — Run the Actor

Click Start. The Actor spins up an Apify cloud worker, opens a Playwright browser instance per country, and hits the Vinted API for each market sequentially.

A typical 3-country scan looks like this in the logs:

12:00:09  ACTOR  Starting container...
12:00:14  INFO   Vinted Scraper · CROSS_COUNTRY mode
12:00:17  INFO   query: "nike air max 90"
12:00:28  INFO   Opening browser for fr...
12:00:53  INFO   Got 7 items from fr
12:00:54  INFO   Opening browser for de...
12:01:14  INFO   Got 7 items from de
12:01:14  INFO   Opening browser for es...
12:01:32  INFO   Got 6 items from es
12:01:33  INFO   Scraper complete: 20 items
Enter fullscreen mode Exit fullscreen mode

Wall time: ~90 seconds for 3 countries × 7 items each. The whole thing runs without you managing proxies, browser fingerprints, or Datadome bypass logic — the Actor handles all of it.

Step 4 — Review the dataset

Once the run succeeds, click the Output tab. Sort by price ascending.

For my run on nike air max 90, the dataset shows:

  • 🇪🇸 Spain — Nike Air Max 90 "Black Jewel", €25.00, size 38, "muy bueno"
  • 🇪🇸 Spain — Air Max 90 Talla 39, €28.00, size 39, "bueno"
  • 🇩🇪 Germany — Nike Air Max 90 hr. 38.5, €40.00, size 38.5, "sehr gut"
  • 🇩🇪 Germany — Air Max 90 Vintage Wash, €65.00, size 44, "neu"
  • 🇫🇷 France — Air Max 90 Pure Platinum, €90.00, size 43, "très bon état"
  • 🇫🇷 France — Air Max 90 Team en 42.5, €105.00, size 42.5, "très bon état"

The cheapest sits at €25 in Spain. The priciest at €105 in France. Same model, different markets. +320% spread, +€80 of margin per pair.

Step 5 — Export

Click the export menu. You can download as JSON, CSV, or Excel, send to a webhook, or sync directly to Google Sheets.

For arbitrage workflows, CSV + Google Sheets is the simplest pipeline. Schedule the Actor to sync daily and you'll wake up to a fresh leaderboard.

Step 6 — Automate

Apify's built-in scheduler lets you run the Actor every morning at 6 AM. Combined with a webhook to your Notion / Airtable / Slack, you get a daily arbitrage digest in your tool of choice.

A typical reseller setup:

  1. Schedule the scan daily at 6 AM
  2. Webhook pushes the leaderboard to Slack channel #vinted-arbitrage
  3. Filter by spread > 50% and condition = "excellent" or "new"
  4. Buy + flip the top 3 results before lunch

Pro tips

After 54 builds and several months in production, three lessons that compound:

1. Always use CROSS_COUNTRY mode for arbitrage. SEARCH mode only scans a single country — by definition, you miss the spread between markets.

2. Cap maxItems aggressively. Start with 20-50 items per query for testing. Scale up only after you've validated which queries surface real arbitrage. Budget control matters: each item is half a cent.

3. Schedule daily runs. New listings appear constantly. Yesterday's spread might be gone today (someone else found it). Daily monitoring is what separates serious resellers from lurkers.

Free tier math

The free tier covers 9,000 results per month. That's enough for:

  • 30 queries × 300 items each, OR
  • 300 queries × 30 items each

Pick the granularity that matches your reseller workflow. You don't need to upgrade until you're processing serious volume.

Open source

The Actor source code is on GitHub. The full README with input schema documentation, output examples, and pricing details is on the Apify Store page.

Cross-country price gaps exist on Vinted every single day — sneakers, branded jackets, women's coats, vintage tees. The pattern repeats across categories. The scanner just makes it visible.

What's next

If you build something with the Actor, drop a comment with the product you're hunting for. I'm collecting use cases for a future article on category-level arbitrage patterns.


Built with: TypeScript · Apify SDK · Crawlee · Playwright · Datadome bypass.

Try the Actor: apify.com/kazkn/vinted-smart-scraper

Top comments (0)