Swiss Classifieds Scraper for Tutti.ch: Prices, Photos, New Ads
Pricing
from $1.50 / 1,000 listings
Swiss Classifieds Scraper for Tutti.ch: Prices, Photos, New Ads
Scrape Swiss classifieds from tutti.ch by keyword, category and canton. Every row has a clean CHF price, photos, location with canton, seller type and posting date. Monitor mode returns only new, repriced, re-listed and removed ads. Export to Excel, Sheets or JSON. $2.00 per 1K listings.
Pricing
from $1.50 / 1,000 listings
Rating
0.0
(0)
Developer
GetAScraper
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
11 days ago
Last modified
Categories
Share
🛍️ Swiss Classifieds Scraper for Tutti.ch: Prices, Photos, New Ads
|
Spot the underpriced bike, phone or sofa in Switzerland before anyone else does Pull tutti.ch listings by keyword, category, canton and price into a clean spreadsheet. Schedule it, and every run returns only the new listings, price drops and removed ads. |
|
🔎 No search links to hunt Pick a keyword, category, canton and price range in the form. Pasted links work too. |
💰 Prices you can sort A real number in CHF, never a fake 0. Free items and price on request are flagged. |
📦 Everything in one row Location, photos, condition, car and property details and seller join date. No extra step. |
🔔 Pay only for what changed The first monitor run is free. Unchanged listings are never charged. |
Swiss Classifieds Scraper collects second-hand listings from tutti.ch, Switzerland's general classifieds marketplace. Each row holds the price, place, photos, condition and category details you would otherwise open every ad to find. No tutti.ch account, login or key is needed.
This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by tutti.ch, Ricardo or Swiss Marketplace Group.
🔍 What does Swiss Classifieds Scraper do?
It turns a tutti.ch search into a flat spreadsheet, one row per listing. You choose what to look for, where, and how many results you want.
- Search: filter by keyword, one or more of 107 categories, any of the 26 cantons or named cities (with an optional radius), price range, free items, private or business sellers, and ad language. Sort by newest, oldest, price or relevance.
- Paste links: drop in a tutti.ch search, a single listing or a seller page. Search links keep their filters.
- Monitor: run the same search on a schedule. Each run returns only new listings, price drops, price increases, renewed ads and ads that disappeared.
Large searches are read in parts so you still get close to every match. The run summary shows how many listings tutti.ch reports and how many you received, with the reason for any gap.
👥 Who uses it
- Resellers and flippers: "I check for bikes, consoles and phones listed below market price, and I want to see them within minutes of going up."
- Trade-in and valuation teams: "I need the going used price by model, condition and canton, refreshed every week."
- Dealers: "I track what other dealers hold in stock and which of their prices just dropped."
- Price researchers and journalists: "I count how many listings exist for a category and how asking prices move over time."
- Bargain hunters: "I want every free item in my canton, the day it is posted."
- Data teams: "We need the same columns every run, with empty values left empty instead of made-up ones."
🚀 How to use it
|
STEP 1 Say what you want Type a keyword, pick categories and cantons, set a price range. Or paste tutti.ch links. |
STEP 2 Choose search or monitor Search returns listings now. Monitor remembers the last run and reports only changes. |
STEP 3 Download or schedule Export to Excel, CSV or JSON, or run it every hour or every day. |
The default input returns 25 recent bike listings from the canton of Zurich in a few seconds, so you can see the full output before you change anything.
🔔 Monitor new listings and price drops
Pick Monitor changes as the mode, set your filters and schedule the Actor. The first run records what is listed today. It is free and saves no rows, unless you turn on Save the first run's listings. After that, each run returns only:
| Change | Meaning |
|---|---|
NEW | A listing that was not there last run |
PRICE_DROP / PRICE_INCREASE | The price moved. The row shows the previous price and the change in percent |
BUMPED | The seller renewed the ad. It moved back to the top with a newer date |
REMOVED | The listing is gone from tutti.ch |
Unchanged listings produce no row and cost nothing. Give each monitor a name so its memory is shared across scheduled runs. To catch removed listings, set Monitor scan limit above the number of matches.
📥 Input
| Field | Type | Required | Description |
|---|---|---|---|
mode | enum | No | search (default), urls (paste tutti.ch links) or monitor (changes only). |
startUrls | array of URLs | No | Search, listing or seller links. Used in urls mode. |
keyword | string | No | Words to find in titles and descriptions. Default velo. |
categories | array of enums | No | One or more of 107 categories. A group such as Vehicles covers every category inside it. |
cantons | array of enums | No | Any of the 26 cantons. Default Zurich. Leave empty with no cities for all of Switzerland. |
cities | array of strings | No | Towns and cities by name, for example Bern or St. Gallen. |
radiusKm | integer | No | Also include listings within this many kilometres of each city. |
minPrice / maxPrice | integer | No | Asking price range in CHF. |
freeOnly | boolean | No | Only items offered for free. |
sellerType | enum | No | any (default), private or commercial. |
adLanguages | array of enums | No | Only ads written in German, French or Italian. |
includePartnerSites | boolean | No | Also include ads that come from partner marketplaces. Off by default. |
sort | enum | No | Newest, oldest, price low to high, price high to low, or relevance. |
maxItems | integer | No | Most listings per run (per link in urls mode). Default 25. |
maxImages | integer | No | Photo links per listing, 0 to 15. Default 5. |
language | enum | No | Language of category names in the output: English (default), German, French or Italian. |
includeSellerIdentity | boolean | No | Adds the seller's display name, account ID and profile link. Off by default. |
monitorScanLimit | integer | No | Monitor mode: how many of the newest matches to check each run. Default 5000. |
stateName | string | No | Monitor name, so several runs share one memory. |
baselineRows | boolean | No | Also save the listings found on the first monitor run. |
proxyConfiguration | object | No | Connection settings. Leave the default. |
📤 Output example
{"schemaVersion": 1,"id": "82275250","url": "https://www.tutti.ch/de/vi/zuerich/sport-outdoor/velos/moustache/82275250","title": "MOUSTACHE","description": "Guten Tag \n\nIch gebe ein Damen e-Bike ab vom Hersteller MOUSTACHE, Model X Road Samedi 27. \n\nUnterstützung bis 25Km/h. \n \nMotor von BOSCH Performance...","priceText": "1'050.-","price": 1050,"currency": "CHF","priceType": "fixed","listedAt": "2026-10-10T03:34:56.000Z","category": "Bicycles","categoryId": "bicycles","parentCategory": "Sports & Outdoors","parentCategoryId": "sportsOutdoors","postcode": "8620","city": "Wetzikon ZH","canton": "ZH","cantonName": "Zürich","latitude": 47.31916809082031,"longitude": 8.807463645935059,"images": ["https://c.tutti.ch/big/2982940807.jpg","https://c.tutti.ch/big/5575852348.jpg"],"imageCount": 10,"sellerType": "commercial","sellerPlan": "tutti_pro","sellerMemberSince": "2018-04-13T08:48:48.015Z","isPromoted": false,"source": "tutti","language": "de","condition": "Gebraucht","shippingAvailable": true,"scrapedAt": "2026-10-10T11:02:56.572Z"}
A value the listing does not state is left out of the row. You will never see placeholders like "N/A" or "Unknown", and a missing price is never shown as 0.
📊 Data table
| Field | Type | Description |
|---|---|---|
id, url | string | Listing number and link |
title, description | string | Listing text as the seller wrote it, with any phone numbers and e-mail addresses removed |
price, currency | number / string | Asking price in CHF. Left out for free items, price on request and unpriced ads |
priceText | string | The price exactly as shown, for example 1'050.- or Gratis |
priceType | string | fixed, free or on_request |
pricePeriod | string | month, week, day or year for rentals priced per period |
listedAt | string | Latest listing date shown on the site (ISO 8601). Renewed ads show their newest date |
category, categoryId, parentCategory, parentCategoryId | string | Category names and stable identifiers |
postcode, city, canton, cantonName | string | Where the listing is |
latitude, longitude | number | Map position. Rounded to about 1 km for private sellers |
coordinatesApproximate | boolean | True when the position was rounded |
images, imageCount | array / integer | Photo links (full size) and how many photos the listing has |
sellerType | string | private or commercial, when the site shows it |
sellerPlan, sellerMemberSince | string | Seller plan and join date |
isPromoted | boolean | Paid, highlighted placement |
source | string | tutti, or the partner marketplace the ad came from |
language | string | Language the ad is written in: de, fr or it |
condition, shippingAvailable | string / boolean | Condition and shipping option, where the category has them |
attributes | object | Category details with English names: brand, model, year, mileageKm, fuelType, rooms, areaM2 and more |
attributesRaw | object | The same details with the labels exactly as the site shows them |
sellerAlias, sellerId, sellerUrl | string | Seller name, account ID and profile link (only with includeSellerIdentity) |
changeType, changeDetectedAt, previousPrice, priceChangePct, firstSeenAt, lastSeenAt | mixed | Monitor mode change details |
scrapedAt, schemaVersion | string / integer | Collection time and schema version |
The run's RUN_SUMMARY record shows, for each search, how many listings tutti.ch reports and how many were delivered, plus any places, categories or links that were skipped. If fewer listings arrive than expected, the log says so with the gap.
💰 Pricing
This Actor uses pay per event: you pay per listing saved, and in monitor mode only per change found. The price is $2.00 per 1,000 listings on the free plan, and lower on paid plans. Full listing detail is included in that price. Empty searches, unchanged monitor listings and the first monitor run cost nothing. There is no subscription.
Free plan runs are limited to 25 listings per run, 3 runs per day, and a 30-minute wait between runs.
⭐ Enjoying Tutti.ch Scraper?
|
⭐ ⭐ ⭐ ⭐ ⭐ Found a bargain, or saved a morning of copying prices into a spreadsheet? A 5-star rating takes 10 seconds and helps other resellers and price researchers find it. Your feedback also tells us what to build next. |
| ★ Rate this Actor on Apify |
💡 Tips
- For a used-price benchmark, search one category and canton, sort by price, and read
conditionandattributesnext toprice. - Cars carry brand, model, year, mileage, fuel, gearbox and power as separate typed columns, so they filter and pivot cleanly.
- To see only private sellers' bargains, set Seller type to private and sort by newest.
- Set Photos per listing to 0 for a lighter file when you only need prices and places.
- Monitoring many searches? Give each one its own Monitor name.
❓ FAQ
Do I need a tutti.ch account or API key? No. The Actor reads publicly listed information only. There is nothing to log into and no key to set up.
Does it collect phone numbers or e-mail addresses? Never. Contact details are not collected, and phone numbers or e-mail addresses that a seller typed into a title or description are replaced with [removed]. Seller names are off by default and appear only if you switch on Include seller name and ID.
How fresh is the data? Each run reads tutti.ch when it runs. Schedule a monitor to get new listings and price drops as often as you need.
Why are some prices empty?
Free items, ads with "price on request" and ads without a price have no number to report. They are labelled with priceType instead of a fake 0.
Does it include anibis.ch or Ricardo listings? It returns tutti.ch ads. Ads shown on tutti.ch from partner marketplaces are left out unless you turn on Include partner-site ads, and each such row says where it came from.
Is it legal to scrape tutti.ch? The Actor collects publicly visible listing information. The site's terms limit automated use, so check that your use case is allowed. Listings can contain personal data, so follow the Swiss data protection act (nDSG) and GDPR where they apply. Private sellers' map positions are rounded, and no contact details are collected.
🔗 Other actors
- Mercari US Scraper ↗ - Active and sold Mercari listings with price and seller data.
- Mercari Sold Comps Scraper ↗ - Sold prices, sell-through and days to sell for resale research.
- OLX Marketplace Scraper ↗ - Classified ads with prices and postal codes across 7 countries.
- Marktplaats Cars Scraper ↗ - Dutch used cars with prices and seller data.
- Kleinanzeigen Cars Scraper ↗ - German used cars with dealer data.