Tori.fi Marketplace Scraper (Finland) icon

Automation · E-commerce

Tori.fi Marketplace Scraper (Finland)

Scrape for-sale listings from Tori.fi, Finland's dominant classifieds marketplace, through the internal search JSON its own site calls — title, EUR price, brand, trade type, item condition, category path, town and region with latitude/longitude, private-vs-dealer seller, every photo URL and the full description. Search by free-text keyword, by Tori category code, or paste a filtered Tori search URL.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Tori.fi is Finland's largest marketplace, carrying millions of for-sale ads across electronics, home, vehicles-and-accessories, fashion and more — with no public API. This Actor reads Tori's internal search JSON endpoint to pull complete listing payloads (title, price in EUR, location, seller type, brand, all photo URLs), then (optionally) enriches each ad from its detail page with the full description and item condition. Search by free-text query, by category, or paste a full Tori search URL. Built on curl-cffi with browser TLS impersonation and Apify residential proxy rotation.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • Price analytics — track EUR asking prices by category and region across Finland's biggest marketplace.
  • Reseller sourcing — spot under-priced electronics, furniture or vehicle parts the moment they appear with a daily diff.
  • Dealer monitoring — filter by <code>seller_type = dealer</code> and watch a competitor's stock turnover.
  • Market research — quantify supply and pricing for any product category or brand over time.
  • Lead generation — build a directory of private sellers and dealers by category, region, and price band.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
searchUrl string no A full Tori.fi search URL you pasted (filters already applied), e.g. https://www.tori.fi/recommerce/forsale/search?category=0.90. When set, this overrides the query/category fields below.
query string no Free-text keyword search (Tori q param), e.g. iphone 15 or nahkasohva. Ignored when searchUrl is set.
category string no Tori category code, e.g. 0.90 (Auto-, vene- ja moottoripyörätarvikkeet — vehicle accessories), 0.93 (electronics). Top-level codes look like 0.NN; product codes like 2.NN.NNNN.NN. Ignored when searchUrl is set.
maxResults integer no Hard cap on dataset rows. Tori serves ~53 listings per search page; we paginate up to this cap.
enrichDetails boolean no Fetch each ad's detail page for the full description and item condition. Roughly doubles the request count.
{
  "category": "0.90",
  "maxResults": 5,
  "enrichDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

listing_idlisting_urltitlepricecurrencybrandtrade_typeitem_conditioncategory_pathlocationregionlatitudelongitudeseller_typephoto_urlsdescription

{
  "listing_id": "42285850",
  "listing_url": "https://www.tori.fi/recommerce/forsale/item/42285850",
  "title": "Jysk EDEGAL SOHVA",
  "price": 120,
  "currency": "EUR",
  "brand": "Jysk",
  "trade_type": "Myyd\u00e4\u00e4n",
  "item_condition": "UsedCondition",
  "category_path": "Koti ja sisustus > Huonekalut > Sohvat",
  "location": "Espoo, Etel\u00e4-Lepp\u00e4vaara, Uusimaa",
  "region": "Uusimaa",
  "latitude": 60.21362,
  "longitude": 24.81674,
  "seller_type": "private",
  "photo_urls": [
    "https://img.tori.net/dynamic/default/item/42285850/4591e006-7ce1-46c4-9ad1-d4e7d90b8ffb"
  ],
  "description": "Hyv\u00e4kuntoinen sohva, savuton koti.",
  "posted_date": "2026-06-02T10:08:39+00:00",
  "scraped_at": "2026-06-02T00:00:00+00:00"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
result-row$0.0020Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

Can this scrape whole used cars (passenger vehicles)?
No. Tori moved its passenger-car inventory to a separate JavaScript app at <code>autot.tori.fi</code> backed by a private API that isn't reachable over plain HTTP. This Actor scrapes the main Tori for-sale marketplace — including the <code>Auto-, vene- ja moottoripyörätarvikkeet</code> (vehicle parts & accessories) category — but not the dedicated whole-car listings. See Limitations.
How do I target a category?
Set <code>category</code> to a Tori code (e.g. <code>0.90</code> for vehicle accessories, <code>0.93</code> for electronics), type a <code>query</code>, or paste a full search <code>searchUrl</code>. The URL wins if all three are set.
Why are description and condition sometimes null?
Those live on each ad's detail page. Keep <code>enrichDetails</code> on (the default) to fill them; turn it off to halve the request count and get just title, price, location, brand, photos and seller type from the search payload.
What currency are prices in?
Euros (EUR). The <code>currency</code> field is set to <code>EUR</code> and <code>price</code> is an integer amount.
Is this a Tori-sanctioned API?
No. Tori.fi publishes no public API. This Actor reads Tori's own internal search endpoint and public ad pages politely with browser TLS impersonation and proxy rotation — see the ToS notice in the README.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Read more

Articles about this Actor

Related Actors

Teams that run this also run