Swiss Classifieds Scraper for Tutti.ch: Prices, Photos, New Ads avatar

Swiss Classifieds Scraper for Tutti.ch: Prices, Photos, New Ads

Pricing

from $1.50 / 1,000 listings

Go to Apify Store
Swiss Classifieds Scraper for Tutti.ch: Prices, Photos, New Ads

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

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

11 days ago

Last modified

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:

ChangeMeaning
NEWA listing that was not there last run
PRICE_DROP / PRICE_INCREASEThe price moved. The row shows the previous price and the change in percent
BUMPEDThe seller renewed the ad. It moved back to the top with a newer date
REMOVEDThe 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

FieldTypeRequiredDescription
modeenumNosearch (default), urls (paste tutti.ch links) or monitor (changes only).
startUrlsarray of URLsNoSearch, listing or seller links. Used in urls mode.
keywordstringNoWords to find in titles and descriptions. Default velo.
categoriesarray of enumsNoOne or more of 107 categories. A group such as Vehicles covers every category inside it.
cantonsarray of enumsNoAny of the 26 cantons. Default Zurich. Leave empty with no cities for all of Switzerland.
citiesarray of stringsNoTowns and cities by name, for example Bern or St. Gallen.
radiusKmintegerNoAlso include listings within this many kilometres of each city.
minPrice / maxPriceintegerNoAsking price range in CHF.
freeOnlybooleanNoOnly items offered for free.
sellerTypeenumNoany (default), private or commercial.
adLanguagesarray of enumsNoOnly ads written in German, French or Italian.
includePartnerSitesbooleanNoAlso include ads that come from partner marketplaces. Off by default.
sortenumNoNewest, oldest, price low to high, price high to low, or relevance.
maxItemsintegerNoMost listings per run (per link in urls mode). Default 25.
maxImagesintegerNoPhoto links per listing, 0 to 15. Default 5.
languageenumNoLanguage of category names in the output: English (default), German, French or Italian.
includeSellerIdentitybooleanNoAdds the seller's display name, account ID and profile link. Off by default.
monitorScanLimitintegerNoMonitor mode: how many of the newest matches to check each run. Default 5000.
stateNamestringNoMonitor name, so several runs share one memory.
baselineRowsbooleanNoAlso save the listings found on the first monitor run.
proxyConfigurationobjectNoConnection 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

FieldTypeDescription
id, urlstringListing number and link
title, descriptionstringListing text as the seller wrote it, with any phone numbers and e-mail addresses removed
price, currencynumber / stringAsking price in CHF. Left out for free items, price on request and unpriced ads
priceTextstringThe price exactly as shown, for example 1'050.- or Gratis
priceTypestringfixed, free or on_request
pricePeriodstringmonth, week, day or year for rentals priced per period
listedAtstringLatest listing date shown on the site (ISO 8601). Renewed ads show their newest date
category, categoryId, parentCategory, parentCategoryIdstringCategory names and stable identifiers
postcode, city, canton, cantonNamestringWhere the listing is
latitude, longitudenumberMap position. Rounded to about 1 km for private sellers
coordinatesApproximatebooleanTrue when the position was rounded
images, imageCountarray / integerPhoto links (full size) and how many photos the listing has
sellerTypestringprivate or commercial, when the site shows it
sellerPlan, sellerMemberSincestringSeller plan and join date
isPromotedbooleanPaid, highlighted placement
sourcestringtutti, or the partner marketplace the ad came from
languagestringLanguage the ad is written in: de, fr or it
condition, shippingAvailablestring / booleanCondition and shipping option, where the category has them
attributesobjectCategory details with English names: brand, model, year, mileageKm, fuelType, rooms, areaM2 and more
attributesRawobjectThe same details with the labels exactly as the site shows them
sellerAlias, sellerId, sellerUrlstringSeller name, account ID and profile link (only with includeSellerIdentity)
changeType, changeDetectedAt, previousPrice, priceChangePct, firstSeenAt, lastSeenAtmixedMonitor mode change details
scrapedAt, schemaVersionstring / integerCollection 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 condition and attributes next to price.
  • 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