timeMin filter issue with Google Calendar API and recurring events

I’m encountering an odd problem with the Google Calendar API while trying to filter events using the timeMin parameter. The documentation specifies that timeMin should be the exclusive lower limit for an event’s end time.

For instance, when I send the following request:

GET /calendar/v3/calendars/primary/events?timeMin=2025-01-10T17%3A25%3A49.000Z

I receive events, including recurring series, from as early as 2021, which seems incorrect. One of the series I found actually concluded in 2023 as per its recurrence rule:

RRULE:FREQ=WEEKLY;WKST=SU;UNTIL=20230703T215959Z;INTERVAL=1;BYDAY=TU

This makes me wonder if it’s a bug with the API or if I’m missing something regarding recurring events. Has anyone else faced this issue with the timeMin filter? I expected events to only appear if they end after the date I specified.

had the same problem recently! tbh, the API docs can be kinda confusing about timeMin. Just add singleEvents=true and orderBy=startTime to your request. it filters out those parent recurring events nicely! google needs to fix this confusion tho.

Yeah, this messy API behavior drives me crazy too. The other answer’s right about singleEvents=true, but here’s what I actually do.

I stopped wrestling with Google’s weird recurring event logic and built an automation instead. It pulls events properly, expands recurring ones, applies the filters I want, and cleans up the data format.

I can set different filtering rules for different cases - events ending after a date, starting before one, excluding certain types. The automation handles all the API quirks so I don’t have to remember them.

I added caching logic too - only fetches what changed since the last run. Way more efficient than hitting the API constantly.

For repetitive stuff like this, automation’s always the answer. I use Latenode for these API workflows since it handles Google Calendar integration well and lets me add custom filtering without writing tons of code.

That’s actually normal behavior for the Google Calendar API with recurring events. When any instance from a recurring series falls in your time range, the API returns the parent recurring event - even if that series started years ago. You’re seeing the original recurring event definition, not individual instances. To get just the actual event instances after your timeMin date, add singleEvents=true to your request. This makes the API expand recurring events into individual instances and filter those instead of the parent series. Without it, the API treats the whole recurring series as one event and includes it if any part intersects your time window. That’s why you’re getting 2021 events despite setting timeMin to 2025.