Local.ch $1💰 URL | Keywords | Reviews Scraper avatar

Local.ch $1💰 URL | Keywords | Reviews Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Local.ch $1💰 URL | Keywords | Reviews Scraper

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

AbotAPI

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

22 days ago

Last modified

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 reviewOnly to emit review-comment rows instead of listings.
  • Four languages: pages and category slugs auto-resolve in DE/EN/FR/IT, so coiffeur works in French and friseur works 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 includeReviews to 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.

FieldExample
idaaaaaaaaaaaaaaaaaaaaaa
nameSample Café Zürich
subtitleSample Café GmbH
languagede
isPremiumtrue
mainCategoryCafé
mainCategorySlugcafe
categories["Café", "Tea room", "Catering"]
categorySlugs["cafe", "tea-room", "catering"]
streetSample Street 1
zipCode8001
cityZürich
cantonZH
countryCH
addressSample Street 1, 8001 Zürich
latitude47.0000
longitude8.0000
phone+41440000000
mobile+41760000000
emailinfo@example.com
websitehttps://example.com/
whatsapp+41760000000
facebookhttps://www.facebook.com/example
instagramhttps://www.instagram.com/example
linkedinhttps://www.linkedin.com/company/example
rating4.5
ratingCount120
reviewCount60
reviewsFetched3
reviews[{ "text": "Great service...", "author": "Reviewer", "date": "2026-01-01" }]
reviewTextGreat service and friendly staff. (review mode only)
openingHoursMon: 09:00-18:00; Tue: 09:00-18:00; Wed: closed; ...
openingHoursStructured[{ day: "MONDAY", intervals: [{ type: "OPEN", start: "09:00", end: "18:00" }] }, ...]
descriptionSample description paragraph appears here when fetchDetails=true.
attributes["Takeaway", "Delivery", "Vegetarian options"]
breadcrumb["Home", "Food", "Café"]
logoUrlhttps://images.services.local.ch/.../logo.jpg
imageUrls["https://images.services.local.ch/.../photo-1.jpg", "..."]
contactsRawfull polymorphic contacts array (see Output example)
attributeGroupsRawfull upstream attributeGroups array
detailUrlhttps://www.local.ch/de/d/zurich/8001/cafe/sample-cafe-zurich-aaaaaaaaaaaaaaaaaaaaaa
searchQuerycafe
searchWherezurich

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

ParameterTypeDefaultDescription
modestringsearchsearch (build from category + location) or url (use the urls list).
reviewOnlybooleanfalseGlobal output switch. When true, emit one row per review comment instead of listing rows.
categorystringrestaurantSingle category slug or label. Used in search mode when queries is empty.
queriesarray[]Multiple categories to walk in search mode. Overrides category.
wherestringzurichLocation: city slug, 4-digit postal code, 2-letter canton, switzerland, or empty.
languageenumdede, en, fr, or it. Affects URL slugs and content language.
urlsarray[]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.
maxPagesinteger3Max SERP pages per category/URL. 20 results per page.
maxListingsinteger0Total cap (0 = unlimited). Multi-query inputs split the cap evenly.
fetchDetailsbooleantrueVisit each profile page for phone, email, GPS, hours, social, attributes.
includeReviewsbooleanfalseInclude review comments inside each search or URL mode listing record.
maxReviewsPerListinginteger10Maximum embedded review comments per listing. Capped at 10.
maxReviewRowsinteger10Default review-row cap when reviewOnly=true and maxListings is left at 0.
maxConcurrencyinteger6Concurrent profile-page fetches.
ratedOnlybooleanfalseDrop entries without an average rating.
minRatingnumber(none)Drop entries below this rating.
withPhonebooleanfalseDrop entries without a phone number.
withEmailbooleanfalseDrop entries without an email.
withWebsitebooleanfalseDrop entries without a website.
premiumOnlybooleanfalseKeep only premium-listed companies.
proxyobject{ 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.