Tutti.ch Scraper — Swiss Classifieds, Prices & Sellers
Pricing
from $3.00 / 1,000 listings
Tutti.ch Scraper — Swiss Classifieds, Prices & Sellers
Scrape tutti.ch classifieds by keyword, category, canton, or URL. Each row has the CHF price, location, seller, and photos. Monitor mode saves only new ads and price changes.
Pricing
from $3.00 / 1,000 listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Tutti.ch Scraper
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by SMG Swiss Marketplace Group AG or its affiliates. Data is read from publicly accessible search results and listing records only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
Tutti.ch scraper for Swiss classifieds. Each row is one listing: asking price in CHF, canton, seller, and photo. Search by keyword, category, and canton, or paste a results URL. Use it as a tutti.ch API alternative from Python, Node.js, cURL, or Apify MCP.
Best for: phone and goods comps, used cars, property and job leads, and a scheduled run that saves only new ads and price changes.
| Actor | Role |
|---|---|
| Tutti.ch Scraper ◄── you are here | Swiss classifieds: CHF price, canton, seller, new-ad monitor |
| Leboncoin Scraper | France classifieds |
| Marktplaats Scraper | Netherlands classifieds |
| Facebook Marketplace Scraper | Marketplace listings |
| Sahibinden Scraper | Turkey classifieds |
| mobile.de Scraper | Germany car listings |
| Subito Real Estate Scraper | Italy property listings |
When to use this Actor
- A keyword in one category — Set Keyword to iphone and Category to Phones. Add a canton such as ZH if you want one region.
- Cars, property, furniture, or jobs — Pick the category and leave the keyword empty for the latest ads in that section.
- A results page you already opened — Paste the search URL. A link with a search token is read as that saved search. Keyword and category are ignored when Search URLs is set.
- One listing — Paste the listing URL. The run saves that record, including the description and map point.
- New ads and price cuts — Turn on monitor mode and schedule the same search. The first run stores a baseline and saves nothing. Later runs save new listing ids and price changes.
When not to use this Actor
- Other Swiss marketplaces — This Actor reads tutti.ch only.
- A national dump in one run — Cap
maxItems(150). Split by category or canton. - Private messages or accounts — No login, and no inbox.
Key features
- Search cards — Title, CHF price, town, canton, postcode, seller name, seller type, and the first photo. Default 256 MB. No browser.
- Optional listing record — Description, photo gallery, map coordinates, and attribute pairs. A phone or email is included only when the seller wrote it in the public description.
- Keyword, category, canton, and price — Cars, phones, real estate, furniture, bicycles, and jobs, or every category at once.
- Pasted URL — Search links, search tokens, and single listing pages.
- Monitor — Named key-value store of listing id and last price for that search. The seed run does not open listing records.
Input
| Field | Required | Default | What it does |
|---|---|---|---|
| Search or listing URLs | No | — | Wins over keyword and category. |
| Keyword | No | iphone | Search text when URLs are empty. |
| Category | No | Phones | Section used when URLs are empty. |
| Canton | No | — | Short code, such as ZH or GE. |
| Minimum / maximum price | No | — | Asking price in CHF. |
| Sort | No | Newest | Newest, oldest, cheapest, most expensive, or relevance. |
| Language | No | German | Labels and the listing URL. |
| Max age (hours) | No | — | Stop once listings are older than this. |
| Fetch listing details | No | off | Description, gallery, coordinates, and attributes. |
| Maximum listings | No | 30 | Rows to save, up to 150. |
| Monitor mode | No | off | Baseline first, then new ids and price changes. |
| Monitor state store | No | tutti-monitor | Named store for the baseline. |
| Proxy | No | Swiss residential | Required from the cloud. Usage for the proxy is on your account. |
{"keyword": "iphone","category": "cellPhones","canton": "ZH","maxPrice": 800,"sort": "newest","includeDetails": true,"maxItems": 30,"monitorMode": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "CH"}}
Output
| Field | Meaning |
|---|---|
id | Listing id |
url | Public listing page |
title | Listing title |
price | Asking price in CHF |
priceLabel | Price text from the listing |
currency | CHF |
category, categoryId | Section label and id |
location, canton, cantonCode, postcode | Place |
postedAt | When the listing was posted |
sellerName, sellerId, sellerType | Public alias, account id, private or pro |
image, images | First photo, then the gallery when details are on |
description | Listing text when details are on |
latitude, longitude | Map point when details are on |
attributes | Attribute pairs from the listing record |
email, phone | Present only when written in the public description |
changeType | new or price_change on monitor runs |
previousPrice | Prior asking price when changeType is price_change |
scrapedAt | UTC timestamp |
{"id": "83303214","url": "https://www.tutti.ch/de/vi/iphone-18-pro-256gb/83303214","title": "iPhone 18 Pro 256Gb","price": 1300,"priceLabel": "1'300.-","currency": "CHF","category": "Handys","categoryId": "cellPhones","location": "Lugano","canton": "Tessin","cantonCode": "TI","postcode": "6900","sellerName": "Erik","sellerType": "private","image": "https://c.tutti.ch/big/3297308070.jpg"}
Use cases
- Compare asking prices for one phone model and keep
sellerTypeso business ads are separate from private sellers. - Pull used cars in one canton with a price cap, then turn on listing details for mileage and condition when the record includes them.
- Schedule monitor mode each morning and export only listings whose price moved.
- For France, run Leboncoin Scraper. For the Netherlands, run Marktplaats Scraper.
Integration examples
Replace APIFY_TOKEN. The slug below is the Store name.
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("crawloop/tutti-ch-scraper").call({keyword: "iphone",category: "cellPhones",canton: "ZH",maxItems: 30,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("crawloop/tutti-ch-scraper").call(run_input={"keyword": "bmw","category": "cars","maxItems": 30,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items))
cURL
curl -X POST "https://api.apify.com/v2/acts/crawloop~tutti-ch-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword":"iphone","category":"cellPhones","maxItems":30}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP.
Connect your Apify account, then call this Actor by its Store name crawloop/tutti-ch-scraper.
Example prompts:
- "Run Tutti.ch Scraper for iphone in canton ZH and return price, location, and seller type as JSON"
- "Scrape tutti.ch cars under a CHF price cap and summarize asking price by canton"
- "Run Tutti.ch Scraper in monitor mode for sofas, then use Leboncoin Scraper for the same goods in France"
Suite next step
This Actor covers Swiss classifieds. For the same kind of listing in France, run Leboncoin Scraper. For the Netherlands, run Marktplaats Scraper.
FAQ
Does this open every listing record? Only when Fetch listing details is on, or when you paste one listing URL. Monitor seed runs skip those records and save nothing.
Which country is included? Switzerland, on tutti.ch. German, French, and Italian labels are available.
What if the run is blocked? Keep Swiss residential selected and retry. A datacenter proxy is often refused.
What does monitor mode skip? Listing ids already stored for that same search, unless the asking price changed. A quiet tick writes zero rows. The first run only fills the baseline.
Are phone numbers included? Only when the seller wrote a phone number or email in the public description. Hidden contact buttons are not opened.