# Booksy Scraper — Salon, Barber & Beauty Business Data (`haketa/booksy-scraper`) Actor

Scrape Booksy local business listings by service and city. Extract salon, barber, spa, nail and beauty business name, full address, GPS coordinates, rating, review count, category, photos and booking badges. Export to JSON/CSV/Excel for local lead generation and market research.

- **URL**: https://apify.com/haketa/booksy-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Lead generation, Business
- **Stats:** 11 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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/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

## Booksy Scraper — Salon, Barber & Beauty Business Data

Extract structured local-business data from **Booksy**, one of the largest booking platforms for salons, barbers, spas, nail studios and beauty & wellness professionals. Paste a Booksy search URL and get clean, ready-to-use records for every business: **name, category, full address, GPS coordinates, rating, review count, cover photo, staff size and booking badges**.

No code, no login, no API key. Run it from the Apify Console, on a schedule, or from your own app via the API. Results download as **JSON, CSV, Excel, HTML or XML**, or sync straight into Google Sheets, Airtable, HubSpot, Make, Zapier and n8n.

> **💈 Built for local lead generation & market research.** Every record includes a **rating, review count and precise location** — perfect for building targeted lists of salons, barbers and beauty businesses in any US city.

***

### 📋 What this scraper does

Booksy lists hundreds of thousands of appointment-based local businesses across the US. This actor turns a Booksy search into a clean, structured dataset you can analyse, enrich or feed into a CRM.

Give it a Booksy search URL (service + city), and it will:

- ✅ Collect every matching business, page after page
- ✅ Return the **rating (0–5), star score and review count**
- ✅ Break out the **full location** — street address, city and **GPS latitude/longitude**
- ✅ Capture the **category, cover photo and staff size**
- ✅ Flag **online booking, Booksy Pay, "Best of Booksy" and mobile/traveling** service
- ✅ Build a direct **link to the business page**
- ✅ De-duplicate every business by its Booksy ID

Data comes straight from Booksy's structured business feed, so runs are fast, cheap and reliable — hundreds of businesses in seconds.

***

### ⭐ Why choose this scraper

- **Ready-to-use local leads.** Name, address, coordinates and rating for every salon/barber/spa — build outreach or supplier lists in minutes.
- **Precise geo data.** GPS coordinates on every record for mapping, radius analysis and territory planning.
- **Reputation signals.** Rating, star score and review count let you rank and qualify businesses instantly.
- **Rich local coverage.** Salons, barbers, nail studios, spas, massage, lashes, brows and more, across every US city.
- **Fast and economical.** Pure API extraction — a few hundred businesses finish in seconds at very low cost.

***

### 💡 Popular use cases

| Use case | How this scraper helps |
| --- | --- |
| **Local B2B lead generation** | Build targeted lists of salons/barbers/spas by service and city for outreach. |
| **Market research** | Measure supply, average rating and review volume for any beauty niche and market. |
| **Franchise & expansion** | Map competitor density and ratings before opening or expanding. |
| **Supplier & distributor sales** | Find beauty businesses by category and location to sell products/services to. |
| **Reputation benchmarking** | Compare ratings and review counts across a city or category. |
| **Data products & dashboards** | Feed a clean local-business feed into BI tools or a database. |

***

### 🚀 Quick start

1. On **booksy.com**, search a service (e.g. `hair salon`) in a city (e.g. `Chicago`).
2. Copy the resulting URL — it looks like `https://booksy.com/en-us/s/hair-salon/18229_chicago`.
3. Paste it into **Booksy search URLs** in the actor, set **Max items**, and click **Start**.
4. Download your data from the **Storage → Dataset** tab.

You can paste several search URLs at once — each is scraped and paginated automatically.

***

### ⚙️ Input

| Field | Type | Description |
| --- | --- | --- |
| **Booksy search URLs** | array | Booksy search-result URLs (service + city), e.g. `https://booksy.com/en-us/s/barber/17501_new-york`. Search on booksy.com and copy the URL. |
| **Max items per search** | integer | Max businesses per URL. Default 100 (Booksy caps a search at ~10,000). |
| **Proxy** | object | Apify Proxy (US) recommended and on by default. |

#### Example 1 — Hair salons in Chicago

```json
{ "startUrls": ["https://booksy.com/en-us/s/hair-salon/18229_chicago"], "maxItems": 300 }
```

#### Example 2 — Multiple services / cities

```json
{
  "startUrls": [
    "https://booksy.com/en-us/s/barber/17501_new-york",
    "https://booksy.com/en-us/s/nail-salon/18229_chicago"
  ],
  "maxItems": 200
}
```

> **Tip:** The URL encodes the service and city (`/s/{service}/{locationId}_{city}`). Build any search you like on booksy.com and paste it here.

***

### 📦 Output

Each business becomes one dataset record:

```json
{
  "businessId": "1439833",
  "name": "Spoil Me Hair Salon",
  "category": "Hair Salon",
  "rating": 4.86,
  "reviewsCount": 159,
  "reviewsStars": 5,
  "address": "921 Chalkstone Ave, Chicago, 60601",
  "city": "Chicago",
  "latitude": 41.8326,
  "longitude": -87.6298,
  "imageUrl": "https://d2zdpiztbgorvt.cloudfront.net/.../biz-photo.jpeg",
  "staffCount": 3,
  "bestOfBooksy": false,
  "acceptsBooksyPay": false,
  "hasOnlineBooking": true,
  "isPromoted": false,
  "travelingService": false,
  "url": "https://booksy.com/en-us/1439833_spoil-me-hair-salon",
  "searchUrl": "https://booksy.com/en-us/s/hair-salon/18229_chicago",
  "scrapedAt": "2026-07-02T00:00:00.000Z"
}
```

