# Jameda Doctors Scraper (Cheap) (`data_api/jameda-doctors-scraper-cheap`) Actor

Jameda scraper that extracts doctor profiles, specializations, reviews, and coordinates from jameda.de, so you can build accurate provider directories without getting blocked.

- **URL**: https://apify.com/data\_api/jameda-doctors-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Jameda Doctors Scraper

![Jameda Doctors Scraper](cover.jpg)

Jameda lists hundreds of thousands of German doctors, dentists, and therapists, but the site only lets you browse them one page at a time. Get that into a spreadsheet by hand and you are copying names, ratings, and addresses for hours. This scraper does it for you. Give it a specialty and a city, or paste a Jameda search link, and every provider comes back as a clean row: name, medical fields, star rating, review count, and each practice address with its coordinates. One search or a whole region.

### What you get

One row per provider, with empty fields dropped so your data stays tidy when you load it into a sheet or database. Each record covers:

- **Who they are** — `providerName`, `profileUrl`, `photoUrl`, and the `medicalFields` they practice
- **Reputation** — `starRating` on a five-point scale and `reviewsTotal` patient review count
- **Where to find them** — `practiceLocations`, a list of every practice with street, city, federal state, clinic name, and latitude/longitude
- **When it was pulled** — `collectedAt`, an ISO 8601 timestamp on every row

### Quick start

1. Open the input form and type one or more specialties into **Search terms** (for example `Zahnarzt`).
2. Add the cities or postal codes you care about under **Search locations** — the scraper pairs each term with each location.
3. Or skip both and paste ready-made Jameda links into **Jameda URLs**.
4. Set a **Results limit** to cap how many records come back per search, then press **Start**.
5. Export the dataset as JSON, CSV, Excel, or XML once the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Healthcare lead lists** — build targeted outreach lists of dental, therapy, or specialist practices for medical suppliers and SaaS sales teams
- **Market coverage analysis** — measure how many providers of a given specialty serve a city or postal code, and find underserved areas
- **Competitive benchmarking** — track rival practices' ratings and review counts across the regions you operate in
- **Directory and map building** — populate a local health directory or map app with structured, geocoded provider profiles
- **Academic and policy research** — study the distribution of medical specialties across German regions

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerms` | array of strings | No | Specialties, doctor names, or symptoms to look up, for example `Zahnarzt` or `Kardiologe`. Paired with every location. Default `["Zahnarzt"]`. |
| `searchLocations` | array of strings | No | German cities, districts, or postal codes, for example `Munchen` or `80331`. Default `["Munchen"]`. |
| `targetUrls` | array of objects | No | Ready-made Jameda search or profile links to scrape directly, skipping the term-and-location builder. |
| `resultsLimit` | integer | No | Most records to keep per search term or starting link. Default `30`. |
| `timeoutSeconds` | integer | No | Seconds to wait for each page before giving up. Default `45`; raise it if you hit timeouts. |

#### Example input

```json
{
    "searchTerms": ["Zahnarzt"],
    "searchLocations": ["Munchen"],
    "targetUrls": [],
    "resultsLimit": 30,
    "timeoutSeconds": 45
}
````

### Output

Every provider becomes one row. Fields that the page does not expose are dropped from that row, so the columns you do get are always populated.

#### Example output

