Archiving content from Things

One of the great features of OmniFocus is its ability to work with secondary databases as plain documents, including the “archive” database. This is really useful when one wants to clear out old cruft or seriously reorganize things, as you can push some or all content out of the main database, while still keeping it in the full native form, including all rich structure and metadata, and having the ability to reference it or copy it back to the main database at any time.

For actual regular use, I find Things a better fit to my taste. But Things seems to completely lack any round-trip export of its own native format. Does anyone have a workflow for archiving content from Things in as close to native form as possible?

Copy/paste of multiple items from Things reduces them to a minimal TaskPaper-like form, which is useful in its own right, but it loses much of the structure and metadata. If you export multiple items at once this way it excludes even notes, let alone tags, creation dates, etc. You can’t export whole Areas this way, so hierarchical structure beyond the level of a single project is largely thrown off.

I believe the only way to retain the original content is to create an all new Things Cloud account, leaving the old one intact. I’ve done this once, but it has obvious drawbacks:

  • It is not possible to actually copy and paste content from one to another, since they can’t both be synced at the same time on the same machine.
  • I don’t want a proliferation of old accounts, or to have to create new email addresses just for the purpose of creating new accounts.

I honestly can’t believe Things doesn’t at least have a backup/restore option for its database. Even if I do surgery on the local sqlite database itself, I don’t think I can safely assume it will correctly sync after that point.

Any thoughts are welcome.

You can use Zapier to link OmniFocus to numerous to-do apps (Todoist, Any.Do, Microsoft Tasks, ClickUp, Nozbe and others) but not Things. And even so, the integrations allowed with OF are fairly limited.

(Similarly, Things has some integrations via Zapier.)

IFTTT is Zapier’s main competition but it too cannot link those two apps.

Thanks, but to be clear I wasn’t asking about migrating from OmniFocus, I was just using it as a point of comparison for the workflow I want to reproduce. I am interested in ways to effectively (manually) archive content just from Things and potentially restore parts back into Things later.

Ah, I see - thought you werelooking for Things<->OF integration.

Ultimately I suppose it depends on the specific content you’re referring to. I’d look at those Zapier integrations for Things to see what can be moved in/out - Zapier has 84 different app integrations offering different output and input opportunities.

You didn’t mention this page, so perhaps some of these supported methods would help: export (print) to PDF; AppleScript your own; copy the database:

Googling “AppleScript to export from things” returns some ghits that might be useful or starting points. Although most of what’s returned is old or 404.

Thanks for the link, @anon41602260. Indeed, I am aware of the official line from Cultured Code, and I have Googled a bit for . I’ve also written my own AppleScripts to work with the data in the past. I was most curious for advice, workflows, and perspective people had found useful in their own usage, rather than random scripts that half-do the job.

For those coming after me, what I wound up finding useful was:

  1. Exporting every view as PDF for quick and easy human-readable reference if ever needed. (It is important to be sure you’ve manually expanded all the lists in each view, as the PDFs directly reflect the current view, including hiding the truncated “n more items” at the end of longer lists.)
  2. Archiving a copy of the raw sqlite database for safe-keeping.
  3. Replicating my database to a new Things Cloud account.
  4. Keeping much of the archived data still within my main database for the time being by reorganizing and moving most items under a new “ARCHIVE” Area, where they could be pushed aside but not immediately discarded, and still easily reviewed. To keep these archived items distinct in searches, etc. I wrote a trivial AppleScript to let me quickly prefix each project with a string marking it as an archive and recording which area it originally came from: [A] [#Area Name]. I am gradually reviewing the items here and migrating key things back into the active system, and otherwise pushing more and more to Someday status so they don’t appear in most views, and then will delete them.

(3) was a key I hadn’t fully thought of. I mentioned the idea of just creating new Things Cloud accounts, but didn’t realize that it’s not only possible to leave behind existing data on an existing account, it’s actually effectively possible to quickly duplicate accounts (without requiring any sqlite database dance) thanks to how Things’ sync setup works:

  • With the database you want to replicate synced, disable Things Cloud sync.
  • Re-enable Things Cloud sync, but choose to set up a new account.
  • Let it sync => the new account now has a full copy of your current database
  • Disable again.
  • Re-enable with your original account. (Be careful not to duplicate everything. I tend to say ‘replace mac from cloud,’ though if you definitely haven’t made any other changes in the meanwhile ‘replace cloud from mac’ should also be fine.)

This is obvious in retrospect, but it meant that I didn’t have to make an all new primary account linked to a random new email address as I first imagined, but rather I could push the archive to a new account on said random email address, and leave my main sync account where it is. (A +foo-style suffix on a Gmail address would work—say, +things-backup-2020.05—though I just used the catch-all forwarding on my personal domain to define a similar entirely new address there.)

With this method, it’s actually easy to arbitrarily fork your Things cloud database at any time. (Keeping a clear record of these different accounts, and potentially naming them descriptively as above, is obviously useful to keep everything from getting lost. I used 1Password, which is where I trust far-future me would look if I forget.)

I considered exploring doing surgery directly on the sqlite database, to merge or add items between databases, etc., but this always feels like a bad idea with the obvious risk of corruption or missed details.

I noted, however, that Things JSON schema for adding items via their URL scheme is fairly complete—it includes the vast majority of types and metadata supported by the app. (It can even, for example, set the creation and modification dates for an item.) There’s an obvious opportunity for them to better support the kind of round-trip archival I wanted by simply having an option like “Copy as JSON” for any selected item(s), but in the meanwhile I next intend to write some code to generate JSON for any chosen subtree in a Things sqlite database. A useful tool might:

  • Render the full database content as HTML.
  • Place a link next to each item which would fire the Things URL scheme to recreate that subtree as faithfully as possible using the corresponding JSON encoding.

Hopefully soon!

This is interesting. However the concept of creating two or more Things cloud sync accounts feels fragile. It’s the sort of thing a developer could break in a second – either intentionally (“hang on, why are we provisioning all these excess accounts”) or inadvertently. Probably not a great risk, since most users are not as clever with the loopholes as you might be, but a risk anyway.

I’m curious why an archive is needed? Personally, when something’s done it’s deleted. I don’t care to know much about task history beyond a the current billing period. So what’s the driver to have an archive?

1 Like

Good question: this is an “I want to throw out my system and start on a blank page” situation, but I want to still be able to reference and pull in a few things from the old database potentially as I review.

(Keeping completed tasks off to the side with this much effort is indeed not that interesting to me, either.)

1 Like