Tutti.ch Scraper Swiss Classifieds & Marketplace avatar

Tutti.ch Scraper Swiss Classifieds & Marketplace

Pricing

from $3.00 / 1,000 search result listings

Go to Apify Store
Tutti.ch Scraper Swiss Classifieds & Marketplace

Tutti.ch Scraper Swiss Classifieds & Marketplace

Scrape classified listings from tutti.ch. Extract prices, locations, cantons, seller info, GPS coordinates, images, and contact details. Browse by category (cars, real estate, electronics, furniture, jobs, and 20+ more). HTTP-only, fast, pay-per-result.

Pricing

from $3.00 / 1,000 search result listings

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

2

Bookmarked

62

Total users

14

Monthly active users

6.8 hours

Issues response

8 days ago

Last modified

Share

Tutti.ch Scraper

Scrape classified listings from tutti.ch, a Swiss online marketplace, into structured data: price in CHF, canton, seller type, GPS coordinates and images. Paste any tutti.ch search URL, no login or proxy setup needed.

How it works

  1. Go to tutti.ch and set up your search with all desired filters (category, search query, price range, fuel type, body type, location, etc.)
  2. Copy the URL from your browser
  3. Paste it into the Search URLs input
  4. Run the actor

That's it. The actor extracts all listings matching your search, with automatic pagination.

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=santamaria-automations/tutti-ch-scraper

Example prompt once connected:

"Use tutti-ch-scraper to scrape company data from tutti ch. Return results as a table."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.

Features

  • Any filter combination — Whatever you can filter on tutti.ch, the actor can scrape
  • Multiple searches — Paste multiple URLs to run several searches in one run
  • Detail enrichment — Optionally get GPS coordinates, all images, and seller ID
  • Fast & cheap — HTTP-only, pay-per-result, built-in Swiss proxy handling (nothing to configure)
  • Safe re-runs — rows are saved and billed as they are scraped; a restarted run never bills the same listing twice

What you get

FieldDescriptionSource
titleListing titleSearch
price / price_chfPrice (formatted + numeric)Search
categoryCategory ID (e.g., "cars", "cellPhones")Search
category_label / category_pathReadable category and parent path ("Telefon & Navigation > Handys")Detail
listing_sourceWhere the ad comes from: tutti or a partner site such as autoscout24.chSearch
location / canton / postcodeLocation detailsSearch
seller_name / seller_typeSeller info (private/professional)Search
seller_plan / seller_logo_urlProfessional plan (pro, plus) and logoSearch
seller_member_since / seller_websiteAccount creation date, seller website (professional sellers). Not part of the search results, so they are null unless includeDetails is onDetail
image_url / image_countMain thumbnail and number of images on the adSearch
latitude / longitudeGPS coordinatesDetail
image_urlsAll listing imagesDetail
seller_idSeller account IDDetail
phonePhone number (when available)Detail + Regex
emailEmail address (regex extracted from description)Regex
descriptionFull listing textSearch
id / currencyTutti listing ID and currency codeSearch
posted_atPosting timestampSearch
is_highlightedPromoted flagSearch
propertiesAll structured listing properties as label -> value (Zustand, Versand verfügbar, ...)Detail
conditionItem condition (e.g. Neu, Gebraucht), taken from the structured propertiesDetail
article_numberArticle number / reference (structured property, else an Artikelnummer: / Artikelreferenz: line in the description)Detail + description
dimensionsDimensions (structured property, else an Abmessungen: / Gesamtmasse: line in the description)Detail + description
scraped_atTime the row was scrapedSearch
source_urlLink to listing on tutti.chBoth

Output example

{
"id": "45678901",
"title": "IKEA Kallax Regal weiss 4x4",
"price": "CHF 80.–",
"price_chf": 80,
"currency": "CHF",
"category": "Möbel",
"location": "Zürich, 8005",
"canton": "ZH",
"postcode": "8005",
"seller_name": "Sandra M.",
"seller_type": "private",
"listing_source": "tutti",
"condition": "Gebraucht",
"article_number": null,
"dimensions": "147 x 147 x 39 cm",
"properties": { "Zustand": "Gebraucht", "Versand verfügbar": "Ja" },
"image_count": 4,
"posted_at": "2026-04-18T10:00:00Z",
"source_url": "https://www.tutti.ch/de/vi/zuerich/moebel/ikea-kallax-regal/45678901",
"scraped_at": "2026-04-20T08:00:00Z"
}

Fields marked Detail in the table above are only filled when includeDetails is true.

Pricing

No start fee — pay only for results:

EventCost
Listing (basic)$0.003
Listing (with details)$0.005

100 listings = $0.30 (basic) or $0.50 (with details)