```json
{
    "providerName": "Dr. med. Philipp Lindemann",
    "profileUrl": "https://www.jameda.de/philipp-lindemann-2/allgemeinmediziner-hausarzt-internist-hausarzt/berlin",
    "photoUrl": "https://s3-eu-west-1.amazonaws.com/jamedade/doctor/80e029/80e02907cc779c05acb8962f13382db4_medium_square.jpg",
    "medicalFields": [
        "Internist",
        "Allgemeinmediziner",
        "Hausarzt"
    ],
    "starRating": 5.0,
    "reviewsTotal": 126,
    "practiceLocations": [
        {
            "addressId": "482583",
            "street": "Raeuschstr. 57 a",
            "city": "Berlin",
            "region": "Berlin",
            "entityName": "Hausarztpraxis Dr.med. Philipp Lindemann Facharzt fuer Innere Medizin",
            "latitude": 52.583416,
            "longitude": 13.3012094
        }
    ],
    "collectedAt": "2026-06-29T05:22:50.123456+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `providerName` | string | Full name of the doctor, clinical team, or facility |
| `profileUrl` | string | Direct link to the provider's Jameda profile |
| `photoUrl` | string | Portrait photo or facility logo link, when available |
| `medicalFields` | array of strings | Medical specialties and focus areas listed for the provider |
| `starRating` | number | Patient rating on a five-point scale |
| `reviewsTotal` | integer | Total patient reviews and recommendations |
| `practiceLocations` | array of objects | One entry per practice address (see fields below) |
| `practiceLocations[].addressId` | string | Jameda's internal identifier for the address |
| `practiceLocations[].street` | string | Street name and house number |
| `practiceLocations[].city` | string | Town or city |
| `practiceLocations[].region` | string | Federal state |
| `practiceLocations[].entityName` | string | Practice, clinic, or healthcare group name |
| `practiceLocations[].latitude` | number | GPS latitude of the practice |
| `practiceLocations[].longitude` | number | GPS longitude of the practice |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |

### Tips for best results

- **Pair terms with locations.** Every search term runs against every location, so two terms and three cities produce six searches. Keep the lists focused to control your run size.
- **Cap test runs with `resultsLimit`.** Start at 20 or 30 records per search to confirm the output fits your pipeline, then raise it for the full batch.
- **Use Jameda URLs for precision.** If you already have a filtered search page, paste the link into `targetUrls` to scrape exactly that subset.
- **Raise `timeoutSeconds`** to around 60 if pages load slowly and you see timeout errors in the log.
- **Expect some blank fields.** A provider with no reviews returns no `starRating`; those keys are simply dropped from the row rather than set to null.

### How can I use Jameda doctor data?

**How can I use the Jameda Doctors Scraper to build a healthcare lead list?**
Enter the specialties you sell to, such as `Zahnarzt` or `Physiotherapeut`, alongside the cities you cover. Each provider comes back with a name, profile link, medical fields, and full practice address, which gives you a clean, geocoded prospect list for medical suppliers or healthcare SaaS outreach.

**How can I scrape Jameda doctor ratings and reviews for a city?**
Add a specialty and a city, set a `resultsLimit`, and run it. Every row carries `starRating` and `reviewsTotal`, so you can rank providers by reputation, benchmark competitors, or track how ratings shift across neighborhoods over time.

**How can I export Jameda provider addresses with coordinates?**
Each record includes a `practiceLocations` list where every entry has the street, city, federal state, and latitude/longitude. Export to CSV or JSON and you have a ready-made dataset for mapping practice density or running distance-based analysis.

**How can I research medical specialty coverage across German regions?**
Run the same specialty against a list of cities or postal codes. Counting the providers returned per location shows where a specialty is concentrated and where coverage is thin, useful for market entry, policy work, or academic study.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `searchTerms` (type: `array`):

Medical specialties, doctor names, or symptoms to look up on Jameda, for example Zahnarzt or Kardiologe.

## `searchLocations` (type: `array`):

German cities, districts, or postal codes to pair with each search term, for example Munchen or 80331.

## `targetUrls` (type: `array`):

Paste ready-made Jameda search result or doctor profile links to scrape them directly, skipping the term-and-location builder.

## `resultsLimit` (type: `integer`):

Most records to keep for each search term or starting link before moving on. Handy for capping spend on test runs.

## `timeoutSeconds` (type: `integer`):

Seconds to wait for each page before giving up. Raise it if you hit frequent timeouts.

## Actor input object example

```json
{
  "searchTerms": [
    "Zahnarzt"
  ],
  "searchLocations": [
    "Munchen"
  ],
  "targetUrls": [],
  "resultsLimit": 25,
  "timeoutSeconds": 45
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "Zahnarzt"
    ],
    "searchLocations": [
        "Munchen"
    ],
    "targetUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/jameda-doctors-scraper-cheap").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["Zahnarzt"],
    "searchLocations": ["Munchen"],
    "targetUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/jameda-doctors-scraper-cheap").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "Zahnarzt"
  ],
  "searchLocations": [
    "Munchen"
  ],
  "targetUrls": []
}' |
apify call data_api/jameda-doctors-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/jameda-doctors-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Jameda Doctors Scraper (Cheap)",
        "description": "Jameda scraper that extracts doctor profiles, specializations, reviews, and coordinates from jameda.de, so you can build accurate provider directories without getting blocked.",
        "version": "0.0",
        "x-build-id": "Pb2CydtHyEIayOpFB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~jameda-doctors-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-jameda-doctors-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~jameda-doctors-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-jameda-doctors-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~jameda-doctors-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-jameda-doctors-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Medical specialties, doctor names, or symptoms to look up on Jameda, for example Zahnarzt or Kardiologe.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "Zahnarzt"
                        ]
                    },
                    "searchLocations": {
                        "title": "Search locations",
                        "type": "array",
                        "description": "German cities, districts, or postal codes to pair with each search term, for example Munchen or 80331.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "Munchen"
                        ]
                    },
                    "targetUrls": {
                        "title": "Jameda URLs",
                        "type": "array",
                        "description": "Paste ready-made Jameda search result or doctor profile links to scrape them directly, skipping the term-and-location builder.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL",
                                    "description": "A Jameda search results page or an individual doctor profile link."
                                }
                            }
                        },
                        "default": []
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Most records to keep for each search term or starting link before moving on. Handy for capping spend on test runs.",
                        "default": 25
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Seconds to wait for each page before giving up. Raise it if you hit frequent timeouts.",
                        "default": 45
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
