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.
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.
| Format | Download | Schema | 
|---|---|---|
| JSON | json | schema.json | 
| CSV | csv.zip | schema.csv | 
| Facility facility facility | facility information | 
|---|---|
| URL url facility_url | city of ottawa facility page url | 
| ScrapedAt scrapedAt facility_scraped_at | date (YYYY-MM-DD) the date for the facility was scraped at | 
| Name name facility_name | name of the facility | 
| Address address facility_address | the address of the facility | 
| Longitude longitude facility_longitude | facility longitude (may not be set if geocoding failed) | 
| Latitude latitude facility_latitude | facility latitude (may not be set if geocoding failed) | 
| SpecialHoursHTML specialHoursHtmlId facility_special_hours_html_id | html for special hours | 
| NotificationsHTML notificationsHtmlId facility_notifications_html_id | html for notifications | 
| Activity activity activity | activity information | 
| FacilityURL facilityUrl facility_url | facility url for the activity | 
| StartDate startDate activity_date_start | start date (YYYY-MM-DD), inclusive (may not be set if parsing failed or there's no range) | 
| EndDate endDate activity_date_end | end date (YYYY-MM-DD), inclusive (may not be set if parsing failed or there's no range) | 
| Weekday weekday activity_weekday | weekday (lowercase, long-form) or single date (YYYY-MM-DD) (may not be set if parsing failed) | 
| StartTime startTime activity_time_start | start time (HH:MM), inclusive (may not be set if parsing failed) | 
| EndTime endTime activity_time_end | end time (HH:MM), exclusive (may not be set if parsing failed) | 
| Name name activity_name | activity name, normalized | 
| ReservationRequired reservationRequired activity_reservation_required | whether reservation is required, best-effort | 
| ReservationLinks reservationLinks activity_reservation_links | reservation urls (comma-separated for csv) | 
| ExceptionsHTML exceptionsHtmlId activity_exceptions_html_id | html for schedule exceptions | 
| RawScheduleGroup rawScheduleGroup activity_raw_group | raw schedule group text (this field is not stable) | 
| RawSchedule rawSchedule activity_raw_schedule | raw schedule caption text (this field is not stable) | 
| RawDay rawDay activity_raw_day | raw schedule activity day (this field is not stable) | 
| RawActivity rawActivity activity_raw_activity | raw schedule activity label (this field is not stable) | 
| RawTime rawTime activity_raw_time | raw schedule activity time (this field is not stable) | 
| Error error error | errors which occured while scraping the facility pages | 
| FacilityURL facilityUrl facility_url | facility url the error occured while scraping | 
| Error error error | error message | 
| HTML html html | longer snippets of html referenced from facility/activity | 
| ID id id | index for cross-referencing, not stable | 
| HTML html html | raw html | 
| Attribution attribution attribution | attribution | 
| Text text text | text | 
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.
| Download | Description | 
|---|---|
| proto | Protobuf schema. | 
| pb | Binary protobuf. Best for long-term usage. Forwards and backwards compatible. | 
| json | JSON protobuf. Intended for ad-hoc queries. Not stable. | 
| textpb | Text protobuf. Intended for manual inspection. | 
The API is stable, but the data schema is subject to change if required.
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}]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.
Showing the last 26 versions. Use the API to access older data.
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.