local.ch Scraper avatar

local.ch Scraper

Pricing

Pay per event

Go to Apify Store
local.ch Scraper

local.ch Scraper

Scrape business listings from local.ch, the Swiss business directory. Returns name, address, phone, email, website, categories, rating, opening hours and coordinates. No login required. Pay-per-result.

Pricing

Pay per event

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

local.ch Scraper - Swiss Business Directory

Scrape business listings from local.ch, the Swiss business directory (Swisscom Directories). Search by keyword and city and get phone numbers, emails, websites, addresses, categories, ratings and opening hours.

What data can you extract?

For each business, the scraper extracts:

  • Business name, subtitles and all categories
  • Phone, mobile and fax numbers (international format)
  • Email address and website URL
  • Social media profile links
  • Full address with street, postal code, city and canton
  • GPS coordinates (latitude/longitude)
  • Opening hours and description (detail mode)
  • Rating and number of ratings
  • Logo image URL
  • Detail mode extras: description headline, online booking link, spoken languages, location features, payment methods, all attribute groups, rating distribution per star and the * no-advertising marker

Phone, email, website and social links are available from the search results alone, so they are included even when detail pages are switched off.

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.

Claude Desktop / Cursor config:

{
"mcpServers": {
"local-ch": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com?tools=santamaria-automations/local-ch-scraper",
"--header",
"Authorization: Bearer <APIFY_TOKEN>"
]
}
}
}

Example prompt: "Use local-ch-scraper to find dentists in Zürich and return a table with name, phone, email and website."

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

How to use

{
"searchTerms": ["Zahnarzt", "Bäckerei"],
"location": "Zürich",
"maxResults": 40,
"includeDetails": true,
"language": "de"
}

An empty input {} also works and runs the defaults (Zahnarzt in Zürich, 20 results).

Input parameters

ParameterTypeDefaultDescription
searchTermsarray["Zahnarzt"]Business types or names. Each term is searched separately
locationstringZürichSwiss city, region or postal code
maxResultsinteger20Maximum unique businesses per search term (1-10,000, site limit 180 per search)
includeDetailsbooleantrueFetch detail pages for opening hours, description and subtitles
languagestringdeSite language: de, fr, it or en

A business that matches several search terms is returned once.

Limit: local.ch serves at most 9 result pages (180 businesses) per search, so one search term and location returns up to 180 businesses even when maxResults is higher. Split large jobs into several search terms or more specific locations.

Output example

{
"id": "2XCS66MZnVWZKva3NVsOag",
"name": "Cierny Zahnärzte",
"description": "Die Praxis Cierny wird mittlerweile in der 3. Generation der Familie Cierny geführt ...",
"subtitles": ["eidg. dipl. Arzt / eidg. dipl. Zahnarzt"],
"category": "Zahnarzt",
"categories": ["Zahnarzt", "Implantologie", "Dentalhygiene"],
"phone": "+41444318242",
"phones": ["+41444318242"],
"mobile": null,
"fax": null,
"email": "praxis@cierny-zaz.ch",
"website": "http://www.cierny-zaz.ch",
"social_links": ["https://www.facebook.com/Cierny-Zahn%C3%A4rzte-584954974923275"],
"address": "Segnesstrasse 9, 8048 Zürich",
"street": "Segnesstrasse 9",
"postal_code": "8048",
"city": "Zürich",
"canton": "ZH",
"country": "Switzerland",
"country_code": "CH",
"latitude": 47.38837,
"longitude": 8.485818,
"opening_hours": "Mo 08:00-12:00,13:00-17:00; Tu 07:00-15:00; We 08:00-12:00,13:00-17:00",
"rating": 4.8,
"review_count": 1231,
"logo_url": "https://bin.staticlocal.ch/localplace-logo/5d/example.jpg",
"description_title": "Wir sind zahnfreundlich. Ihr Zahnarzt in Zürich",
"refuse_advertising": true,
"refuse_advertising_contacts": ["+41444318242"],
"booking_url": "https://oa.zawin.ch/k1144_01",
"booking_provider": "custom",
"languages": ["Deutsch", "Englisch", "Französisch"],
"location_features": ["Im Zentrum", "In Bahnhofsnähe", "Parkmöglichkeit"],
"payment_methods": ["Barzahlung", "Bezahlung mit EC-Karte", "TWINT", "Visa"],
"attributes": {
"Sprachen": ["Deutsch", "Englisch", "Französisch"],
"Lage": ["Im Zentrum", "In Bahnhofsnähe", "Parkmöglichkeit"],
"Zahlungskonditionen": ["Barzahlung", "Bezahlung mit EC-Karte", "TWINT", "Visa"]
},
"rating_distribution": {"1": 0, "2": 0, "3": 0, "4": 0, "5": 2},
"entry_type": "BUSINESS",
"search_query": "Zahnarzt",
"search_location": "Zürich",
"source_url": "https://www.local.ch/de/d/zuerich/8048/zahnarzt/cierny-zahnaerzte-2XCS66MZnVWZKva3NVsOag",
"source_platform": "local.ch",
"scraped_at": "2026-10-18T12:00:00Z"
}

