# Booksy Business Search Scraper (`stealth_mode/booksy-business-search-scraper`) Actor

Scrape Booksy.com business listings with complete details—names, locations, services, reviews, pricing, and contact info. Collect up to 200+ businesses per search. Perfect for market research, competitor analysis, and service aggregation in beauty, wellness, and personal care.

- **URL**: https://apify.com/stealth\_mode/booksy-business-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Booksy Business Search Scraper: Extract Beauty & Wellness Provider Data Instantly

***

### What Is Booksy.com?

Booksy.com is a global marketplace connecting customers with beauty, wellness, and personal care professionals. It lists hair salons, spas, makeup artists, tattoo studios, and similar service providers across 150+ countries. With millions of bookings processed annually, Booksy represents real-time market data on service availability, pricing, and consumer demand.

Manually researching businesses and collecting their data is tedious and error-prone — the **Booksy Business Search Scraper** automates this, delivering structured provider intelligence at scale.

***

### Overview

The **Booksy Business Search Scraper** extracts comprehensive business listings from Booksy search results, capturing details about providers, their services, reviews, and operational info. It is designed for:

- **Market researchers** studying beauty and wellness industry trends
- **Competitive analysts** tracking competitor presence and service offerings
- **Business developers** identifying partnership and expansion opportunities
- **Aggregator platforms** building multi-provider service directories
- **Real estate & franchise teams** assessing regional service density

Key strengths include flexible pagination support, high item limits per search, and recovery from failed URLs without interrupting your run.

***

### Input Format

The scraper accepts a JSON configuration object:

```json
{
    "urls": [
        "https://booksy.com/en-us/s?query=hair&businessesPage=2"
    ],
    "max_items_per_url": 200,
    "ignore_url_failures": true
}
```

| Field | Description |
|---|---|
| `urls` | Booksy search result URLs (e.g., hair salon search, spa search). Include pagination parameters if needed (e.g., `&businessesPage=2`) |
| `max_items_per_url` | Maximum businesses to extract per search URL. Default: `20`, max: `200` |
| `ignore_url_failures` | If `true`, continues scraping if a URL fails; if `false`, stops the entire run on error |

> **Tip:** Construct URLs using Booksy's search interface. Example: `https://booksy.com/en-us/s?query=tattoo&businessesPage=1` searches for tattoo studios.

***

### Output Format

**Sample output**

