SYSTEM all green source local.ch queue 18,492 pages p99 latency 215ms dataflirt.com · scraper/local-ch
RUN · 38 active pipelines · local.ch live

Swiss directory data,
at warehouse scale.

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.

Listings extracted
1.2M /run
Phone numbers
850K /run
Review records
320K /run
Active pipelines
38
Uptime
99.94%
Data Dictionary

Every field we extract from local.ch

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_idnamecategorysub_categorystreet_addresszip_codecitycantonphoneemailwebsitelanguage_detected
business_profiles
● 200 OK
"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_idnamecategorysub_categorystreet_addresszip_code
1
2
3

Complete list of extractable fields for Contact Details objects from local.ch. All fields typed and schema-versioned.

business_idbusiness_namephone_primaryphone_secondaryfaxemail_addresswebsite_urlbooking_urlfacebook_urlinstagram_url
contact_details
● 200 OK
"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_idbusiness_namephone_primaryphone_secondaryfaxemail_address
1
2
3

Complete list of extractable fields for Opening Hours objects from local.ch. All fields typed and schema-versioned.

business_idmonday_openmonday_closetuesday_opentuesday_closewednesday_openwednesday_closethursday_openthursday_closefriday_openfriday_closeweekend_hoursholiday_exceptions
opening_hours
● 200 OK
"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_idmonday_openmonday_closetuesday_opentuesday_closewednesday_open
1
2
3

Complete list of extractable fields for Reviews & Ratings objects from local.ch. All fields typed and schema-versioned.

review_idbusiness_idrating_scorereview_textauthor_namereview_dateplatform_sourcelanguagehelpful_votes
reviews_& ratings
● 200 OK
"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_idbusiness_idrating_scorereview_textauthor_namereview_date
1
2
3

Complete list of extractable fields for Location & Geo objects from local.ch. All fields typed and schema-versioned.

business_idbusiness_namelatitudelongitudecantonmunicipalityneighborhoodmap_urldirections_url
location_& geo
● 200 OK
"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_idbusiness_namelatitudelongitudecantonmunicipality
1
2
3

Capabilities

Everything you need from local.ch - nothing you don't

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.

Full Directory Extraction

Business name, category, address, and metadata extracted precisely across all Swiss cantons.

Contact Info Parsing

Capture primary phones, secondary phones, emails, and website URLs, bypassing basic obfuscation.

Geo-coordinate Mapping

Extract latitude and longitude coordinates for precise location intelligence and mapping integrations.

Multilingual Support

Handle German, French, Italian, and English listing variations without duplicating records.

Opening Hours Structuring

Normalise complex opening hours, split shifts, and public holiday exceptions into structured JSON.

Review Scraping

Extract user ratings, review text, and dates from local.ch business profiles.

Category Taxonomy

Map businesses to primary and secondary industry categories for accurate segmentation.

Anti-Bot Circumvention

Navigate rate limits and CAPTCHAs using residential proxies and intelligent request pacing.

Scheduled Updates

Run continuous pipelines at monthly or quarterly cadences to keep your CRM database fresh.

// engagement pipeline

From category list to warehouse record

Brief in. Clean data out.

Define Scope
d 0

Provide categories, cantons, or search terms. We design the extraction schema together.

Pipeline Build
d 2–4

We configure Scrapy / Playwright crawlers, proxy rotation, and session management for local.ch.

Validation & QA
d 4–6

Schema validation, null-rate checks, and contact data verification before full launch.

Delivery
ongoing

JSON / CSV / Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.

Under the hood

How our local.ch pipeline handles the hard parts

Swiss directories invest in scraping detection to protect their data. Here is how we stay resilient - and why teams choose managed infrastructure over DIY.

pipeline-monitor · local.ch · live ● active
// fingerprinting
Identity rotation
TLS fingerprintrandomised
User-agentrotated
IP poolresidential
Challenges blocked0
// pagination
Page coverage
48,291 pages queued running
// observability
Pipeline health
99.9%
uptime
142ms
p99 lat
0.3%
null rate
2
alerts
Pagination limits
Bypassing hard caps on search results

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.

