Booksy Scraper at a glance
Booksy Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes recordid, businessid, business, link and primarycategoryname, 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.50 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
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 24 options
Scrape Booksy beauty businesses across the US, UK and Poland by category, location or URL. Extract business profiles, service menus, prices, durations, photos, opening hours, ratings and client reviews. Supports resume, incremental updates and MCP export.
What Booksy Scraper can do
- Search the way people talk. Enter barber in Orlando or hair salon in London; the actor resolves plain names through the marketplace's own lookup. No raw ids needed.
- Full priced service menus by default. Every business row carries its bookable services with price, duration, deposit and discount fields. No extra toggle, no per-service requests.
- Nested client reviews. Reviews attach to the business record as a structured list (rating, text, appointment date, business reply, verified flag), read up to 20 per business by default.
- Three markets, one actor. United States, United Kingdom and Poland. A pasted link's locale prefix picks the market automatically; every record carries the marketplace's own resolved location.
- Every URL shape. Business links, bare business ids, category-and-location results links with pagination. A link's numeric identifiers decide what it points at, never its readable slug.
- Built for schedules. Resume, incremental change detection (NEW / UPDATED / UNCHANGED / EXPIRED) and MCP connector export are built in, and a refused run fails loudly instead of returning an empty dataset.
Choose what to collect
These inputs let you configure Booksy Scraper - Beauty Salons, Services, Prices & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search by category and location names, or paste your own links: category-and-location results pages walk forward, a business link (or a bare business id) is always read in full. |
locationsarray | Plain city or area names, for example Orlando, London, Warszawa. Each location runs on the selected market. Supported markets: United States, United Kingdom, Poland. |
marketstring | The marketplace to search (each market has its own businesses, locations and categories). Search mode uses this market; pasted links pick their own market from their locale prefix. |
categorystring | Plain category name, for example barber, hair salon, nails, massage, skin care, brows and lashes, makeup, tattoo, braids and locs. Leave empty to search every category. |
searchQuerystring | Optional keyword filter, for example 'fade', 'balayage', 'gel'. Narrow the results feed server-side. |
sortOrderstring | Order of the results feed. |
minRatingnumber | Keep only businesses rated at least this many stars (applied to the collected rows). |
Show 17 more inputs
| Input | What it controls |
|---|---|
onlineOnlyboolean | Keep only businesses that take online bookings. |
travelingOnlyboolean | Keep only businesses that travel to the client. |
urlsarray | Category-and-location results links (they walk forward), business links (always read in full; the link's locale also picks the market) or bare business ids. A link's numeric identifiers decide what it points at - its readable slug never does. |
fetchDetailsboolean | Read each collected business's own page for the written description, opening hours, contacts (website, social), booking and deposit policies, amenities, staff, categories and the full photo gallery. Turning this off returns the faster results-card shape (service menus with prices are on the card either way). |
fetchReviewsboolean | Read each collected business's client reviews (rating, text, appointment date, business reply) and attach them to the business record as a nested list. Applies to both modes; a business with no published reviews ships without them. |
maxReviewsinteger | Upper bound on client reviews collected per business (reviews serve 10 per page). 0 skips review collection entirely. |
maxItemsinteger | Hard cap on business records for the whole run. The walk stops once it is reached. |
maxPagesinteger | Does NOT cap the run on its own: 0 or empty walks every results page and defers to Max items. A positive value bounds how many results pages each location walk covers. |
resumeFromRunIdstring | A previous run's ID whose records are treated as already collected: they are seeded as seen and skipped this run. |
incrementalModeboolean | Compare each business against the saved baseline and classify NEW / UPDATED / UNCHANGED / EXPIRED. Unchanged businesses are suppressed unless Emit unchanged is on. Fields that move without the business changing (the feed's relevance score and promoted flags, review counters, availability flags) are excluded from change detection; the locations, category, market, links and toggles you run with are part of the scope, so changing them starts a fresh baseline. |
stateKeystring | Optional name for the incremental baseline. Leave empty to derive it from the run's scope (locations, category, market, links, toggles); set the same key on every scheduled run to share one baseline. |
emitUnchangedboolean | Also push businesses whose tracked fields did not change (changeType UNCHANGED) instead of suppressing them. |
emitExpiredboolean | After a complete scan, push baseline businesses this run did not see (changeType EXPIRED, for example businesses that closed). Never fires on a capped, resumed or partially failed walk. |
ignoreFieldsForChangesarray | Extra record fields excluded from change detection beyond the built-in volatile set (relevance score, distance, promoted flag, review counters, availability flags). |
mcpConnectorsarray | Connector IDs to export the collected records to after the run (Apify MCP). Leave empty to skip the export. |
notionParentPageUrlstring | Parent page URL when one of the connectors is Notion. |
maxNotifyListingsinteger | Upper bound on records handed to each connector. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
recordIdrecordIdbusinessIdbusinessIdnameBusinessurlLink (link)primaryCategoryNameprimaryCategoryNameratingRatingreviewsCountreviewsCountaddressaddresscitycitystatestatezipCodezipCodecountrycountryShow 65 more fields
serviceCountserviceCountpriceFrompriceFrompriceTopriceToimageUrlImage (image)websitewebsiteinstagramUrlinstagramUrldetailFetcheddetailFetchedreviewsCollectedreviewsCollectedchangeTypechangeTypechangedFieldschangedFieldsfirstSeenAtfirstSeenAtlastSeenAtlastSeenAtdescriptiondescriptioncontactNamecontactNamefacebookUrlfacebookUrlecommerceUrlecommerceUrlcreditCardscreditCardsopenHoursTextHoursopeningHoursNoteopeningHoursNotedepositPolicydepositPolicydepositCancelDaysdepositCancelDaysbookingPolicybookingPolicybookingModebookingModeparkingparkingwheelchairAccesswheelchairAccessamenitiesamenitiesstaffstafftopServicestopServicescategoriescategorieshasOnlineServiceshasOnlineServiceshasOnlineVouchershasOnlineVouchershasSafetyRuleshasSafetyRulesserviceFeeserviceFeepricingLevelpricingLevelprofileTypeprofileTypesubdomainsubdomainservices.categoryNameservices.categoryNameservices.serviceIdservices.serviceIdservices.variantIdservices.variantIdservices.nameServiceservices.descriptionservices.descriptionservices.durationMinservices.durationMinservices.priceservices.priceservices.priceTextPriceservices.listPriceTextservices.listPriceTextservices.discountPercentservices.discountPercentservices.discountPriceTextservices.discountPriceTextservices.depositservices.depositservices.onlineBookableservices.onlineBookableservices.isOnlineServiceservices.isOnlineServiceservices.isTravelingServiceservices.isTravelingServicereviews.reviewIdreviews.reviewIdreviews.reviewAuthorreviews.reviewAuthorreviews.reviewRatingRatingreviews.reviewTitlereviews.reviewTitlereviews.reviewTextReviewreviewCreatedreviewCreatedreviews.reviewCreatedreviews.reviewCreatedreviews.reviewAppointmentDatereviews.reviewAppointmentDatereviews.reviewVerifiedreviews.reviewVerifiedreviews.reviewServicesreviews.reviewServicesreviews.reviewStaffreviews.reviewStaffreviews.reviewReplyreviews.reviewReplyreviews.reviewReplyUpdatedreviews.reviewReplyUpdatedreviews.reviewPhotosreviews.reviewPhotosExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"recordId": "booksy:us:business:147413",
"kind": "business",
"businessId": 147413,
"name": "Sample Barber Shop",
"market": "us",
"currency": "USD",
"primaryCategoryName": "Barber",
"address": "2709 Sample Ave., Orlando, 32805",
"city": "Orlando",
"state": "Florida",
"zipCode": "32805",
"country": "United States",
"latitude": 28.51,
"longitude": -81.38,
"rating": 4.9,
"reviewsCount": 329,
"serviceCount": 9,
"priceFrom": 30,
"priceTo": 60,
"services": [
{
"name": "Sample Cut",
"price": 40,
"durationMin": 30,
"priceText": "$40.00+",
"discountPercent": 10,
"onlineBookable": true
}
],
"openHoursText": "Monday: closed; Tuesday: 12:00-17:00; ...",
"detailFetched": true,
"reviewsCollected": true
}Ways to use this data
- Beauty suppliers and distributors: build lead lists of barbershops, salons and spas per city with size signals (review counts, ratings, service counts) and contact links.
- Service-pricing analysts: pull full priced menus across cities and markets to benchmark what a fade, balayage or gel manicure costs.
- Directory builders: feed marketplace pages, city pages or category pages into the actor and get normalized business records with photos, hours and geolocation.
- Reputation monitoring: track ratings, review counts and review text per business on a schedule; incremental mode reports only what changed.
- Market researchers: compare category density and pricing between the US, UK and Polish marketplaces with one input change.
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 Booksy Scraper return?
The documented output for Booksy Scraper includes recordid, businessid, business, link, primarycategoryname, rating, reviewscount and address. Availability of each field depends on the source page and the selected mode.
How much does Booksy Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.50 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 the businesses' phone numbers and email addresses?
No. The marketplace keeps direct phone and email behind its authenticated booking flow, which this actor does not touch. Business websites and social links are included in the profile fields, so you can follow the business's own contact channels.
Why do scheduled incremental runs report many NEW records?
The marketplace's recommended feed re-shuffles between runs and rotates which businesses appear first. A run capped below the location's total business count legitimately meets different slices each time. For stable change detection, set Max items at or above the location's business count, or keep incremental mode with a stable State key and treat NEW rows as discovery.
Why did my run return fewer results than the location's total?
Max items stops the walk once reached, and a location's total includes businesses that match the category filter less well. Raise Max items or run the same input on a schedule; the marketplace's feed rotates, so successive runs surface additional businesses.
How do I monitor businesses for changes?
Turn on incremental mode and keep the same inputs (locations, category, links, toggles) and State key across scheduled runs. A run then logs how many unchanged records it suppressed, and UPDATED means the business actually changed: a price moved, hours changed, the rating dropped.
