# Caloo Japan Hospital & Clinic Scraper (`piquno/caloo-japan-hospital-clinic-scraper`) Actor

Scrape hospitals, clinics and dental clinics from Caloo (caloo.jp), Japan's hospital review directory, by prefecture, city and department. Get phone, address, GPS, rating, reviews, hours, closed days, departments, specialists, treatments, payment methods and websites. No browser, no login.

- **URL**: https://apify.com/piquno/caloo-japan-hospital-clinic-scraper.md
- **Developed by:** [Piquno](https://apify.com/piquno) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 facilities

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/actors/running/actors-in-store.md#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

## Caloo Japan Hospital & Clinic Scraper

Scrape hospitals, clinics and dental clinics from **[Caloo (病院口コミ検索カルー)](https://caloo.jp)**, Japan's hospital review directory: about 182,000 medical facilities in all 47 prefectures with patient reviews and survey cards. Get facility names, phone numbers, postal codes and addresses, GPS coordinates, nearest stations, ratings and review counts, consultation hours and closed days, medical departments, board-certified specialists, treatments, vaccinations, payment methods, parking, directors, websites, online-booking links and full review texts.

HTTP-only. No browser, no API key, no login. Search pages and facility pages are read as server-rendered HTML with schema.org structured data, so the fields are clean and stable.

### What you can do with it

- **Healthcare B2B lead generation** – every facility has a phone number; most have an address, coordinates, departments, staff qualifications and a website. Target dermatology clinics for a cosmetic device, dental clinics for an implant system, or every hospital with a dialysis unit in a prefecture.
- **Market and location analysis** – facility density by city and department, opening hours and Sunday coverage, cashless adoption, online-booking adoption, patient demand from caloo page-view counts.
- **Reputation monitoring** – ratings, review counts and full review texts with visit period, wait time, fee and department, for one facility or a whole ward.
- **Recruiting and medical sales territories** – specialists on staff, treatments offered, director names.
- **Data enrichment** – match to your CRM by name, phone or address; the `hospitalId` is stable across runs.

### How it works

1. Pick a **prefecture**. Optionally narrow to a **city / ward** (`新宿区`, `横浜市中区`, `八王子`, partial names are fine, or a JIS code such as `13104`) and a **department** (`内科`, `歯科`, `皮膚科`, `Dermatology`, or a code such as `k41`).
2. Or paste your own **Start URLs**: any caloo.jp search page, including station pages (`/hospitals/search/s1130203/all`) and feature pages (`/hospitals/search/13/all/64` = female doctors). Each is paginated for you (20 facilities per page).
3. Set **Max facilities**. Tick **Scrape facility pages** for phone, address, coordinates, closed days, payments, parking, specialists and treatments; tick **Scrape all reviews** to attach up to *Max reviews* full reviews and survey cards per facility.

Caloo shows at most 100 pages (2,000 facilities) per search. When a prefecture or city holds more, the Actor splits it into its cities, wards and towns automatically, so a whole-prefecture run still reaches every facility. Results land in the run's dataset, one item per facility, with ready-made table views for Overview, Contact & location, Hours & practicalities, Medical profile and Reputation.

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `prefecture` | string | `13` (東京都) | JIS prefecture code, see the table below. |
| `city` | string | – | City, ward or town by Japanese name (partial OK) or JIS code. Empty = whole prefecture. |
| `department` | string | – | Department by Japanese or English name, or caloo code (`k1`). Empty = every facility. |
| `sortBy` | string | `recommended` | `recommended`, `rating`, `reviews` or `newest`. |
| `startUrls` | array | – | caloo.jp search URLs. Overrides the fields above. |
| `maxResults` | integer | `100` | Unique facilities to collect. |
| `includeDetails` | boolean | `false` | Open every facility page (one extra request per facility, same price per result). |
| `includeReviews` | boolean | `false` | Open the reviews page of every facility with reviews (one or two extra requests, same price per result). |
| `maxReviews` | integer | `50` | Cap on reviews and on survey cards per facility. |
| `requestDelaySecs` | number | `0.5` | Pause after each request. |
| `maxConcurrency` | integer | `3` | Parallel requests. |
| `proxyConfiguration` | object | Apify datacenter | Apify Proxy is recommended for anything beyond a small test. |

Example: every dermatology clinic in Shinjuku with full details.

```json
{
  "prefecture": "13",
  "city": "新宿区",
  "department": "皮膚科",
  "maxResults": 500,
  "includeDetails": true
}
```

Example: all hospitals and clinics in Osaka prefecture, listing data only.

```json
{
  "prefecture": "27",
  "maxResults": 20000
}
```

Example: the 200 best-rated facilities near Meguro station with their reviews.

```json
{
  "startUrls": [{"url": "https://caloo.jp/hospitals/search/s1130203/all?s=star"}],
  "maxResults": 200,
  "includeDetails": true,
  "includeReviews": true,
  "maxReviews": 20
}
```

### Output

Listing fields (always present): `hospitalId`, `url`, `name`, `facilityType` (hospital / clinic / dental), `addressArea`, `stations`, `nearestStations`, `catchphrase`, `rating`, `reviewCount`, `surveyCount`, `departments`, `specialists`, `features`, `hasOnlineBooking`, `myNumberAccepted`, `hours`, `hoursText`, `website`, `reservationUrl`, `imageUrl`, `pageViewsMonth`, `pageViewsPrevMonth`, `pageViewsYear`, `pageViewsTrend`, `recentReviews`, `isPromoted`, `position`, `sourceListUrl`, plus the search context `prefectureCode`, `prefectureName`, `cityCode`, `cityName`, `departmentFilter`.

Facility-page fields (with `includeDetails`): `officialName`, `nameKana`, `schemaType`, `postalCode`, `address`, `latitude`, `longitude`, `townCode`, `townName`, `access`, `phone`, `onlineBookingNote`, `smartphoneMyNumberAccepted`, `ratingCount`, `hoursNote`, `closedDays`, `cashlessPayment`, `paymentMethods`, `hasParking`, `parking`, `director`, `departmentGroups`, `specialtyClinics`, `treatments`, `vaccinations`, `about`, `staffIntro`, `otherInfo` and the `reviews` shown on the page.

Reviews (with `includeReviews`): `reviews` grows to up to `maxReviews` entries and `surveys` holds the patient survey cards. Each review has `reviewId`, `title`, `url`, `author`, `authorMeta` (relation・age band・gender・number of reviews), `rating`, `department`, `disease`, `body`, `visitPeriod`, `postedPeriod`, `visitType` (通院 outpatient / 入院 inpatient), `waitTime`, `medicine`, `fee`, `feeNote`, `helpfulVotes`, `helpfulTotal`.

Example item:

```json
{
  "hospitalId": "4130005266",
  "url": "https://caloo.jp/hospitals/detail/4130005266",
  "name": "目黒外科",
  "facilityType": "clinic",
  "prefectureName": "東京都",
  "cityName": "品川区",
  "townName": "上大崎",
  "postalCode": "141-0021",
  "address": "東京都品川区上大崎2-15-18目黒東豊ビル6階",
  "latitude": 35.6342805,
  "longitude": 139.7167284,
  "nearestStations": ["目黒駅", "五反田駅", "白金台駅"],
  "phone": "03-5420-8080",
  "website": "https://meguro-geka.jp/",
  "hasOnlineBooking": true,
  "rating": 4.76,
  "ratingCount": 650,
  "reviewCount": 22,
  "surveyCount": 628,
  "departments": ["内科", "外科", "心臓血管外科", "漢方"],
  "specialists": ["外科専門医", "心臓血管外科専門医"],
  "specialtyClinics": ["下肢静脈瘤専門外来"],
  "hours": {"mon": ["09:00-13:00", "14:00-18:00"], "tue": ["09:00-13:00", "14:00-18:00"], "thu": ["09:00-13:00", "14:00-18:00"], "fri": ["09:00-13:00", "14:00-18:00"], "sun": ["09:00-13:00", "14:00-18:00"]},
  "closedDays": "水曜・土曜・日曜(隔週)・祝日",
  "pageViewsMonth": 1318,
  "pageViewsYear": 13540,
  "reviews": [{"reviewId": "463818", "title": "先生も受付の方も看護師さんも最高に優しい！", "rating": 5.0, "department": "外科", "disease": "下肢静脈瘤", "visitPeriod": "2025年", "waitTime": "3分未満", "fee": "3,000円"}]
}
```

Export as JSON, CSV, Excel or XML from the dataset, or pull it through the Apify API.

### Pricing

Pay per result: you are charged only for facilities actually saved to the dataset. Facility pages and review pages add requests but not cost per facility. Start with a small `maxResults` to check the fields you need, then scale up.

### Tips

- `hospitalId` is stable; use it to deduplicate across runs. Promoted (PR) cards are included and flagged with `isPromoted: true`; they can belong to a neighbouring area, so filter them out if you need strict geography.
- `rating` and `ratingCount` combine written reviews and survey postcards; `reviewCount` is written reviews only.
- `hours` keys are `mon`…`sun` plus `hol` for public holidays. Hospitals often publish reception hours here rather than consultation hours; `hoursNote` carries the remarks.
- Card-level `departments` are the facility's main departments; facility pages add the complete grouped list, specialists, specialty clinics, treatments and vaccinations.
- Whole-prefecture runs are big: Tokyo has about 28,000 facilities, Osaka 15,000, Kanagawa 13,000. Use `city`, `department` or `maxResults` to size the run; the Actor splits large areas into cities and towns by itself so nothing past caloo's 2,000-per-search window is lost.
- Sorting by rating or reviews with a small `maxResults` is a quick way to get the most visible facilities in an area.

### Prefecture codes

| Code | Prefecture | Code | Prefecture | Code | Prefecture |
|---|---|---|---|---|---|
| `01` | 北海道 Hokkaido | `17` | 石川県 Ishikawa | `33` | 岡山県 Okayama |
| `02` | 青森県 Aomori | `18` | 福井県 Fukui | `34` | 広島県 Hiroshima |
| `03` | 岩手県 Iwate | `19` | 山梨県 Yamanashi | `35` | 山口県 Yamaguchi |
| `04` | 宮城県 Miyagi | `20` | 長野県 Nagano | `36` | 徳島県 Tokushima |
| `05` | 秋田県 Akita | `21` | 岐阜県 Gifu | `37` | 香川県 Kagawa |
| `06` | 山形県 Yamagata | `22` | 静岡県 Shizuoka | `38` | 愛媛県 Ehime |
| `07` | 福島県 Fukushima | `23` | 愛知県 Aichi | `39` | 高知県 Kochi |
| `08` | 茨城県 Ibaraki | `24` | 三重県 Mie | `40` | 福岡県 Fukuoka |
| `09` | 栃木県 Tochigi | `25` | 滋賀県 Shiga | `41` | 佐賀県 Saga |
| `10` | 群馬県 Gunma | `26` | 京都府 Kyoto | `42` | 長崎県 Nagasaki |
| `11` | 埼玉県 Saitama | `27` | 大阪府 Osaka | `43` | 熊本県 Kumamoto |
| `12` | 千葉県 Chiba | `28` | 兵庫県 Hyogo | `44` | 大分県 Oita |
| `13` | 東京都 Tokyo | `29` | 奈良県 Nara | `45` | 宮崎県 Miyazaki |
| `14` | 神奈川県 Kanagawa | `30` | 和歌山県 Wakayama | `46` | 鹿児島県 Kagoshima |
| `15` | 新潟県 Niigata | `31` | 鳥取県 Tottori | `47` | 沖縄県 Okinawa |
| `16` | 富山県 Toyama | `32` | 島根県 Shimane | | |

### Department codes

| Code | Department | Code | Department | Code | Department |
|---|---|---|---|---|---|
| `k1` | 内科 Internal medicine | `k24` | 消化器外科 GI surgery | `k83` | 産婦人科 Obstetrics & gynecology |
| `k2` | 呼吸器内科 Respiratory | `k25` | 乳腺科 Breast clinic | `k91` | 小児科 Pediatrics |
| `k3` | 循環器内科 Cardiology | `k26` | 脳神経外科 Neurosurgery | `k92` | 小児外科 Pediatric surgery |
| `k4` | 消化器内科 Gastroenterology | `k27` | 整形外科 Orthopedics | `k111` | 精神科 Psychiatry |
| `k5` | 胃腸科 GI | `k28` | 形成外科 Plastic surgery | `k113` | 心療内科 Psychosomatic |
| `k6` | 内分泌代謝科 Endocrinology | `k29` | 美容外科 Cosmetic surgery | `k121` | 歯科 Dentistry |
| `k7` | 糖尿病科 Diabetology | `k31` | リハビリテーション科 Rehabilitation | `k122` | 矯正歯科 Orthodontics |
| `k8` | リウマチ科 Rheumatology | `k41` | 皮膚科 Dermatology | `k123` | 歯周病科 Periodontics |
| `k9` | アレルギー科 Allergology | `k42` | 美容皮膚科 Cosmetic dermatology | `k124` | 小児歯科 Pediatric dentistry |
| `k10` | 神経内科 Neurology | `k51` | 泌尿器科 Urology | `k125` | 歯科口腔外科 Oral surgery |
| `k11` | 血液内科 Hematology | `k30` | 肛門科 Proctology | `k127` | インプラント Implants |
| `k12` | 腎臓内科 Nephrology | `k102` | 性病科 STD clinic | `k129` | ホワイトニング Whitening |
| `k145` | 人工透析 Dialysis | `k61` | 眼科 Ophthalmology | `k142` | 漢方 Kampo |
| `k147` | 緩和ケア Palliative care | `k71` | 耳鼻咽喉科 ENT | `k143` | 救急科 Emergency |
| `k21` | 外科 Surgery | `k81` | 産科 Obstetrics | `k149` | ペインクリニック Pain clinic |
| `k22` | 呼吸器外科 Thoracic surgery | `k82` | 婦人科 Gynecology | `k201` | 予防接種 Vaccinations |
| `k23` | 心臓血管外科 Cardiovascular surgery | | | `k202` | 健康診断 Health checkups |
| | | | | `k204` | 人間ドック Full checkup |

### Related scrapers

Looking for other Japanese business data? See the Ekiten, HotPepper Beauty, HotPepper Gourmet, Tabelog, Retty, Gurunavi, SUUMO, Jalan and Rakuten Travel scrapers by the same author.

### Legal

This Actor collects publicly available business information about medical facilities. You are responsible for using the data in line with Caloo's terms and applicable law, including Japan's Act on the Protection of Personal Information where relevant. Review text is user-generated content; it may contain personal health experiences, so handle it accordingly.

# Actor input Schema

## `prefecture` (type: `string`):

Prefecture to crawl. The whole prefecture is covered city by city when it holds more than 2,000 facilities.

## `city` (type: `string`):

Optional. City, ward or town inside the prefecture, by Japanese name (partial matches are fine: 新宿, 千代田区, 横浜市中区, 八王子) or by JIS code (13104). Several may match a short name. Leave empty for the whole prefecture.

## `department` (type: `string`):

Optional. Medical department by Japanese or English name (内科, 歯科, 皮膚科, 小児科, Dermatology…) or caloo code (k1). The README lists all 51. Leave empty for every facility.

## `sortBy` (type: `string`):

Order of the search results. Matters when Max facilities is smaller than the number of facilities in the area.

## `startUrls` (type: `array`):

Optional. Your own caloo.jp search URLs, e.g. https://caloo.jp/hospitals/search/13104/all (Shinjuku), https://caloo.jp/hospitals/search/27/k91 (pediatrics in Osaka), a station page such as https://caloo.jp/hospitals/search/s1130203/all or a feature page such as https://caloo.jp/hospitals/search/13/all/64 (female doctors). Each is paginated automatically. Overrides the fields above.

## `maxResults` (type: `integer`):

Stop after this many unique facilities. Each facility is one dataset item and one billable result.

## `includeDetails` (type: `boolean`):

Also open every facility page for phone number, postal code, full address, GPS coordinates, kana name, access directions, closed days, payment methods, parking, director, grouped departments, specialists, specialty clinics, treatments, vaccinations, the facility's own description and the reviews shown on the page. One extra request per facility, same price per result.

## `includeReviews` (type: `boolean`):

Also open the reviews page of every facility that has reviews or survey cards, and attach up to Max reviews of each. One or two extra requests per facility, same price per result.

## `maxReviews` (type: `integer`):

Cap on reviews and on survey cards attached to one facility when Scrape all reviews is on.

## `requestDelaySecs` (type: `number`):

Pause after each successful request.

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

Parallel requests.

## `proxyConfiguration` (type: `object`):

Apify Proxy (datacenter) is the default. Switch to residential (country JP) only if the log reports many blocked requests.

## Actor input object example

```json
{
  "prefecture": "13",
  "city": "千代田区",
  "sortBy": "recommended",
  "startUrls": [],
  "maxResults": 100,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviews": 50,
  "requestDelaySecs": 0.5,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `facilities` (type: `string`):

Hospital and clinic records from caloo.jp. Listing fields are always present; facility-page fields are filled when includeDetails is true.

# 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 = {
    "city": "千代田区",
    "startUrls": [],
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piquno/caloo-japan-hospital-clinic-scraper").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 = {
    "city": "千代田区",
    "startUrls": [],
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piquno/caloo-japan-hospital-clinic-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "city": "千代田区",
  "startUrls": [],
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piquno/caloo-japan-hospital-clinic-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piquno/caloo-japan-hospital-clinic-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kiGqLHMyb5Q8BFzDh/builds/s4lrK5XuPTM0hp3an/openapi.json
