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 2026-02-06.

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
February 6, 2026 json csvproto pb textpb json
February 5, 2026 json csvproto pb textpb json
February 5, 2026 (rev 3)json csvproto pb textpb json
February 5, 2026 (rev 2)json csvproto pb textpb json
February 5, 2026 json csvproto pb textpb json
February 4, 2026 json csvproto pb textpb json
February 3, 2026 json csvproto pb textpb json
February 2, 2026 json csvproto pb textpb json
February 1, 2026 json csvproto pb textpb json
January 31, 2026 json csvproto pb textpb json
January 30, 2026 json csvproto pb textpb json
January 29, 2026 json csvproto pb textpb json
January 28, 2026 json csvproto pb textpb json
January 27, 2026 json csvproto pb textpb json
January 26, 2026 json csvproto pb textpb json
January 25, 2026 json csvproto pb textpb json
January 24, 2026 json csvproto pb textpb json
January 23, 2026 json csvproto pb textpb json
January 22, 2026 json csvproto pb textpb json
January 21, 2026 json csvproto pb textpb json
January 20, 2026 json csvproto pb textpb json
January 19, 2026 json csvproto pb textpb json
January 18, 2026 json csvproto pb textpb json
January 17, 2026 json csvproto pb textpb json
January 16, 2026 json csvproto pb textpb json
January 15, 2026 json csvproto pb textpb json
January 14, 2026 json csvproto pb textpb json
January 13, 2026 json csvproto pb textpb json
January 12, 2026 json csvproto pb textpb json
January 11, 2026 json csvproto pb textpb json
January 10, 2026 json csvproto pb textpb json
January 9, 2026 json csvproto pb textpb json
January 8, 2026 json csvproto pb textpb json
January 7, 2026 json csvproto pb textpb json
January 6, 2026 json csvproto pb textpb json
January 5, 2026 json csvproto pb textpb json
January 4, 2026 json csvproto pb textpb json
January 3, 2026 json csvproto pb textpb json
January 2, 2026 json csvproto pb textpb json
January 1, 2026 json csvproto pb textpb json
December 31, 2025 json csvproto pb textpb json
December 30, 2025 json csvproto pb textpb json
December 29, 2025 json csvproto pb textpb json
December 28, 2025 json csvproto pb textpb json
December 27, 2025 json csvproto pb textpb json
December 26, 2025 json csvproto pb textpb json
December 25, 2025 json csvproto pb textpb json
December 24, 2025 json csvproto pb textpb json
December 23, 2025 json csvproto pb textpb json
December 22, 2025 json csvproto pb textpb json

Showing the last 50 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.