TIL: Creating Google Calendar events with custom links

Last year, when my kid's school sent out the annual calendar, my wife painstakingly added each holiday, half day, spring break, winter break, etc. to our shared Google Calendar. She said it took 30 minutes on her phone, and one mis-tap could lead to a scheduling disaster. But how can we make it faster and more accurate?

Use LLMs with undocumented Google features of course!

The school sends out a PDF that looks like this:

I honestly don't mind the format, but I want them all in Google Calendar like this:

The easiest way I can think of to do that is to make my wife do it to have an LLM create the events for me. Asking Gemini "add these to my calendar" didn't even try to work. I'm not even mad; can you imagine the cleanup if it added 20+ incorrect events?

All is not lost

There's a way to make custom Google Calendar events with some prefilled fields. Unfortunately, aside from that support link, Google doesn't have any other documentation about what's valid here.

Another guy figured out some extra query parameters, and it was almost everything I needed. I was poking around on the Calendar page's source code, trying to puzzle out any extra info, when I decided to just ask Chrome's DevTools AI assistance. Shockingly, it helped me discover the rest of the available query parameters:

add: This parameter likely allows you to pre-fill the "Guests" field. It might be possible to include multiple guests by repeating the add parameter (e.g., &add=guest1@example.com&add=guest2@example.com). ctz: This parameter likely controls the event's timezone. You would need to use the appropriate timezone identifier (e.g., America/New_York or Europe/London). Example: &ctz=America/Los_Angeles src: This parameter probably designates the source calendar for the event. It might take the calendar's email address or ID as a value. Example: &src=mycalendar@group.calendar.google.com sf: I'm not sure what sf means. It seems related to the form, based on the context of this page. trp: This parameter seems related to set the transparency mode of the event. For example, we can use &trp=busy or &trp=transparent to set the event to be busy or transparent. allday: This parameter could be used to set if the event is an all-day event. This is a boolean type of value, so it could be true or false.

I still needed to poke around Chrome's DevTools panel to find the exact email address associated with my shared, non-default Google Calendar called "Kiddos" in the screenshots here. It was a gnarly email like [email protected]. That goes in the src query parameter.

Armed with this information, I was able to drop everything in Claude...

After this I pasted all the junk from above

...and get back a beautifully formatted list of links!

From there, I was only a couple clicks away (per event...) to add everything to the calendar.

With that, I saved our family a grand total of -20 minutes! Yup, negative twenty. Hopefully I remember to reference this post next year, or maybe I'll just outsource it all to my wife again?