Bottom Line: Here’s how to batch import tasks into Reminders.app on your Mac.

I don’t really use Reminders.app as a tasklist, but I do use it for other things. Its integration with iOS apps like Drafts and OmniFocus make it actually fairly useful. For example, I use it to get Siri to add tasks to OmniFocus.

Because Reminders.app uses an iCalendar format for syncing, a commenter recently asked me if there is a way to use my icsConverter with Reminders. An interesting question!

Right now, there isn’t a way to use it directly. However, with a few (okay, several) extra steps, it seems like it wouldn’t be too difficult to batch convert a large spreadsheet of tasks and import into Reminders.app.

Before I get started, I’ll say that AppleScript may be an easier way to get this done, and there are almost certainly ways to abbreviate the process for users familiar with tools like sed, perl, etc. The process as I’ve outlined below is quite a bit of manual work, and it could be simplified and automated considerably. However, it’s a task that I will probably never need to do, and most folks will need to do only on rare occasion. The post below will be most useful to folks that need to import hundreds (or more) of tasks as a time. If you only need to import a dozen or so tasks, or if you need to do so any more frequently than once a month, you should probably look for a better way.

If you’re still with me, here goes:

The first step would be to get the spreadsheet into an acceptable format. Here is my new template. No, you can’t edit mine, you’ll have to File -> Make a copy, or File -> Download as and open in your spreadsheet editor of choice.

As with converting a spreadsheet to a calendar, preparing the spreadsheet correctly is the most important part. Triple check that of your headers are exactly right, and triple check that your dates and times are formatted correctly. Do not delete any of the columns from the template, even if the values are optional. For importing reminders, here are the fields:

  • Subject: Required. The task name.
  • Start Date and Start Time: Required, but don’t matter as far as I know. I left these in in case start dates are supported in a future version.
  • Description: Optional. A note to go along with the task.
  • Location: Optional. Does not work (yet) and will be deleted from the file. Leave blank or fill with junk.
  • Private: Optional. Just leave as TRUE.

For tasks with “reminder times” (the closest equivalent of a due date):

  • Set All Day Event to FALSE
  • End Date and End Time are required and will be the reminder time.

For tasks without “reminder times”:

  • Set All Day Event to TRUE
  • Leave End Date and End Time blank

When you’re done editing, download as or export to .csv and run it through icsConverterWebapp. If you’re confused or have problems, please read through my icsConverter instructional post before contacting me for help. If you’ve been through this post a time or two and still can’t figure it out, I’m happy to help you as time permits.

Next, after you’ve downloaded the converted .ics file, you’ll need to open it up in a text editor that supports regex find and replace. I highly recommend TextWrangler, and my examples will be regexes in TextWrangler format.

Once you have converted.ics open in TextWrangler, open the Search -> Find box from the menu. Run the following search and replace commands with the grep option checked.

  • Find: (?<=^BEGIN:|^END:)VEVENT$ Replace: VTODO
  • Find: ^DTSTART;VALUE=DATE(-TIME)?:([0-9T]+)$ Replace: CREATED:\2
  • Find: ^DTEND;VALUE=DATE:([0-9T]+)$\r Replace: Leave blank (this will delete the line entirely)
  • Find: ^(LOCATION|TRNSP):.*?$\r Replace: Leave blank
  • Find: ^DTEND;VALUE=DATE-TIME:([0-9T]+)$ Replace: DTSTART;TZID=America/Denver:\1\rDUE;TZID=America/Denver:\1
  • Yes, you can appropriately change the TZID if you know how, otherwise we’ll do it in the next step.

Here’s a screenshot of what the first regex should look like in TextWrangler:

Next, take an existing list from Reminders.app with at least one task and File -> Export. Open this .ics file up in the text editor as well. Find the section 4 or so rows down starting with BEGIN:VTIMEZONE and ending at line 20 or so with END:VTIMEZONE. Copy this section into your converted.ics file right below PRODID:n8henrie.com.

In that copied section, find the line beginning with TZID:, and copy everything after that into the following, final regex:

  • Find: (?<=^DTSTART;TZID=)(.*?)(:[0-9T]+)$ Replace: COPIED_TZID\2. That’s your copied value with \2 at the end, e.g. America/Denver\2.

With all of that out of the way, you should now be able to save the .ics file, right click and Open with Reminders.app. As with importing a new .ics file to your calendar, I recommend first importing into a temporary, throw-away Reminders list to make sure everything looks right, because otherwise you’ll probably have to manually sort out and delete tasks that didn’t work right.

There are probably some more advanced applications that some readers may be interested in. If so, I exported an example task list from Reminders.app with tasks featuring due date reminders, priorities, location-based reminders, titles, notes, etc., and uploaded it as a gist. You may see potential for something interesting based on its format.

Well, that’s it. Should you have questions or suggestions for improvement, leave them in the comments section below. Honestly, unless this post gets a lot of attention, I doubt that I’ll invest much time in improving this process, since it is kind of a pain.