#### Output fields

| Field | Description |
| --- | --- |
| `businessId` | Booksy business ID. |
| `name` | Business name. |
| `category` | Business category / searched service. |
| `rating` / `reviewsStars` / `reviewsCount` | Average rating, star score and review count. |
| `address` / `city` | Location. |
| `latitude` / `longitude` | GPS coordinates. |
| `imageUrl` | Cover photo URL. |
| `staffCount` | Number of staff. |
| `bestOfBooksy` | "Best of Booksy" award. |
| `acceptsBooksyPay` / `hasOnlineBooking` | Payment / online-booking flags. |
| `isPromoted` / `travelingService` | Promoted listing / mobile service. |
| `url` | Business page URL. |
| `searchUrl` | The search URL this record came from. |
| `scrapedAt` | Extraction timestamp. |

***

### 💈 Services you can search

Search any service on Booksy and paste the URL — e.g. `hair salon`, `barber`, `nail salon`, `spa`, `massage`, `lashes`, `brows`, `waxing`, `skin care`, `makeup`, `tattoo`, `piercing`, `hair removal`, `braids`, `locs`, `wellness`, `day spa`.

***

### 🧭 Tips for best results

- **Search the exact city** on booksy.com so the URL carries the right location.
- **Paste multiple URLs** to cover several services or cities in one run.
- **Rank by `rating` + `reviewsCount`** to surface the strongest businesses.
- **Use the GPS fields** for mapping, radius targeting and territory analysis.

***

### 🔌 Integrations & export

- **Download formats:** JSON, CSV, Excel, HTML, XML, RSS.
- **CRM / Sheets / Airtable / Make / Zapier / n8n:** push results automatically.
- **API:** run and fetch data with the Apify API or the JS / Python clients.
- **Scheduling:** run weekly to track new businesses and rating changes.

***

### ❓ FAQ

**Do I need a Booksy account or API key?**
No. You only need an Apify account.

**Which countries are covered?**
US business data (booksy.com/en-us search URLs).

**How do I get a search URL?**
Search a service and city on booksy.com, then copy the address bar URL — that's your input.

**Does it return duplicates?**
No. Businesses are de-duplicated by their Booksy ID within each search.

***

### ⚖️ Legal & responsible use

This actor collects **publicly available** business information from Booksy search results — the same data any visitor can see. It does not bypass logins or access private data. Respect Booksy's Terms of Use and applicable law, and use the data for lawful purposes such as market research, analytics and B2B outreach.

***

### 🛟 Support

Need a field added or hit an issue? Open a ticket from the actor's **Issues** tab with your input configuration.

Happy sourcing! 💈

# Actor input Schema

## `service` (type: `string`):

Pick the type of business to collect. Choose "All services" to pull every kind of local beauty & wellness business in the selected location.

## `location` (type: `string`):

Pick a US state to collect businesses from. Choose "All states (nationwide sample)" for a fast, mixed sample across popular states. Covers all 50 states plus DC. For a specific city, use the Advanced start URLs field below.

## `maxItems` (type: `integer`):

Maximum number of businesses to collect. Set 0 for no limit (Booksy caps a search at ~10,000). Default 100 for a fast, low-cost run.

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

Optional. Power users can paste specific Booksy search-result URLs (e.g. a single city) to scrape instead of the dropdowns above. Search on booksy.com, then copy the browser URL here — for example https://booksy.com/en-us/s/hair-salon/18229\_chicago. When set, these URLs take priority over the Service and Location dropdowns.

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

Booksy serves US business data — a US proxy is recommended. Apify Proxy (US) is on by default.

## Actor input object example

```json
{
  "service": "",
  "location": "",
  "maxItems": 100,
  "startUrls": [
    "https://booksy.com/en-us/s/hair-salon/18229_chicago"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `businessId` (type: `string`):

Booksy business ID

## `name` (type: `string`):

Business name

## `category` (type: `string`):

Searched service/category

## `rating` (type: `string`):

Average review rating (0-5)

## `reviewsCount` (type: `string`):

Number of reviews

## `reviewsStars` (type: `string`):

Rounded star rating

## `address` (type: `string`):

Street address

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

City

## `latitude` (type: `string`):

GPS latitude

## `longitude` (type: `string`):

GPS longitude

## `imageUrl` (type: `string`):

Cover photo URL

## `staffCount` (type: `string`):

Number of staff

## `bestOfBooksy` (type: `string`):

Best of Booksy award

## `acceptsBooksyPay` (type: `string`):

Accepts Booksy Pay

## `hasOnlineBooking` (type: `string`):

Offers online booking

## `isPromoted` (type: `string`):

Promoted listing

## `travelingService` (type: `string`):

Traveling/mobile service

## `url` (type: `string`):

Business page URL

## `searchUrl` (type: `string`):

Booksy search URL used

## `scrapedAt` (type: `string`):

Extraction timestamp

# 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 = {
    "maxItems": 100,
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/booksy-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 = {
    "maxItems": 100,
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/booksy-scraper").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 '{
  "maxItems": 100,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call haketa/booksy-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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