Tori.fi Marketplace Scraper (Finland) avatar

Tori.fi Marketplace Scraper (Finland)

Pricing

Pay per usage

Go to Apify Store
Tori.fi Marketplace Scraper (Finland)

Tori.fi Marketplace Scraper (Finland)

Scrape for-sale listings from Tori.fi — Finland's dominant classifieds marketplace (Schibsted recommerce). Search by free-text keyword or category and get title, price in EUR, location, seller type (private/dealer), brand, photos, condition and description. Export to JSON or CSV.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share


🎯 What this 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 seller_type = dealer 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlstringno'—'A full Tori.fi search URL you pasted (filters already applied), e.g. https://www.tori.fi/recommerce/forsale/search
querystringno'—'Free-text keyword search (Tori q param), e.g. iphone 15 or nahkasohva. Ignored wh
categorystringno'—'Tori category code, e.g. 0.90 (Auto-, vene- ja moottoripyörätarvikkeet — vehicle accessories), 0.93</
maxResultsintegerno50Hard cap on dataset rows. Tori serves ~53 listings per search page; we paginate up to this cap.
enrichDetailsbooleannoTrueFetch each ad's detail page for the full description and item condition. Roughly doubles the request count.
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']}Apify Proxy spec. Finnish / residential exits are safest for Tori.fi.

Example input

{
"category": "0.90",
"maxResults": 5,
"enrichDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringTori ad ID.
listing_urlstringAbsolute URL to the listing detail page.
titlestringListing title (heading).
price['integer', 'null']Listing price as an integer in EUR.
currency['string', 'null']ISO-4217 currency code — always EUR on Tori.
brand['string', 'null']Brand / make when the seller supplied one (from the ad's brand extra).
trade_type['string', 'null']Trade type label, e.g. Myydään (for sale), Annetaan (giving away).
item_condition['string', 'null']Item condition from the detail page (e.g. NewCondition, UsedCondition). Enrichment-only.
category_path['string', 'null']Category breadcrumb from the detail page. Enrichment-only.
location['string', 'null']Seller location string (city, district, region).
region['string', 'null']Region (last segment of the location string).
latitude['number', 'null']Listing latitude when published.
longitude['number', 'null']Listing longitude when published.
seller_type['string', 'null']dealer or private, inferred from the ad flags.
photo_urlsarrayList of listing photo URLs.
description['string', 'null']Full ad description. Enrichment-only.
posted_date['string', 'null']ISO timestamp the ad was published.
scraped_atstringISO timestamp when this row was recorded.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result-row$0.002PPE event

Example: 1 000 results at the rates above ≈ $2.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

This Actor scrapes Tori's main for-sale marketplace (the recommerce/forsale search). Tori's dedicated passenger-car inventory lives on a separate JavaScript single-page app at autot.tori.fi whose backing API is not reachable over plain HTTP, so whole used cars are out of scope; the vehicle Auto-, vene- ja moottoripyörätarvikkeet category covers parts and accessories. Tori paginates results in pages of ~53 listings (max 50 pages), so very large result sets are capped. Detail enrichment doubles request count and run time. Some private listings hide the seller's name behind a contact form.

❓ FAQ

Can this scrape whole used cars (passenger vehicles)?

No. Tori moved its passenger-car inventory to a separate JavaScript app at autot.tori.fi backed by a private API that isn't reachable over plain HTTP. This Actor scrapes the main Tori for-sale marketplace — including the Auto-, vene- ja moottoripyörätarvikkeet (vehicle parts & accessories) category — but not the dedicated whole-car listings. See Limitations.

How do I target a category?

Set category to a Tori code (e.g. 0.90 for vehicle accessories, 0.93 for electronics), type a query, or paste a full search searchUrl. The URL wins if all three are set.

Why are description and condition sometimes null?

Those live on each ad's detail page. Keep enrichDetails 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 currency field is set to EUR and price 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.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.