```json
{
  "id": 555959,
  "name": "CROWNZ & TRESSES VirginBundles>Wigs>SewIns WigInstalls>SilkPress>Knotless Brow:Tinting-Waxing-Threading Lash Extensions",
  "slug": "crownz-tresses-virginbundles-wigs-sewins-wiginstalls-silkpress-knotless-brow-tinting-waxing-threading-lash-extensions",
  "url": "555959_crownz-tresses-virginbundles-wigs-sewins-wiginstalls-silkpress-knotless-brow-tinting-waxing-threading-lash-extensions_hair-salon_36811_spring",
  "primary_category": 1,
  "business_categories": [],
  "is_b_listing": false,
  "website": null,
  "facebook_link": null,
  "instagram_link": null,
  "regions": [
    {
      "id": 7,
      "name": "USA",
      "full_name": "USA",
      "slug": "usa",
      "type": "country",
      "latitude": 39.828127,
      "longitude": -98.579404
    },
    {
      "id": 12651,
      "name": "Harris County",
      "full_name": "Harris County, TX",
      "slug": "harris-county",
      "type": "county",
      "latitude": 29.8339425,
      "longitude": -95.385967263862
    },
    {
      "id": 36811,
      "name": "Spring",
      "full_name": "Spring, Harris County, TX",
      "slug": "spring",
      "type": "city",
      "latitude": 30.0711425,
      "longitude": -95.3845088626672
    },
    {
      "id": 10043,
      "name": "Texas",
      "full_name": "Texas",
      "slug": "texas",
      "type": "state",
      "latitude": 31.1688285,
      "longitude": -99.6832263301298
    },
    {
      "id": 71757,
      "name": "77373",
      "full_name": "77373",
      "slug": "77373",
      "type": "zip",
      "latitude": 30.0710105,
      "longitude": -95.3897843162281
    }
  ],
  "location": {
    "address": "1408 Spring Cypress Rd, Spring, 77373",
    "city": "Spring",
    "coordinate": {
      "latitude": 30.0764,
      "longitude": -95.43359
    }
  },
  "images": {
    "logo": [
      {
        "image": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/logo/c67eb110e2b747b8bc3007bc931452-crownz-and-tresses-salon-wigs--logo-d2cef82920bc4771bb8d16420d4b39-booksy.jpeg",
        "description": null,
        "image_id": 27027577,
        "width": 1416,
        "height": 1416,
        "category": "logo",
        "is_cover_photo": false
      }
    ],
    "cover": [
      {
        "image": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/biz_photo/edfe8e5fd5494a1d9e0338759933ab-crownz-tresses-lashextensions--biz-photo-2c6f0198288a446db966493a1a91eb-booksy.jpeg",
        "description": null,
        "image_id": 32215318,
        "width": 2340,
        "height": 1560,
        "category": "biz_photo",
        "is_cover_photo": true
      }
    ],
    "biz_photo": [],
    "inspiration": [
      {
        "image": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/inspiration/8f34971aa3264c86b766bef6d94424-crownz-tresses-virginbundles-w-inspiration-0d776db3a33e42b68feda994a2ef2d-booksy.jpeg",
        "description": "Our Diva Curl, 5x5HD Closure & Bundles",
        "image_id": 32972178,
        "width": 1675,
        "height": 1675,
        "category": "inspiration",
        "is_cover_photo": false
      },
      {
        "image": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/inspiration/8e438632d440403bb5f56c66e89abc-crownz-tresses-virginbundles-w-inspiration-f511bf511b1c4a2c80b08a334eb139-booksy.jpeg",
        "description": "Knotless with Human BoHos",
        "image_id": 32972155,
        "width": 1200,
        "height": 1200,
        "category": "inspiration",
        "is_cover_photo": false
      },
      {
        "image": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/inspiration/45949d60bb5c40f5b0efc018cf2664-crownz-tresses-virginbundles-w-inspiration-28a7f5e991e7499486b2b7d4724b47-booksy.jpeg",
        "description": "Silk press",
        "image_id": 32972142,
        "width": 1440,
        "height": 1440,
        "category": "inspiration",
        "is_cover_photo": false
      },
      {
        "image": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/inspiration/82b4df5d505d4664987310234b9c60-crownz-tresses-virginbundles-w-inspiration-9909c63d0b7740cca1563e8f9ea0c0-booksy.jpeg",
        "description": "CUSTOM Summer Colors",
        "image_id": 32972131,
        "width": 1816,
        "height": 1816,
        "category": "inspiration",
        "is_cover_photo": false
      }
    ]
  },
  "promoted": false,
  "is_recommended": false,
  "accept_booksy_gift_cards": false,
  "accept_booksy_pay": false,
  "distance": null,
  "reviews_rank": 4.944664031620554,
  "reviews_count": 506,
  "reviews": [],
  "open_hours": [],
  "open_hours_customizations": [],
  "staff": [],
  "service_categories": [
    {
      "id": 585882,
      "services": [
        {
          "id": 12123314,
          "variants": [
            {
              "id": 21096853,
              "promotion": null,
              "type": "D",
              "duration": 1380,
              "price": null,
              "deposit": 0,
              "prepayment": 200,
              "prepayment_tax": 0,
              "label": "",
              "combo_children": [],
              "service_price": "-",
              "omnibus_price": null,
              "staffer_id": [
                1634776,
                1498236,
                951443,
                832190,
                1658631,
                455733,
                1698014
              ]
            }
          ],
          "photos": [],
          "padding_type": "",
          "combo_type": null,
          "name": "WE DO NOT SERVICE TENDER HEADED CLIENTS",
          "description": "",
          "description_type": "M",
          "staffer_id": [
            1658631,
            951443,
            455733,
            1634776,
            1498236,
            1698014,
            832190
          ],
          "order": 140,
          "is_available_for_customer_booking": true,
          "is_online_service": false,
          "is_traveling_service": false,
          "treatment": null,
          "partner_app_data": {},
          "addons_available": false
        }
      ],
      "name": "WE DO NOT SERVICE TENDER HEADED CLIENTS",
      "order": 0,
      "show_first": 0
    },
    {
      "id": 527115,
      "services": [
        {
          "id": 11782752,
          "variants": [
            {
              "id": 20714864,
              "promotion": null,
              "type": "X",
              "duration": 30,
              "price": 39,
              "deposit": 0,
              "prepayment": 10,
              "prepayment_tax": 0,
              "label": "",
              "combo_children": [],
              "service_price": "$39.00",
              "omnibus_price": null,
              "staffer_id": [
                1658631
              ]
            }
          ],
          "photos": [],
          "padding_type": "",
          "combo_type": null,
          "name": "SPECIAL: EYE BROW TINTING WaxThreading (if needed)",
          "description": "",
          "description_type": "M",
          "staffer_id": [
            1658631
          ],
          "order": 0,
          "is_available_for_customer_booking": true,
          "is_online_service": false,
          "is_traveling_service": false,
          "treatment": {},
          "partner_app_data": {},
          "addons_available": false
        },
        {
          "id": 11842433,
          "variants": [
            {
              "id": 20781915,
              "promotion": null,
              "type": "X",
              "duration": 30,
              "price": 45,
              "deposit": 0,
              "prepayment": 10,
              "prepayment_tax": 0,
              "label": "",
              "combo_children": [],
              "service_price": "$45.00",
              "omnibus_price": null,
              "staffer_id": [
                1634776
              ]
            }
          ],
          "photos": [
            {
              "id": 1872311,
              "url": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/service_photos/5c48da95f4c341698c14f3b0f6631fee.jpeg",
              "order": 1
            },
            {
              "id": 1872317,
              "url": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/service_photos/cd31f34f5db64e3fa8f0eb98816b3721.jpeg",
              "order": 2
            },
            {
              "id": 1872319,
              "url": "https://d2zdpiztbgorvt.cloudfront.net/region1/us/555959/service_photos/7530b84e257d4f0d8b521e2cebc8c871.jpeg",
              "order": 3
            }
          ],
          "padding_type": "",
          "combo_type": null,
          "name": "SPECIAL: $45 CLUSTER LASH",
          "description": "",
          "description_type": "M",
          "staffer_id": [
            1634776
          ],
          "order": 0,
          "is_available_for_customer_booking": true,
          "is_online_service": false,
          "is_traveling_service": false,
          "treatment": {},
          "partner_app_data": {},
          "addons_available": false
        }
      ],
      "name": "**OUR SPECIALS**",
      "order": 1,
      "show_first": 0
    }
  ],
  "treatment_service_categories": [],
  "top_services": [],
  "treatment_services": [],
  "amenities": [],
  "contractors": [],
  "umbrella_venue_name": null,
  "is_renting_venue": false,
  "has_online_vouchers": false,
  "force_old_gc_flow": false,
  "pos_pay_by_app_enabled": false,
  "noindex": false,
  "max_discount_rate": 0,
  "best_of_booksy_badge": null,
  "has_safety_rules": false,
  "from_url": "https://booksy.com/en-us/s?query=hair"
}
```

