Booksy APIes.booksy.com ↗
Access Booksy Spain business profiles, services with pricing, staff details, opening hours, and real-time appointment availability via two structured endpoints.
What is the Booksy API?
The Booksy Spain API exposes 2 endpoints covering business profiles and real-time appointment availability from es.booksy.com. get_business_info returns 10 fields including services with pricing and duration, staff members, ratings, and opening hours. get_time_slots returns available booking windows for a specific service and date, with both aggregate and per-staff slot breakdowns.
curl -X GET 'https://api.parse.bot/scraper/207a23cd-86ea-4481-9d24-3d280a6e364e/get_business_info?business_id=8903' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace es-booksy-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Booksy Spain SDK — fetch business info and check appointment availability."""
from parse_apis.es_booksy_com_api import Booksy, BusinessNotFound
client = Booksy()
# Fetch a business by its numeric ID
biz = client.businesses.get(business_id="8903")
print(f"Business: {biz.name} — {biz.address}")
print(f"Rating: {biz.rating} ({biz.reviews_count} reviews)")
# Browse services offered
for svc in biz.services[:3]:
print(f" Service: {svc.name} | {svc.price}€ | {svc.duration_minutes}min (variant: {svc.variant_id})")
# Check availability for the first service variant
first_variant = str(biz.services[0].variant_id)
avail = biz.availability(service_variant_id=first_variant, date="2026-07-10")
print(f"\nAvailable slots on {avail.date}: {avail.slots[:5]}")
# Per-staff breakdown
for ss in avail.staff_slots[:2]:
print(f" Staffer {ss.staffer_id}: {ss.slots[:4]}")
# Typed error handling: catch BusinessNotFound for an invalid ID
try:
client.businesses.get(business_id="9999999")
except BusinessNotFound as exc:
print(f"\nNot found: business_id={exc.business_id}")
print("\nExercised: businesses.get / business.availability / BusinessNotFound")
Retrieve detailed information about a business on Booksy Spain, including name, address, rating, reviews count, services with pricing and duration, staff members, and opening hours.
| Param | Type | Description |
|---|---|---|
| business_idrequired | string | Numeric business identifier from Booksy (e.g. '8903'). |
{
"type": "object",
"fields": {
"id": "integer",
"name": "string",
"staff": "array of staff objects with id, name, position, photo_url",
"rating": "number",
"address": "string",
"services": "array of service objects with service_id, name, category, variant_id, price, duration_minutes, description",
"open_hours": "array of schedule objects with day_of_week (1=Monday..7=Sunday), open_from, open_till",
"business_id": "string",
"description": "string",
"reviews_count": "integer"
},
"sample": {
"data": {
"id": 8903,
"name": "PALACE BARBER/ SAGRADA FAMILIA",
"staff": [
{
"id": 24550,
"name": "Maykel",
"position": "Barbero",
"photo_url": "https://d375139ucebi94.cloudfront.net/region2/es/8903/resource_photos/6da4f8c9975a4d70a4ab9dc047e3a533.jpeg"
}
],
"rating": 4.917,
"address": "Carrer Padilla 241, Local 1, 08013, Barcelona",
"services": [
{
"name": "CORTE + LAVADO + MASAJE CAPILAR",
"price": 17,
"category": "HAIRCUT / CORTE DE CABELLO",
"service_id": 103556,
"variant_id": 611328,
"description": "Corte con lavado y peinado profesional.",
"duration_minutes": 30
}
],
"open_hours": [
{
"open_from": "10:00",
"open_till": "14:00",
"day_of_week": 1
}
],
"business_id": "8903",
"description": "Palace barber shop",
"reviews_count": 1755
},
"status": "success"
}
}About the Booksy API
Business Profile Data
get_business_info takes a business_id string and returns a structured profile: business name, address, description, aggregate rating, and reviews_count. The services array includes each service's name, category, price, duration_minutes, description, and the variant_id you'll need for availability lookups. The staff array lists each staffer's id, name, position, and photo_url. The open_hours array provides a weekly schedule as day-of-week integers (1 = Monday through 7 = Sunday) with open_from and open_till times.
Appointment Availability
get_time_slots accepts a business_id, a service_variant_id (sourced from services[*].variant_id in the business response), and a date in YYYY-MM-DD format. It returns a slots array of available times in HH:MM format covering any available staff member. Pass a staffer_id from staff[*].id to filter availability to a specific person, or omit it (or use -1) to query across all staffers. The response also includes a staff_slots array that breaks down availability per staffer, letting you display which specific staff members are free at each time.
Chaining the Endpoints
The two endpoints are designed to chain together. A typical workflow retrieves the business profile first to collect variant_id values for services and id values for staff members, then calls get_time_slots with those identifiers to query a specific date. This makes it straightforward to build scheduling tools, availability monitors, or calendar integrations targeted at Booksy Spain listings.
The Booksy API is a managed, monitored endpoint for es.booksy.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when es.booksy.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official es.booksy.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a booking availability checker that queries open slots for a specific barber on a given date.
- Aggregate service pricing and duration data across multiple Booksy Spain businesses for comparison.
- Display staff member profiles and their per-day availability in a custom scheduling UI.
- Monitor weekly opening hours changes for a set of Booksy Spain businesses.
- Generate structured business directory listings using name, address, rating, and reviews_count.
- Alert customers when a preferred staffer has an opening on a target date.
- Populate a CRM with Booksy Spain business profiles including service categories and descriptions.
| 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 | 100 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 Booksy have an official public developer API?+
What does get_time_slots return and how does staff filtering work?+
get_time_slots returns a slots array of HH:MM time strings for the requested date, plus a staff_slots array that lists available times broken down by individual staffer ID. To filter to one person, pass their numeric id from the staff array returned by get_business_info as the staffer_id parameter. Omitting staffer_id or passing -1 returns combined availability across all staff.Does the API return customer reviews or review text?+
get_business_info returns a reviews_count integer and an aggregate rating number, but individual review text, reviewer names, and review dates are not included in the current response. You can fork this API on Parse and revise it to add a reviews endpoint that returns per-review content.Does the API cover Booksy markets outside Spain?+
Are there any known limitations with business ID discovery?+
business_id, which must be obtained from the Booksy Spain business URL (for example, the segment 58087 in a listing URL). The API does not currently include a search or discovery endpoint to find business IDs by location or category. You can fork this API on Parse and revise it to add a business search endpoint.