Fresha Salon Scraper avatar

Fresha Salon Scraper

Pricing

Pay per event

Go to Apify Store
Fresha Salon Scraper

Fresha Salon Scraper

Extract public Fresha salon, spa, barber, nail, massage, and beauty business leads with ratings, reviews, addresses, images, and profile URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Extract public salon, spa, barber, nail, massage, and beauty business leads from Fresha marketplace pages.

What does Fresha Salon Scraper do?

Fresha Salon Scraper collects structured business data from public Fresha listing pages.

Use it when you need a clean dataset of beauty and wellness venues listed on Fresha.

The actor reads server-rendered Fresha marketplace pages and extracts public Schema.org business data.

It is designed for lead generation, market research, competitor monitoring, and local business analysis.

Who is it for?

💇 Beauty SaaS teams can find salons and spas that already use online booking marketplaces.

📣 Local marketing agencies can build prospect lists for outreach campaigns.

📊 Marketplace analysts can compare venue density, ratings, and review counts by city or service category.

🧴 Beauty brands can discover salons, barbers, nail studios, and spas in target regions.

🧑‍💼 Sales teams can export Fresha profile URLs and addresses into CRM workflows.

Why use this actor?

Fresha pages include rich public business metadata, but collecting it manually is slow.

This actor turns those pages into rows you can sort, filter, export, enrich, and analyze.

It avoids browser automation for the main flow and uses fast HTTP extraction from public HTML.

That keeps runs lightweight and affordable for frequent lead-list generation.

What Fresha data can I scrape?

The actor extracts one row per business profile discovered on each input listing page.

FieldDescription
nameBusiness or location name
urlFresha profile URL
categoryListing category such as Hair Salon
addressPublic address text from Fresha
cityParsed city/locality when available
regionParsed state/region when available
postalCodeParsed postal code when available
ratingPublic aggregate rating
reviewCountPublic review count
priceRangeFresha price range such as From $65
imageUrlPublic profile image URL
latitude / longitudePublic coordinates when present
rankPosition in the extracted list
sourceUrlListing page where the profile was found
profileDescriptionOptional profile meta description
extractedAtTimestamp of extraction

How much does it cost to scrape Fresha salons?

The actor uses pay-per-event pricing.

There is a small start charge for each run and a tiered per-result charge for each saved Fresha business.

Your final cost depends mostly on maxResults and whether you enable profile-page enrichment.

For the cheapest run, keep includeProfileDetails disabled and start with 20-50 businesses.

Example runTypical inputWhat you getEstimated platform charge*
Quick test20 businesses from one Fresha city/category pageSmall lead sample for validationAbout $0.006 on the Bronze tier
City prospecting list100 businesses from one or more local listing pagesCSV/JSON lead list with ratings and addressesAbout $0.009 on the Bronze tier
Market snapshot500 businesses across several categories or citiesLarger beauty-market dataset for analysisAbout $0.023 on the Bronze tier

*Estimates use the current $0.005 run-start charge plus Bronze-tier result pricing. Your actual bill can vary by Apify plan tier, configured result limit, retries, and optional profile-page enrichment.

On Apify's free plan, the monthly platform credits are typically enough for many small test runs of this actor. Start with the prefilled 20-result input, inspect the output, and then scale maxResults once the listing URLs are correct.

How to use Fresha Salon Scraper

  1. Open the actor on Apify.

  2. Paste one or more public Fresha listing URLs into Fresha listing URLs.

  3. Set Maximum businesses to the number of leads you want.

  4. Leave Fetch each profile page off unless you need profile meta descriptions.

  5. Start the run.

  6. Download the dataset as JSON, CSV, Excel, XML, or HTML.

Input example

{
"startUrls": [
{ "url": "https://www.fresha.com/lp/en/bt/hair-salons/in/us-new-york" }
],
"maxResults": 20,
"includeProfileDetails": false,
"maxRequestRetries": 3
}

Output example

{
"name": "H2 Salon Brooklyn",
"url": "https://www.fresha.com/a/h2-salon-brooklyn-new-york-473-tompkins-avenue-oyclntrv",
"sourceUrl": "https://www.fresha.com/lp/en/bt/hair-salons/in/us-new-york",
"category": "Hair Salon",
"address": "473 Tompkins Avenue, New York Brooklyn, Stuyvesant Heights, 11216",
"city": "New York Brooklyn",
"region": "New York",
"postalCode": "11216",
"country": null,
"latitude": 40.6812867,
"longitude": -73.943286,
"rating": 4.9,
"reviewCount": 6459,
"priceRange": "From $65",
"imageUrl": "https://images.fresha.com/locations/location-profile-images/...jpg",
"rank": 1,
"serviceArea": "New York",
"extractedAt": "2026-05-16T00:00:00.000Z"
}

Finding Fresha listing URLs

Open Fresha and navigate to a public category/location page.

Copy the URL from your browser.

Good examples usually contain /lp/ and include a service category plus a region.

