Local.ch $1💰 URL | Keywords | Reviews Scraper
Pricing
from $1.00 / 1,000 results
Local.ch $1💰 URL | Keywords | Reviews Scraper
From $1/1K. Pull structured company data from local.ch, including name, address, GPS, phone, email, website, hours, ratings, social links, photos, and categories. Search by category and location or use URLs. Supports Deutsch, English, Français, and Italiano.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
AbotAPI
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
22 days ago
Last modified
Categories
Share
local.ch Scraper
Pull structured company data from local.ch, the Swiss directory: name, full street address, GPS coordinates, phone, email, website, opening hours, ratings, social media URLs, photos, and category tags. Two ways to start: search by category and location (city, postal code, canton, or all of Switzerland), or paste local.ch URLs (search or company profiles). Works in Deutsch, English, Français, and Italiano.
Why this scraper
- Two start modes plus a review-only switch: search by category + location, or paste local.ch URLs. Turn on
reviewOnlyto emit review-comment rows instead of listings. - Four languages: pages and category slugs auto-resolve in DE/EN/FR/IT, so
coiffeurworks in French andfriseurworks in German. - Five location types: city slug (
zurich), 4-digit postal code (8001), 2-letter canton (zh,ge,vd),switzerland, or all of Switzerland. - 30+ fields per company, including phone, mobile, email, website, all social media URLs (Facebook, Instagram, LinkedIn, X, TikTok, Pinterest, YouTube, XING), GPS lat/lng, opening hours per weekday, attribute tags (delivery, takeaway, parking, ...), and full photo galleries.
- Detail enrichment by default (toggle via
fetchDetails): SERP cards alone only carry name + city + postal + category, so the actor visits every profile to pull the rich payload. - Optional review comments in listing rows: turn on
includeReviewsto embed up to 10 review comments per search or URL mode listing. - Polymorphic
contactsRaw[]passthrough: the full contact polymorphism (MobileContact, LandlineContact, EmailContact, SocialMediaContact, ...) is preserved alongside the flat fields, so future-added contact types still land in the dataset. - Tiny footprint: 256 MB peak memory, runs on the Apify free tier.
Data you get
Sample shape, values are illustrative placeholders, not from a live company.
| Field | Example |
|---|---|
id | aaaaaaaaaaaaaaaaaaaaaa |
name | Sample Café Zürich |
subtitle | Sample Café GmbH |
language | de |
isPremium | true |
mainCategory | Café |
mainCategorySlug | cafe |
categories | ["Café", "Tea room", "Catering"] |
categorySlugs | ["cafe", "tea-room", "catering"] |
street | Sample Street 1 |
zipCode | 8001 |
city | Zürich |
canton | ZH |
country | CH |
address | Sample Street 1, 8001 Zürich |
latitude | 47.0000 |
longitude | 8.0000 |
phone | +41440000000 |
mobile | +41760000000 |
email | info@example.com |
website | https://example.com/ |
whatsapp | +41760000000 |
facebook | https://www.facebook.com/example |
instagram | https://www.instagram.com/example |
linkedin | https://www.linkedin.com/company/example |
rating | 4.5 |
ratingCount | 120 |
reviewCount | 60 |
reviewsFetched | 3 |
reviews | [{ "text": "Great service...", "author": "Reviewer", "date": "2026-01-01" }] |
reviewText | Great service and friendly staff. (review mode only) |
openingHours | Mon: 09:00-18:00; Tue: 09:00-18:00; Wed: closed; ... |
openingHoursStructured | [{ day: "MONDAY", intervals: [{ type: "OPEN", start: "09:00", end: "18:00" }] }, ...] |
description | Sample description paragraph appears here when fetchDetails=true. |
attributes | ["Takeaway", "Delivery", "Vegetarian options"] |
breadcrumb | ["Home", "Food", "Café"] |
logoUrl | https://images.services.local.ch/.../logo.jpg |
imageUrls | ["https://images.services.local.ch/.../photo-1.jpg", "..."] |
contactsRaw | full polymorphic contacts array (see Output example) |
attributeGroupsRaw | full upstream attributeGroups array |
detailUrl | https://www.local.ch/de/d/zurich/8001/cafe/sample-cafe-zurich-aaaaaaaaaaaaaaaaaaaaaa |
searchQuery | cafe |
searchWhere | zurich |
How to use
Search by category in one city
{"mode": "search","category": "restaurant","where": "zurich","language": "de","maxPages": 5,"fetchDetails": true}
Multi-category sweep across a canton
{"mode": "search","queries": ["restaurant", "hotel", "café"],"where": "zh","language": "de","maxListings": 200}
Search by 4-digit postal code, English UI
{"mode": "search","category": "tea-room","where": "8001","language": "en","maxPages": 3}
Paste local.ch URLs (search + profile mixed)
{"mode": "url","urls": ["https://www.local.ch/de/s/restaurant/zurich","https://www.local.ch/fr/s/restaurant/geneve","https://www.local.ch/en/d/zurich/8001/tea-room/sample-name-aaaaaaaaaaaaaaaaaaaaaa"],"maxPages": 3,"fetchDetails": true}
Listing records with review comments embedded
{"mode": "url","urls": ["https://www.local.ch/en/d/zurich/8001/tea-room/bonne-maman-boutique-cafe-nVESaL0TOav64BpX8B1Ncg"],"includeReviews": true,"maxReviewsPerListing": 10}
Review comments only from pasted profile URLs
{"mode": "url","reviewOnly": true,"urls": ["https://www.local.ch/en/d/zurich/8001/tea-room/bonne-maman-boutique-cafe-nVESaL0TOav64BpX8B1Ncg"],"maxListings": 10}
Review comments discovered from a category search
{"mode": "search","reviewOnly": true,"category": "restaurant","where": "zurich","maxListings": 10}
Lead-gen filter: only premium-listed companies with both phone and email
{"mode": "search","category": "garage","where": "switzerland","language": "de","premiumOnly": true,"withPhone": true,"withEmail": true,"maxListings": 500}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build from category + location) or url (use the urls list). |
reviewOnly | boolean | false | Global output switch. When true, emit one row per review comment instead of listing rows. |
category | string | restaurant | Single category slug or label. Used in search mode when queries is empty. |
queries | array | [] | Multiple categories to walk in search mode. Overrides category. |
where | string | zurich | Location: city slug, 4-digit postal code, 2-letter canton, switzerland, or empty. |
language | enum | de | de, en, fr, or it. Affects URL slugs and content language. |
urls | array | [] | local.ch URLs (search or profile pages). Used in URL mode. With reviewOnly=true, profile URLs scrape reviews directly and search URLs discover profiles, then scrape reviews. |
maxPages | integer | 3 | Max SERP pages per category/URL. 20 results per page. |
maxListings | integer | 0 | Total cap (0 = unlimited). Multi-query inputs split the cap evenly. |
fetchDetails | boolean | true | Visit each profile page for phone, email, GPS, hours, social, attributes. |
includeReviews | boolean | false | Include review comments inside each search or URL mode listing record. |
maxReviewsPerListing | integer | 10 | Maximum embedded review comments per listing. Capped at 10. |
maxReviewRows | integer | 10 | Default review-row cap when reviewOnly=true and maxListings is left at 0. |
maxConcurrency | integer | 6 | Concurrent profile-page fetches. |
ratedOnly | boolean | false | Drop entries without an average rating. |
minRating | number | (none) | Drop entries below this rating. |
withPhone | boolean | false | Drop entries without a phone number. |
withEmail | boolean | false | Drop entries without an email. |
withWebsite | boolean | false | Drop entries without a website. |
premiumOnly | boolean | false | Keep only premium-listed companies. |
proxy | object | { useApifyProxy: true } | Defaults to Apify's standard connection settings. For large runs, country=CH is recommended. |
Output example
Sample record, values are illustrative placeholders, not from a live company.
{"id": "aaaaaaaaaaaaaaaaaaaaaa","name": "Sample Café Zürich","subtitle": "Sample Café GmbH","language": "de","isPremium": true,"favorited": false,"professionalTitle": null,"address": "Sample Street 1, 8001 Zürich","street": "Sample Street 1","zipCode": "8001","city": "Zürich","canton": "ZH","country": "CH","latitude": 47.0000,"longitude": 8.0000,"phone": "+41440000000","phoneAlt": null,"mobile": "+41760000000","fax": null,"email": "info@example.com","emailAlt": null,"website": "https://example.com/","whatsapp": "+41760000000","facebook": "https://www.facebook.com/example","instagram": "https://www.instagram.com/example","linkedin": "https://www.linkedin.com/company/example","twitter": null,"tiktok": null,"pinterest": null,"youtube": null,"xing": null,"foursquare": null,"mainCategory": "Café","mainCategorySlug": "cafe","categories": ["Café", "Tea room", "Catering"],"categorySlugs": ["cafe", "tea-room", "catering"],"rating": 4.5,"ratingCount": 120,"reviewCount": 60,"reviewsFetched": 2,"reviews": [{"reviewId": "aaaaaaaaaaaaaaaa","title": "Great service","text": "Sample review comment appears here.","date": "2026-01-01T10:00:00Z","author": "Reviewer Name","reply": null}],"openingHours": "Mon: 09:00-18:00; Tue: 09:00-18:00; Wed: closed; Thu: 09:00-18:00; Fri: 09:00-18:00; Sat: 10:00-17:00; Sun: closed","openingHoursStructured": [{ "day": "MONDAY", "intervals": [{ "type": "OPEN", "start": "09:00", "end": "18:00" }] }],"description": "Sample description paragraph appears here when fetchDetails=true.","descriptionHtml": "<p>Sample description paragraph appears here when fetchDetails=true.</p>","attributes": ["Takeaway", "Delivery", "Vegetarian options"],"breadcrumb": ["Home", "Food", "Café"],"logoUrl": "https://images.services.local.ch/aaaa/logo.jpg","imageUrls": ["https://images.services.local.ch/aaaa/photo-1.jpg","https://images.services.local.ch/aaaa/photo-2.jpg"],"contactsRaw": [{ "__typename": "MobileContact", "value": "+41760000000", "displayValue": "076 000 00 00", "whatsapp": true },{ "__typename": "EmailContact", "value": "info@example.com", "displayValue": "info@example.com" },{ "__typename": "CustomerProvidedURLContact", "value": "https://example.com/", "displayValue": "example.com" },{ "__typename": "SocialMediaContact", "value": "https://www.facebook.com/example", "socialMediaProvider": "FACEBOOK" }],"additionalContactsRaw": null,"attributeGroupsRaw": [{ "groupName": "Services", "attributes": [{ "id": "takeaway", "name": "Takeaway" }] }],"detailUrl": "https://www.local.ch/de/d/zurich/8001/cafe/sample-cafe-zurich-aaaaaaaaaaaaaaaaaaaaaa","searchQuery": "cafe","searchWhere": "zurich"}
Plan requirement
The actor works on every Apify plan including Free. For larger runs (thousands of records), the Apify Starter plan or above is recommended for the most consistent throughput.