Ottawa recreation schedule data

This page provides an unofficial dataset of the City of Ottawa drop-in recreation schedules, updated daily.

If you encounter any problems or inaccurate data, please open an issue.

The data was last updated on 2025-10-31.

Simplified dataset

This format contains drop-in recreation facilities and activity times, with fully-parsed dates/times, cleaned titles, and inferred reservation requirements. It is available as JSON or CSV, along with a fully-documented stable schema.

FormatDownloadSchema
JSONjsonschema.json
CSVcsv.zipschema.csv
Facility facility facilityfacility information
URL url facility_urlcity of ottawa facility page url
ScrapedAt scrapedAt facility_scraped_atdate (YYYY-MM-DD) the date for the facility was scraped at
Name name facility_namename of the facility
Address address facility_addressthe address of the facility
Longitude longitude facility_longitudefacility longitude (may not be set if geocoding failed)
Latitude latitude facility_latitudefacility latitude (may not be set if geocoding failed)
SpecialHoursHTML specialHoursHtmlId facility_special_hours_html_idhtml for special hours
NotificationsHTML notificationsHtmlId facility_notifications_html_idhtml for notifications
Activity activity activityactivity information
FacilityURL facilityUrl facility_urlfacility url for the activity
StartDate startDate activity_date_startstart date (YYYY-MM-DD), inclusive (may not be set if parsing failed or there's no range)
EndDate endDate activity_date_endend date (YYYY-MM-DD), inclusive (may not be set if parsing failed or there's no range)
Weekday weekday activity_weekdayweekday (lowercase, long-form) or single date (YYYY-MM-DD) (may not be set if parsing failed)
StartTime startTime activity_time_startstart time (HH:MM), inclusive (may not be set if parsing failed)
EndTime endTime activity_time_endend time (HH:MM), exclusive (may not be set if parsing failed)
Name name activity_nameactivity name, normalized
ReservationRequired reservationRequired activity_reservation_requiredwhether reservation is required, best-effort
ReservationLinks reservationLinks activity_reservation_linksreservation urls (comma-separated for csv)
ExceptionsHTML exceptionsHtmlId activity_exceptions_html_idhtml for schedule exceptions
RawScheduleGroup rawScheduleGroup activity_raw_groupraw schedule group text (this field is not stable)
RawSchedule rawSchedule activity_raw_scheduleraw schedule caption text (this field is not stable)
RawDay rawDay activity_raw_dayraw schedule activity day (this field is not stable)
RawActivity rawActivity activity_raw_activityraw schedule activity label (this field is not stable)
RawTime rawTime activity_raw_timeraw schedule activity time (this field is not stable)
Error error errorerrors which occured while scraping the facility pages
FacilityURL facilityUrl facility_urlfacility url the error occured while scraping
Error error errorerror message
HTML html htmllonger snippets of html referenced from facility/activity
ID id idindex for cross-referencing, not stable
HTML html htmlraw html
Attribution attribution attributionattribution
Text text texttext

Raw dataset

This format is designed to match the structure of the website as closely as possible with minimal processing and no assumptions. This make it more complex to use correctly, but preserves all information from the website.

DownloadDescription
protoProtobuf schema.
pbBinary protobuf. Best for long-term usage. Forwards and backwards compatible.
jsonJSON protobuf. Intended for ad-hoc queries. Not stable.
textpbText protobuf. Intended for manual inspection.

API

Version specs

latest
Newest available data.
latest-N
N versions before the newest available data.
YYYY-MM
YYYY-MM-DD
Newest available data at the end of the specified date.
ID
Canonical reference to a specific revision of the data.

Export

/export/schema.json
/export/schema.csv
The current schema for the simplified dataset.
/export/:spec.json
/export/:spec.csv.zip
Download a simplified dataset. Historical data may not be available beyond a cut-off date if the underlying data format changes too much.

The API is stable, but the data schema is subject to change if required.

Raw (v1)

/v1/?limit=N&after=ID&revisions=true|false
A JSON array of available data, in descending order by date/revision. If revisions is not set to true, only the most recent revision for each date will be listed. The default and maximum per-page limit is subject to change. Each one is uniquely identified by the ID. The revision is incremented for every additional update to the data for a specific date. You can call this endpoint repeatedly with the last ID on the previous page until an empty array is returned.
[{"id": string, "revision": integer,"updated": date-rfc3339}]
/v1/:spec
/v1/:spec/:format
Download a raw dataset in the specified format. Currently, the valid formats are proto, pb, textpb, or json.

If the protobuf schema changes in a way which breaks backwards/forwards-compatible decoding, a new /v2/ api will be introduced for data beyond that point.

Historical data

VersionSimplifiedRaw
October 31, 2025 json csvproto pb textpb json
October 30, 2025 json csvproto pb textpb json
October 29, 2025 json csvproto pb textpb json
October 28, 2025 json csvproto pb textpb json
October 27, 2025 json csvproto pb textpb json
October 26, 2025 json csvproto pb textpb json
October 25, 2025 json csvproto pb textpb json
October 24, 2025 json csvproto pb textpb json
October 23, 2025 json csvproto pb textpb json
October 22, 2025 json csvproto pb textpb json
October 21, 2025 json csvproto pb textpb json
October 20, 2025 json csvproto pb textpb json
October 19, 2025 json csvproto pb textpb json
October 18, 2025 (rev 2)json csvproto pb textpb json
October 18, 2025 json csvproto pb textpb json
October 17, 2025 json csvproto pb textpb json
October 16, 2025 json csvproto pb textpb json
October 15, 2025 json csvproto pb textpb json
October 14, 2025 json csvproto pb textpb json
October 13, 2025 json csvproto pb textpb json
October 12, 2025 json csvproto pb textpb json
October 11, 2025 json csvproto pb textpb json
October 10, 2025 json csvproto pb textpb json
October 9, 2025 json csvproto pb textpb json
October 8, 2025 json csvproto pb textpb json
October 7, 2025 json csvproto pb textpb json

Showing the last 26 versions. Use the API to access older data.

License

This data has been scraped and redistributed with permission from the City of Ottawa, and can be used freely as long as the attribution text in the provided files is displayed where the data is used.