The following ical formatted data will add an event to your Google Calendar that can be customized to your needs. The one caveat is that this cannot factor in holidays.
The logic is the last BYMONTHDAY will be selected if it exists in the calendar month and matches any BYDAY option. If not, it will go to the 2nd to last BYMONTHDAY to find a match, and so on until a match is found. For the 15th of the month pay date, the only consideration is the two weekend days. For the last weekday of the month we have to add in some other considerations for 28, 29, and 30 day months, and for the weekend that can occur in a February where the 28th falls on a Sunday putting the last weekday on the 26th.
To modify this to your needs, just update the DATE:20191031 to your desired start date, the SUMMARY line to your event name, and add a DESCRIPTION if you need to, then save this as a text file with a .ical extension. Make sure your editor didn’t add .txt onto the end, especially if it hides extensions.
Next in Google Calendar click the Gear icon, then Settings, then click on Import & Export and there you can click Add File from Your Computer and then Import.
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=13,14,15
RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-1;BYDAY=MO,TU,WE,TH,FR;BYMONTHDAY=26,27,28,29,30,31
SUMMARY:Payday!
DTSTART;VALUE=DATE:20191031
SEQUENCE:0
DESCRIPTION:
END:VEVENT
END:VCALENDAR
This was really helpful, I’m starting a company that is semi-monthly rather than the biweekly I’m used to. The only issue I noticed is every line following the first of the ical snippet starts with a space, and import failed until I ensured all lines started at position 0.
Thanks for the tip! I had to delete the leading spaces as well for it to work.