Each scraped business returns a comprehensive record with 37 fields:

#### Business Identification & Presence

| Field | Meaning |
|---|---|
| `ID` | Unique Booksy identifier for the business |
| `Name` | Official business name as displayed on Booksy |
| `Slug` | URL-friendly version of the business name |
| `URL` | Direct link to the business profile on Booksy |
| `Website` | Business's external website URL (if provided) |
| `Facebook Link` | Official Facebook page link |
| `Instagram Link` | Official Instagram profile link |

#### Categorization & Services

| Field | Meaning |
|---|---|
| `Primary Category` | Main service category (e.g., "Hair Salon," "Spa") |
| `Business Categories` | Array of all categories the business operates in |
| `Service Categories` | High-level service groupings available |
| `Treatment Service Categories` | Specialized treatment types (e.g., "Hair Color," "Waxing") |
| `Top Services` | Most popular or featured services at this business |
| `Treatment Services` | Detailed list of bookable treatment services |

#### Location & Coverage

| Field | Meaning |
|---|---|
| `Location` | Full address and geographic details |
| `Regions` | Geographic regions or neighborhoods served |
| `Distance` | Distance from search origin (if location-based search) |

#### Ratings & Reputation

| Field | Meaning |
|---|---|
| `Reviews Count` | Total number of customer reviews |
| `Reviews Rank` | Ranking score based on review ratings (typically 1–5 stars) |
| `Reviews` | Array of individual review objects (text, rating, reviewer info) |
| `Is Recommended` | Boolean flag indicating Booksy's recommendation status |
| `Best of Booksy Badge` | Whether the business earned Booksy's quality badge |

