# Booksy Leads Scraper (`solidcode/booksy-scraper`) Actor

\[💰 $1.9 / 1K] Extract salon, barber, spa, and beauty business leads from Booksy — names, contact details, ratings, social links, and location. Search by keyword and location or paste Booksy URLs.

- **URL**: https://apify.com/solidcode/booksy-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 15 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 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?

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 Leads Scraper

Pull salon, barber, spa, and beauty business leads from Booksy at scale — business name, full address, geo-coordinates, price range on 95-100% of listings, a precise rating and review count on every provider that has been reviewed, and website, Instagram or Facebook links on roughly 8 in 10 US salon leads once contact enrichment is on. Built for beauty-industry lead-gen teams, salon-marketing agencies, and local-services sales reps who need verified salon and barber leads with contact details — without manually copying listings off Booksy one profile at a time.

### Why This Scraper?

- **7-country coverage** — search the United States, United Kingdom, Poland, Spain, South Africa, Ireland, and Australia from a single actor; flip one dropdown to switch regions.
- **Instagram on ~7 in 10 US salon leads** — turn contact enrichment on and every business picks up whatever its owner published: on a 100-lead Chicago hair-salon run that was Instagram 73%, Facebook 31%, website 20%, and at least one of the three on 79% of leads — so your list lands sales-ready instead of name-only.
- **Precise ratings, not rounded stars** — the exact numeric rating (e.g. 4.87) plus the underlying review count on the ~9 in 10 providers that have been reviewed. Brand-new salons come back empty instead of a fake 0.0, so sorting by reputation never buries a legitimate business at the bottom.
- **True price band, read off the full service menu** — not the two-or-three-service teaser Booksy shows in a search list, but the real low and high across everything the provider sells, filled on 95-100% of leads. Plus mobile/at-home availability and the "Booksy Recommended" badge.
- **Geo-coordinates on every business** — latitude and longitude plus the full street address, ready to plot on a map or drop into a territory-planning tool.
- **De-duplicated by business, and your limit counts unique businesses** — Booksy re-ranks its own results between pages, so 8-17% of raw rows are repeats. Set a limit of 500 and you get 500 distinct businesses, not 430 plus 70 duplicates.
- **Keyword-by-location matrix** — pair any service term ("barber", "nail salon", "massage", "hair salon") with any city and the actor runs every combination automatically.
- **No fixed result ceiling** — set a cap of 100 to test, or 0 to keep collecting until Booksy runs out of matches; a run that reaches its time limit stops cleanly, keeps every lead it gathered, and tells you there are more.
- **Direct booking URL per business** — every row carries the live Booksy profile link, so reps can open the provider's page in one click.

### Use Cases

**Lead Generation**

- Build sales-ready prospect lists of salons and barbershops with website and social links attached
- Target a city or neighborhood and pull every provider in a given service category
- Prioritize outreach by rating and review volume to focus on established businesses
- Identify mobile-service providers who travel to clients for partnership offers

**Market Research**

- Map provider density by city across 7 countries
- Compare price ranges for the same service across neighborhoods and markets
- Track which providers carry the "Booksy Recommended" badge in a region
- Size a beauty or wellness market before launching a product or service

**Competitive Analysis**

- Benchmark a salon's rating and review count against nearby competitors
- Monitor the social presence (Instagram/Facebook) of competing providers
- Find under-rated or under-reviewed providers ripe for a service pitch
- Track new entrants appearing in a target service category

**Local Services Outreach**

- Recruit salons and barbers for marketplaces, software, or supplier programs
- Source providers for affiliate, referral, or directory partnerships
- Build geo-targeted call lists by category and city
- Feed verified business profiles into a CRM or cold-outreach sequence

### Getting Started

#### Search by Keyword and Location

The simplest way to start — one service term and a city:

```json
{
    "searchTerms": ["barber"],
    "location": "New York, NY",
    "maxResults": 50
}
```

#### Multiple Service Terms

Run several categories against the same location in one go:

```json
{
    "searchTerms": ["nail salon", "hair salon", "massage"],
    "location": "Newport Beach",
    "country": "us",
    "maxResults": 300
}
```

#### Using Booksy URLs

Paste any Booksy search or business URL directly:

