This calendar auto-fetches your Toronto Programs sheet every time it loads, and again every 30 minutes while it stays open — the Apps Script keeps the sheet itself fresh every 6 hours, so between the two, this stays live with no manual step.
Show me how the Sheet gets set up (one-time)
1. Google Sheet with a tab named Programs.
2. Row 1 headers, in any order: Title, Level, Cost, Price, Mode, Date, EndDate, Time, Venue, Link
3. An Apps Script (ask Claude for it) keeps this tab filled in automatically on a schedule.
4. Share → General access → Anyone with the link → Viewer.
5. Use the sheet's gviz/tq?tqx=out:csv&gid=... export link as the source below.
Connected Sheet's CSV link:
Couldn't load that link — check the sheet is shared as "Anyone with the link → Viewer" and that the URL is the gviz CSV export link, not the normal edit link.
Works regardless of any browser sandbox restrictions: open your Sheet's published CSV link (or use Claude in Chrome to pull the site directly), select all, and paste the raw text below — CSV or JSON both work, auto-detected.
Show extraction prompt (for Claude in Chrome, or to hand to anyone helping)
Go to https://online.innerengineering.com/en/search — set the location filter to "Toronto, Ontario, Canada" and clear other filters so every program shows. Extract every program listing (aim for the next 6 months of listings, or as many as the page shows) into a JSON array. For each program use exactly this shape:
[{
"title": "string",
"level": "string (e.g. Inner Engineering, Inner Engineering Online, Hatha Yoga, Bhava Spandana, Samyama, Miracle of Mind / Free Session, Shoonya, Other)",
"cost": "free" or "paid",
"price": "string, e.g. $85 CAD, or empty string if free",
"mode": "online" or "in-person" or "hybrid",
"date": "YYYY-MM-DD (start date)",
"endDate": "YYYY-MM-DD (same as date if single day)",
"time": "string, e.g. 7:00 PM - 9:00 PM EST",
"venue": "string",
"link": "direct registration URL"
}]
Return ONLY the JSON array. No commentary, no markdown fences.
Paste CSV or JSON below:
Couldn't read that as CSV or JSON — check it includes the header row (Title, Level, Cost...) if it's CSV, or valid brackets if it's JSON.
To let volunteers attach a coordinator name and notes to programs directly from the calendar, connect the write-back Web App (deployed from the same Apps Script that syncs this sheet — ask Claude for the setup section at the top of that file if you don't have it yet).
Web App URL (ends in /exec):
Shared passcode (must match SHARED_PASSCODE in the script):