Fresha Salon Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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.
| Field | Description |
|---|---|
name | Business or location name |
url | Fresha profile URL |
category | Listing category such as Hair Salon |
address | Public address text from Fresha |
city | Parsed city/locality when available |
region | Parsed state/region when available |
postalCode | Parsed postal code when available |
rating | Public aggregate rating |
reviewCount | Public review count |
priceRange | Fresha price range such as From $65 |
imageUrl | Public profile image URL |
latitude / longitude | Public coordinates when present |
rank | Position in the extracted list |
sourceUrl | Listing page where the profile was found |
profileDescription | Optional profile meta description |
extractedAt | Timestamp 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 run | Typical input | What you get | Estimated platform charge* |
|---|---|---|---|
| Quick test | 20 businesses from one Fresha city/category page | Small lead sample for validation | About $0.006 on the Bronze tier |
| City prospecting list | 100 businesses from one or more local listing pages | CSV/JSON lead list with ratings and addresses | About $0.009 on the Bronze tier |
| Market snapshot | 500 businesses across several categories or cities | Larger beauty-market dataset for analysis | About $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
-
Open the actor on Apify.
-
Paste one or more public Fresha listing URLs into Fresha listing URLs.
-
Set Maximum businesses to the number of leads you want.
-
Leave Fetch each profile page off unless you need profile meta descriptions.
-
Start the run.
-
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 ApifyClientclient = 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().itemsprint(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.
Related scrapers
Explore other Automation Lab actors on Apify:
- https://apify.com/automation-lab/google-maps-scraper
- https://apify.com/automation-lab/tripadvisor-scraper
- https://apify.com/automation-lab/yelp-scraper
- https://apify.com/automation-lab/booking-scraper
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
-
Choose the city and beauty category you sell into.
-
Copy the corresponding Fresha listing URL.
-
Run the actor for 100-300 businesses.
-
Export CSV.
-
Import into your CRM.
-
Segment by rating, review count, or city.
-
Enrich profile URLs with your outreach stack.
Example workflow for analysts
-
Collect listing pages across multiple cities.
-
Run the actor with the same result limit per market.
-
Compare average rating and review-count distribution.
-
Track high-ranking businesses by category.
-
Repeat monthly to watch marketplace changes.