Tori Finland Marketplace Scraper avatar

Tori Finland Marketplace Scraper

Pricing

Pay per event

Go to Apify Store
Tori Finland Marketplace Scraper

Tori Finland Marketplace Scraper

🇫🇮 Extract public Tori.fi secondhand listings with numeric prices, location hierarchy, images, condition, recency, purchase options, and source URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Collect public secondhand listings from Tori.fi search, category, and filtered result pages.

Turn saved Tori searches into structured marketplace data for price tracking, sourcing, inventory alerts, and recommerce research—without signing in or manually copying listing cards.

  • 🇫🇮 Built for Finland's Tori marketplace
  • 💶 Extracts numeric EUR prices
  • 📍 Separates city, district, and region
  • 🖼️ Captures listing images and direct URLs
  • 🕐 Preserves visible listing recency
  • 📦 Detects ToriDiili, buy-now, shipping, and promoted badges
  • 🔁 Follows pagination and removes duplicate item IDs

What does Tori Finland Marketplace Scraper do?

The Actor visits public Tori.fi result pages supplied in startUrls and saves one dataset row per visible marketplace listing.

It combines schema.org product data with the rendered listing card. This provides stable product fields plus useful visible signals such as location hierarchy, posted-age text, and purchase badges.

Use the output as JSON, CSV, Excel, XML, RSS, or through the Apify API.

The v1 product intentionally stays on anonymously available listing-result data. It does not claim access to private messages, phone numbers, email addresses, or account-only seller details.

Who is it for?

Recommerce sellers and dealers

Monitor Tori searches for newly listed inventory, compare asking prices, and discover sourcing opportunities by Finnish region.

Price-intelligence teams

Build repeat snapshots of product searches and analyze price distributions, condition, brand, and location.

Marketplace researchers

Study visible secondhand supply, regional availability, shipping options, and promoted listing patterns.

Automation developers

Trigger downstream alerts, spreadsheets, databases, or webhooks whenever a saved search produces new item IDs.

Why use this Tori.fi scraper?

Manual Tori browsing works for occasional shopping. It becomes slow and inconsistent when you need to monitor several searches every day.

This Actor provides:

  • Repeatability: run the same filtered URLs on a schedule.
  • Structured prices: receive numbers instead of formatted price text.
  • Traceability: every record includes its source page and scrape time.
  • Deduplication: overlapping inputs do not emit or charge duplicate item IDs.
  • Low overhead: the HTTP-only implementation does not launch a browser.
  • Fail-closed behavior: invalid domains and item-detail URLs are rejected.

What Tori listing data can I extract?

FieldTypeMeaning
itemIdstringStable numeric Tori listing identifier
urlURLDirect public listing URL
titlestringListing headline
descriptionstringShort structured description when available
pricenumberVisible asking price
currencystringUsually EUR
availabilitystringSchema.org availability, such as InStock
conditionstringSchema.org condition, such as UsedCondition
brandstringBrand exposed on the result page
imageUrlURLPrimary listing image
locationstringFull visible location label
citystringParsed city or municipality
districtstringParsed district when present
regionstringParsed Finnish region
postedAgostringTori's visible localized age text
detailsstringVisible size, brand, or card detail text
purchaseAvailablebooleanWhether the card displays “Osta heti”
purchaseBadgestringVisible ToriDiili badge
shippingBadgestringVisible shipping message
promotedBadgestringVisible placement/promotion badge
sourceUrlURLResult page that produced the record
pageNumbernumberPagination page visited
scrapedAtISO dateExtraction timestamp

Optional fields are omitted when Tori does not expose them on a card.

Common Tori marketplace workflows

New-inventory monitoring

Paste a Tori search sorted the way you need, run it on a schedule, and compare itemId values with your previous dataset.

Regional price comparison

Supply separate filtered URLs for Helsinki, Tampere, Turku, or other areas. Group output by city or region and compare median asking prices.

Used-product sourcing

Track searches for bicycles, phones, furniture, tools, collectibles, or other resale categories. Filter downstream on price and posted age.

Shipping availability research

