
This week, I thought it would be useful to add a recurring event to my calendar to remind me of when pay day is.
My company pays its employees on the last working day of each month. If the final day of the month is a Saturday or Sunday then they bump it back to the Friday.
But the last working day of the month isn’t an option in Google Calendar’s recurring appointment options.

How to do it
Thanks to this post by Brian Jackson, How to Set up Repeating Event in Google Calendar on Last Day of the Month, I managed to achieve this by creating a custom iCalendar (.ics) file and importing it into Google Calendar.
Create an iCalendar file
In a plain text editor (I use Sublime Text, but Notepad will work) copy and edit the following:
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=SU, MO,TU,WE,TH,FR, SA
SUMMARY:Pay day
DESCRIPTION:Woohoo! It's pay day!
DTSTART;VALUE=DATE:20220326
SEQUENCE:0
END:VEVENT
END:VCALENDAR
You will want to edit a few of the lines. (Refer to the full iCalendar specification RFC5545 for more details.)
1. RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=SU,MO,TU,WE,TH,FR,SA
This is the recurrence rule (rrule) that sets the repeating pattern for your event. As it is currently, this will repeat your event on the last day of each month. If you don’t work Saturdays and Sundays then simply remove the SU and SA from the BYDAY parameter: BYDAY=MO.TU,WE,TH,F.
2. SUMMARY:Pay day
This is the text that will appear as the title of your calendar entry.
3. DESCRIPTION:Woohoo! It's pay day!
This is the text that appears once you open the calendar entry.
4. DTSTART;VALUE=DATE:20220326
This is date of your first event. The format is YYYYMMDD. So, today, Saturday 26 March 2022, would be: DD = 26, MM = 03, YYYY = 2022, or 20220326.
Save and import
Once you’re happy, save your file with a .ics extension, e.g. payday.ics.
Then, import it into your Google Calendar:
- Click on the settings cog icon and select Settings.
- Select Import & export from the left-hand navigation.
- Select your new
payday.icsfile, and select a calendar to add it to from the dropdown list.

4. Click the Import button and all being well, you will see a confirmation that 1 of 1 entries has been imported successfully.
Note: if you need to edit this recurring event, you cannot edit it in Google Calendar. You will need to delete the event, edit it in another iCalendar file and re-import it.
Update
Wednesday 4 September 2024
Having read this post, David contacted me from New Zealand and asked me for help with the following requirements:
- Generates paydays on the 15th and 30th of each month (or the 28th/29th for February).
- Moves paydays to the preceding Friday if they fall on a weekend.
- Creates timesheet deadlines two days before each payday, and also moves them to the preceding Friday if they fall on a weekend.
I can’t see a way to do this using iCalendar logic alone, at least not that will work in all calendar applications. So, I have generated a PHP script that will do this. You can find the code and an explanation on how it works on my GitHub account:
https://github.com/garethjmsaunders/php-generate-paydays-ical
Hi Gareth,
tried your suggestion but rrule did not work at all.
cheers
Hi Norbert, what recurring appointment were you trying to create? Maybe I could help.
Using:
BYDAY=MO,TU,WE,TH,FR
If the last workday ends in Saturday or Sunday, the event doesn’t appears in that month
Hiya thank you for making this guide but I got the error “Imported 0 out of 0 events. Unable to process your iCal/CSV file.” when importing :/ the file I created reads:
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO.TU,WE,TH,FR.
SUMMARY:Email payslip
DESCRIPTION:Send myself a copy of this month’s payslip
DTSTART;VALUE=DATE:20250331
SEQUENCE:0
END:VEVENT
END:VCALENDAR
Do you have any idea if I wrote something wrong or if Google changed something that makes this method not work? Thank you very much!