# France Salon Booking Leads — Planity Treatwell Booksy Fresha (`modernistic_rainstorm/france-salon-booking-platform-leads`) Actor

Find French salons and beauty businesses with a verified current Planity, Treatwell, Booksy or Fresha booking signal. Search by location and category and get high-confidence business leads with booking-platform evidence.

- **URL**: https://apify.com/modernistic_rainstorm/france-salon-booking-platform-leads.md
- **Developed by:** [Xavier Saynac](https://apify.com/modernistic_rainstorm) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $70.00 / 1,000 verified platform leads

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

## France Salon Booking Platform Leads

### What it does

Discover French hair salons, beauty salons, barbers and nail businesses with a verified current booking-platform signal. Search a French location and business categories; receive only high-confidence positive leads with official-site and booking-platform evidence.

A result means that the named platform is currently observed and verified for that business. It does not establish exclusive use of that platform.

### Platforms detected

- Planity
- Treatwell
- Booksy
- Fresha

### Example use cases

- Booking-software sales prospecting and salon SaaS targeting.
- Competitive intelligence and installed-base research.
- Local-business technology intelligence and lead generation.
- France-focused market intelligence for consultants and investors.

### Input

```json
{
  "location": "Lyon, France",
  "searchTerms": ["salon de coiffure", "institut de beauté", "barbier", "onglerie"],
  "maxBusinesses": 200
}
```

`location` is required. `searchTerms` defaults to the four categories above; use one to eight category terms. `maxBusinesses` defaults to 200 and accepts 10–2,000. It limits discovery across all terms, not the number of verified leads. The quota is divided evenly across terms, rounded down, so discovery may return slightly fewer than the maximum. Duplicates and access restrictions can further reduce results. Zero leads is a valid outcome.

V1 supports France. Include France in the location when possible. French overseas locations may be searched; no separate accuracy claim is made for them. Returned businesses outside French scope are excluded.

### Output

The default dataset contains only verified commercial leads. Export as JSON, CSV or Excel using Apify's dataset export.

The following example is synthetic, for illustration only:

```json
{
  "businessName": "Atelier Coiffure Exemple",
  "businessType": "Salon de coiffure",
  "address": "12 rue Exemple, 69002 Lyon, France",
  "city": "Lyon",
  "postalCode": "69002",
  "country": "FR",
  "phone": "+33 4 00 00 00 00",
  "website": "https://salon-exemple.invalid/",
  "googleMapsUrl": "https://www.google.com/maps/search/?api=1&query=Atelier+Coiffure+Exemple+Lyon",
  "googlePlaceId": "SYNTHETIC_EXAMPLE",
  "rating": 4.7,
  "reviewCount": 82,
  "bookingPlatform": "PLANITY",
  "bookingUrl": "https://www.planity.com/synthetic-example-not-a-real-profile",
  "verificationStatus": "VERIFIED_CURRENT",
  "confidence": 0.9,
  "evidenceUrl": "https://salon-exemple.invalid/reserver",
  "evidenceSummary": "Official/provider business identity continuity; Enabled booking/selection control with visible priced or timed service menu",
  "discoveredFrom": "salon de coiffure",
  "processedAt": "2026-10-02T12:00:00Z"
}
```

Fields may be empty when discovery does not supply them. Confidence is the detector's signal score, not a calibrated probability. `RUN_SUMMARY` in the default key-value store provides counts, excluded URL types, technical failures and child discovery cost when available. It is not a paid lead row.

### Pricing

$0.10 per delivered `verified-platform-lead`, plus Apify's minimal synthetic Actor-start fee of $0.00005 per allocated GB, minimum one event. Platform usage for this Actor is included in its event pricing for external Store runs.

A lead event is triggered only when a supported platform satisfies the frozen `VERIFIED_CURRENT` gate and its customer-visible row is delivered. This Actor does not charge lead events for duplicates, missing or excluded websites, unsupported platforms, unverified or retired signals, or technical failures.

Discovery uses [Google Maps Scraper by Compass](https://apify.com/compass/crawler-google-places). Its pay-per-event charges are separate from this Actor's lead price and billed to the caller's Apify account through the runtime run context. Discovery can incur a charge even when no verified leads are returned. This Actor checks current child pricing and sets a bounded child charge limit based on the requested volume. The child's minimum allowed spending cap is currently $0.50; that cap is a limit, not a flat fee. The parent's maximum charge applies to its events and does not combine the separate discovery limit.

If the parent's lead budget cannot fund one additional event, the Actor stops starting work and preserves delivered results. Already-started bounded discovery may incur its own charges.

### Accuracy and limitations

This is a France-focused product returning conservative, high-confidence positive signals only. The verification logic was tested on independent blind holdouts before launch and is intentionally conservative.

- Coverage is incomplete. The dataset is not representative market share.
- Missing output does not mean a business lacks booking software or a supported platform.
- A platform result does not imply exclusivity; other platforms may also be used.
- Verification observes a current booking signal, not end-to-end appointment availability.
- Static websites, blocking, access restrictions and technical failures reduce recall.
- Direct provider URLs, social profiles and directories are excluded from V1: an eligible official website is required.
- Results describe the time of processing and may change later.

### API / automation

Run in Apify Console, invoke with the Apify API, or connect schedules and integrations. Use this Actor's API tab for its generated run endpoint and authentication instructions. Read the default dataset for verified leads and the default key-value store's `RUN_SUMMARY` record for diagnostics.

# Changelog

This Actor's version history is a separate document: https://apify.com/modernistic_rainstorm/france-salon-booking-platform-leads/changelog.md

# Actor input Schema

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

French city, department, region or France-wide location to search. Include France for clarity.

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

One to eight categories; duplicates are removed.

## `maxBusinesses` (type: `integer`):

Discovery upper bound across all search terms; verified results may be fewer or zero.

## Actor input object example

```json
{
  "location": "Lyon, France",
  "searchTerms": [
    "salon de coiffure"
  ],
  "maxBusinesses": 15
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

## `summary` (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 = {
    "location": "Lyon, France",
    "searchTerms": [
        "salon de coiffure"
    ],
    "maxBusinesses": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("modernistic_rainstorm/france-salon-booking-platform-leads").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 = {
    "location": "Lyon, France",
    "searchTerms": ["salon de coiffure"],
    "maxBusinesses": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("modernistic_rainstorm/france-salon-booking-platform-leads").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 '{
  "location": "Lyon, France",
  "searchTerms": [
    "salon de coiffure"
  ],
  "maxBusinesses": 15
}' |
apify call modernistic_rainstorm/france-salon-booking-platform-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,modernistic_rainstorm/france-salon-booking-platform-leads"
        }
    }
}
```

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/PM3GE7tmLeBJycxts/builds/SZK2QH2oeI3PAWbD8/openapi.json