#### Business Operations & Amenities

| Field | Meaning |
|---|---|
| `Open Hours` | Standard business hours (e.g., "Mon–Fri 9am–6pm") |
| `Open Hours Customizations` | Special hours or holiday adjustments |
| `Staff` | Team member details and credentials |
| `Amenities` | Facilities and services (e.g., parking, Wi-Fi, wheelchair access) |
| `Contractors` | Independent contractors or guest professionals |
| `Umbrella Venue Name` | Parent company or chain name (if applicable) |
| `Is Renting Venue` | Whether the space is rented/shared |

#### Payments & Promotions

| Field | Meaning |
|---|---|
| `Accept Booksy Gift Cards` | Whether the business accepts Booksy gift cards |
| `Accept Booksy Pay` | Whether customers can pay via Booksy's payment system |
| `Has Online Vouchers` | Whether the business offers Booksy vouchers |
| `Max Discount Rate` | Maximum discount percentage offered |
| `POS Pay By App Enabled` | Whether mobile/app payments are available |

#### Profile Attributes

| Field | Meaning |
|---|---|
| `Images` | URLs and metadata of business photos |
| `Promoted` | Whether the business has paid promotion active |
| `Is B Listing` | Whether this is a business account (vs. individual) |
| `Force Old GC Flow` | Legacy gift card processing flag |
| `Noindex` | SEO robots.txt directive (blocks indexing if true) |
| `Has Safety Rules` | Whether the business has posted health/safety protocols |

***

### How to Use

1. **Build search URLs** — Go to Booksy.com, search for a service (e.g., "hair," "massage," "tattoo"), and copy the URL. Adjust pagination with `&businessesPage=X`.
2. **Add URLs to input** — Paste one or more search URLs into the `urls` array.
3. **Set item limit** — Choose `max_items_per_url` (e.g., `50` for moderate runs, `200` for comprehensive scans).
4. **Enable error recovery** — Set `ignore_url_failures: true` to skip problematic URLs without halting the scraper.
5. **Execute and export** — Run the scraper, monitor progress, and download results as JSON, CSV, or Excel.

**Best practices:**

- Test with a single URL and small limit (e.g., `max_items_per_url: 20`) before scaling to 200.
- Use specific search queries (e.g., "hair salon london") rather than generic terms for targeted results.
- If a URL fails, verify it is a valid Booksy search page (check the format and pagination parameters).

***

### Use Cases & Business Value

- **Competitive benchmarking:** Analyze competitor service menus, pricing, and review scores
- **Market entry research:** Understand service saturation in new geographic regions
- **Franchise & partnership sourcing:** Identify quality providers for collaboration
- **Service aggregation:** Build your own booking platform or service directory with Booksy data
- **Pricing analysis:** Track industry standard pricing for common treatments
- **Consumer sentiment:** Mine reviews to understand customer preferences and pain points

The Booksy Business Search Scraper transforms search results into clean, analyzable data—saving weeks of manual research and unlocking insights that drive smarter business decisions.

***

### Conclusion

The **Booksy Business Search Scraper** is an essential tool for anyone operating in the beauty, wellness, and personal care space. Whether you're researching market opportunities, monitoring competitors, or building a service aggregator, this scraper delivers structured business intelligence on demand. Extract up to 200 businesses per search, complete with reviews, services, hours, and contact details. Start scraping today and gain the competitive edge you need.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the business search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://booksy.com/en-us/s?query=hair&businessesPage=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "urls": [
        "https://booksy.com/en-us/s?query=hair&businessesPage=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/booksy-business-search-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 = {
    "urls": ["https://booksy.com/en-us/s?query=hair&businessesPage=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/booksy-business-search-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 '{
  "urls": [
    "https://booksy.com/en-us/s?query=hair&businessesPage=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/booksy-business-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stealth_mode/booksy-business-search-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/sF8iOK75xVSN3Sb97/builds/6nmJ9r27rn2W30eiv/openapi.json
