# Doctoralia Mexico Directory Scraper (`zinin/doctoralia-directory`) Actor

Search Doctoralia Mexico by specialty + city and get public professional listings: name, specialty, rating, review count, city, profile URL.

- **URL**: https://apify.com/zinin/doctoralia-directory.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 physicians

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Doctoralia Directory (Mexico)

Doctoralia is the directory patients across Spain and Latin America use to find doctors, dentists and other health professionals, searching by specialty and city in Spanish. This Actor targets Doctoralia México (doctoralia.com.mx) and returns one row per professional found: name, specialty, star rating, review count, city and a link to their public profile — no browser, no login, no scraping fragile HTML tables.

### What you get

- **Structured rows, not a search-results page.** Doctoralia already embeds a JSON-LD list of every professional on the page — this Actor reads it directly: name, specialty, rating, review count, city and profile link.
- **Any specialty/city combo.** Dentists in Mexico City, pediatricians in Guadalajara, or any other specialty:city pair Doctoralia México's own search box accepts.
- **Public data only.** No phone numbers, emails or home addresses are ever extracted — only the aggregate fields Doctoralia shows to any visitor.
- **No login, no proxies, no browser.** Server-rendered HTML, parsed directly.
- Runs on Apify: schedule it, monitor it, call it from the API or the MCP server, export to JSON, CSV or Excel, or push results straight into your own pipeline.

### How to run it

1. Click **Try for free** — no card needed on the free plan.
2. Paste your `specialty:city` queries into **Specialty:city queries**, one per line — e.g. `dentista:ciudad-de-mexico`, `pediatra:guadalajara`, using Doctoralia's own Spanish-language slugs (lowercase, hyphens for spaces).
3. Press **Start**. Results appear in the dataset — read them in the UI, pull them from the API, or have a webhook push them onward.

### Pricing

Pay-per-event: **$0.005 per run start + $0.003 per professional found**. No monthly seat, no minimum. 100 professionals cost about **$0.31**; 1,000 about **$3.01**.

A query with no matches, or a source error, is still logged with `found: false` and the reason — and it is **not** charged for. You pay for professionals actually delivered, not for attempts.

### Input

| Field | Required | What it does |
|---|---|---|
| `items` | yes | `"specialty:city"` queries, using Doctoralia's own slugs (lowercase, hyphens for spaces), e.g. `dentista:ciudad-de-mexico`. Up to 25 per run. |
| `maxConcurrency` | no | How many queries to run in parallel, 1–20 (default 5). |

```json
{
    "items": [
        "dentista:ciudad-de-mexico",
        "pediatra:guadalajara"
    ]
}
```

### Output

One dataset row per professional found. This is a real row from a real run:

```json
{
    "input": "dentista:ciudad-de-mexico",
    "found": true,
    "name": "Dr. Pedro Pacheco Vargas",
    "specialty": "Dentista - Odontólogo",
    "rating": 5,
    "reviewCount": 223,
    "city": "Ciudad de México",
    "profileUrl": "https://www.doctoralia.com.mx/pedro-pacheco-vargas/dentista-odontologo/ciudad-de-mexico",
    "scrapedAt": "2026-07-26T13:58:03.125Z"
}
```

| Field | What it means |
|---|---|
| `input` | The `specialty:city` query you passed |
| `found` | Whether any professionals matched |
| `name` | Professional's public display name |
| `specialty` | Medical specialty as listed |
| `rating` | Public aggregate star rating (0–5) |
| `reviewCount` | Number of public reviews behind the rating |
| `city` | City as listed on the profile |
| `profileUrl` | Link to the public Doctoralia profile |
| `scrapedAt` | When this Actor fetched the row |

No phone numbers, emails, or home addresses are ever extracted — only public professional/aggregate fields.

#### Need the rest of the picture?

These run on the same account, take the same shape of input and bill the same way, so they slot into an existing pipeline without new plumbing.

| Actor | What it does |
|---|---|
| [Telegram Channel Scraper](https://apify.com/zinin/telegram-channel-intel) | Pull recent post stats from any public Telegram channel: view counts, post text, publish dates and… |
| [AI Answer Change Alert](https://apify.com/zinin/ai-answer-change-alert) | Track whether an AI assistant's answer to a query you care about changed since last time — new sources… |
| [AI Crawler Access Checker](https://apify.com/zinin/ai-crawler-access-checker) | Check which AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended & more) can access your website |
| [AI Overview Citation Tracker](https://apify.com/zinin/ai-overview-tracker) | For each query that matters, see which sources and domains AI assistants cite in their answer — grounded… |
| [B2B Lead Enricher](https://apify.com/zinin/b2b-lead-enricher) | Turn a list of company websites into sales-qualified lead cards: detected tech stack, a rough revenue… |

### FAQ

**Does it need an API key / login?** No — it reads Doctoralia México's public, server-rendered search results.

**How fresh is the data?** Live at run time — every call fetches the current search page.

**Does it cover Doctoralia's Spain, Brazil or other country sites?** No — this Actor targets doctoralia.com.mx only. Say the word if you need another country's Doctoralia site added.

**Does it extract phone numbers or emails?** No. Only public professional/aggregate fields — name, specialty, rating, review count, city and profile URL. Never contact details.

**Can I call it from an AI agent?** Yes — standard Apify Actor, callable from the Apify API, the SDK, or the Apify MCP server.

**What this is NOT.** It is not a booking tool and does not verify medical licenses or credentials — it mirrors exactly what Doctoralia's own public search page shows.

Found a wrong result, or need a check we don't run? Open an issue on this Actor's page.

***

Built by [zinin](https://apify.com/zinin). Questions? Telegram [@timzinin](https://t.me/timzinin).

# Actor input Schema

## `items` (type: `array`):

List of "specialty:city" strings, e.g. "dentista:ciudad-de-mexico". Both parts use the same slugs Doctoralia's own search box uses (lowercase, hyphens for spaces).

## `maxConcurrency` (type: `integer`):

How many queries to process in parallel.

## Actor input object example

```json
{
  "items": [
    "dentista:ciudad-de-mexico",
    "pediatra:guadalajara"
  ],
  "maxConcurrency": 5
}
```

# 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 = {
    "items": [
        "dentista:ciudad-de-mexico",
        "pediatra:guadalajara"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/doctoralia-directory").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 = { "items": [
        "dentista:ciudad-de-mexico",
        "pediatra:guadalajara",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinin/doctoralia-directory").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 '{
  "items": [
    "dentista:ciudad-de-mexico",
    "pediatra:guadalajara"
  ]
}' |
apify call zinin/doctoralia-directory --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zinin/doctoralia-directory",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/v4HlLYYVJZpddu0fQ/builds/Lfev5SxdCmmOFZ58x/openapi.json