Examples

Search by keyword (copy the URL straight from your browser)

The simplest way to get started: search on tutti.ch, copy the URL from your browser bar, and paste it in.

{
"searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=omega"],
"maxResults": 50
}

This is the share-link format tutti.ch produces when you search and copy the URL. Both ?q= and ?query= work.

BMW Cabriolets with petrol engine (full-filter URL from tutti.ch)

When you apply category filters on tutti.ch, the URL contains an encoded search token. Paste those URLs in too:

{
"searchUrls": ["https://www.tutti.ch/de/q/autos/Ak6NibXekY2Fyc5SSkrFjYXJzQXV0b1Njb3V0VHlwZaljYWJyaW9sZXSStWNhcnNBdXRvU2NvdXRGdWVsVHlwZaZwZXRyb2zAwMA?sorting=newest&query=bmw"],
"maxResults": 50
}

Multiple searches in one run

{
"searchUrls": [
"https://www.tutti.ch/de/q/immobilien/Ak8CuaW1tb2JpbGllbpTAwMDA?query=wohnung",
"https://www.tutti.ch/de/q/elektronik/Ak8CrGVsZWN0cm9uaWNzlMDAwMA?query=iphone"
],
"maxResults": 200,
"maxResultsPerQuery": 100
}

All listings (no filter)

{
"maxResults": 100,
"includeDetails": true
}

Monitoring / delta mode

Use this actor to watch a search for new listings without paying to re-scan items you have already seen.

Set sortBy to newest (the default) and maxAgeHours to the interval between your scheduled runs. On each run the actor returns only listings posted within that window, and it stops paginating as soon as it sees three consecutive items older than the cutoff. You pay only for the fresh pages, not the full catalogue.

Example: monitor iPhone listings every 6 hours

{
"searchUrls": ["https://www.tutti.ch/de/li/ganze-schweiz?q=iphone"],
"maxResults": 200,
"maxResultsPerQuery": 100,
"sortBy": "newest",
"maxAgeHours": 6
}

Schedule this input every 6 hours and you get a delta feed of new listings only.

How the early-stop works

When sortBy=newest is active and maxAgeHours is set, the actor tracks consecutive stale items per query. After three stale items in a row it stops fetching further pages for that query and logs an INFO line like:

[tutti-ch] early-stopped pagination for query "keyword=iphone": 3 consecutive stale items (> 6h) — saved 8 pages

One or two highlighted or promoted listings may appear out of chronological order on a page, so the actor waits for three consecutive stale items before stopping rather than one.

URL-level sort wins

If your Search URL already contains ?sorting=..., that value takes priority over the sortBy input field. This is intentional: URL-level parameters encode the exact search you configured on tutti.ch, and the input field is a convenience for plain keyword searches where no URL-level sort exists.

Combination that does not save pages

If you set maxAgeHours with a sort other than newest (for example sortBy=cheapest), the early-stop is disabled because oldest items can appear anywhere in a price-sorted list. The output filter still applies, but you pay for all pages up to maxResultsPerQuery.

Input fields

FieldTypeDescription
searchUrlsarrayOne or more tutti.ch search or listing URLs
maxResultsintegerTotal result cap across all searches
maxResultsPerQueryintegerCap per search URL
sortBystringnewest (default), oldest, cheapest, expensive, relevant
maxAgeHoursintegerDrop items older than N hours; stop paginating once the cutoff is passed (requires sortBy=newest)
includeDetailsbooleanFetch detail page for GPS, all images, seller ID

FAQ

Do I need a proxy or a tutti.ch login? No. The actor handles Swiss proxy routing itself and only reads public pages. There is no proxy input to configure.

Can I scrape one category or filter combination? Yes. Set the filters on tutti.ch, copy the URL from your browser and paste it into Search URLs. A single listing URL (/de/vi/...) also works.

How many listings can I get per run? Up to 5000 in total (maxResults) and 5000 per search URL (maxResultsPerQuery).

How do I get only new listings? Use sortBy: newest with maxAgeHours and schedule the run at that interval. See Monitoring / delta mode above.

How fresh is the data? Every run reads tutti.ch live, so results reflect the site at run time.

European Classifieds

Real Estate

Enrich your data

Data protection

This actor returns only data that is publicly visible on the source pages. Results can include personal data, such as names, phone numbers, email addresses and addresses of private persons, sole traders or contact persons. Where the source labels an entry type, it is included so you can filter the results yourself.

You are responsible for using the data lawfully, including the GDPR/DSGVO, national data-protection laws and unfair-competition rules (e.g. UWG) for marketing and outreach.

Issues & Feedback

Missing something or not working as expected? Open an issue and we'll fix it.