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.

Niveau: Einsteiger
Dauer: 10 Minuten
Kosten: 150 Inserate mit Details: 0,75 $
Werkzeuge: Apify Console (ohne Code)
Actor auf Apify öffnen → Kosten ansehen

In diesem Tutorial

  1. Das bekommst du
  2. Alle Felder
  3. Beispiel: iPhone 15 in der ganzen Schweiz
  4. Prompt für Claude zum Kopieren
  5. Schritt 1: Apify-Konto anlegen
  6. Schritt 2: Suche eintragen
  7. Schritt 3: Actor starten
  8. Schritt 4: Daten exportieren
  9. Welche Einstellungen es gibt
  10. API und Zeitplan
  11. Kosten
  12. Anwendungen
  13. FAQ

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"
}
Angebotspreise, keine Verkaufspreise. Die Tabelle zeigt, was Anbieter verlangen. Zu welchem Preis ein Gerät am Ende verkauft wird, steht nicht in den Daten. Wenn ein Inserat verschwindet, siehst du nicht, ob es verkauft oder zurückgezogen wurde.

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.

FeldTypInhalt
idTextEindeutige Inserate-ID
title / descriptionTextTitel und Text des Inserats
price / price_chf / currencyText / ZahlPreis als Text („450.-“) und als Zahl in CHF. Fehlt im Inserat ein Preis, bleibt das Feld leer
category / category_label / category_pathTextKategorie-Kennung (zum Beispiel cellPhones); lesbarer Name und Pfad nur mit Details
location / canton / postcodeTextOrt, Kanton als Kürzel und Postleitzahl
seller_type / seller_planTextprivate oder professional, bei Profis der Plan
posted_atTextZeitpunkt der Veröffentlichung
propertiesObjektZustand und Versand, nur mit includeDetails
image_url / image_count / image_urlsText / ZahlTitelbild, Anzahl Bilder; alle Bild-URLs nur mit Details
latitude / longitude / seller_id / seller_member_sinceZahl / Textnur mit Details
is_highlighted / listing_sourceWahrheitswert / Textob das Inserat beworben ist, und ob es von tutti oder einer Partnerseite kommt
seller_name / phone / emailTextAngaben der Anbieter. Können Personendaten sein, siehe FAQ
source_url / scraped_atTextLink zum Inserat und Zeitpunkt des Abrufs
Nicht jedes Feld ist immer gefüllt. Telefon und E-Mail stehen nur, wenn der Anbieter sie im Inserat nennt. Zustand und Versand fehlen bei Inseraten, in denen der Anbieter sie nicht angegeben hat.

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:

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.

Die Suche ist unscharf. tutti.ch liefert zum Stichwort auch Zubehör und andere Modelle. Rechne mit Aussortieren nach dem Lauf, oder schränke die Such-URL vorher auf die Kategorie Handys ein. Das spart Kosten.

Das war der Input:

{
  "searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=iphone%2015"],
  "maxResults": 150,
  "maxResultsPerQuery": 150,
  "sortBy": "newest",
  "includeDetails": true
}

Kosten dieses Laufs: etwa 0,75 $ (Free-Plan, 149 Inserate mit Details, 1 ohne, plus Start). Die Rechnung steht im Abschnitt Kosten.

Eine Momentaufnahme. Das sind die 150 neuesten Inserate zu einer unscharfen Stichwortsuche, nicht alle iPhone-15-Inserate der Schweiz. Ein anderer Tag oder eine andere Stichprobengrösse gibt andere Zahlen.

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-scraper

Dann 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.

SCHRITT 1

Apify-Konto anlegen

  1. Öffne die Seite des Tutti.ch Scrapers auf Apify.
  2. Klicke auf Try for free und registriere dich mit Google oder E-Mail.
  3. Du landest in der Apify Console im Tab Input des Actors. Für kleine Läufe reicht das monatliche Gratis-Guthaben des Free-Plans.
SCHRITT 2

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
}
Starte klein. Setze beim ersten Lauf maxResults auf 10 bis 20. So siehst du für wenige Cent, ob die Treffer zu deinem Produkt passen.
SCHRITT 3

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
}
SCHRITT 4

Daten exportieren und auswerten

  1. Öffne im Lauf den Tab Dataset.
  2. 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_at und source_url. Die Felder mit Personenbezug (seller_name, phone, email) brauchst du für eine Preisanalyse nicht.
  3. Filtere in Excel auf category gleich cellPhones und entferne Zeilen unter einem Mindestpreis, damit Hüllen und Folien nicht in den Median fliessen. Danach rechnest du Median und Quartile von price_chf.

Welche Einstellungen es gibt

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):

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.

Datenschutz. Preise und Kategorien sind unkritisch. Namen, Telefonnummern und E-Mail-Adressen von Privatpersonen sind Personendaten. In der Schweiz gelten dafür das nDSG und das UWG, bei Werbung per Telefon oder E-Mail besonders. Für eine Preisanalyse lässt du diese Felder weg. Das ist keine Rechtsberatung.

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

Actor auf Apify öffnen → Alle Tutorials