We extract business listings, phone numbers, addresses, and ratings from local.ch. Delivered as clean JSON, CSV, or Parquet to S3, BigQuery, or Snowflake on your cadence.
Structured, schema-consistent data across all major object types — delivered clean, typed, and ready to query.
Complete list of extractable fields for Business Profiles objects from local.ch. All fields typed and schema-versioned.
"business_id": "ch-loc-99281", "name": "Muller Bakery AG", "category": "Bakery", "street_address": "Bahnhofstrasse 12", "zip_code": "8001", "city": "Zurich", "canton": "ZH", "phone": "+41 44 123 45 67"
| # | business_id | name | category | sub_category | street_address | zip_code |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Contact Details objects from local.ch. All fields typed and schema-versioned.
"business_id": "ch-loc-99281", "business_name": "Muller Bakery AG", "phone_primary": "+41 44 123 45 67", "email_address": "info@mullerbakery.ch", "website_url": "https://mullerbakery.ch", "booking_url": "None", "instagram_url": "https://instagram.com/mullerbakeryzh"
| # | business_id | business_name | phone_primary | phone_secondary | fax | email_address |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Opening Hours objects from local.ch. All fields typed and schema-versioned.
"business_id": "ch-loc-99281", "monday_open": "07:00", "monday_close": "18:00", "tuesday_open": "07:00", "tuesday_close": "18:00", "weekend_hours": "Saturday 08:00-16:00, Sunday Closed", "holiday_exceptions": "Closed on Swiss National Day"
| # | business_id | monday_open | monday_close | tuesday_open | tuesday_close | wednesday_open |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Reviews & Ratings objects from local.ch. All fields typed and schema-versioned.
"review_id": "rev-449102", "business_id": "ch-loc-99281", "rating_score": 4.5, "review_text": "Excellent fresh bread every morning.", "author_name": "Hans W.", "review_date": "2025-10-12", "language": "en"
| # | review_id | business_id | rating_score | review_text | author_name | review_date |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Location & Geo objects from local.ch. All fields typed and schema-versioned.
"business_id": "ch-loc-99281", "business_name": "Muller Bakery AG", "latitude": 47.3769, "longitude": 8.5417, "canton": "ZH", "municipality": "Zurich", "map_url": "https://map.search.ch/Zurich,Bahnhofstr.12"
| # | business_id | business_name | latitude | longitude | canton | municipality |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our local.ch scraper handles every layer of the platform: directory listings, contact details, opening hours, and geographic coordinates - with JavaScript rendering, session management, and anti-bot circumvention built in.
Business name, category, address, and metadata extracted precisely across all Swiss cantons.
Capture primary phones, secondary phones, emails, and website URLs, bypassing basic obfuscation.
Extract latitude and longitude coordinates for precise location intelligence and mapping integrations.
Handle German, French, Italian, and English listing variations without duplicating records.
Normalise complex opening hours, split shifts, and public holiday exceptions into structured JSON.
Extract user ratings, review text, and dates from local.ch business profiles.
Map businesses to primary and secondary industry categories for accurate segmentation.
Navigate rate limits and CAPTCHAs using residential proxies and intelligent request pacing.
Run continuous pipelines at monthly or quarterly cadences to keep your CRM database fresh.
Brief in. Clean data out.
Provide categories, cantons, or search terms. We design the extraction schema together.
We configure Scrapy / Playwright crawlers, proxy rotation, and session management for local.ch.
Schema validation, null-rate checks, and contact data verification before full launch.
JSON / CSV / Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
Swiss directories invest in scraping detection to protect their data. Here is how we stay resilient - and why teams choose managed infrastructure over DIY.
Local.ch limits search results to a fixed number of pages. We bypass this by programmatically subdividing searches using postal codes, precise coordinate grids, and micro-categories to ensure 100% coverage of the directory.
Contact details are often loaded dynamically or require user interaction to display. We run full Playwright browser sessions to execute JavaScript and trigger event listeners, capturing the clean phone numbers and emails.
Swiss businesses often have listings in German, French, and Italian. Our pipeline identifies cross-language duplicates using address and phone matching, delivering a single, normalised record per business entity.
Aggressive scraping from data centre IPs results in immediate blocks. We route requests through Swiss residential ISP proxies with realistic browser fingerprints to maintain high success rates.
Directory layouts change frequently. Our selector strategy uses multiple fallback chains per field - CSS selectors, XPath, and text-pattern matching - so a layout change does not break your data pipeline overnight.
Sales teams extract targeted lists of local businesses by canton and category to feed their outbound CRM workflows.
Consultancies analyse business density, category distribution, and regional economic activity across Switzerland.
Retailers and service providers map competitor locations and review scores to identify underserved municipalities.
Real estate and logistics firms use coordinate and address data to optimise delivery routes and site selection.
Marketing agencies verify NAP (Name, Address, Phone) consistency across directories for their Swiss clients.
Enterprise teams append missing phone numbers, emails, and opening hours to their existing customer databases.
"Local.ch holds the definitive graph of Swiss businesses, but accessing this data at volume requires navigating strict rate limits and dynamic obfuscation."
Most teams underestimate the investment required: reliable local.ch scraping requires residential proxies, full JavaScript rendering for contact details, CAPTCHA handling, and daily selector maintenance. DataFlirt absorbs that complexity so your engineers can focus on the analysis.
Everything supported by our local.ch scraper — rendered SPA elements, auth walls, rate-limit evasion and beyond.
Open-source tooling on proven cloud infra — no vendor lock-in, full observability.
Scrapy handles crawl orchestration, deduplication, and retry logic. Playwright handles JavaScript rendering, cookie sessions, and interaction flows. Combined via scrapy-playwright middleware.
We maintain pools of residential ISP proxies across CH regions. Rotation happens per-request with sticky sessions where required. IP score monitoring prevents blacklisted pool contamination.
Pipelines run on AWS Lambda (burst) and ECS (sustained). Airflow handles scheduling, dependency management, and SLA alerting. All state stored in managed Postgres.
Data delivered to where your team already works — no new tooling required.
About local.ch scraping, legality, and pipeline operations.
Ask us directly →Scraping publicly available directory information is generally permissible under applicable law, provided it does not breach specific terms of service or involve personal data violations. DataFlirt targets only public business data. We do not extract private user data or circumvent authentication walls. Clients should review terms and consult legal counsel for specific use cases.
We use Swiss residential ISP proxies, full Playwright browser sessions with realistic fingerprints, and request timing modelled on human behaviour. Our selectors have multi-layer fallback chains so DOM changes do not break the pipeline.
Yes. Our pipeline supports DE, FR, IT, and EN interfaces. We normalise category names and address formats, and deduplicate listings to ensure you receive a clean, unified dataset regardless of the source language.
Full directory refreshes are typically run on a monthly or quarterly cadence depending on your requirements. Targeted extractions for specific cantons or categories can be scheduled weekly.
Our smallest packages start at a defined category or canton list with one-off delivery. For full directory extractions or continuous updates, we price based on volume and delivery frequency. Contact us with your use case for a scoped quote.
Absolutely. We provide a sample run of up to 500 business listings as part of the pre-engagement scoping process - so you can validate schema fit, field completeness, and data quality before signing any contract.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a one-off canton export or a continuous directory feed across Switzerland - we scope, build, and operate the pipeline. Tell us what you need.