local.ch Scraper - Swiss Business Directory
Pricing
from $3.00 / 1,000 results
local.ch Scraper - Swiss Business Directory
Scrape local.ch, Switzerland's leading business directory. Search by category and city/canton, or fetch full business profiles by URL. Get names, addresses, phone numbers, emails, websites, ratings, opening hours, coordinates, and social links.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape local.ch — Switzerland's leading business directory. Search any business category in any Swiss city or canton and get names, addresses, phone numbers, ratings, opening status, and websites. Optionally follow through to each business's full profile page for email, website, social links, precise GPS coordinates, structured opening hours, and photos. No login, no cookies, no API key required.
What this actor does
- Two modes:
search(category + city/canton) anddetail(direct business profile URLs) - 75+ curated categories to pick from, or type any custom category (local.ch matches free text like a keyword search)
- All 26 Swiss cantons available as a one-click filter, in addition to free-text city search
- 4 languages — English, German, French, Italian (same underlying data, localized labels)
- Sort by relevance, rating, or name (A-Z)
- Filter by "open now" or minimum star rating (1-5)
- Full Swiss character support — ü, é, à, ç etc. are handled correctly in both input and output
- Rich business profiles — GPS coordinates, structured opening hours, email, website, Facebook/Instagram/LinkedIn/Twitter/YouTube links, photos, logo
- Empty fields are omitted — you only ever see fields that were actually found for a business
Output per business
name— business namesubtitle— short business-provided subtitle shown under the name (sometimes a legal entity name, sometimes a tagline; when profile fetched)category— primary listed category,categories[]— all registered categories (mode=search)rating,ratingCount— average star rating (1-5) and total number of ratingsreviewCount— number of written reviews (when profile fetched; distinct fromratingCount, which includes star-only ratings)street,zipCode,city,countrylatitude,longitude— precise GPS coordinates (when profile fetched)isOpenNow— live open/closed status from the search listingopeningHours[]— structured opening hours ({day, opens, closes}per slot; when profile fetched and the business publishes schema.org hours)phone,email,websitefacebookUrl,instagramUrl,linkedinUrl,twitterUrl,youtubeUrl— social links the business has published (when profile fetched)thumbnailUrl— small logo/photo thumbnail shown on the search-results card (mode=search, nofetchDetailsneeded)images[],logoUrl— business photos and logo (when profile fetched)searchCategory,searchLocation,language— the search parameters used (mode=search)sourceUrl— canonical local.ch profile URL for the businessrecordType: "business",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string (select) | search | search (category + city/canton) or detail (fetch by URL) |
category | string (select) | restaurant | Pick a common category, or custom to use customCategory (mode=search) |
customCategory | string | – | Any free-text category, overrides category (mode=search) |
location | string | Zurich | Swiss city or canton name to search in (mode=search) |
canton | string (select) | – | Pick one of the 26 Swiss cantons to search the whole canton instead of location |
language | string (select) | en | Site language: en, de, fr, it |
sortBy | string (select) | relevance | relevance / rating (highest first) / name (A-Z) — applied client-side across the fetched batch |
openNowOnly | boolean | false | Only return businesses currently open |
minRating | integer | 0 (no minimum) | Only return businesses rated at least 1-5 stars |
fetchDetails | boolean | false | Also visit each business's profile page for richer data (slower) |
businessUrls | array | – | local.ch profile URLs to fetch directly (mode=detail) |
maxItems | int | 20 | Hard cap on returned records (1-1000) |
Example: search restaurants in Zurich
{"mode": "search","category": "restaurant","location": "Zurich","maxItems": 20}
Example: highest-rated dentists in Geneva, with full profiles
{"mode": "search","category": "dentist","location": "Geneva","sortBy": "rating","fetchDetails": true,"maxItems": 30}
Example: 4+ star restaurants open right now across all of Ticino canton
{"mode": "search","category": "restaurant","canton": "ticino","openNowOnly": true,"minRating": 4,"maxItems": 50}
Example: lawyers across the whole of Switzerland, A-Z, in French
{"mode": "search","category": "attorneys-at-law","location": "Switzerland","language": "fr","sortBy": "name","maxItems": 100}
Example: fetch specific business profiles
{"mode": "detail","businessUrls": [{ "url": "https://www.local.ch/en/d/zurich/8001/restaurant/george-bar-grill-E2FE14_t_A8FFW9_xUkXBQ" }]}
Use cases
- Local lead generation — build a prospect list of Swiss businesses by trade and city/canton for B2B outreach
- Market research — measure business density and average ratings for a category across Swiss regions
- Directory aggregation — feed structured Swiss business data into your own local-search product
- Competitor mapping — see who else operates in a category and area, with ratings and contact info
- Franchise & site-selection analysis — evaluate service-business coverage across cantons and cities
Limitations
- Deep pagination on very broad searches. local.ch enforces a per-IP rate limit on its search-results pages of roughly 9 page requests before returning 403s (confirmed via testing: this triggers at a fixed request count, not a request-rate/time window). In practice this caps a single run at roughly 150-180 records for very broad, single-category-nationwide searches (e.g.
category: "restaurant",location: "Switzerland"). The actor automatically rotates through Apify's free AUTO proxy to recover from this where possible and always returns every record it collected before the limit hit (never an empty/failed run). For larger volumes, run multiple smaller searches (e.g. one per city or canton) instead of one very broad nationwide pull — city- and canton-scoped searches rarely reach this limit. sortByis applied client-side. local.ch's search-results pages don't honor a server-side sort parameter (verified:?sort=ratingreturns results in the same order as no sort parameter), sorating/namesorting is applied across the batch of records this run actually fetched, not the entire category.openNowOnlyandminRatingare applied client-side. A business with no open/closed badge or no rating on local.ch is only excluded byminRating(which requires a rating to compare against); it is not excluded byopenNowOnly, since an unknown status is treated as "don't filter this one out" rather than "closed".
FAQ
What data source does this actor use? It reads the publicly available search and business-profile pages on local.ch, Switzerland's leading business directory. No account or API key is needed.
Is this affiliated with local.ch? No. This is an independent, third-party actor that reads publicly accessible pages.
Why do some businesses have no rating, phone, or website? local.ch only shows a rating once a business has received at least one review, and only shows contact/social details a business itself provided. Fields with no data are simply omitted from the record rather than shown as empty or null.
What's the difference between ratingCount and reviewCount?
ratingCount is the total number of star ratings a business has received. reviewCount is the (usually smaller) number of ratings that include a written review. Both come directly from local.ch's own aggregate rating data.
Can I search a whole canton instead of a single city?
Yes — set canton to any of the 26 Swiss cantons; it takes priority over location. You can also just type a canton name (e.g. "Vaud") directly into location.
Can I search all of Switzerland at once?
Yes — set location to "Switzerland" (or leave both location/canton and just rely on the default) for a nationwide search.
How accurate are the GPS coordinates?
latitude/longitude come directly from the business's own local.ch profile page (only available with fetchDetails: true in search mode, or always in detail mode).
Why is fetchDetails off by default?
Fetching each business's full profile page requires one extra request per result, which is slower. Turn it on when you need email, website, social links, coordinates, structured opening hours, or photos.
Does this actor need a proxy or login? No — local.ch's search and profile pages are served without any anti-bot challenge, so this actor runs entirely on Apify's free plan with no proxy and no credentials.
What does subtitle mean?
local.ch lets businesses show a short line under their name. For registered companies this is often their legal entity name (e.g. "Selnau Gastro AG"); for others it can be a marketing tagline or keyword list. It's included as-is since we can't reliably tell the two apart.