Hot Pepper Beauty Scraper at a glance
Hot Pepper Beauty Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes name, salon name, rating, review count and reviews included, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Other
- Region
- Asia
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.60 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 22 options
Scrape Japanese hair, nail, relaxation and esthetic salons from Hot Pepper Beauty (beauty.hotpepper.jp). Search by area or keyword, or paste URLs. Returns address, phone, coordinates, rating, reviews count, hours, payment methods, features, coupons with prices and the latest review.
What Hot Pepper Beauty Scraper can do
- Four salon families. Hair, nail and eyelash, relaxation and esthetic salons from one actor.
- Search the way you think. Type an area name such as 新宿, an area code, a whole region, or a keyword such as a station or style.
- Paste links instead. Salon pages, sub-pages (coupons, reviews, styles) and area list pages all work.
- Rich records. Around 60 fields per salon, including coordinates, payment methods, average spend and customer mix.
- Customer reviews, nested. Switch on reviews and each salon row carries a reviews list (paginated for you, de-duplicated, with the salon's replies and the four aspect scores). No extra dataset rows to join.
- Coupons with prices. Every listed coupon with title, price and labels, ready for price monitoring.
Choose what to collect
These inputs let you configure Hot Pepper Beauty Scraper - Salons, Prices & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search builds salon lists from areas or keywords. URL mode takes salon pages or area list pages you paste. Fields in the other mode's section are ignored. |
areasarray | Area names in Japanese such as 新宿 or 渋谷, or in romaji such as shinjuku, an area code such as macAA (optionally with its name, macAA|新宿), a sub-area code such as macAA/sacX001, a region name such as 関東 (expands to every area in the region), or an area list link. Ignored in URL mode. |
keywordsarray | Free-text salon search, for example a station, style or salon name. Each keyword is its own search over hair salons. Ignored in URL mode. |
serviceTypestring | Which salon family to list for the chosen areas. |
minReviewCountinteger | Skip salons with fewer reviews than this (applied to the review count shown on the list page). |
minRatingnumber | Skip salons whose average review score is below this value (1 to 5). Setting it turns on salon detail pages because the score comes from there. |
prefecturesarray | Keep only salons located in these prefectures, for example 東京都, 神奈川県 or Tokyo. Combine with a region name such as 関東 in Areas. Setting it turns on salon pages because the address comes from there. Applies in search and URL mode. |
Show 15 more inputs
| Input | What it controls |
|---|---|
urlsarray | Paste any of these links: an area list (including its area top, sub-area and page-2 forms, and the nail, relax and esthe versions), a salon page or one of its coupon, review or style sub-pages, or a keyword search page. Area and search lists are walked page by page; each salon link returns one record. Whole-region pages, the home page, catalog and ranking pages are skipped with a warning. Filter fields are ignored in URL mode. |
fetchDetailsboolean | Open every salon page for full data: phone, address, coordinates, rating, hours, payment methods, features, coupons and the latest review. Off returns only the list-page summary. |
includeReviewsboolean | Adds the salon's customer reviews to each row as a list, newest first: date, overall score, the four scores (atmosphere, service, technique, menu and price), the review text, the menu booked and the salon's public reply where there is one. Reviewer names and profiles are never included. Needs 'Fetch salon detail pages' switched on. Each review is a separate paid event. |
maxReviewsPerSaloninteger | How many reviews to collect for each salon when reviews are on (30 reviews per page of the site). Reviews are billed per review returned, so this is also the most each salon can add to the bill. |
maxPagesinteger | Optional limit on list pages walked per area or keyword. Empty or 0 means unlimited. This does NOT cap the output; Max items is the cap. |
maxItemsinteger | Maximum salons to return in total. 0 means unlimited. |
resumeFromRunIdstring | Run ID (or dataset ID) of a previous run of this Actor. Salons already collected there are skipped, so this run returns only new ones. Leave empty for a normal run. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. A salon is UPDATED when any returned detail changes, including rating and review counts; add fields you consider noise to Ignore fields below. The first run returns all matching salons as NEW; later runs return only NEW, UPDATED and REAPPEARED salons, and unchanged ones are neither returned nor billed unless Emit unchanged is on. State is kept separately for each search setup (areas, keywords, links, category, detail pages, minimum reviews and rating); use State key to name or share one monitoring campaign. |
stateKeystring | Optional name for an incremental monitoring campaign. Leave empty to derive it from the search setup. |
emitUnchangedboolean | Off by default. Turn on to also return salons that have not changed since the last run, marked UNCHANGED. This returns, and bills, rows you already have, so leave it off unless you want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return salons that were present in an earlier run but are no longer listed, marked EXPIRED. Only produced after a run that walked every tracked area or keyword list to its last page, so never when Max items or Max list pages cut the run short, when Resume was used, or in URL mode with single salon links. This returns, and bills, extra rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Field names that must never make a salon UPDATED, for example rating, reviewCount or coupons. They are still returned in every row. Nothing is ignored by default except run bookkeeping (retrievedAt, position, sourceListUrl) and the nested customer reviews, so a new review alone does not make a salon UPDATED; it still does when the review count or rating changes. Used only in incremental mode. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
nameName (text)salonNameSalon name (text)ratingRating (number)reviewCountReview count (number)reviewsDeliveredReviews included (number)addressAddress (text)phonePhone (text)prefecturePrefecture (text)areaNameArea name (text)cutPriceCut price (text)priceMinPrice min (number)couponCountCoupon count (number)Show 45 more fields
hasOnlineBookingHas online booking (boolean)serviceTypeService type (text)nearestStationNearest station (text)imageImage (image)urlUrl (link)changeTypeChange type (incremental mode) (text)changedFieldsChanged fields (incremental mode) (array)salonNameKanaSalon name (kana) (text)latitudeLatitude (text)longitudeLongitude (text)businessHoursBusiness hours (text)closedDaysClosed days (text)paymentMethodsPayment methods (array)featuresFeatures (array)seatsTextSeats text (text)staffTextStaff text (text)averageCostFirstVisitAverage cost first visit (text)averageCostRepeatAverage cost repeat (text)labelsLabels (array)accessNoteAccess note (text)websiteWebsite (link)priceMaxPrice max (number)cityCity (text)prefectureEnPrefecture (English) (text)genreNameGenre (text)customerGenderCustomer gender (%) (object)customerAgeWomenCustomer age, women (%) (object)customerAgeMenCustomer age, men (%) (object)customerAgeOthersCustomer age, others (%) (object)salonIdSalon ID (text)couponscouponscouponIdCoupon ID (text)titleCoupon (text)pricePrice (yen) (number)priceTextPrice text (text)menuTypesMenu types (array)reviewsreviewsreviewKeyReview key (text)dateReview date (text)ratingsScores by aspect (object)textReview (text)menuMenu booked (text)treatmentsTreatments (array)salonReplySalon reply (text)salonPickSalon Pick Up (boolean)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"salonId": "H000000000",
"name": "Example Salon (Example)",
"salonName": "Example Salon Shinjuku / Color / Cut",
"schemaType": "HairSalon",
"serviceType": "hair",
"url": "https://beauty.hotpepper.jp/slnH000000000/",
"rating": 4.5,
"reviewCount": 100,
"blogCount": 10,
"couponCount": 8,
"phone": "+81-00-0000-0000",
"address": "Tokyo, Shinjuku-ku, 1-1-1",
"prefecture": "東京都",
"prefectureCode": "13",
"regionCode": "SA",
"regionName": "関東",
"areaCode": "macAA",
"areaName": "新宿・高田馬場・代々木",
"latitude": 35.69,
"longitude": 139.7,
"nearestStation": "JR Shinjuku Station 3 min on foot",
"businessHours": "10:00-21:00",
"closedDays": "Open every day",
"paymentMethods": [
"Visa",
"Mastercard"
],
"cutPrice": "¥3,000~",
"priceMin": 3000,
"priceRange": "¥3,000~",
"averageCostFirstVisit": "¥8,000~¥8,999",
"averageCostRepeat": "¥7,000~¥7,999",
"seatCount": 8,
"staffCount": 10,
"hasOnlineBooking": true,
"features": [
"Open after 7 pm",
"Drinks served"
],
"coupons": [
{
"couponId": "CP00000000000000",
"title": "Cut and color",
"price": 6500,
"labels": [
"New"
]
}
],
"latestReview": {
"date": "2026/1/1",
"ratings": {
"総合": 5
},
"text": "Sample review text.",
"salonReply": null
},
"salonNameKana": "Example Salon Shinjuku",
"reviews": [
{
"reviewKey": "r0000000000000000",
"date": "2026-01-01",
"rating": 5,
"ratings": {
"atmosphere": 5,
"service": 5,
"technique": 5,
"menuPrice": 4
},
"text": "Sample review text.",
"menu": "Cut and color",
"treatments": [
"Cut",
"Color"
],
"salonReply": "Sample reply text.",
"salonPick": false
}
],
"reviewsDelivered": 1,
"detailFetched": true,
"retrievedAt": "2026-01-01T00:00:00Z"
}Ways to use this data
- Market researchers: map salon density, price levels and ratings across Japanese areas.
- Suppliers and sales teams: build lead lists of salons with phone numbers and addresses by neighbourhood.
- Price analysts: track coupon prices and cut prices over time with scheduled runs.
- Franchise and location planners: compare competitor salons near a candidate site using coordinates and ratings.
- Review analysts: follow review counts and scores per salon.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Hot Pepper Beauty Scraper return?
The documented output for Hot Pepper Beauty Scraper includes name, salon name, rating, review count, reviews included, address, phone and prefecture. Availability of each field depends on the source page and the selected mode.
How much does Hot Pepper Beauty Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed salons on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode.
Why is the rating empty on some rows?
The rating comes from the salon page. Turn on Fetch salon detail pages, or the row carries only the list-page summary. Salons with no reviews in the preceding year have no score. A salon's priceMax is empty when the site shows an open-ended price (for example from 3,000 yen).
Why did my run fail instead of returning an empty dataset?
If the site cannot be read at all, the run stops with a clear message so "no salons matched" is never confused with "nothing could be read". Run it again in a few minutes.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
