local APIlocal.ch ↗
Search Swiss businesses, retrieve contact details, opening hours, and ratings from local.ch. Includes reverse phone number lookup via 3 endpoints.
What is the local API?
The local.ch API provides access to Switzerland's main business directory through 3 endpoints, covering business search, detail lookup, and reverse phone number resolution. The search_businesses endpoint accepts a keyword and Swiss city name, returning paginated results with contact fields including telephone, email, website, and rating. The get_business_detail endpoint exposes opening hours and categories not available in search results.
curl -X GET 'https://api.parse.bot/scraper/44627546-fc9a-414a-b949-1ecffd9f66b8/search_businesses?page=1&what=restaurant&where=Zurich' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace local-ch-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
Local.ch Business Directory API — find Swiss businesses by keyword, location, or phone number.
"""
from parse_apis.local_ch_business_directory_api import LocalCh, Business, Listing
client = LocalCh()
# Search for restaurants in Zurich
for listing in client.listings.search(what="restaurant", where="Zurich", limit=5):
print(listing.name, listing.address, listing.telephone)
# Drill into full detail for this listing
detail = listing.details()
print(detail.rating, detail.review_count, detail.opening_hours)
# Lookup a business by phone number
for result in client.listings.lookup_by_phone(phone_number="044 250 50 50"):
print(result.name, result.address, result.telephone)
Search for businesses in the local.ch directory by keyword and location. Returns a paginated list of business listings with basic contact information. Pagination is page-number based. Each result includes a detail_url for fetching full business information via get_business_detail.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| whatrequired | string | Search keyword for business type or name (e.g. 'garage', 'restaurant', 'bank') |
| whererequired | string | Location to search in, typically a Swiss city name (e.g. 'Zurich', 'Geneva', 'Basel') |
{
"type": "object",
"fields": {
"query": "object containing what, where, and page parameters used",
"businesses": "array of business listing objects with name, detail_url, id, address, telephone, mobile, email, website, rating, review_count, and categories",
"total_count": "integer or null — total number of results if available"
},
"sample": {
"data": {
"query": {
"page": 1,
"what": "restaurant",
"where": "Zurich"
},
"businesses": [
{
"id": "E2FE14_t_A8FFW9_xUkXBQ",
"name": "George Bar & Grill",
"email": null,
"mobile": null,
"rating": null,
"address": "Gessnerallee 5, 8001 Zürich",
"website": null,
"telephone": "+1 (555) 012-3456",
"categories": [],
"detail_url": "https://www.local.ch/en/d/zurich/8001/restaurant/george-bar-grill-E2FE14_t_A8FFW9_xUkXBQ",
"review_count": 0
}
],
"total_count": null
},
"status": "success"
}
}About the local API
Search and Directory Lookup
The search_businesses endpoint takes two required parameters — what (a business type or name, e.g. garage or Migros) and where (a Swiss city or region) — and returns a paginated array of business listings. Each item in the businesses array includes name, address, telephone, mobile, email, website, rating, review_count, and a detail_url that can be passed directly to the detail endpoint. The total_count field gives the full result count when available, and the page parameter controls pagination.
Business Detail
The get_business_detail endpoint accepts a full local.ch business URL and returns the most complete record available for that listing: categories (array of strings), images (array of image URLs), opening_hours, rating, and all contact fields. Field population varies by listing — email, mobile, telephone, and website may be null if the business has not provided that information on local.ch. Categories and images may be empty arrays.
Reverse Phone Lookup
The phone_number_lookup endpoint accepts Swiss phone numbers in formats with or without spaces (e.g. 044 250 50 50 or 0442505050) and returns an array of matching directory entries. Each result shares the same field shape as search results: name, address, telephone, mobile, email, website, rating, and review_count. Coverage reflects what is listed in the local.ch directory — unlisted or mobile-only numbers may return no results.
The local API is a managed, monitored endpoint for local.ch — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when local.ch changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official local.ch API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Swiss lead-generation tool by searching businesses by category and city, collecting
email,telephone, andwebsitefields. - Enrich a CRM with verified Swiss business contact data by passing known local.ch URLs to
get_business_detail. - Identify the business owner of an unknown Swiss phone number using
phone_number_lookup. - Aggregate ratings and review counts across restaurant listings in a given Swiss city.
- Compile business category data for market research by extracting the
categoriesarray from detail responses. - Verify or update address records for Swiss businesses by cross-referencing the
addressfield in search results. - Build a local business finder widget scoped to a specific Swiss city using the
whereparameter anddetail_urllinks.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does local.ch offer an official developer API?+
What does `get_business_detail` return that `search_businesses` does not?+
get_business_detail returns opening_hours, categories, and images — fields not included in the search result objects. It also provides the same contact fields (telephone, mobile, email, website) but sourced from the full business page. Not every field is populated for every listing.Does the phone number lookup cover private individuals as well as businesses?+
phone_number_lookup endpoint returns any matching directory entries, which can include both businesses and private persons listed in the local.ch directory. Coverage depends entirely on what is publicly listed — many mobile numbers and unlisted landlines will return no results.Are opening hours returned by the search endpoint?+
search_businesses results. They are only available from get_business_detail, which requires a full local.ch business URL as input. You can fork this API on Parse and revise it to pre-fetch detail records during search if you need opening hours in bulk.Does the API cover local.ch user reviews or review text?+
rating (a numeric average) and review_count across endpoints, but individual review text and reviewer profiles are not currently returned. The API covers contact data, categories, images, and aggregate ratings. You can fork it on Parse and revise it to add an endpoint that retrieves individual review content.