Skip to content

Local.ch Scraper

Try for free

Scrape local.ch, Switzerland's business directory, by keyword and city or from local.ch links. Get names, phones, emails, websites, social links, addresses, categories, opening hours, attributes, ratings and reviews.

🇨🇭 Local.ch Scraper

Turn local.ch, Switzerland's business directory, into a clean lead list. Search by keyword and city (or paste any local.ch link) and get every listing's phones, emails, website, social links, address, opening hours, attributes, rating and reviews. No login, no browser, results in seconds.

✨ Why use Local.ch Scraper?

  • 📇 Complete contact data — every phone, mobile, fax, email, website and social link a listing shows, not just the first one.
  • 🔎 Search like on the site — keywords in German, French, Italian or English, combined with any city, postcode or canton; or paste search links with filters already applied.
  • ⚡ Fast — plain HTTP with parallel requests; 20 full profiles usually take a few seconds.
  • 🎯 Lead filters — keep only businesses, only listings with a phone, email or website, or a minimum star rating. Skipped listings are never charged.
  • 🌍 Four languages — category names, attributes and translated descriptions in English, German, French or Italian.
  • 💸 Pay per result — no subscription, nothing charged for empty searches or invalid input.

🎯 Use cases

  • 📈 Lead generation — build lists of dentists in Bern, plumbers in Lausanne or fiduciaries in Zug with direct phones and emails.
  • 🗂️ CRM enrichment — add websites, social profiles, opening hours and coordinates to the Swiss companies you already know.
  • 🏪 Market research — count and map competitors per city or canton, compare ratings and services.
  • 🍽️ Hospitality and local apps — feed restaurant, café and shop data (hours, booking links, menus, payment options) into your product.
  • 📊 Monitoring — schedule runs to track new businesses, rating changes and closures.

🚀 How to use

  1. Enter one or more search terms (e.g. Zahnarzt, Restaurant, plombier) and optional locations (e.g. Bern, Genève, 8001), or paste local.ch URLs.
  2. Set Max results per search (each term × location, or each URL, is one search).
  3. Optionally add filters (businesses only, must have email, minimum rating).
  4. Click Start and wait a few seconds.
  5. Download the results as JSON, CSV, Excel or HTML, or read them through the API.

📥 Input

FieldWhat it doesExample
searchTermsWhat to look for, one per line["Zahnarzt"]
locationsOptional cities, postcodes or cantons["Bern"]
startUrlslocal.ch search (/s/, /q/) or listing (/d/) links[{"url": "https://www.local.ch/en/q/zurich/restaurant"}]
maxItemsMax listings per search (0 = all, the site shows up to 3,000 per search)20
entryTypeall, business or personbusiness
onlyWithPhone / onlyWithEmail / onlyWithWebsiteKeep only listings with that contacttrue
minRatingMinimum average stars4
scrapeDetailsLoad full profiles (on by default)true
maxReviewsReviews per listing10
languageen, de, fr, itde
sortByrelevance, alphanum, rating, distancerating
{
  "searchTerms": ["Zahnarzt"],
  "locations": ["Bern"],
  "maxItems": 20,
  "entryType": "business",
  "onlyWithEmail": true,
  "language": "de"
}

📤 Output

FieldDescription
title, subtitleBusiness or person name and subtitle
mainCategory, categoriesCategories in the chosen language
phone, phones, mobile, whatsapp, faxPhone numbers in international format
email, emailsEmail addresses
website, websites, facebook, instagram, linkedin, twitter, youtube, tiktok, socialLinksWeb and social links
street, zipCode, city, cantonCode, country, latitude, longitudeAddress and coordinates
averageRating, ratingCount, reviewCount, reviewsRatings and the reviews shown on the profile
openingHours, openingHoursInfo, opensAt, openStatusWeekly hours, holiday notes and current status
attributes, attributeGroupsLanguages, payment methods, services, location tags, ...
description, logo, images, bookingUrl, menuUrlProfile content
url, id, lastModified, scrapedAtListing link, id and timestamps

Example (one listing, trimmed; names and contacts are fictional):

{
  "id": "aB3dEfGhIjKlMnOpQrStUv",
  "title": "Zahnarztpraxis Muster AG",
  "subtitle": "eidg. dipl. Zahnarzt",
  "entryType": "BUSINESS",
  "mainCategory": "Dentist",
  "categories": ["Dentist", "Dental hygiene", "Implantology"],
  "phone": "+41310000000",
  "phones": ["+41310000000"],
  "email": "info@zahnarzt-muster.ch",
  "website": "https://www.zahnarzt-muster.ch",
  "street": "Musterstrasse 6",
  "zipCode": 3011,
  "city": "Bern",
  "cantonCode": "BE",
  "country": "CH",
  "latitude": 46.9468,
  "longitude": 7.4387,
  "averageRating": 4.8,
  "ratingCount": 12,
  "openingHours": ["MONDAY: 07:30-18:00", "TUESDAY: 07:30-18:00", "WEDNESDAY: 07:30-18:00", "THURSDAY: 07:30-18:00", "FRIDAY: 07:30-17:00", "SATURDAY: closed", "SUNDAY: closed"],
  "attributes": ["English", "French", "German", "Close to public transport", "Wheelchair-accessible"],
  "url": "https://www.local.ch/en/d/bern/3011/dentist/zahnarztpraxis-muster-ag-aB3dEfGhIjKlMnOpQrStUv",
  "detailsScraped": true
}

💰 Pricing

You pay $1.40 per 1,000 listings ($0.0014 per listing saved), plus the run's platform usage (compute and proxy traffic), which is shown on every run.

  • 🧮 Example: 1,000 listings with full profiles cost $1.40 in results plus about $0.08–$0.11 of usage in our tests, so roughly $1.50 in total.
  • 🆓 Nothing is charged for empty searches, invalid input, duplicates or listings your filters skip.
  • 🛑 Set a maximum charge per run and the scraper stops cleanly when it is reached, keeping everything already saved.

❓ FAQ

Is it legal to scrape local.ch? The actor only collects data local.ch shows publicly to every visitor, without logging in. You are responsible for how you use it: Swiss and EU data protection rules apply to personal data, and some listings are marked as not wanting advertising.

Do I need a local.ch account or a proxy? No account. The Scrapely datacenter proxy is set by default and the run moves to Swiss residential exits on its own if it is refused.

How many results can I get? local.ch shows at most 3,000 listings per search. For more, split the search by city, postcode or canton, or use several terms; duplicates across searches are removed.

Why is a field empty? Listings only show what the business published. Many have no email or social links, and private phone book entries have no website or hours. Use the filters to keep only listings with the contacts you need.

Can I schedule it or use the API? Yes. Save a task, schedule it daily or weekly, and fetch results through the API or integrations.

⚠️ Limits

  • At most 3,000 listings per search (the site's own limit); the run says so in its status message when a search has more.
  • Reviews are the ones shown on the listing's profile page (usually the most recent few), not the full review history.
  • Filters on email, phone and website need full profiles, so they turn scrapeDetails on.
  • Only public listing data; nothing behind a local.ch login.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.