Fields that local.ch does not publish for an entry are null (or an empty list).

Output fields

FieldTypeDescription
idstringlocal.ch entry id
namestringBusiness name
descriptionstring / nullBusiness description (detail mode)
subtitlesarraySubtitle lines under the name (titles, specialities)
categorystring / nullMain category
categoriesarrayAll categories
phonestring / nullMain phone number (international format)
phonesarrayAll phone numbers
mobilestring / nullMobile number
faxstring / nullFax number
emailstring / nullContact email
websitestring / nullWebsite URL
social_linksarraySocial media profile URLs
addressstring / nullFull address
streetstring / nullStreet and number
postal_codestring / nullPostal code
citystring / nullCity
cantonstring / nullCanton code
countrystringCountry name
country_codestringISO country code
latitudenumber / nullLatitude
longitudenumber / nullLongitude
opening_hoursstring / nullWeekly opening hours (detail mode)
ratingnumber / nullAverage rating
review_countinteger / nullNumber of ratings
logo_urlstring / nullLogo image URL
entry_typestringEntry type (BUSINESS or PERSON)
search_querystringSearch term that produced the row
search_locationstringLocation of the search
source_urlstringlocal.ch detail page URL
source_platformstringAlways local.ch
scraped_atstringScrape timestamp (UTC)
description_titlestring / nullHeadline of the business description (detail mode)
refuse_advertisingboolean / nullDetail mode. true when the entry is marked with * on local.ch (the owner does not want advertising calls); null without detail data
refuse_advertising_contactsarrayDetail mode. Contact values (phone, fax, ...) that carry the * marker
booking_urlstring / nullOnline booking link (detail mode, if the entry has an external booking channel)
booking_providerstring / nullBooking provider of the online booking channel (detail mode)
languagesarraySpoken languages (detail mode)
location_featuresarrayLocation features such as 'Im Zentrum' or 'Parkmöglichkeit' (detail mode)
payment_methodsarrayAccepted payment methods (detail mode)
attributesobjectDetail mode. All attribute groups as {group name: [attribute names]}, e.g. treatments or practice type
rating_distributionobject / nullDetail mode. Number of ratings per star, e.g. {"5": 2, "4": 0}; null when not published

Detail fields

These fields are filled when includeDetails is on and the detail page was loaded. On search-only rows the lists are empty, attributes is {} and the other fields are null.

FieldTypeDescription
description_titlestring / nullHeadline of the business description
refuse_advertisingboolean / nulltrue when the entry is marked with * on local.ch: the owner does not want advertising calls. false when no contact is marked
refuse_advertising_contactsarrayThe contact values (phone, fax, ...) that carry the * marker, [] if none
booking_urlstring / nullOnline booking link, if the entry has one
booking_providerstring / nullBooking provider of that link
languagesarraySpoken languages
location_featuresarrayLocation features, e.g. "Im Zentrum", "Parkmöglichkeit"
payment_methodsarrayAccepted payment methods
attributesobjectEvery attribute group as {group name: [attribute names]}, e.g. treatments or practice type
rating_distributionobject / nullNumber of ratings per star ("1" to "5"), when published

Pricing

Pay per result. You are charged one result event for every row saved to the dataset, plus a one-time start event per run.

EventPriceWhen
directory-start$0.005 per runCharged once, right before the first row is saved
directory-serp-result$0.0015 per businessBusiness saved from search results only
directory-detail-result$0.0025 per businessBusiness saved with full detail data

Duplicates are never saved or charged twice, and a restarted run does not charge rows it already saved.

Performance

  • Speed: 20 businesses per search page; detail pages add a little time per business
  • Search only: set includeDetails to false for the fastest and cheapest run

Tips

  • Use the language of your terms: German terms work best with de, French terms with fr
  • Use a narrow location or several specific search terms to reach more businesses
  • Pair the website field with the actors below to find more contacts per company

Swiss business data

Enrich your leads

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.