Use purchaseAvailable, purchaseBadge, and shippingBadge to segment listings with visible transaction or delivery options.

How to scrape Tori.fi listings

  1. Open a public search, category, or filtered result page on Tori.fi.
  2. Copy the complete URL from your browser.
  3. Add it to Tori search or category URLs.
  4. Set Maximum listings to the number of unique rows you need.
  5. Keep Maximum pages per URL as a safety limit.
  6. Click Start.
  7. Open the default dataset to download or integrate the results.

A small first run of 20 listings normally finishes well within two minutes.

Input

{
"startUrls": [
{
"url": "https://www.tori.fi/recommerce/forsale/search?q=polkupy%C3%B6r%C3%A4"
}
],
"maxItems": 20,
"maxPagesPerUrl": 2
}

Input parameters

ParameterRequiredDefaultDescription
startUrlsyesTori search pagePublic Tori result URLs
maxItemsno20Global unique-listing limit, up to 10,000
maxPagesPerUrlno20Per-URL pagination limit, up to 100

The Actor accepts both request-list objects and raw URL strings through the API.

Supported Tori URLs and filters

Use public URLs under https://www.tori.fi/recommerce/forsale/ that show lists of items.

Examples include:

  • broad search pages;
  • keyword search URLs using q;
  • category result pages;
  • URLs containing Tori's visible price, location, category, or sort filters.

The Actor preserves query parameters exactly and follows Tori's own next link.

Individual /item/ detail URLs are outside the v1 contract and fail with a clear error instead of silently returning misleading data.

Output example

{
"itemId": "32826615",
"url": "https://www.tori.fi/recommerce/forsale/item/32826615",
"title": "Polkupyörä Nopsa Kombi",
"description": "Polkupyörä Nopsa Kombi",
"price": 49,
"currency": "EUR",
"availability": "InStock",
"condition": "UsedCondition",
"brand": "Helkama",
"imageUrl": "https://img.tori.net/dynamic/default/item/32826615/example",
"location": "Hyvinkää, Hakalanmäki-Hakala, Uusimaa",
"city": "Hyvinkää",
"district": "Hakalanmäki-Hakala",
"region": "Uusimaa",
"postedAgo": "5 t",
"details": "Helkama",
"purchaseAvailable": false,
"sourceUrl": "https://www.tori.fi/recommerce/forsale/search?q=polkupy%C3%B6r%C3%A4",
"pageNumber": 1,
"scrapedAt": "2026-07-24T03:52:30.054Z"
}

Pagination and deduplication

Each result URL starts at page one and follows the server-provided next-page link.

Pagination stops when one of these conditions is reached:

  • maxItems unique listings have been saved;
  • maxPagesPerUrl pages have been fetched;
  • Tori no longer exposes a next link.

The Actor keeps one in-run set of Tori item IDs. If the same listing appears in promoted and organic positions, on overlapping searches, or on repeated input URLs, it is saved and charged only once.

How much does it cost to scrape Tori listings?

The Actor uses pay-per-event pricing:

  • Run start: $0.005 per run.
  • Listing extracted: $0.000039128 per listing on the Bronze plan before tier discounts.

At the Bronze rate, a run producing 100 unique listings costs about $0.0089. A 1,000-listing run costs about $0.0441.

Apify Free-plan credits can cover small monitoring runs. Your final charge depends on the number of unique listings actually saved and your Apify subscription tier.

Check the live pricing panel for the applicable tier before starting a large run.

Integrations

Google Sheets and Excel

Export the dataset to CSV or Excel for price comparisons, sourcing lists, and manual review.

Webhooks and alerting

Send run-finished webhooks to Make, Zapier, n8n, Slack, Discord, or your own endpoint. Compare new item IDs before notifying buyers.

Databases and warehouses

Load normalized records into PostgreSQL, BigQuery, Snowflake, or a lakehouse. Use itemId as the marketplace identity key and scrapedAt for snapshots.

Scheduled Apify tasks

