Send completed tasks on OmniFocus with AppleScript


I have been using OmniFocus as my todo list tool for a while.
I pretty like the application except for API absence.
Unlike modern task management tools like Todoist, or Trello, OmniFocus does not offer APIs to integrate with any third-party tools.

What I want to have with APIs is a weekly report function that lets me know what kind of tasks I have completed within the week.
It might be possible to be done with the GTD review process, but I wanted to record them somewhere to look back in the future.

Automation with AppleScript

To achieve that, I noticed that there are blogs about OmniFocus automation using AppleScript. “AppleScript” Yes, I know the name, but I have never used it.

As you can imagine, I struggled to understand the syntax of AppleScript for the first few hours. However, reading this excellent article, which compares Python and AppleScript, helped a lot to be familiar with the basic syntax.

Here is the script I wrote. I referred a lot to this repo, though.

The script retrieves completed tasks from OmniFocus at first and sends it to my email account.

Run the script periodically

To review the completed tasks on Sunday, I register it into launchd on my personal computer to run the script periodically. Here is a memo of what I did.

  1. Creating a plist file, which specifies StartCalendarInterval key, under ~/Library/LaunchAgents,
  2. Load it with launchctl load PLIST_FILE.

As a result, I successfully got an email that includes completed tasks on Sunday, like the below, Yay!

A image of email contains completed tasks

Wrap up

It was my first time to automate workflow with AppleScript. Although I am still not fun with esoteric AppleScript, I am happy that I could understand basic syntax and remove tedious workflow. Probably, I will automate some other recursive tasks later. If you are interested in writing AppleScript, what integrates with OmniFocus, The following links worth reading.