116117 APIarztsuche.116117.de ↗
Search for doctors and therapists across Germany by postal code, radius, and specialty via the official 116117 Arztsuche portal. Returns names, addresses, phone numbers, and coordinates.
What is the 116117 API?
The 116117 Arztsuche API gives access to Germany's official doctor-search portal through 4 endpoints, returning structured provider data including name, address, phone number, GPS coordinates, and distance. The search_therapists endpoint accepts a German postal code (PLZ) and an optional specialty filter, delivering up to 50 closest results in a single call. For complete area coverage, search_all_therapists fans out across a geographic grid and deduplicates results.
curl -X GET 'https://api.parse.bot/scraper/b8617ed0-dd0b-40a8-ad6e-998c54364d58/search_therapists?plz=10115&radius_km=10&specialty=psychotherapie' \ -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 arztsuche-116117-de-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.
"""Walkthrough: 116117 German Doctor/Therapist Search — bounded, re-runnable."""
from parse_apis.arztsuche_116117 import (
DoctorSearch, Specialty, LocationNotFound
)
client = DoctorSearch()
# Search for locations to resolve a city name into usable postal codes.
for suggestion in client.searchresults.search(query="Berlin", limit=3):
print(suggestion.label, suggestion.type)
# Look up specialty codes to discover what filters are available.
category = client.specialtysearchresults.search(query="Psycho", limit=1).first()
if category:
print(category.title, category.fieldName)
for entry in category.entries[:3]:
print(f" {entry.code}: {entry.value} ({entry.count})")
# Quick search: find therapists near a postal code using a named specialty.
location = client.location("10115")
for therapist in location.search_doctors(radius_km=5, specialty=Specialty.PSYCHOTHERAPIE, limit=3):
print(therapist.name, therapist.distance_km, therapist.phone)
# Comprehensive grid search for full coverage within a small radius.
first_doc = location.search_all_doctors(
radius_km=3, specialty=Specialty.HAUSARZT, grid_spacing_km=3, limit=1
).first()
if first_doc:
try:
# Attempt to fetch doctors in a potentially empty area
empty = client.location("99999").search_doctors(specialty=Specialty.UROLOGIE, limit=1).first()
except LocationNotFound as exc:
print(f"Location not found: {exc.query}")
print(first_doc.name, first_doc.address, first_doc.distance_km)
print("exercised: searchresults.search / specialtysearchresults.search / location.search_doctors / location.search_all_doctors")
Search for doctors and medical specialists by postal code. Returns up to 50 closest results sorted by distance. The API returns a fixed window of 50 nearest matches; the radius_km parameter filters those client-side. Use search_all_therapists for complete coverage beyond 50 results.
| Param | Type | Description |
|---|---|---|
| plzrequired | string | German postal code (PLZ) to search around, e.g. '10115' |
| radius_km | integer | Search radius in kilometers for client-side filtering. API always returns 50 closest results; radius filters those by distance. |
| specialty | string | Medical specialty filter. Accepted named values: 'psychotherapie', 'hausarzt', 'augenarzt', 'chirurgie', 'frauenheilkunde', 'hno', 'hautarzt', 'kinderarzt', 'orthopaedie', 'urologie', 'innere_medizin', 'neurologie_psychiatrie', 'kinder_jugendpsychiatrie', 'all'. Can also pass a numeric code from search_specialty. |
{
"type": "object",
"fields": {
"plz": "string - postal code searched",
"radius_km": "integer - radius filter applied",
"specialty": "string - specialty filter used",
"therapists": "array of Therapist objects with name, address, distance_km, phone, specialty, lat, lon",
"total_found": "integer - number of therapists returned after radius filtering",
"more_results_available": "boolean - whether more results exist beyond the 50 returned by the API"
}
}About the 116117 API
What the API covers
The API exposes doctor and therapist listings from arztsuche.116117.de, the official German 116117 health-line search portal. Each provider record includes name, address, distance_km, phone, specialty, lat, and lon. Searches are anchored to a German postal code (plz) and can be narrowed with a specialty value such as psychotherapie, hausarzt, augenarzt, or chirurgie.
Endpoints in detail
search_therapists returns up to 50 providers sorted by distance from the given PLZ. The optional radius_km parameter applies a client-side distance filter on those 50 results. The more_results_available boolean in the response tells you whether additional providers exist beyond the returned set. For exhaustive area sweeps, search_all_therapists issues a grid of queries spaced grid_spacing_km apart, deduplicates matches, and reports how many queries were made (queries_made) — use a smaller grid_spacing_km (2–3 km) for dense urban areas.
Supporting lookups
search_location resolves a city name or postal code string into structured suggestions, each carrying a label, type (PLZ or city), and plz value you can feed directly into therapist searches. search_specialty translates a German specialty term — for example Orthopädie or Psychotherapeut — into category entries with a code, value, and provider count, so you can discover valid filter codes before constructing a therapist query.
Coverage and limitations
The API covers providers listed in the 116117 portal for Germany. search_therapists always returns the 50 geographically closest results; it does not paginate beyond that cap. search_all_therapists compensates by querying multiple grid points, but response time scales with grid density and radius size — keep radius_km modest (5–10 km) or increase grid_spacing_km for faster responses over larger areas.
The 116117 API is a managed, monitored endpoint for arztsuche.116117.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when arztsuche.116117.de 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 arztsuche.116117.de 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 nearest-therapist locator widget that accepts a German PLZ and displays results with
distance_kmandphone. - Aggregate psychotherapy availability across German cities by running
search_all_therapistswithspecialty=psychotherapiefor each city's postal code. - Populate a provider directory app with GPS coordinates (
lat,lon) for map-based display of doctors near a user. - Validate or auto-complete specialty filter codes using
search_specialtybefore constructing a filteredsearch_therapistsrequest. - Resolve ambiguous user-typed city names to canonical PLZ values with
search_locationbefore passing them to therapist search. - Benchmark doctor density across regions by comparing
total_foundcounts fromsearch_all_therapistsqueries centered on different postal codes. - Monitor whether new providers appear in a specific area by periodically calling
search_therapistsand diffing results against a stored list.
| 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 116117 Arztsuche have an official developer API?+
What does `search_all_therapists` return that `search_therapists` doesn't?+
search_therapists returns the 50 providers geographically closest to the given PLZ in one call. search_all_therapists issues multiple queries across a geographic grid and deduplicates results, so it can surface providers that fall within your radius_km but weren't in the closest-50 set. The response includes a queries_made field showing how many grid queries were executed and a grid_spacing_km field confirming the resolution used.Does the API expose appointment booking or availability schedules?+
name, address, phone, specialty, lat, lon, and distance_km — but not appointment slots or availability calendars. Those details are not part of the 116117 portal's public listing data. You can fork this API on Parse and revise it to add an endpoint that targets a booking surface if one becomes available.Can I retrieve provider profiles with detailed credentials or insurance acceptance?+
How does the `radius_km` parameter behave in `search_therapists`?+
radius_km value in search_therapists applies a filter on those 50 results after they are retrieved, so it can only reduce the returned set, not expand it beyond 50. The more_results_available boolean indicates whether providers beyond the cap exist. Use search_all_therapists with a defined radius_km for a more complete picture of a specific geographic area.