# Booksy Salon & Barber Scraper — Leads, Services & Prices (`scrapersdelight/booksy-salon-scraper`) Actor

Scrape Booksy salons, barbers & beauty pros by category + city: name, address, ratings, full service menu with prices, staff, Instagram & Facebook. Public API, no login.

- **URL**: https://apify.com/scrapersdelight/booksy-salon-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Automation, Lead generation, Agents
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 per salon returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Salon & Barber Scraper — Leads, Services & Prices

Turn any category + city into a ranked list of **salons, barbers and beauty pros** with their full service menu, prices, review volume and social handles — the qualified-prospect row a **beauty-supply distributor** or a **salon-SaaS / POS / booking-software reseller** works from.

### What you get

Each row is one salon / barber / beauty business, with the fields Maps and Yelp can't give you:

- **Full service menu with prices** — every service (name, price, duration), plus `price_min` / `price_max` and `services_count` — see exactly which treatments and price tiers a shop runs.
- **Review firmographics** — `reviews_count` (volume proxy) + `reviews_stars`.
- **Staff** — `staff_count` + `staff_names`.
- **Social handles** — `instagram_link`, `facebook_link`, `website` (the reachable contact channel).
- **Location** — `address`, `city`, `state`, `zip`, `latitude`, `longitude`.
- **Categorization** — `primary_category`, `category_names`.
- **Links** — `booksy_url` / `booking_url` (the public salon page), `open_hours`, `description`.

### Honest contact note

Booksy is a booking platform and **does not publish salon phone numbers or emails**. This actor returns the salon's **Instagram/Facebook handle (≈80% of salons)**, **physical address**, and **booking-page URL** as the contact channel. It does **NOT** return phone or email.

### How to use

Paste one or more `category + city` queries into **Search queries**. Each query is fuzzy full-text — combine a category and a location:

```json
{
  "queries": ["hair salon Miami", "barber Chicago", "nail salon Austin"],
  "maxItems": 200,
  "minReviews": 0,
  "requireSocial": false
}
```

- **maxItems** — cap on salons this run (0 = all reachable results across queries).
- **minReviews** — skip low-volume shops (a quality filter for buyers).
- **requireSocial** — keep only salons with an Instagram or Facebook link.

Results dedupe across queries by business id.

### Use cases

- **Salon lead list** and **barber shop leads** for territory building
- **Beauty business prospecting** for wholesale / product reps
- **Salon service-menu & pricing intelligence** (which treatments and price tiers a market runs)
- **Salon Instagram outreach lists** for DM campaigns
- **Booksy business data export** to CSV / JSON / Excel

### FAQ

**Which Booksy do you cover?** The US Booksy marketplace (`us.booksy.com`).

**Where do ratings come from?** Booksy's own review counts and star averages, straight from the business record.

**Why no phone or email?** Booksy withholds them — the platform mediates booking, so those fields don't exist in its public data. The exposed contact channel is social handles + address + the booking page. Phone/email enrichment is not part of this actor.

**Do I need a login or API key?** No. Booksy's data path is a public JSON API — no login, no key to supply.

# Actor input Schema

## `queries` (type: `array`):

Each query is free text: category + location, e.g. 'hair salon Miami', 'barber Chicago', 'nail salon Austin'. Results dedupe across queries by business id.

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

0 = all reachable results across queries.

## `minReviews` (type: `integer`):

Skip salons with fewer reviews (0 = keep all). A volume/quality filter for buyers.

## `requireSocial` (type: `boolean`):

Booksy does not publish phone/email; enable to keep only rows with a reachable social handle.

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

Proxy settings. The default is Apify's shared proxy pool, which Booksy's public API serves normally — measured identical to residential (20/20 rows and every field, including the Instagram/Facebook enrichment, across 3 A/B runs on 2026-08-02). RESIDENTIAL is a one-click escalation if you ever hit rate-limits on a very large scope.

## Actor input object example

```json
{
  "queries": [
    "hair salon Miami",
    "barber Chicago",
    "nail salon Austin"
  ],
  "maxItems": 10,
  "minReviews": 0,
  "requireSocial": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `records` (type: `string`):

The dataset of scraped Booksy salons / barbers / beauty businesses (one item per record).

# 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 = {
    "queries": [
        "hair salon Miami",
        "barber Chicago",
        "nail salon Austin"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/booksy-salon-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 = {
    "queries": [
        "hair salon Miami",
        "barber Chicago",
        "nail salon Austin",
    ],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/booksy-salon-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 '{
  "queries": [
    "hair salon Miami",
    "barber Chicago",
    "nail salon Austin"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapersdelight/booksy-salon-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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