```json
{
    "startUrls": [
        "https://booksy.com/en-us/s/haircut-beard/102522_newport-beach"
    ],
    "maxResults": 100,
    "includeContactDetails": true
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerms` | string\[] | `["barber"]` | What kind of business to find on Booksy (e.g. "barber", "nail salon", "massage", "hair salon"). Each term is combined with the Location below. Leave empty if you paste full Booksy URLs instead. |
| `location` | string | `"New York, NY"` | City or area to search in (e.g. "New York, NY", "Newport Beach", "London"). Combined with each Search Term. Leave empty if you paste full Booksy URLs. |
| `startUrls` | string\[] | `[]` | Paste Booksy search or business URLs directly. When provided, these are scraped in addition to any Search Terms above. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum number of business leads to return across all searches and URLs. Set to 0 to keep going until Booksy runs out of matches. Either way the run also stops when it reaches its own time limit, saving everything collected so far and saying so. For a very large request, raise the Timeout in the run's options or split it across a few runs. Start with 20-50 to test, then increase. |
| `country` | select | `United States` | Which Booksy region to search: United States, United Kingdom, Poland, Spain, South Africa, Ireland, or Australia. Affects the businesses returned for keyword + location searches. |
| `includeContactDetails` | boolean | `true` | Fetch each business's website, Facebook, and Instagram links. This is the core value of a leads list, so it is on by default. Turn it off for a faster, lighter run when you only need names, ratings, and locations. |

### Output

Each business lead is a single flat row. Here's a representative result with contact details enabled:

