Export Google/iCloud/Outlook calendars or upload an .ics/.csv. I’ll provide API or script steps to filter events into CSV/JSON/ICS. Confirm which service, output format, and parental permission for the 13‑year‑old.
I can help, but I don’t have direct access to your calendar. I can either give step‑by‑step export instructions for your calendar service (Google Calendar, Apple/iCloud, Outlook/Microsoft 365, etc.), or if you can first export and upload an .ics/.csv file I can filter and convert it for you for the date range 2020‑01‑09 → 2025‑04‑09.
Before I give instructions I need two clarifications:
Also: you included “Student Age: 13-year-old.” If the calendar belongs to a minor, please confirm you have parental/guardian permission to export and share the data.
Below are common options and quick instructions so you can get a full export and/or I can help process it.
A. Quick exports (no date range built into most UIs)
Because most built-in exports are whole-calendar, to get only events in a specific date range you can either:
B. Recommended: Google Calendar API (example) If you use Google Calendar, the API can return all event instances in a date range (including expanded recurring instances). Steps:
Example Python (Google Calendar API) — replace date range and follow OAuth flow:
from google.oauth2 import credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
import csv
import datetime
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
service = build('calendar', 'v3', credentials=creds)
time_min = '2020-01-09T00:00:00Z'
time_max = '2025-04-09T23:59:59Z'
events = []
page_token = None
while True:
resp = service.events().list(
calendarId='primary',
timeMin=time_min,
timeMax=time_max,
singleEvents=True,
orderBy='startTime',
pageToken=page_token
).execute()
events.extend(resp.get('items', []))
page_token = resp.get('nextPageToken')
if not page_token:
break
with open('calendar_export.csv','w',newline='',encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['id','start','end','summary','description','location','attendees'])
for e in events:
start = e.get('start',{}).get('dateTime') or e.get('start',{}).get('date')
end = e.get('end',{}).get('dateTime') or e.get('end',{}).get('date')
attendees = ';'.join([a.get('email','') for a in e.get('attendees',[])]) if e.get('attendees') else ''
writer.writerow([e.get('id'), start, end, e.get('summary',''), e.get('description',''), e.get('location',''), attendees])
This outputs a CSV with expanded recurring instances and full date-range filtering.
C. If you only have an .ics file: filter by date range with a script
Example Python using icalendar (simple non-recurring events):
pip install icalendar pytz
from icalendar import Calendar
from datetime import datetime
import pytz
import csv
start_range = datetime(2020,1,9,tzinfo=pytz.UTC)
end_range = datetime(2025,4,9,23,59,59,tzinfo=pytz.UTC)
with open('calendar.ics','rb') as f:
cal = Calendar.from_ical(f.read())
rows = []
for comp in cal.walk():
if comp.name == "VEVENT":
dtstart = comp.get('dtstart').dt
dtend = comp.get('dtend').dt if comp.get('dtend') else None
# ensure timezone-aware datetimes or normalize to UTC as needed
if hasattr(dtstart, 'tzinfo') and dtstart.tzinfo is None:
dtstart = dtstart.replace(tzinfo=pytz.UTC)
if start_range <= dtstart <= end_range:
rows.append({
'summary': str(comp.get('summary')),
'start': dtstart.isoformat(),
'end': dtend.isoformat() if dtend else '',
'description': str(comp.get('description') or ''),
'location': str(comp.get('location') or '')
})
with open('filtered_events.csv','w',newline='',encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['summary','start','end','description','location'])
writer.writeheader()
writer.writerows(rows)
Note: this simple script does not expand recurring rules (RRULE). For recurrence expansion use a library that supports RRULE expansion (dateutil.rrule or use the Google API to get instances).
D. Outlook / Microsoft Graph
What I can do for you now
Reminder about the student age: confirm you have permission to export this calendar if it belongs to a 13-year-old.
Which option do you want to proceed with?