fresha.com APIfresha.com ↗
Search Fresha businesses, retrieve venue details, services, reviews, working hours, and browse Help Center articles via a structured REST API.
curl -X GET 'https://api.parse.bot/scraper/bf942bc5-c330-41c8-adb7-3648c24f18e1/search_businesses?limit=5&query=hair+salon&latitude=40.7876&longitude=-74.06' \ -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": "300462",
"name": "Tonsorium Parlor",
"slug": "tonsorium-parlor-hoboken-1204-washington-street-7ojdtffk",
"rating": 5,
"address": {
"simpleFormatted": "1204 Washington Street, Hoboken"
},
"reviewsCount": 1188
}
}
],
"pageInfo": {
"count": 454,
"endCursor": "WzEuMCwxLjI3NTQ5NTc5OTkzODYxNywxNDExMTM5XQ==",
"hasNextPage": true
}
},
"countryCode": "US"
}
}
},
"status": "success"
}
}About the fresha.com API
This API exposes 8 endpoints covering Fresha's beauty and wellness marketplace, letting you query businesses by location, retrieve full venue profiles, and browse the Help Center knowledge base. The search_businesses endpoint returns paginated business listings with ratings, services, and geolocation data, while get_business_details delivers working hours, contact numbers, photos, and per-service pricing for any individual venue identified by its slug.
Business Search and Venue Profiles
The search_businesses endpoint accepts a free-text query (e.g. "hair salon", "massage"), latitude/longitude coordinates, and a limit parameter. Results come back as a paginated edge list under data.geolocation.locations.edges, each node carrying business name, rating, review count, and available services. Pagination uses cursor-based navigation: supply the endCursor from a prior response's pageInfo to the after parameter to fetch the next page.
Once you have a business slug from search results, pass it to get_business_details to retrieve the full venue record. The response includes name, description, rating, reviewsCount, a services array with individual offerings, contactNumber, address, workingTime schedules, and photo assets. Slugs follow the pattern venue-name-city-street-hash and must come from actual search results — they are not user-constructed.
Filters and Categories
get_search_filters accepts optional latitude and longitude and returns three arrays — highlights, amenities, and values — each containing filter objects with id, label, and icon. These facet values can be used to refine marketplace searches. get_business_categories returns the full taxonomy of treatment categories (e.g. Hair & Styling, Nails, Massage) as TreatmentCategory nodes with id, name, and icon, alongside suggested Location nodes with id, name, and slug.
Help Center Knowledge Base
Four endpoints cover Fresha's Help Center. get_knowledge_base_categories lists all top-level categories with title, slug, and url. get_knowledge_base_category takes a category_slug (e.g. "calendar", "payments") and returns an array of articles with title, description, url, and slug. get_knowledge_base_article retrieves the full content, thumbnail, and description for a specific article given both article_slug and category_slug. search_knowledge_base accepts a query keyword and optional limit, returning hits with title, previewDescription, slug, categorySlug, content, and thumbnailImage, plus an estimatedTotalHits count.
- Build a local beauty salon finder by querying
search_businesseswith GPS coordinates and a treatment keyword. - Aggregate service menus and pricing across venues in a city using
get_business_detailsfor each slug returned by search. - Power a wellness app category browser using treatment types and icons from
get_business_categories. - Populate a business directory with working hours, ratings, and contact numbers from
get_business_details. - Index Fresha Help Center content for a custom support chatbot using
search_knowledge_baseandget_knowledge_base_article. - Surface location-specific filter facets (amenities, highlights) to end users via
get_search_filtersbefore they run a search. - Monitor venue review counts and ratings over time by periodically calling
get_business_detailsfor a tracked set of slugs.
| 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 offer an official public developer API?+
How does pagination work in `search_businesses`?+
pageInfo object with endCursor and hasNextPage fields. To fetch the next page, pass the endCursor string as the after parameter in your next request. Cursors are opaque strings tied to a specific search context and must not be constructed manually.Does `get_business_details` return individual service prices?+
services array within the venue's pageProps.location object. The fields available per service depend on what the business has published on Fresha. Not every venue lists prices for every service; some entries may omit pricing while still returning service names and durations.Can I retrieve customer reviews or review text for a business?+
get_business_details endpoint returns aggregate rating and reviewsCount fields, but individual review text and reviewer details are not currently exposed as discrete fields. You can fork this API on Parse and revise it to add an endpoint targeting per-review content.Is search limited to specific countries or regions?+
search_businesses endpoint queries against Fresha's live marketplace, which operates across multiple countries. However, coverage density varies significantly by region — major cities in the UK, Australia, and North America tend to return more results than less-populated markets. Searches in areas with no Fresha presence will return empty edge arrays rather than an error.