Store your projects and tasks as SQLite

What happens to your OmniFocus data once a project is complete? Do you just archive and carry on with your life? Have you ever wanted to archive your data in an accessible form, separate from your current OmniFocus database?

of-store is an objective-c program that will export all your completed tasks and projects to SQLite. Each task and project is stored, along with:

Query your data at leisure using powerful SQL statements, filtering, sorting or counting by date or project category. See what projects get completed the fastest and which lag, when you’re most productive, and when you need to up your game.


of-store will run with OmniFocus 1 and OmniFocus 2 pro. Sorry, OmniFocus 2 standard users: the lack of extensive Scripting Bridge support in OmniFocus 2 Standard means that this program does not support of-store. of-store can only grab data that you haven’t yet archived.


Grab of-store as a compiled binary or install from source.


Open up terminal and cd to the appropriate folder. To test out the binary (and make sure everything is working right), enter:

./of-store --debug --out=foo.db

You should get something like the following:

Connecting to bundle: com.omnigroup.OmniFocus2
Setting database path to foo.db
  Project saved: Project1
  Task saved: Task1
  Task saved: Task2
40 projects and 236 tasks recorded.

Your data will now be written to the file foo.db. If you want the program to run silently, just leave out the --debug flag.

Excluding folders

Sometimes you don’t want to record a certain set of tasks. You can exclude projects in a given folder with the --exclude flag:

# Excludes all projects whose top-level folder is "Folder"
./of-store --exclude=Folder --out=foo.db

# Excludes all projects whose top-level folder is either "Foo" or "Bar"
./of-store --exclude="Foo,Bar" --out=foo.db

Running periodically

I recommend setting up a launch daemon to run this script every day or what-have-you. I keep my launch daemons in check with Lingon. If you specify an output file that already exists to of-store, it will attempt to open it as SQLite and append to it. In this way you can slowly build up a giant database of your tasks.