Examples include hair salons in New York, nail salons in London, barbers in Toronto, or massage venues in Sydney.

Tips for better results

🔎 Use specific city/category listing pages instead of the Fresha home page.

📦 Increase maxResults when a page has many profiles.

⚡ Keep profile enrichment disabled for fast lead-list exports.

🧪 Test one URL first before adding many markets.

🧹 Deduplicate by url when combining multiple overlapping city pages.

Integrations

Export CSV files into HubSpot, Salesforce, Pipedrive, Airtable, or Google Sheets.

Send JSON output to a webhook for enrichment with email-finding or company-data tools.

Use Apify integrations to schedule monthly market snapshots for the same Fresha pages.

Combine Fresha leads with geocoding, review monitoring, or outreach automation workflows.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fresha-salon-scraper').call({
startUrls: [{ url: 'https://www.fresha.com/lp/en/bt/hair-salons/in/us-new-york' }],
maxResults: 50,
includeProfileDetails: false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/fresha-salon-scraper').call(run_input={
'startUrls': [{'url': 'https://www.fresha.com/lp/en/bt/hair-salons/in/us-new-york'}],
'maxResults': 50,
'includeProfileDetails': False,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~fresha-salon-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"startUrls": [{"url":"https://www.fresha.com/lp/en/bt/hair-salons/in/us-new-york"}],
"maxResults": 50,
"includeProfileDetails": false
}'

Using with MCP and AI agents

You can use this actor through Apify MCP from Claude Code, Claude Desktop, Cursor, VS Code, or any other MCP-compatible client.

MCP URL:

https://mcp.apify.com/?tools=automation-lab/fresha-salon-scraper

Claude Code setup

claude mcp add --transport http apify-fresha \
https://mcp.apify.com/?tools=automation-lab/fresha-salon-scraper

After adding the server, ask Claude Code to run automation-lab/fresha-salon-scraper with a Fresha listing URL and your desired maxResults.

Claude Desktop, Cursor, and VS Code setup

Add this server to your MCP configuration file:

{
"mcpServers": {
"apify-fresha": {
"url": "https://mcp.apify.com/?tools=automation-lab/fresha-salon-scraper"
}
}
}

If your MCP client requires headers, add your Apify API token as an authorization header according to that client's MCP documentation.

Example prompts:

  • "Scrape 50 Fresha hair salon profiles in New York and summarize the highest review counts."
  • "Find Fresha salons from this listing page and export names, profile URLs, ratings, and addresses."
  • "Compare Fresha business ratings between these two city listing pages."
  • "Create a CSV-ready prospecting list from Fresha nail salon pages and flag locations with more than 500 reviews."

Scheduling

Create a scheduled Apify task when you want repeatable monitoring.

For example, run the same city pages every month and compare review counts over time.

Scheduled runs work well for sales territories, market-entry research, and competitor tracking.

Data quality notes

The actor extracts data that Fresha exposes publicly in listing-page HTML.

Some fields may be missing if Fresha does not publish them for a business.

City and region are parsed from address text when Fresha does not provide structured locality fields.

The original address string is always kept so you can apply your own parsing downstream.

Limitations

This actor does not log into Fresha.

It does not book appointments, collect private user data, or bypass access controls.

It does not guarantee every business on Fresha is available from a single listing URL.

Use multiple targeted listing pages if you need broader coverage.

Troubleshooting

If you get zero results, check that your input URL is a public Fresha listing page and not a search form, home page, or private account page.

If you see fewer results than expected, increase maxResults and add more specific city/category pages.

If profile enrichment is slow, turn off Fetch each profile page and rely on listing-page fields.

FAQ

Why did my run return fewer businesses than the page headline suggests?

Fresha listing pages expose a finite set of public business cards in the initial HTML. Add more city/category URLs for broader coverage.

Can this actor collect phone numbers or emails?

It extracts public Fresha marketplace metadata. If Fresha does not publish a phone or email in the page data, the actor does not invent it.

Legality

This actor is intended to extract publicly available business information from public pages.

You are responsible for ensuring your use case complies with applicable laws, Fresha terms, and privacy rules.

Do not use the output for spam, harassment, or unlawful profiling.

Explore other Automation Lab actors on Apify:

Support

If a Fresha page stops returning data, open an issue from the Apify actor page.

Include the input URL, expected result, and run ID so the team can reproduce it quickly.

Changelog

Initial version extracts public Fresha listing-page business records using HTTP and JSON-LD parsing.

Example workflow for agencies

  1. Choose the city and beauty category you sell into.

  2. Copy the corresponding Fresha listing URL.

  3. Run the actor for 100-300 businesses.

  4. Export CSV.

  5. Import into your CRM.

  6. Segment by rating, review count, or city.

  7. Enrich profile URLs with your outreach stack.

Example workflow for analysts

  1. Collect listing pages across multiple cities.

  2. Run the actor with the same result limit per market.

  3. Compare average rating and review-count distribution.

  4. Track high-ranking businesses by category.

  5. Repeat monthly to watch marketplace changes.