Parsing
Schedule parsing automatically imports your facility’s availability from external booking platforms. Connect once, and let the system sync your slots automatically.
What Is Schedule Parsing?
Schedule parsing links your sports facility to an external booking platform (like PickleHub or Rezerv) so that your facility’s availability syncs automatically. Instead of manually entering every time slot into the portal, your facility’s open times are imported directly from the platform where you already manage bookings.
This saves time and eliminates double-entry: you maintain your schedule in one place, and the portal always has the current availability.
| Concept | Meaning |
|---|---|
| Parser | The service that reads your facility’s availability from an external platform |
| Source | The external booking platform where your facility is listed |
| Sync | Automatic periodic update of slots from the source |
Parsing is optional. You can manage your facility schedule entirely within the portal if you prefer.
When to Use Parsing
Use schedule parsing if:
- Your facility is listed on an external platform — You have an account and an active facility page on one of the supported platforms (PickleHub, Rezerv, Playtomic, XBook, Courtly, Skedna, CourtGrid, Dulaco, Kortos, SuperSaaS, Courtogo, CourtBook)
- You prefer single-source truth — You manage bookings only (or primarily) on the external platform and want the portal to mirror that schedule
- You want to reduce manual work — Let the system import slots instead of typing them in manually
Do not use parsing if:
- Your facility schedule is only in the portal
- You don’t have an account on any supported external platform
- You manage bookings across multiple platforms and need custom consolidation
Supported Sources
| Source | URL | Status | Notes |
|---|---|---|---|
| PickleHub | https://picklehub.ph | ✅ Ready | Full support |
| Sports360 | https://app.sports360.ph | ⚠️ Limited | Facilities on this platform do not provide prices, so their slots are not shown in the portal |
| Rezerv | https://<clubname>.rezerv.co | ✅ Ready | Full support |
| Playtomic | https://playtomic.com/clubs/example | ⚠️ Limited | A price is shown only for free hours; booked hours are not shown in the grid |
| XBook | https://<tenant-host>/<slug> | ✅ Ready | Multi-tenant platform; login and password are part of the URL (see the XBook note below) |
| Courtly | https://www.courtly.cc/book/example | ✅ Ready | Full support |
| Skedna | https://skedna.com/courts/example | ✅ Ready | Full support |
| CourtGrid | https://courtgrid.ph | ✅ Ready | Full support |
| Dulaco | https://<slug>.dulaco.net | ✅ Ready | Multi-tenant platform; unique subdomain for each facility |
| Kortos | https://<tenant>.kortos.app/book | ✅ Ready | Multi-tenant booking platform; replace <tenant> with your facility’s tenant name |
| SuperSaaS | https://www.supersaas.com/schedule/<account>[/<schedule>] | ⚠️ Limited | The source does not provide prices, so its slots are not created in the portal. Private schedules need the ?email= parameter |
| Courtogo | https://www.courtogo.com/venues/<venue> | ✅ Ready | Full support |
| CourtBook | https://courtbooksolutions.org/sportshub/your-venue | ✅ Ready | Booking through the courtbooksolutions.org site; only free slots with a price are shown |
Setting Up Parsing
Follow these steps to enable schedule parsing for a facility:
Open the Facility Editor
Navigate to your facility management page and click the edit icon on the facility card. A drawer panel opens on the right.
Expand the Parsing Section
Look for the “Parsing” accordion in the drawer. Click it to expand.
Enable Parsing
Toggle the “Enable Parsing” switch to turn it on. Additional fields appear below.
Select a Source
In the dropdown menu, choose the external platform where your facility is listed. An example URL appears below the field to guide you.
Enter the Facility URL
Paste the full URL of your facility’s page on the external platform. For example:
- PickleHub:
https://picklehub.ph/club-name - Sports360:
https://app.sports360.ph/facility/xyz - Rezerv:
https://clubname.rezerv.co - Playtomic:
https://playtomic.com/clubs/example - XBook:
https://<host>/<path>?username=<login>&password=<password> - Courtly:
https://www.courtly.cc/book/example - Skedna:
https://skedna.com/courts/example - CourtGrid:
https://courtgrid.ph/explore/019f058e-8025-707c-91db-ad2fcdb8cb2b - Dulaco:
https://<your-club-slug>.dulaco.net - Kortos:
https://<tenant>.kortos.app/book - SuperSaaS:
https://www.supersaas.com/schedule/<account>/<schedule> - Courtogo:
https://www.courtogo.com/venues/<venue> - CourtBook:
https://courtbooksolutions.org/sportshub/your-venue
XBook note: Your XBook login and password are part of the URL, so they are saved with it as you enter it. They can appear in your browser history and in the logs of proxies and servers the URL passes through. Users who can edit this facility’s parsing settings can see them, and the portal API returns the saved URL to those users. Application logs mask the credentials. We recommend a separate XBook account used only to read the schedule, rather than your main account.
SuperSaaS note: Public schedules need only the schedule link. For a private schedule, add ?email=<address with access to the schedule> to the link. No other query parameters are accepted.
Scan for Courts
Click the scan button (radar icon) on the right side of the URL field. The system connects to the external platform and retrieves a list of all courts at this venue.
Select Your Court
Once the scan completes, a dropdown appears showing all courts found on the platform. Select one court from the list that you want to sync via the parser. If you have multiple courts and want to sync them all, you’ll set up parsing separately for each one.
Test the Connection
Click the “Test parsing” button below the court dropdown. The system simulates importing slots for the tested window and shows a summary:
Found 42 available, 10 booked slots in the tested window, last available 25.05 19:00Click “Show Details” to see a table of all slots found (date, time, court).
Save
If the test is successful, click “Save” in the drawer header. Parsing is now active.
Managing Active Parsing
Once parsing is enabled for a facility:
The parser runs automatically on a schedule. Imported slots appear in your Facility Schedule. A complete update of all slots happens approximately once an hour for each facility, while the nearest days are updated with each parser run.
In search, customers see only what the source actually reported: an hour is shown as free only if the source confirmed it. Hours with no data from the source (beyond the refreshed window or before the first load) are not shown as free. If you close the whole facility on the external platform (for example, for repairs), its free hours show as booked (at their previous price) in the portal after the next load.
| Action | Effect |
|---|---|
| Toggle off | Parsing is paused. The saved settings, including the URL, are kept, but no new slots are imported |
| Toggle on | Parsing resumes and imports slots again |
| Edit URL | Scan for courts again and retest before saving |
| Delete configuration | Removes the parsing setup; previously imported slots remain |
The facility’s Run history records two kinds of events:
- Sync — a run that changed slots: how many were added, updated, and closed.
- Error — a run that failed, with the error message and the URL with credentials masked.
Runs that changed no slots are not listed. To see the latest successful check, look at Last checked at the top of Run history. The Run history button is available after you save the facility, and Run history is visible to users who can view the facility.
Slot Prices
The portal takes each slot’s price only from the external platform’s data. The portal does not make up prices and does not use default values.
- The platform provided a price — the slot appears with that price.
- The platform set the price to 0 — the slot appears with a price of 0. This is the real price from the source.
- The platform did not provide a price for the hour (for example, no rate is set for night hours) or the rate cannot be read — the slot for that hour is not created and not shown in the portal. A zero price is never used in place of a missing one.
- A free hour disappears from the data — if an hour was free and is no longer in the fresh data from the platform, it is closed in the portal and shown as booked at its previous price.
- Playtomic — a price is shown only for free hours. Booked hours are not shown in the grid: there is an empty space instead of “booked”. This is an intentional limitation.
- Sports360 and SuperSaas — these platforms do not provide prices, so their slots are not created in the portal.
- Old slots with a price of 0.00 — slots with a price of 0.00 that were created earlier and fall outside the period the parser updates are not changed.
Booked slots follow the same rules: if the price of a booked hour is unknown, that slot is not created in the portal.
If an expected hour does not appear in your schedule, check on the external platform that a rate is set for that hour.
Troubleshooting
If you encounter an error while setting up or testing parsing, refer to this table:
| Error Message | Cause | Solution |
|---|---|---|
| URL is invalid or malformed | Invalid URL format | Check the URL in your browser’s address bar and copy it exactly |
| Facility not found | URL is correct but the facility doesn’t exist on the platform (or the platform is temporarily not responding to verification requests) | The system will automatically retry this check during the next sync cycle. If the error persists, verify the facility name matches on the external platform, or contact platform support |
| Source unavailable | The external platform is not responding | Wait a few minutes and try again |
| Source response timed out | The source took too long to respond | The platform may be slow; wait and retry |
| Failed to parse source response | The source returned an unexpected format | This source may not be fully supported yet; check the Supported Sources section |
This schedule is closed behind a login on the source site — the parser only reads public schedules. Add ?email=<address with access to the schedule> to the link, make the schedule public in the source settings, or enter a link to a public schedule | The schedule is private and the source asks for a login (SuperSaaS) | Add ?email= with an address that has access to the schedule to the link, make the schedule public, or use a link to a public schedule |
| The source did not accept the email address from the link when signing in. Check that this email has access to the schedule on the source site, or enter a link with an email that does | The ?email= address has no access to the schedule | Check that this address has access to the schedule on the source site, or enter a link with an address that does |
| Parsing service unavailable | The portal’s parsing service is offline | Contact admin |
| Source is not configured on the server | The backend is not set up for this source | Contact admin |
| Source is no longer supported | This source was deprecated | Choose a different source |
| No facilities found at this URL | URL is valid, the parser responded but returned no objects | Check that the club page actually has courts or facilities listed |
| Invalid request data | Something went wrong on the portal side | Contact admin |
Next Steps
Once parsing is active:
- Slots appear automatically — Check your Facility Schedule for imported time slots
- Sync happens periodically — New and updated slots from the external platform appear in the portal
- Manage slots as usual — You can still create, edit, or delete slots within the portal; parsing doesn’t prevent manual adjustments
- Check runs — Open Run history to see slot changes and errors
If you disable parsing and then re-enable it later, the parser will fetch slots again from where it left off. Existing portal-only slots are not affected.
Frequently Asked Questions
Does the parser support facilities that operate past midnight?
Yes. The parser supports schedules that run past midnight. For example, if your facility operates from 06:00 to 01:00 (6 AM to 1 AM the next day), the parser imports the slots for those hours without errors. No additional configuration is needed. A slot appears in the portal only if the platform provided a price for it. If no rate is set for night hours, those hours are not shown in the portal.