IFTTT Power Tools

When I first started using IFTTT I wasn’t sure what kinds of things it would actually be useful for. The examples were kind of neat, but not overly interesting and for a long time I didn’t do very much with the platform. Recently that’s changed, and I’m now using IFTTT quite heavily for home automation and quantified self tracking. Here’s some examples of recipes I have set up:

  • Add a datapoint to my “blog” Beeminder goal when I post new content.
  • Store weight measurements from my FitBit Aria scale in Google Drive.
  • Log when I enter or exit my home, my workplace, or my hackrrspace to my calendar.
  • Save weekly and daily summaries of my RescueTime data to my email and Google Drive.
  • Add articles I like in Instapaper to my Buffer queue to be tweeted later.

All of these are pretty simple tasks, but as I’ve gotten more and more attuned to what I could automate I’ve started to bump up against IFTTT’s limitations. I want more powerful capabilities so I can tackle harder problems, but the tools just aren’t there yet.

So, naturally, I started brainstorming a bit. IFTTT has a Maker channel which can send to and receive from arbitrary web URIs. Having this endpoint exposed means that a programmer like myself could build an extension system on top of IFTTT that would provide more advanced features, working with the IFTTT ecosystem. Here’s some things I think are possible:

  • Timers which fire when a certain amount of time has passed after an event, or if they are not reset by an event in time. Useful for Beeminder integrations.
  • Splitters and joiners, that provide 1:N and N:1 transformations for events. Joiners could be further extended into OR and AND gates, or N of M voting systems.
  • State machines, where events trigger state transitions and may trigger other events.
  • Counters.
  • Latches, where only the first event triggers an output. This could also be modeled as a state machine fairly easily.

With these, you could build very complex and interesting systems that handle tougher problems than the literal one-to-one “if this, then that” paradigm can deal with. If someone else builds this, then I would certainly use it; otherwise, I may get around to it at some point myself.