Occasion-Preise auf tutti.ch vergleichen
Du verkaufst gebrauchte Ware weiter oder bepreist Occasionen in deinem Shop und willst wissen, was ein Gerät auf tutti.ch wirklich kostet? Der Tutti.ch Scraper holt die Inserate zu deiner Suche und liefert sie als Tabelle: Preis, Kanton, Zustand, Versand und Datum. Daraus rechnest du Median und Quartile in Excel oder lässt Claude rechnen. Ohne Code.
In diesem Tutorial
Das bekommst du
tutti.ch bietet keine Export-Funktion für Suchergebnisse. Der Tutti.ch Scraper liest die Inserate einer Suche (Stichwort, Kategorie, Preis, Region, so wie du sie auf tutti.ch einstellst) und legt sie als Tabelle ab, die du als CSV, Excel oder JSON herunterladen kannst. Jede Zeile ist ein Inserat, hier gekürzt, mit erfundenen Beispielwerten zur Veranschaulichung der Struktur:
{
"id": "12345678",
"title": "iPhone 15 Pro Max 256 GB",
"price": "450.-",
"price_chf": 450,
"category": "cellPhones",
"location": "Bern",
"canton": "BE",
"seller_type": "private",
"posted_at": "2026-10-20T10:00:00+02:00",
"properties": { "Versand verfügbar": "Ja", "Zustand": "Gebraucht" },
"source_url": "https://www.tutti.ch/de/vi/12345678"
}Alle Felder im Überblick
So sind die Felder laut Ausgabe-Schema des Actors aufgebaut. Ohne includeDetails fehlen die Felder, die nur auf der Detailseite stehen. Dazu gehört properties mit Zustand und Versand.
| Feld | Typ | Inhalt |
|---|---|---|
id | Text | Eindeutige Inserate-ID |
title / description | Text | Titel und Text des Inserats |
price / price_chf / currency | Text / Zahl | Preis als Text („450.-“) und als Zahl in CHF. Fehlt im Inserat ein Preis, bleibt das Feld leer |
category / category_label / category_path | Text | Kategorie-Kennung (zum Beispiel cellPhones); lesbarer Name und Pfad nur mit Details |
location / canton / postcode | Text | Ort, Kanton als Kürzel und Postleitzahl |
seller_type / seller_plan | Text | private oder professional, bei Profis der Plan |
posted_at | Text | Zeitpunkt der Veröffentlichung |
properties | Objekt | Zustand und Versand, nur mit includeDetails |
image_url / image_count / image_urls | Text / Zahl | Titelbild, Anzahl Bilder; alle Bild-URLs nur mit Details |
latitude / longitude / seller_id / seller_member_since | Zahl / Text | nur mit Details |
is_highlighted / listing_source | Wahrheitswert / Text | ob das Inserat beworben ist, und ob es von tutti oder einer Partnerseite kommt |
seller_name / phone / email | Text | Angaben der Anbieter. Können Personendaten sein, siehe FAQ |
source_url / scraped_at | Text | Link zum Inserat und Zeitpunkt des Abrufs |
Beispiel: iPhone 15 in der ganzen Schweiz
Du bepreist gebrauchte iPhones 15 und willst wissen, was Anbieter auf tutti.ch dafür verlangen. Wir haben die Suche einmal lokal laufen lassen (21.10.2026): Stichwort „iphone 15“, ganze Schweiz, die 150 neuesten Inserate, mit Detailseiten. Die 150 Inserate stammen aus rund vier Tagen (17. bis 21.10.2026). Aussortiert haben wir nach dem Lauf 63 Inserate: 52 in anderen Kategorien als Handys (fast alles Zubehör wie Hüllen, Schutzgläser und Ladegeräte), 5 Hüllen und Folien in der Kategorie Handys (Preis unter 100 CHF) und 6 andere Modelle (iPhone 12, SE, 16 und 17). Übrig blieben 87 Inserate:
- Preis: Der Median der Angebote liegt bei 470 CHF. Das untere Quartil liegt bei 394,50 CHF, das obere bei 500 CHF, die Spanne reicht von 199 bis 999 CHF.
- Nach Modell (aus dem Titel gelesen): Pro Max 33 Inserate, Median 490 CHF. Pro 34 Inserate, Median 475 CHF. Plus 3 Inserate, Median 400 CHF. Standard oder im Titel nicht genannt 17 Inserate, Median 350 CHF.
- Zustand: 83 Inserate sind als „Gebraucht“ eingetragen (Median 470 CHF), 2 als „Neu“, 1 als „Defekt“ (199 CHF), bei 1 fehlt die Angabe.
- Versand: 62 von 87 Inseraten bieten Versand an, 24 nicht, bei 1 fehlt die Angabe.
- Kantone: Die Inserate verteilen sich auf 19 Kantone. Am meisten gibt es in Zürich (25, Median 470 CHF), Aargau (11) und Bern (10). 84 Inserate sind von Privaten, 3 von Profis.
- Alter: Die 150 neuesten Inserate sind zwischen dem 17. und dem 21.10.2026 eingestellt worden, im Schnitt kommen also rund 35 neue Inserate pro Tag dazu.
Bei einem Teil der Abrufe antwortete tutti.ch kurz mit Fehler 429 (zu viele Anfragen); der Actor hat wiederholt, 1 Detailseite fehlt. Dieses Inserat hat deshalb keinen Zustand und keinen Versand.
Das war der Input:
{
"searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015"],
"maxResults": 150,
"maxResultsPerQuery": 150,
"sortBy": "newest",
"includeDetails": true
}searchUrls: die tutti.ch-Suche. Hier eine Stichwortsuche in der ganzen Schweiz. Du kannst auch eine URL mit Kategorie- und Preisfiltern einfügen.maxResultsundmaxResultsPerQuery: Obergrenze für den ganzen Lauf und pro Such-URL. Wir haben beide auf 150 gesetzt. Tipp: Der Standard pro Such-URL ist 100. Wenn du mehr als 100 willst, musst dumaxResultsPerQuerymit erhöhen, sonst hört der Lauf bei 100 auf.sortBy:newestholt die neuesten Inserate zuerst.includeDetails:trueholt pro Inserat die Detailseite. Nur damit bekommst du Zustand und Versand.
Kosten dieses Laufs: etwa 0,75 $ (Free-Plan, 149 Inserate mit Details, 1 ohne, plus Start). Die Rechnung steht im Abschnitt Kosten.
Prompt für Claude zum Kopieren
Füge in Claude den Apify MCP Server als eigenen Konnektor mit dieser URL hinzu (siehe Apifys MCP-Dokumentation). Die URL beschränkt Claude auf diesen einen Actor:
https://mcp.apify.com?tools=santamaria-automations/tutti-ch-scraperDann fügst du diesen Prompt ein und ersetzt die Suche durch deine. Claude nennt dir zuerst die Kosten und wartet auf dein OK, bevor der Lauf startet:
Nutze den Apify MCP Server. Starte den Actor santamaria-automations/tutti-ch-scraper mit diesem Input:
{"searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015"],
"maxResults": 150, "maxResultsPerQuery": 150, "sortBy": "newest", "includeDetails": true}
Bevor du den Lauf startest, sag mir, was er kostet, und warte auf mein OK.
Wenn er fertig ist: Behalte nur Inserate mit category cellPhones, price_chf ab 100 und
"15" im Titel, und nenne mir, wie viele du aussortiert hast. Gib mir dann Anzahl,
Quartile und Median von price_chf, den Median getrennt nach Pro Max, Pro, Plus und
Standard (nach Titel), die Verteilung von properties.Zustand, den Anteil mit
properties["Versand verfügbar"] = Ja, die Kantone mit den meisten Inseraten und
die fünf neuesten Inserate mit Titel, Preis, Kanton und posted_at.Getestet haben wir den Actor und die Eingaben, nicht die Prompts über MCP. Claude formuliert die Kostenangabe und die Auswertung eventuell anders.
Apify-Konto anlegen
- Öffne die Seite des Tutti.ch Scrapers auf Apify.
- Klicke auf Try for free und registriere dich mit Google oder E-Mail.
- Du landest in der Apify Console im Tab Input des Actors. Für kleine Läufe reicht das monatliche Gratis-Guthaben des Free-Plans.
Suche eintragen
Suche auf tutti.ch nach deinem Produkt. Stelle bei Bedarf Kategorie, Preis und Region ein und kopiere die URL aus der Adresszeile in das Feld searchUrls. Ein kleiner Testlauf sieht so aus:
{
"searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015"],
"maxResults": 20,
"sortBy": "newest",
"includeDetails": true
}maxResults auf 10 bis 20. So siehst du für wenige Cent, ob die Treffer zu deinem Produkt passen.Actor starten und Ergebnis ansehen
Klicke unten auf Save and Run. Auf der Lauf-Seite siehst du im Tab Log den Fortschritt, im Tab Dataset die Ergebnisse als Tabelle. Mehrere Suchen in einem Lauf gehen so:
{
"searchUrls": [
"https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015",
"https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2014"
],
"maxResults": 200,
"maxResultsPerQuery": 100,
"includeDetails": true
}Daten exportieren und auswerten
- Öffne im Lauf den Tab Dataset.
- Klicke auf Export und wähle CSV, Excel oder JSON. Mit der Feld-Auswahl exportierst du nur die Spalten, die du brauchst, zum Beispiel
title,price_chf,canton,category,posted_atundsource_url. Die Felder mit Personenbezug (seller_name,phone,email) brauchst du für eine Preisanalyse nicht. - Filtere in Excel auf
categorygleichcellPhonesund entferne Zeilen unter einem Mindestpreis, damit Hüllen und Folien nicht in den Median fliessen. Danach rechnest du Median und Quartile vonprice_chf.
Welche Einstellungen es gibt
- Such-URL (
searchUrls): beliebige tutti.ch-Suchen mit Stichwort, Kategorie, Preis und Region, oder ein einzelnes Inserat. - Anzahl (
maxResults,maxResultsPerQuery): Obergrenze für den ganzen Lauf und pro Such-URL. - Sortierung (
sortBy): newest, oldest, cheapest, expensive oder relevant. Steht in der URL schonsorting=, gilt der Wert aus der URL. - Alter (
maxAgeHours): nur Inserate der letzten N Stunden. Zusammen mitsortBynewest hört der Actor auf zu blättern, sobald er ältere sieht. - Details (
includeDetails): Zustand, Versand, Koordinaten, alle Bilder. Kostet pro Inserat etwas mehr.
Per API und automatisch abrufen
Du kannst den Actor auch aus eigenen Skripten, n8n oder Make aufrufen. Dieser Aufruf startet einen Lauf und gibt die Ergebnisse direkt zurück (Apify-Endpunkt run-sync-get-dataset-items):
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~tutti-ch-scraper/run-sync-get-dataset-items?token=DEIN_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015"], "maxResults": 50, "sortBy": "newest", "includeDetails": true}'Deinen API-Token findest du in der Apify Console unter Settings → API & Integrations. Für einen regelmässigen Preisverlauf legst du in der Console unter Schedules einen Zeitplan an, zum Beispiel einmal pro Woche, und speicherst den Median jedes Laufs.
Was das kostet
Der Actor rechnet pro Ergebnis ab (Preise live aus dem Apify Store, Stand 21.10.2026, Free-Plan; höhere Apify-Pläne zahlen etwas weniger):
- Start: 0,005 $ pro Lauf.
- Inserat aus der Trefferliste (
includeDetailsaus): 0,003 $ pro Ergebnis. - Inserat mit Detailseite (
includeDetailsan): 0,005 $ pro Ergebnis.
Jedes Inserat wird nur einmal berechnet, entweder als Treffer oder mit Details. Rechenbeispiel für den Lauf oben: 0,005 $ Start + 149 x 0,005 $ (mit Details) + 1 x 0,003 $ (Detailseite nicht abrufbar, wird als Treffer berechnet) = 0,753 $, also etwa 0,75 $. Ohne Details kosten dieselben 150 Inserate 0,005 $ + 150 x 0,003 $ = 0,455 $, also etwa 0,46 $, du bekommst dann aber weder Zustand noch Versand. Annahmen: Free-Plan-Preise, ein Startereignis pro Lauf. Die aktuellen Preise findest du immer auf der Apify-Seite des Actors.
Wofür Leute die Daten nutzen
Wiederverkauf
Prüfe vor dem Einkauf, was Anbieter für ein Modell verlangen, und rechne mit dem unteren Quartil als realistischem Einkaufspreis. Inserate mit Zustand „Defekt“ trennst du vom Rest, damit sie den Median nicht verzerren.
Preise im eigenen Shop
Setze deine Occasionspreise gegen den Median der Angebote auf tutti.ch. Mit canton siehst du, ob Preise regional abweichen, und mit dem Versand-Anteil, wie viele Anbieter überhaupt verschicken.
Preisverlauf und neue Angebote
Mit einem wöchentlichen Zeitplan und sortBy newest siehst du, wie sich der Median über die Wochen entwickelt, zum Beispiel nach einem neuen Modell. Mit maxAgeHours holst du nur frische Inserate.
Häufige Fragen
Sind das Verkaufspreise oder Angebotspreise?
Es sind Angebotspreise. tutti.ch zeigt den Preis, den die Verkäuferin oder der Verkäufer verlangt, nicht den Preis, zu dem das Gerät später den Besitzer wechselt. Der Median der Angebote ist ein guter Richtwert für den Markt, aber keine Verkaufsstatistik. Oft wird noch verhandelt.
Wie finde ich die tutti.ch-Suche, die ich eingeben soll?
Suche auf tutti.ch nach deinem Produkt, stelle Kategorie, Preis oder Region ein und kopiere die URL aus dem Browser in das Feld searchUrls. Eine einfache Stichwortsuche geht auch direkt, zum Beispiel https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015. Der Actor liest die Filter aus der URL.
Warum stehen Hüllen und andere Modelle in den Ergebnissen?
Die Stichwortsuche von tutti.ch ist unscharf. Im Beispiellauf waren von 150 Inseraten 52 in anderen Kategorien (vor allem Zubehör), 5 weitere Hüllen und Folien unter 100 CHF und 6 andere Modelle wie iPhone 12 oder 17. Übrig blieben 87 Inserate. Diese Filter legst du nach dem Lauf selbst auf die Tabelle, der Actor filtert nicht nach Produkt.
Woher kommen Zustand und Versand?
Aus der Detailseite. Zustand (properties.Zustand) und Versand (properties["Versand verfügbar"]) füllt der Actor nur mit includeDetails auf true. Ohne Details sind properties leer, der Lauf ist dafür günstiger. Nicht jedes Inserat nennt beides: im Beispiel fehlte der Zustand bei 1 und der Versand bei 1 von 87 Inseraten.
Was kostet der Lauf?
Im Free-Plan 0,005 $ pro Lauf, dazu 0,003 $ pro Inserat aus der Trefferliste oder 0,005 $ pro Inserat mit Detailseite. Der Beispiellauf mit 150 Inseraten (149 mit Details, 1 ohne) kostete damit etwa 0,75 $. Jedes Inserat wird nur einmal berechnet.
Darf ich die Daten verwenden?
Das hängt von deinem Anwendungsfall ab. Preisdaten sind unkritisch, die Felder seller_name, phone und email können aber Personendaten von Privatpersonen enthalten. In der Schweiz gelten dafür das nDSG und das UWG. Für eine Preisanalyse brauchst du diese Felder nicht, lass sie beim Export weg. Das ist keine Rechtsberatung.
Weiterführende Links
- Tutti.ch Scraper, Actor-Seite: Eingabefelder, Ausgabefelder und Preise im Überblick.
- Tutti.ch Scraper auf Apify: Der Actor mit Dokumentation und allen Parametern.
- Homegate Scraper, Actor-Seite: Immobilieninserate von homegate.ch.