Phone number obfuscation
JavaScript rendering for contact data

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.

Multilingual deduplication
Merging cross-language records

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.

IP blocking
Swiss residential proxy rotation

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.

Schema drift
Resilient selectors with fallback chains

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.

Applications

Who uses local.ch data - and how

Teams across industries use local.ch data to build competitive products and smarter operations.

01
B2B Lead Generation

Sales teams extract targeted lists of local businesses by canton and category to feed their outbound CRM workflows.

02
Market Mapping

Consultancies analyse business density, category distribution, and regional economic activity across Switzerland.

03
Competitor Analysis

Retailers and service providers map competitor locations and review scores to identify underserved municipalities.

04
Location Intelligence

Real estate and logistics firms use coordinate and address data to optimise delivery routes and site selection.

05
Local SEO Audits

Marketing agencies verify NAP (Name, Address, Phone) consistency across directories for their Swiss clients.

06
CRM Enrichment

Enterprise teams append missing phone numbers, emails, and opening hours to their existing customer databases.

Why DataFlirt

"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.

Technical Spec

Local.ch scraper - technical capabilities

Everything supported by our local.ch scraper — rendered SPA elements, auth walls, rate-limit evasion and beyond.

JavaScript rendering
Full Playwright sessions - required for contact detail extraction
Supported
CAPTCHA bypass
Automated CapSolver integration for rate-limit blocks
Supported
Residential proxy rotation
ISP-grade residential IPs from CH pools - rotated per request
Supported
Multilingual parsing
Handles DE, FR, IT, and EN listing variants
Supported
Pagination bypass
Grid-based search subdivision to overcome 1000-result limits
Supported
Change detection (diffs)
Hash-based diff: only emit records with changed fields since last run
Supported
User account private bookmarks
Requires authenticated user session credentials
Partial
Direct booking API integration
Executing actual reservations via third-party widgets
Partial
Infrastructure

Infrastructure powering the local.ch pipeline

Open-source tooling on proven cloud infra — no vendor lock-in, full observability.

ScrapyPlaywrightPython 3.12RedisPostgreSQLApache AirflowAWS LambdaS3CloudWatch2CaptchaCapSolverResidential ProxiesDockerKubernetesGrafanaPrometheus
Scrapy + Playwright Stack

Scrapy handles crawl orchestration, deduplication, and retry logic. Playwright handles JavaScript rendering, cookie sessions, and interaction flows. Combined via scrapy-playwright middleware.

Residential Proxy Infrastructure

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.

Cloud-Native Orchestration

Pipelines run on AWS Lambda (burst) and ECS (sustained). Airflow handles scheduling, dependency management, and SLA alerting. All state stored in managed Postgres.

Output & Delivery

Your data, your destination

Data delivered to where your team already works — no new tooling required.

JSON
Newline-delimited or nested - schema versioned per run
CSV
Flat file with typed columns - Excel/Sheets compatible
XLS
Legacy spreadsheet format for non-technical teams
Parquet
Columnar format for BigQuery, Snowflake, Athena
AWS S3
Direct bucket delivery - compatible with any data lake
Webhook
HTTP POST per record for real-time downstream processing
API
REST endpoints to query your extracted datasets
PostgreSQL
Upsert into your existing schema with conflict resolution
S3
Direct bucket delivery — compatible with any data lake
// faq

Common questions.

About local.ch scraping, legality, and pipeline operations.

Ask us directly →
Is scraping local.ch legal?

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.

How do you handle local.ch anti-bot systems?

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.

Can you extract data across all Swiss languages?

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.

How fresh is the data?

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.

What is the minimum viable engagement?

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.

Can I request a sample dataset before committing?

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.

$ dataflirt scope --new-project --source=local.ch ready

Tell us what
to extract.
We do the rest.

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.

hello@dataflirt.com · Bengaluru · IST · typical reply < 4h
Related Scrapers

More in business directories

Services

Data Extraction for Every Industry

View All Services →