Create a task from a saved search input and schedule it hourly or daily. Store previous item IDs downstream to detect newly listed inventory.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/tori-finland-marketplace-scraper').call({
startUrls: [{ url: 'https://www.tori.fi/recommerce/forsale/search?q=iphone' }],
maxItems: 50,
maxPagesPerUrl: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient(token='YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/tori-finland-marketplace-scraper').call(run_input={
'startUrls': [{'url': 'https://www.tori.fi/recommerce/forsale/search?q=sohva'}],
'maxItems': 50,
'maxPagesPerUrl': 3,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~tori-finland-marketplace-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.tori.fi/recommerce/forsale/search?q=macbook"}],
"maxItems": 25,
"maxPagesPerUrl": 2
}'

Fetch results from the run's defaultDatasetId after the run succeeds.

Use with Apify MCP

Connect the Actor to Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/tori-finland-marketplace-scraper"

For Claude Desktop, Cursor, or VS Code, add this MCP server configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/tori-finland-marketplace-scraper"
}
}
}

Example prompts:

  • “Scrape the first 50 listings from this Tori bicycle search and summarize prices by region.”
  • “Run my saved Tori furniture URL and return listings with buy-now enabled.”
  • “Compare median asking prices across these three Tori search URLs.”

Tips for reliable monitoring

  • Keep the complete filtered URL instead of reconstructing parameters manually.
  • Prefer smaller scheduled snapshots over occasional huge runs.
  • Sort by newest on Tori when your workflow focuses on inventory alerts.
  • Deduplicate historical datasets by itemId.
  • Treat postedAgo as localized display text, not an exact timestamp.
  • Keep maxPagesPerUrl proportional to the result volume you need.

Reliability and data quality

The Actor requests server-rendered HTML with a current desktop browser identity.

Core product fields come from schema.org JSON-LD. Card selectors add visible location, recency, detail text, and badges.

Requests retry transient failures twice. Non-200 pages or pages with no listing cards fail the run so monitoring systems do not mistake extraction failure for an empty market.

No proxy is required by the currently verified public route.

Limitations

  • Only public search/category/filter result data is included in v1.
  • Seller contact details and account-only information are not extracted.
  • postedAgo follows Tori's Finnish display format and may be relative.
  • Some promoted cards may expose fewer structured fields than organic cards.
  • Optional fields are absent when the listing card does not show them.
  • Tori can change markup or access behavior over time.

This Actor extracts publicly visible marketplace listing information.

You are responsible for your use of the data. Review Tori's terms, robots guidance, applicable database rights, copyright rules, privacy law, and the requirements of your jurisdiction.

Do not use the Actor to circumvent authentication, collect private data, spam sellers, discriminate unlawfully, or overload the website.

Use conservative schedules and collect only the fields needed for a legitimate purpose.

Troubleshooting

The run rejects my URL

Confirm the URL uses tori.fi and points to a public path under /recommerce/forsale/. Individual item pages and unrelated domains are intentionally rejected.

The run fails with “No listing cards were found”

Open the exact URL in a normal browser. If it still shows results, retry once and inspect the run log. A persistent error may indicate that Tori changed its result-page markup or temporarily blocked access.

I received fewer rows than maxItems

The result set may have ended, the page limit may have been reached, or overlapping inputs may have contained duplicate item IDs. Increase maxPagesPerUrl only when more pages exist.

Frequently asked questions

Does the Actor require a Tori account?

No. It uses the anonymously visible result-page surface.

Does it scrape phone numbers or seller email addresses?

No. Private contact data and account-only seller details are outside the v1 scope.

Can I use a filtered Tori URL?

Yes. Paste the complete URL and the Actor preserves its query parameters.

Can I monitor several searches in one run?

Yes. Add several URLs to startUrls. The global maxItems limit and item-ID deduplication apply across all of them.

Are prices numbers?

Yes. When a visible price can be parsed, price is emitted as a number and currency is emitted separately.

Can the Actor scrape item detail pages?

Not in v1. This conservative scope prioritizes reliable anonymous search-listing data.

Choose Tori Finland Marketplace Scraper for Finnish general classifieds and the related Actors when your workflow targets those marketplaces.