{"generated_at":"2026-09-09T11:29:29+00:00","latest":[{"city_id":"luxor","city_name":"Luxor","governorate":"Luxor","aqi_grid":"luxor","latitude":25.6872,"longitude":32.6396,"observed_at":"2026-09-09T11:00:00","pm2_5":23.3,"pm10":98.3,"us_aqi":140.0,"aqi_category":"Unhealthy for sensitive groups","temperature_c":40.4,"humidity_pct":11.0,"wind_speed_kmh":10.8},{"city_id":"aswan","city_name":"Aswan","governorate":"Aswan","aqi_grid":"aswan","latitude":24.0889,"longitude":32.8998,"observed_at":"2026-09-09T11:00:00","pm2_5":39.7,"pm10":211.4,"us_aqi":115.0,"aqi_category":"Unhealthy for sensitive groups","temperature_c":40.3,"humidity_pct":12.0,"wind_speed_kmh":11.4},{"city_id":"cairo","city_name":"Cairo","governorate":"Cairo","aqi_grid":"cairo_giza","latitude":30.0444,"longitude":31.2357,"observed_at":"2026-09-09T11:00:00","pm2_5":25.9,"pm10":31.9,"us_aqi":75.0,"aqi_category":"Moderate","temperature_c":34.7,"humidity_pct":41.0,"wind_speed_kmh":6.9},{"city_id":"giza","city_name":"Giza","governorate":"Giza","aqi_grid":"cairo_giza","latitude":30.0131,"longitude":31.2089,"observed_at":"2026-09-09T11:00:00","pm2_5":25.9,"pm10":31.9,"us_aqi":75.0,"aqi_category":"Moderate","temperature_c":34.7,"humidity_pct":40.0,"wind_speed_kmh":7.9},{"city_id":"port_said","city_name":"Port Said","governorate":"Port Said","aqi_grid":"port_said","latitude":31.2653,"longitude":32.3019,"observed_at":"2026-09-09T11:00:00","pm2_5":16.7,"pm10":23.8,"us_aqi":66.0,"aqi_category":"Moderate","temperature_c":32.1,"humidity_pct":55.0,"wind_speed_kmh":10.4},{"city_id":"mansoura","city_name":"Mansoura","governorate":"Dakahlia","aqi_grid":"mansoura","latitude":31.0409,"longitude":31.3785,"observed_at":"2026-09-09T11:00:00","pm2_5":14.7,"pm10":18.8,"us_aqi":63.0,"aqi_category":"Moderate","temperature_c":34.8,"humidity_pct":41.0,"wind_speed_kmh":6.5},{"city_id":"alexandria","city_name":"Alexandria","governorate":"Alexandria","aqi_grid":"alexandria","latitude":31.2001,"longitude":29.9187,"observed_at":"2026-09-09T11:00:00","pm2_5":13.3,"pm10":25.1,"us_aqi":60.0,"aqi_category":"Moderate","temperature_c":29.6,"humidity_pct":64.0,"wind_speed_kmh":14.0},{"city_id":"suez","city_name":"Suez","governorate":"Suez","aqi_grid":"suez","latitude":29.9668,"longitude":32.5498,"observed_at":"2026-09-09T11:00:00","pm2_5":18.0,"pm10":25.9,"us_aqi":58.0,"aqi_category":"Moderate","temperature_c":35.2,"humidity_pct":27.0,"wind_speed_kmh":12.0}],"daily":[{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-08-27","avg_pm2_5":15.36,"avg_us_aqi":59.8},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-08-27","avg_pm2_5":63.52,"avg_us_aqi":143.0},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-08-27","avg_pm2_5":19.1,"avg_us_aqi":73.0},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-08-27","avg_pm2_5":19.1,"avg_us_aqi":73.0},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-08-27","avg_pm2_5":59.45,"avg_us_aqi":147.4},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-08-27","avg_pm2_5":13.31,"avg_us_aqi":58.8},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-08-27","avg_pm2_5":17.17,"avg_us_aqi":71.3},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-08-27","avg_pm2_5":15.8,"avg_us_aqi":76.8},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-08-28","avg_pm2_5":17.28,"avg_us_aqi":64.1},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-08-28","avg_pm2_5":41.95,"avg_us_aqi":142.5},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-08-28","avg_pm2_5":23.27,"avg_us_aqi":73.8},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-08-28","avg_pm2_5":23.27,"avg_us_aqi":73.8},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-08-28","avg_pm2_5":54.65,"avg_us_aqi":152.0},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-08-28","avg_pm2_5":21.35,"avg_us_aqi":70.0},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-08-28","avg_pm2_5":21.92,"avg_us_aqi":73.6},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-08-28","avg_pm2_5":17.36,"avg_us_aqi":75.8},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-08-29","avg_pm2_5":10.87,"avg_us_aqi":60.7},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-08-29","avg_pm2_5":31.09,"avg_us_aqi":108.9},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-08-29","avg_pm2_5":15.91,"avg_us_aqi":70.1},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-08-29","avg_pm2_5":15.91,"avg_us_aqi":70.1},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-08-29","avg_pm2_5":49.98,"avg_us_aqi":143.3},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-08-29","avg_pm2_5":12.38,"avg_us_aqi":67.2},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-08-29","avg_pm2_5":13.5,"avg_us_aqi":68.0},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-08-29","avg_pm2_5":24.12,"avg_us_aqi":85.7},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-08-30","avg_pm2_5":13.04,"avg_us_aqi":54.5},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-08-30","avg_pm2_5":60.3,"avg_us_aqi":120.0},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-08-30","avg_pm2_5":15.6,"avg_us_aqi":61.9},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-08-30","avg_pm2_5":15.6,"avg_us_aqi":61.9},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-08-30","avg_pm2_5":92.35,"avg_us_aqi":206.5},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-08-30","avg_pm2_5":9.13,"avg_us_aqi":48.5},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-08-30","avg_pm2_5":10.13,"avg_us_aqi":55.5},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-08-30","avg_pm2_5":14.23,"avg_us_aqi":77.7},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-08-31","avg_pm2_5":14.86,"avg_us_aqi":58.8},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-08-31","avg_pm2_5":48.54,"avg_us_aqi":159.8},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-08-31","avg_pm2_5":21.4,"avg_us_aqi":68.2},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-08-31","avg_pm2_5":21.4,"avg_us_aqi":68.2},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-08-31","avg_pm2_5":55.9,"avg_us_aqi":199.3},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-08-31","avg_pm2_5":12.9,"avg_us_aqi":54.7},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-08-31","avg_pm2_5":13.0,"avg_us_aqi":63.2},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-08-31","avg_pm2_5":16.62,"avg_us_aqi":71.9},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-01","avg_pm2_5":14.32,"avg_us_aqi":61.5},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-01","avg_pm2_5":45.17,"avg_us_aqi":132.0},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-01","avg_pm2_5":19.23,"avg_us_aqi":73.4},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-01","avg_pm2_5":19.23,"avg_us_aqi":73.4},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-01","avg_pm2_5":53.39,"avg_us_aqi":152.7},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-01","avg_pm2_5":13.48,"avg_us_aqi":59.0},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-01","avg_pm2_5":13.67,"avg_us_aqi":61.1},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-01","avg_pm2_5":9.65,"avg_us_aqi":64.2},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-02","avg_pm2_5":17.43,"avg_us_aqi":67.3},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-02","avg_pm2_5":26.86,"avg_us_aqi":102.5},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-02","avg_pm2_5":16.92,"avg_us_aqi":66.7},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-02","avg_pm2_5":16.92,"avg_us_aqi":66.7},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-02","avg_pm2_5":41.3,"avg_us_aqi":124.4},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-02","avg_pm2_5":13.41,"avg_us_aqi":58.3},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-02","avg_pm2_5":9.82,"avg_us_aqi":53.8},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-02","avg_pm2_5":8.72,"avg_us_aqi":49.8},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-03","avg_pm2_5":15.01,"avg_us_aqi":62.5},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-03","avg_pm2_5":27.38,"avg_us_aqi":85.6},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-03","avg_pm2_5":20.46,"avg_us_aqi":67.7},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-03","avg_pm2_5":20.46,"avg_us_aqi":67.7},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-03","avg_pm2_5":48.67,"avg_us_aqi":121.0},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-03","avg_pm2_5":15.1,"avg_us_aqi":59.4},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-03","avg_pm2_5":15.3,"avg_us_aqi":58.3},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-03","avg_pm2_5":9.57,"avg_us_aqi":60.8},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-04","avg_pm2_5":12.99,"avg_us_aqi":59.2},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-04","avg_pm2_5":35.4,"avg_us_aqi":103.5},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-04","avg_pm2_5":20.5,"avg_us_aqi":73.3},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-04","avg_pm2_5":20.5,"avg_us_aqi":73.3},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-04","avg_pm2_5":47.08,"avg_us_aqi":139.4},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-04","avg_pm2_5":15.33,"avg_us_aqi":62.1},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-04","avg_pm2_5":13.75,"avg_us_aqi":62.5},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-04","avg_pm2_5":13.43,"avg_us_aqi":68.3},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-05","avg_pm2_5":11.97,"avg_us_aqi":56.8},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-05","avg_pm2_5":49.38,"avg_us_aqi":130.0},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-05","avg_pm2_5":18.53,"avg_us_aqi":68.5},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-05","avg_pm2_5":18.53,"avg_us_aqi":68.5},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-05","avg_pm2_5":54.93,"avg_us_aqi":134.2},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-05","avg_pm2_5":13.42,"avg_us_aqi":60.0},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-05","avg_pm2_5":14.67,"avg_us_aqi":59.9},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-05","avg_pm2_5":11.05,"avg_us_aqi":68.6},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-06","avg_pm2_5":13.78,"avg_us_aqi":56.3},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-06","avg_pm2_5":90.91,"avg_us_aqi":196.0},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-06","avg_pm2_5":20.11,"avg_us_aqi":69.9},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-06","avg_pm2_5":20.11,"avg_us_aqi":69.9},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-06","avg_pm2_5":74.95,"avg_us_aqi":175.5},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-06","avg_pm2_5":13.97,"avg_us_aqi":57.5},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-06","avg_pm2_5":14.64,"avg_us_aqi":62.0},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-06","avg_pm2_5":14.05,"avg_us_aqi":69.4},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-07","avg_pm2_5":11.65,"avg_us_aqi":57.6},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-07","avg_pm2_5":74.12,"avg_us_aqi":259.7},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-07","avg_pm2_5":18.16,"avg_us_aqi":70.3},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-07","avg_pm2_5":18.16,"avg_us_aqi":70.3},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-07","avg_pm2_5":43.24,"avg_us_aqi":154.5},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-07","avg_pm2_5":12.42,"avg_us_aqi":59.0},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-07","avg_pm2_5":14.89,"avg_us_aqi":64.2},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-07","avg_pm2_5":13.32,"avg_us_aqi":74.3},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-08","avg_pm2_5":14.28,"avg_us_aqi":57.6},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-08","avg_pm2_5":54.6,"avg_us_aqi":154.9},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-08","avg_pm2_5":22.57,"avg_us_aqi":72.7},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-08","avg_pm2_5":22.57,"avg_us_aqi":72.7},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-08","avg_pm2_5":41.09,"avg_us_aqi":110.4},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-08","avg_pm2_5":18.51,"avg_us_aqi":63.9},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-08","avg_pm2_5":17.69,"avg_us_aqi":65.0},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-08","avg_pm2_5":12.23,"avg_us_aqi":63.7},{"city_name":"Alexandria","aqi_grid":"alexandria","date_key":"2026-09-09","avg_pm2_5":13.9,"avg_us_aqi":60.0},{"city_name":"Aswan","aqi_grid":"aswan","date_key":"2026-09-09","avg_pm2_5":51.09,"avg_us_aqi":125.8},{"city_name":"Cairo","aqi_grid":"cairo_giza","date_key":"2026-09-09","avg_pm2_5":26.68,"avg_us_aqi":74.8},{"city_name":"Giza","aqi_grid":"cairo_giza","date_key":"2026-09-09","avg_pm2_5":26.68,"avg_us_aqi":74.8},{"city_name":"Luxor","aqi_grid":"luxor","date_key":"2026-09-09","avg_pm2_5":55.13,"avg_us_aqi":128.8},{"city_name":"Mansoura","aqi_grid":"mansoura","date_key":"2026-09-09","avg_pm2_5":18.52,"avg_us_aqi":66.0},{"city_name":"Port Said","aqi_grid":"port_said","date_key":"2026-09-09","avg_pm2_5":20.01,"avg_us_aqi":66.6},{"city_name":"Suez","aqi_grid":"suez","date_key":"2026-09-09","avg_pm2_5":14.79,"avg_us_aqi":57.4}],"profile":[{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":0,"avg_pm2_5":14.28},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":1,"avg_pm2_5":14.24},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":2,"avg_pm2_5":14.18},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":3,"avg_pm2_5":14.17},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":4,"avg_pm2_5":14.62},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":5,"avg_pm2_5":14.68},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":6,"avg_pm2_5":14.86},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":7,"avg_pm2_5":15.31},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":8,"avg_pm2_5":15.59},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":9,"avg_pm2_5":16.14},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":10,"avg_pm2_5":16.58},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":11,"avg_pm2_5":16.67},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":12,"avg_pm2_5":16.75},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":13,"avg_pm2_5":16.49},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":14,"avg_pm2_5":15.96},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":15,"avg_pm2_5":15.39},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":16,"avg_pm2_5":14.59},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":17,"avg_pm2_5":14.12},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":18,"avg_pm2_5":14.02},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":19,"avg_pm2_5":14.02},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":20,"avg_pm2_5":14.02},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":21,"avg_pm2_5":14.07},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":22,"avg_pm2_5":14.3},{"city_name":"Alexandria","aqi_grid":"alexandria","hour_of_day_local":23,"avg_pm2_5":14.27},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":0,"avg_pm2_5":42.55},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":1,"avg_pm2_5":45.8},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":2,"avg_pm2_5":48.63},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":3,"avg_pm2_5":52.91},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":4,"avg_pm2_5":54.9},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":5,"avg_pm2_5":56.35},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":6,"avg_pm2_5":56.93},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":7,"avg_pm2_5":56.5},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":8,"avg_pm2_5":54.71},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":9,"avg_pm2_5":54.69},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":10,"avg_pm2_5":51.79},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":11,"avg_pm2_5":45.27},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":12,"avg_pm2_5":40.26},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":13,"avg_pm2_5":37.04},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":14,"avg_pm2_5":35.12},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":15,"avg_pm2_5":30.87},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":16,"avg_pm2_5":30.39},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":17,"avg_pm2_5":30.6},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":18,"avg_pm2_5":31.37},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":19,"avg_pm2_5":32.64},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":20,"avg_pm2_5":33.16},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":21,"avg_pm2_5":34.34},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":22,"avg_pm2_5":36.3},{"city_name":"Aswan","aqi_grid":"aswan","hour_of_day_local":23,"avg_pm2_5":39.13},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":0,"avg_pm2_5":17.18},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":1,"avg_pm2_5":17.66},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":2,"avg_pm2_5":18.54},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":3,"avg_pm2_5":19.2},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":4,"avg_pm2_5":20.36},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":5,"avg_pm2_5":21.63},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":6,"avg_pm2_5":22.98},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":7,"avg_pm2_5":24.22},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":8,"avg_pm2_5":23.6},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":9,"avg_pm2_5":22.52},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":10,"avg_pm2_5":22.1},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":11,"avg_pm2_5":21.61},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":12,"avg_pm2_5":21.88},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":13,"avg_pm2_5":21.6},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":14,"avg_pm2_5":20.72},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":15,"avg_pm2_5":19.57},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":16,"avg_pm2_5":18.54},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":17,"avg_pm2_5":17.19},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":18,"avg_pm2_5":16.5},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":19,"avg_pm2_5":16.68},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":20,"avg_pm2_5":17.49},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":21,"avg_pm2_5":17.13},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":22,"avg_pm2_5":16.87},{"city_name":"Cairo","aqi_grid":"cairo_giza","hour_of_day_local":23,"avg_pm2_5":17.11},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":0,"avg_pm2_5":17.18},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":1,"avg_pm2_5":17.66},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":2,"avg_pm2_5":18.54},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":3,"avg_pm2_5":19.2},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":4,"avg_pm2_5":20.36},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":5,"avg_pm2_5":21.63},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":6,"avg_pm2_5":22.98},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":7,"avg_pm2_5":24.22},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":8,"avg_pm2_5":23.6},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":9,"avg_pm2_5":22.52},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":10,"avg_pm2_5":22.1},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":11,"avg_pm2_5":21.61},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":12,"avg_pm2_5":21.88},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":13,"avg_pm2_5":21.6},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":14,"avg_pm2_5":20.72},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":15,"avg_pm2_5":19.57},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":16,"avg_pm2_5":18.54},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":17,"avg_pm2_5":17.19},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":18,"avg_pm2_5":16.5},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":19,"avg_pm2_5":16.68},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":20,"avg_pm2_5":17.49},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":21,"avg_pm2_5":17.13},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":22,"avg_pm2_5":16.87},{"city_name":"Giza","aqi_grid":"cairo_giza","hour_of_day_local":23,"avg_pm2_5":17.11},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":0,"avg_pm2_5":74.83},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":1,"avg_pm2_5":76.25},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":2,"avg_pm2_5":74.95},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":3,"avg_pm2_5":75.38},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":4,"avg_pm2_5":72.68},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":5,"avg_pm2_5":68.94},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":6,"avg_pm2_5":65.47},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":7,"avg_pm2_5":62.35},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":8,"avg_pm2_5":58.12},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":9,"avg_pm2_5":52.3},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":10,"avg_pm2_5":41.86},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":11,"avg_pm2_5":33.9},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":12,"avg_pm2_5":30.14},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":13,"avg_pm2_5":28.9},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":14,"avg_pm2_5":29.15},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":15,"avg_pm2_5":28.38},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":16,"avg_pm2_5":31.02},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":17,"avg_pm2_5":34.64},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":18,"avg_pm2_5":39.06},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":19,"avg_pm2_5":42.96},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":20,"avg_pm2_5":46.78},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":21,"avg_pm2_5":53.56},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":22,"avg_pm2_5":61.92},{"city_name":"Luxor","aqi_grid":"luxor","hour_of_day_local":23,"avg_pm2_5":69.75},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":0,"avg_pm2_5":14.61},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":1,"avg_pm2_5":15.14},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":2,"avg_pm2_5":15.57},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":3,"avg_pm2_5":16.06},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":4,"avg_pm2_5":16.97},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":5,"avg_pm2_5":18.07},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":6,"avg_pm2_5":18.82},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":7,"avg_pm2_5":18.18},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":8,"avg_pm2_5":16.36},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":9,"avg_pm2_5":14.54},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":10,"avg_pm2_5":14.08},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":11,"avg_pm2_5":13.65},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":12,"avg_pm2_5":13.25},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":13,"avg_pm2_5":12.86},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":14,"avg_pm2_5":12.37},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":15,"avg_pm2_5":11.66},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":16,"avg_pm2_5":11.52},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":17,"avg_pm2_5":11.42},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":18,"avg_pm2_5":11.44},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":19,"avg_pm2_5":11.42},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":20,"avg_pm2_5":12.12},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":21,"avg_pm2_5":12.79},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":22,"avg_pm2_5":13.33},{"city_name":"Mansoura","aqi_grid":"mansoura","hour_of_day_local":23,"avg_pm2_5":13.91},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":0,"avg_pm2_5":12.74},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":1,"avg_pm2_5":12.95},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":2,"avg_pm2_5":13.23},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":3,"avg_pm2_5":13.73},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":4,"avg_pm2_5":14.55},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":5,"avg_pm2_5":15.23},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":6,"avg_pm2_5":15.86},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":7,"avg_pm2_5":16.16},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":8,"avg_pm2_5":15.69},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":9,"avg_pm2_5":15.08},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":10,"avg_pm2_5":15.35},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":11,"avg_pm2_5":15.89},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":12,"avg_pm2_5":16.46},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":13,"avg_pm2_5":16.61},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":14,"avg_pm2_5":15.56},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":15,"avg_pm2_5":14.45},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":16,"avg_pm2_5":13.6},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":17,"avg_pm2_5":13.19},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":18,"avg_pm2_5":12.99},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":19,"avg_pm2_5":12.75},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":20,"avg_pm2_5":12.65},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":21,"avg_pm2_5":12.59},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":22,"avg_pm2_5":12.55},{"city_name":"Port Said","aqi_grid":"port_said","hour_of_day_local":23,"avg_pm2_5":12.62},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":0,"avg_pm2_5":13.89},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":1,"avg_pm2_5":13.61},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":2,"avg_pm2_5":13.3},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":3,"avg_pm2_5":12.9},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":4,"avg_pm2_5":12.61},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":5,"avg_pm2_5":12.36},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":6,"avg_pm2_5":12.37},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":7,"avg_pm2_5":12.58},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":8,"avg_pm2_5":13.75},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":9,"avg_pm2_5":16.36},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":10,"avg_pm2_5":17.2},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":11,"avg_pm2_5":18.03},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":12,"avg_pm2_5":18.35},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":13,"avg_pm2_5":18.03},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":14,"avg_pm2_5":17.19},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":15,"avg_pm2_5":18.98},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":16,"avg_pm2_5":18.05},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":17,"avg_pm2_5":17.33},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":18,"avg_pm2_5":16.7},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":19,"avg_pm2_5":16.22},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":20,"avg_pm2_5":15.95},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":21,"avg_pm2_5":15.58},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":22,"avg_pm2_5":14.9},{"city_name":"Suez","aqi_grid":"suez","hour_of_day_local":23,"avg_pm2_5":14.24}],"health":{"fact_rows":8064,"cities":8,"earliest_observation":"2026-07-30T00:00:00","latest_observation":"2026-09-09T23:00:00","last_ingest_at":"2026-09-09T11:27:03","built_at":"2026-09-09T11:29:29.038137"},"checks":[{"name":"fact table is not empty","passed":true,"value":0,"severity":"error","note":"An empty warehouse means extract or transform silently did nothing."},{"name":"no null keys","passed":true,"value":0,"severity":"error","note":"Primary key columns must never be null."},{"name":"grain is unique","passed":true,"value":0,"severity":"error","note":"One row per city per hour. Duplicates would double-count every average."},{"name":"referential integrity","passed":true,"value":0,"severity":"error","note":"Every fact row must point at a real city."},{"name":"pm2_5 within plausible range","passed":true,"value":0,"severity":"error","note":"Negative or absurd concentrations mean an upstream change."},{"name":"temperature within plausible range","passed":true,"value":0,"severity":"error","note":"Egypt is hot, but not that hot."},{"name":"latest readings are observations, not forecasts","passed":true,"value":0,"severity":"error","note":"The dashboard presents these as current readings, so a forecast hour appearing here is published as if it had been measured."},{"name":"daily averages exclude forecast hours","passed":true,"value":0,"severity":"error","note":"A daily mean built partly from predictions is not a daily mean."},{"name":"data is fresh","passed":true,"value":0,"severity":"error","note":"If the newest ingest is over 36h old, the schedule has stopped running."},{"name":"all cities reporting","passed":true,"value":0,"severity":"warn","note":"A city dropping out is worth knowing about but not worth failing on."},{"name":"no undeclared duplicate grid cells","passed":true,"value":0,"severity":"warn","note":"Two cities returning identical readings for every hour are one measurement. Give them a shared aqi_grid in config so averages stop counting it twice."},{"name":"pm2_5 mostly populated","passed":true,"value":0,"severity":"warn","note":"More than 20% nulls in the headline metric suggests a source problem."}]}