fresha.com APIfresha.com ↗
Search Fresha salons and spas, fetch business details, check appointment availability, and browse help center articles via a single structured API.
curl -X GET 'https://api.parse.bot/scraper/bf942bc5-c330-41c8-adb7-3648c24f18e1/search_businesses?limit=3&query=hair+salon&latitude=40.7493&longitude=-73.9697' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for businesses/venues by location and filters. Returns paginated results with business details, services, and ratings. Pagination cursors come from endCursor in prior search responses.
| Param | Type | Description |
|---|---|---|
| after | string | Pagination cursor from a previous response's pageInfo.endCursor field. Must be a real cursor from a prior search_businesses call. |
| limit | integer | Number of results to return per page. |
| query | string | Search query term (e.g. 'hair salon', 'massage'). |
| latitude | number | Latitude of the search location. |
| longitude | number | Longitude of the search location. |
{
"type": "object",
"fields": {
"data": "object with geolocation containing locations edges array with business nodes, pageInfo with endCursor and hasNextPage, and locationFeatures"
},
"sample": {
"data": {
"data": {
"geolocation": {
"locations": {
"edges": [
{
"node": {
"id": "519678",
"name": "NoMad",
"slug": "nomad-new-york-1165-broadway-hwiyigoq",
"rating": 5,
"address": {
"simpleFormatted": "Manhattan, New York"
},
"reviewsCount": 4796
},
"services": [
{
"id": "6459840",
"name": "Haircut",
"availableStartTimes": [],
"formattedRetailPrice": "from $65"
}
]
}
],
"pageInfo": {
"count": 449,
"endCursor": "WzEuMCwxLjExNzA4NTQyNTkzNDIzODksOTk1MDM4XQ==",
"hasNextPage": true
}
}
}
}
},
"status": "success"
}
}About the fresha.com API
The Fresha API covers 9 endpoints that expose beauty and wellness marketplace data from fresha.com, including business search, detailed venue profiles, appointment availability, and help center content. The search_businesses endpoint returns paginated venue listings with ratings, services, and location data, while get_availability surfaces bookable time slots or working hours depending on a business's partnership status.
Business Search and Venue Details
The search_businesses endpoint accepts a query string, latitude/longitude coordinates, and a limit parameter, returning a paginated list of venues with endCursor and hasNextPage fields for cursor-based pagination. Each result node includes business name, rating, address, and available services. To retrieve a complete venue profile — including reviewsCount, workingTime, contactNumber, description, and a full services array — pass a slug from search results into get_business_details.
Availability and Search Refinement
get_availability takes a business slug and a date in YYYY-MM-DD format and returns a booking_type of either online or call_to_book. For online-booking businesses, the response includes per-service available_times, duration, and price. For non-partnered listings it returns day_of_week and working hours instead. The get_search_filters endpoint accepts optional latitude/longitude and returns three filter arrays — highlights, amenities, and values — each with id, label, and icon fields that can be used to refine search_businesses calls. get_business_categories provides the full taxonomy of treatment categories (e.g. Hair & Styling, Nails, Massage) with id, name, and icon.
Help Center Knowledge Base
Four endpoints cover Fresha's Help Center. get_knowledge_base_categories lists top-level categories with title, slug, and url. get_knowledge_base_category accepts a category_slug and returns an articles array with title, description, url, and slug per item. get_knowledge_base_article takes both article_slug and category_slug and returns the full article content, thumbnail, and description. search_knowledge_base accepts a query keyword and optional limit, returning hits with previewDescription, categorySlug, content, and an estimatedTotalHits count.
- Build a local salon finder that queries
search_businessesby coordinates and displays rated venues with service menus. - Aggregate appointment slot availability across multiple businesses using
get_availabilityfor a given date. - Populate a category browser with Fresha's full treatment taxonomy from
get_business_categories. - Display dynamic filter chips for a venue search UI using
highlights,amenities, andvaluesfromget_search_filters. - Index Fresha Help Center content for internal documentation tools using
search_knowledge_basewith keyword queries. - Monitor venue working hours and contact numbers for directory services via
get_business_details. - Surface related help articles in a booking app by fetching full article content from
get_knowledge_base_article.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Fresha have an official public developer API?+
What distinguishes the response for an online-booking business versus a non-partnered listing in `get_availability`?+
booking_type field signals the difference. For online-booking businesses it returns 'online' along with a services array where each entry includes available_times, duration, and price. For non-partnered (LVP) listings it returns 'call_to_book', a phone number, and working hours for the requested day_of_week instead of individual time slots.How does pagination work in `search_businesses`?+
pageInfo object containing endCursor and hasNextPage. Pass the endCursor value as the after parameter in the next request to retrieve the following page. Passing a fabricated or stale cursor will not return valid results — the cursor must come from a real prior response.Does the API return individual staff member profiles or staff-level availability?+
Are reviews and their text content accessible through these endpoints?+
get_business_details endpoint returns reviewsCount and an aggregate rating, but does not return individual review text, reviewer names, or review dates. The API covers summary-level reputation data only. You can fork it on Parse and revise to add a dedicated reviews endpoint if you need per-review content.