```json
{
    "businessId": 102522,
    "name": "Fresh Cuts Barber Studio",
    "url": "https://booksy.com/en-us/102522_fresh-cuts-barber-studio_barber-shop_12345_new-york",
    "bookingUrl": "https://booksy.com/en-us/102522_fresh-cuts-barber-studio_barber-shop_12345_new-york",
    "category": "Barber Shop",
    "address": "215 W 38th St, New York, NY 10018",
    "city": "New York",
    "latitude": 40.7536,
    "longitude": -73.9912,
    "distance": 820,
    "phone": "+1 212-555-0142",
    "website": "https://freshcutsnyc.com/",
    "facebook": "https://facebook.com/freshcutsnyc",
    "instagram": "https://instagram.com/freshcutsnyc",
    "rating": 4.87,
    "reviewCount": 342,
    "priceFrom": 25,
    "priceTo": 65,
    "mobileService": false,
    "booksyRecommended": true,
    "imageUrl": "https://cdn.booksy.com/example/cover.jpg",
    "country": "us",
    "searchTerm": "barber",
    "scrapedAt": "2026-05-29T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `businessId` | number | Unique Booksy business identifier |
| `name` | string | Business name |
| `category` | string | Business category (e.g. "Barber Shop", "Nail Salon") |
| `url` | string | Direct Booksy profile URL |
| `bookingUrl` | string | Live Booksy booking page link |
| `imageUrl` | string | Cover image URL |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Full street address |
| `city` | string | City |
| `latitude` | number | Latitude |
| `longitude` | number | Longitude |
| `distance` | number | Distance from the search center, in meters |

#### Contact

Website and social links populate when `includeContactDetails` is on, and only for the channels the owner actually published on Booksy — on a 100-lead Chicago run that meant Instagram on 73 leads, Facebook on 31, a website on 20, and at least one link on 79. Phone appears only when the business lists one in public text, which is rare.

| Field | Type | Description |
|-------|------|-------------|
| `phone` | string | Phone number, when listed |
| `website` | string | Business website |
| `facebook` | string | Facebook page link |
| `instagram` | string | Instagram profile link |

#### Ratings & Pricing

| Field | Type | Description |
|-------|------|-------------|
| `rating` | number | Precise average rating (e.g. 4.87); empty for providers with no reviews yet |
| `reviewCount` | number | Total number of reviews; empty for providers with no reviews yet |
| `priceFrom` | number | Lowest price across the provider's full service menu |
| `priceTo` | number | Highest price across the provider's full service menu |
| `mobileService` | boolean | Whether the provider offers mobile / at-home appointments |
| `booksyRecommended` | boolean | Whether Booksy badges the business as recommended |

#### Metadata

| Field | Type | Description |
|-------|------|-------------|
| `country` | string | Booksy region the result came from (us, gb, pl, es, za, ie, au) |
| `searchTerm` | string | The keyword that surfaced this business |
| `scrapedAt` | string | ISO timestamp of data extraction |

### Tips for Best Results

- **Start small** — set `maxResults` to 20-50 on your first run to confirm the data matches your needs, then scale up to a full market.
- **Turn off contact details for speed** — switch `includeContactDetails` off for a faster, lighter run when you only need names, ratings, and locations; turn it on when you want a sales-ready list with websites and social handles.
- **Match the region to the location** — set `country` to the same region as your `location` (e.g. United Kingdom for "London"). A Poland-scoped search will return zero hints for a UK city, since each Booksy region is geo-bound to its own country.
- **Run a keyword matrix** — list several service terms ("barber", "nail salon", "massage") against one location to sweep an entire local beauty market in a single run.
- **Filter on review count** — rating alone can be misleading; pair a high `rating` with a healthy `reviewCount` to focus outreach on established, busy providers.
- **Mine the empty ratings** — providers with no `rating` and no `reviewCount` are new to Booksy and typically have the thinnest online presence, which makes them the warmest prospects for marketing, booking, or supplier pitches.
- **Paste URLs for exact control** — when you already have a specific Booksy search or business page, paste it into `startUrls` to pull precisely that result set.

### Pricing

**From $1.90 per 1,000 results** — pay-per-result pricing with volume discounts. No compute charges: you only pay for the results returned.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.23 | $0.21 | $0.20 | $0.19 |
| 1,000 | $2.25 | $2.15 | $2.00 | $1.90 |
| 10,000 | $22.50 | $21.50 | $20.00 | $19.00 |
| 100,000 | $225.00 | $215.00 | $200.00 | $190.00 |

Bronze, Silver, and Gold are Apify's loyalty discount tiers — the more you spend on the platform, the lower your per-result price. This tiered rate takes effect on 8 September 2026; every run before that date is billed at $1.90 per 1,000 results.

A "result" is any business lead row in the output dataset. Platform fees depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate business research, market analysis, and lead generation. Users are responsible for complying with applicable laws, data-protection regulations, and Booksy's Terms of Service. Do not use extracted contact data for spam, harassment, or any unlawful purpose, and respect the privacy of the businesses and individuals in your results.

# Actor input Schema

## `searchTerms` (type: `array`):

What kind of business to find on Booksy (e.g. 'barber', 'nail salon', 'massage', 'hair salon'). Each term is combined with the Location below. Leave empty if you paste full Booksy URLs instead.

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

City or area to search in (e.g. 'New York, NY', 'Newport Beach', 'London'). Combined with each Search Term. Leave empty if you paste full Booksy URLs.

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

Paste Booksy search or listing URLs directly, e.g. https://booksy.com/en-us/s/haircut-beard/102522\_newport-beach. When provided, these are scraped in addition to any Search Terms above.

## `maxResults` (type: `integer`):

Maximum number of business leads to return across all searches and URLs. Set to 0 to keep going until Booksy runs out of matches. Either way the run also stops when it reaches its own time limit, saving everything collected up to that point and telling you it stopped early — for a very large request, raise the Timeout in the run's options or split it across a few runs. Tip: start with 20-50 to test, then increase.

## `country` (type: `string`):

Which Booksy region to search. Affects the businesses returned for keyword + location searches.

## `includeContactDetails` (type: `boolean`):

Fetch each business's website, Facebook, and Instagram links. This is the core value of a leads list, so it is on by default. Turn it off for a lighter row when you only need names, ratings, prices, and locations.

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

Proxy settings. Datacenter proxies are used by default and work well for Booksy.

## Actor input object example

```json
{
  "searchTerms": [
    "barber"
  ],
  "location": "New York, NY",
  "startUrls": [],
  "maxResults": 100,
  "country": "us",
  "includeContactDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of business leads with name, category, rating, price range, and profile link.

## `contact` (type: `string`):

Table of contact information: phone, website, and social links.

# 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 = {
    "searchTerms": [
        "barber"
    ],
    "location": "New York, NY",
    "startUrls": [],
    "maxResults": 100,
    "country": "us",
    "includeContactDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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 = {
    "searchTerms": ["barber"],
    "location": "New York, NY",
    "startUrls": [],
    "maxResults": 100,
    "country": "us",
    "includeContactDetails": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/booksy-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 '{
  "searchTerms": [
    "barber"
  ],
  "location": "New York, NY",
  "startUrls": [],
  "maxResults": 100,
  "country": "us",
  "includeContactDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call solidcode/booksy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solidcode/booksy-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/nGQCM8brJbMRi6Gsj/builds/Ms900MXjeTMiYLqz6/openapi.json
