Todoist Done Tasks



‎Ranked as “the best to-do list right now” by The Verge, Todoist is used by 25 million people to organize, plan and collaborate on projects, both big and small. Use Todoist to:. Capture and organize tasks the moment they pop into your head. Remember deadlines with reminders and due dates. You can set dates in Todoist using the calendar/date selector, or by using natural language. Todoist will automatically recognize and add due dates as you type them into a task name. This feature is called Smart date recognition. You can turn this feature on.

I absolutely love Todoist. But one of the things that really bothers me is the “View All” view. I especially wish I could adjust the view to show everything segmented / separated by project.

Well if you’re willing to do a bit of technical stuff 🤓, I can show you how to accomplish this. You only have to set it up one time.

But first let me explain how it works.

If you want to separate your tasks by project manually, the only way to accomplish this is to create a Filter that specifically lists out each project separated by commas. Basically this is like connecting a bunch of filter queries together with commas.

So you’re writing a query that includes every project you want included ##Project 1, ##Project 2, etc.

Then you’ll get a nice view of all the tasks separated by project in the order you wrote your filter query.

So obviously this would suck to maintain manually since every time you add a new project, change it’s name, remove a project, etc., your filter would break and you would need to manually update it.

Well let me introduce you to the power of APIs. I jumped into Todoist’s API documentation and figured out how to automatically grab all my projects and update a filter with a query that will show me all my tasks from all my projects, separated by project.

Don’t worry, you don’t need to know how to code. I’m going to show you how to upload a special bit of code into Google Cloud and have it run and update automatically for you… for free!

Basically every hour (or whatever you want to set the interval to) something called a Google Cloud Function will run a piece of code that grabs all your projects and all their tasks and updates a custom “View All” filter in Todoist.

Filter ID

Ok the first thing you’re going to need is to pick a filter (or create a new one) that you want to be your special “View All” view. I made one called ⛏️ View All. I like to use emojis on everything I use frequently since the human brain can find and parse information visually much faster than reading text. But call yours whatever you want.

You’ll need to do this next part in a web browser (todoist.com/app). Once you have a filter you want to use you need to click on it. In the address bar you should notice the URL will say something like todoist.com/app/#filter%2F2290740. Copy the number that appears after #filter%2F and save it somewhere for later. This is your filter ID. In my case my filter ID is 2290740.

Todoist API Key

Now you need to get your Todoist API key. This is a special key that allows programs to make changes to your Todoist account via the Todoist API. Don’t share this with anyone.

To find yours go to todoist.com/prefs/integrations from a browser or you can get to it by clicking on:

  • The gear icon in the upper-right corner
  • Settings
  • Integrations

Scroll down and you’ll find your API key. It should look something like b0imfnc8mwsae3aaw6465jr50qtlx. Copy and save it somewhere. We’ll need it later.

Create a Google Cloud Function

Head over to console.cloud.google.com and make sure you’re logged in. If you don’t already have a Google Cloud account just follow my guide on how to create and setup a free Google Cloud Platform account.

Once you’re there click the menu and under the “Compute” section click on “Cloud Functions.” Then click “Create Function.”

Give your function a good descriptive name like todoist-filter-view-all.

Now under Trigger and Authentication choose Allow unauthenticated invocations. This means that anything or anyone with the URL for this trigger will be able to invoke it. This can be useful if you want to use a service like IFTTT or Zapier to trigger your Cloud Function. You can set it to Require Authentication if you don’t plan on using an external service to trigger it.

Now click “Save”

Click the “Variables, Networking and Advanced Settings” dropdown and set the “Memory allocated” dropdown to 128 MiB. This is optional but since this is a very simple cloud function you might as well lower it down to 128MiB to be more efficient.

Click “Next”!

Configure Your Cloud Function

Next is the fun part where all the action happens. We’re going to write the code that this Cloud Function will execute every time it is called. This code is what will update your Todoist filter with all that “view all” goodness and segment it by project. Yay! 🥳

Todoist Print Tasks

In the “Runtime” dropdown select Python 3.7. At the time of this writing the only Python options are 3.7 and 3.8 and 3.8 didn’t work for me. It’s possible you may have higher versions. If so, just use whatever is available to you and hopefully it will work for you! 🤞😬 If not hit me up on the Twitters and I’ll see what I can do.

Now change the value under “Entry point” to update.

Todoist Done Tasks

Add the Todoist Python Library

The good folks at Doist created a library that makes our job really easy. In order to add it click on requirements.txt and add a new line todoist-python.

Write the Codes

Ok now we just need to write the code that will make your shiny new cloud function do cool stuff. Click on main.py and erase everything in the code editor window to the right of it. We want to start with a clean slate.

Now copy and paste the following code in. But replace the key value with your own Todoist API key and replace the filter_id with the filter ID you saved earlier.

If you only want to show tasks that are due today you can change line 13 from query = '#' + name + ', ' to query = '#' + name + ' & today, '. Just be very careful to maintain the spacing and indentations. These are very important in Python.

Hit that deploy button and you’re off to the races.

Give it some time… like go grab a cup of tea… use the john… deploying takes a few minutes. Once it’s done it’s time to test that bad boy out! Click on the eclipses (3 dots) and click “Test function.”

Then hit “Test the Function” on the next page.

Now run over to Todist and see if it worked!

Make Sure the Filter Works

If your filter view is spitting out tasks that’s a great sign. If it looks like you’re missing some stuff that might be because you have so many projects that you’ve exceeded the 1,024 character limit for filter queries. Right click on your filter and choose “Edit Filter.”

Todoist Done Tasks Free

If your filter query is too long it will tell you here.

If this is happening to you, you’ll either need to delete some projects or read ahead and use my advanced script which can filter out certain projects and gives you more granular control.

It’s also possible you may get an error message like this:

If you see this it’s probably because you’re using a character in one of your project names that isn’t supported. For example, you can’t have a project name that includes a comma. If you have a project called Some, Stuff it’s not going to work. Change the offending project title and go test your Cloud Function again.

If your filter looks good then continue on to the next step.

Get Your Trigger URL

Go to your Cloud Function, click on the “Trigger” tab and copy the Trigger URL. We’re going to need it for the next step.

Your Cloud Function will run and update your Todoist filter any time you (or anyone or anything else) visits this URL! How cool is that?

We’re going to automate running this Cloud Function every hour (or whatever interval you choose) but it’s handy to save this URL in case you ever want to manually run an update on your “View All” filter. I added it as a comment to my “Inbox” project to make it easy to find.

Automate Posting to Your Trigger URL

As cool as it is to run your Cloud Function manually with your Trigger URL, it’s even cooler if we automate triggering it.

There are 3 ways to do this. You can use Zapier or IFTTT if you use those services. Just use the time trigger (you can have it run every hour) and the webhook action. Choose to Post to your webhook and don’t worry about the other settings.

The third way to do this is free. Use Google Cloud! Go hit the pancakes (menu), scroll all the way to the “Tools” section and hit “Cloud Scheduler.” You can click the “Pin” icon to make it easier to access later if you want.

Click “Create Job”

Give it a good name and description so you can figure out WTF this is in the future.

Enter the frequency you want. I run mine every hour but put whatever you want. The format is tricky so here are a few examples you can copy and paste in:

  • * * * * * run every minute.
  • */5 * * * * run every 5 minutes
  • */30 * * * * run every 30 minutes
  • 0 * * * * run every hour

Enter your country/timezone, choose HTTP as your target, paste your Cloud Function Trigger URL in “URL”, and choose POST for your “HTTP Method.” Leave the other settings blank. Click “Create” and you’re done!

Your hard work has paid off. Isn’t she beautiful?

The Advanced Script

I wanted a bit more granular control over my “view all” filter. So I made one that is even better.

This personally fit my life better. I did a couple of things…

Skip Child Projects

I don’t want child projects in my filter query. I’d rather see those tasks listed out under the parent project section. So if a project is inside of another project I don’t include it in the filter query. If this isn’t something you like then just get rid of these lines:

Skip Certain Projects

There are certain projects I want to completely skip. I have a project called “PROJECTS ON ICE” and I put projects that are on hold in there.

If this is something you want to do just add the projects to this line:

if name 'Misc' or name 'PROJECTS ON ICE': #projects I want to completely skip

Replace Misc with a project you want to not show. You can add more by continuing to add or name 'your project name'

e.g. if name 'project 1' or name 'project 2' or name 'project 3':

If this isn’t your jam then just delete these lines:

Don’t Include Tasks Inside of Sub Projects

Last of all I have certain projects where I don’t want to pull in tasks belonging to sub projects (should any exist.)

If any projects match the criteria the code will generate a query like #Project otherwise it will be ##Project.

if name '🏋️ A: Health': #I don't want to see sub projects for these projects
sub_projects = '#' #no sub projects

Replace this with projects that apply for you.

If there aren’t any projects that apply you can just erase everything between the quotes:

if name ': #I don't want to see sub projects for these projects
sub_projects = '#' #no sub projects

If you have questions let me know. I hope this is as big a game changer for you as it has been for me!

For many years, I have been using David Allen's Getting Things Done (GTD) productivity app. It is simple and easy to follow. All along, I tried nearly every to do list possible - Outlook, Notepad, Wanderlist, Onenote, Excel. They all felt clunky and against the beauty and simplicity of GTD. When I finally found ToDoist, I was in ecstasy.

ToDoist is everything I could want in a time management app and productivity management tool - simple, elegant and quick. It gets out of your way. It has just the right amount of customization without being everything to everyone.

If you haven't used David Allen's Getting Things Done, review this quick reference chart as I walk through my process. Here are my top 10 tips on how to Get Things Done with ToDoist!

1. COLLECT EVERYWHERE USING TODOISTS MANY INPUT METHODS

One of the main reasons I love ToDoist is that you can put it everywhere. Install all the clients. Keep it open on your desktop. Have it in your mail client. Have a quick email to your main projects. Here are the ways that I input my tasks using ToDoist:

  1. I enter most of my tasks using the PC client with Ctrl-Alt-A (which is the quick add shortcut on PC - I am sure it is similar on Mac)

  2. I add tasks on my mobile and iPad when I am on them (usually when out or doing the reading) using the great iOS application.

  3. I add tasks to my favorite projects with add task via email.

  4. I add tasks in Gmail with the great ToDoist Gmail plugin. Got an email with a task? Just hit the ToDoist button.

  5. I add tasks while browsing for a web page I need to remember via the chrome and firefox plugins.

2. SET YOUR TODOIST PROJECTS TO BE THE MAIN CATEGORIES IN YOUR LIFE

Don't go too deep on your ToDoist Projects. I like two levels. This is because you can still group related tasks into subtasks to do grouping inside of a ToDoist Project. I have three main projects: Work, Home, and Shared (for shared projects). Under Work, I have Sales, Marketing, and Operations. Under Personal, I have Career/Coaching, Chores, and Shopping.

3. REVIEW TASK LIST EVERY DAY / EVERY WEEK USING THE IPAD APP

I love the iPad app the most for reviewing my ToDolist. I have to confess that I do this before I get out bed every day. I have found doing my review in the morning avoids the end-of-day decision fatigue (this is a real thing!) When I am reviewing, I am trying to do a few things. Reprioritize my list, move things out of my inbox to correct projects and get items that are old to the right dates. The iPad application works best for me because not only is it small and great for my pre-morning blanket wrapped to do a review, but swipe left is the quick method for moving to a new date with an awesome interface to move something to today, tomorrow, next week, next month or custom. On Sundays, I usually try to look at the whole list, not just the stuff that has fallen into today 'pile'.

4. USE FLAGS AND DRAG TO ORDER TO PRIORITIZE IN TODOIST

Task Priority is one of the difficult things in any to-do list management system. How do you keep from having 20 top priority tasks? The red, orange and yellow flags will automatically default to the top of your list if you are using priority sort (which is the default). Thus, I use the colored flags to set my top priorities. I usually set one red flag for my main thing I want to get done that day, and it is usually customer related. I set 2-3 orange flags of important tasks that should get done that day. Finally, I have a few key habits that I leave yellow. My next priority is done via the drag and drop order. Inside a flag color (including no flag), you can just drag and drop to change the order.

5. SET CONTEXT AND TIME REQUIRED USING TODOIST LABELS

Export todoist tasks

This may be one of my favorite things about ToDoist is the label/tagging system. This is where most people fall down on the GTD system. If you can set the context (where you are) and how much time you have (5 minutes or 60 minutes?), then you can always look at your to-do list in a 'gap' time and not have to think about what to do next. This is the key to productivity. Reduce your decisions. Know exactly what to do next. I have created color-coded labels for a few time frames from 5 to 60 minutes and a few contexts (PC, iPad, Home). You need to make your own, but as an example here is what my label bar looks like:

6. USE TODOIST'S LABEL AND RECURRENCE FEATURES FOR MANAGING HABITS

It is so easy to setup the Habit tasks in ToDoist. I try and do certain things like exercise and meditate every day. I set up a recurrence on these items using ToDoist's recurrence feature. If you want a task each day, you can just type in the date field 'Every Day starting today' or for a shortcut 'Ev Day start Today'. In fact, ToDoist can recognize most English dates like 'Each Weekday' or 'Every third Tuesday starting' or 'The first of every month.' I also use a label for my habits that is in red (see above) which easily lets me see my habits at a glance. I created a filter that shows my habits still left to be done today as follows: @Habit & (today | overdue):

7. DEFINE A SYSTEM FOR THE 3-D'S - DO, DELEGATE, DEFER

One of the key points of GTD is to be able to continually parse the flow of your life. To me, this is mostly email. I try and read my email multiple times per day (I know this goes against the convention). I have found continually parsing to be easier and less stressful to me. I try not to be interrupt driven, but when I first sit down in a gap, I process. Emails are either done in real time (if less than a 2 minute action), delegated to someone else (I use ToDoists shared projects with some of my team to assign a task. Otherwise, I just fire off an email and star it to review later), or defer it (create an action for the future in your ToDoist). At this point, if it is trash, spam or FYI, I usually just leave it read in my email box for later searching (search to me is better than filing). I do set up a tag for a future task that 'NeedsProject' or 'Someday_Maybe', as you can see from above. These are both GTD categories on how to defer items that are not tasks, but instead are containers (projects) for several tasks and items that you may eventually get to respectively.

8. NOW USE YOUR PRIORITIES AND FILTERS TO DECIDE WHAT TO DO NEXT!

Now that you have tasks in and you are ready to sit down and start working, use your filters and priorities to decide what to do. Do you only have 5 minutes? Filter for just 5-minute tasks. Sitting at your computer, filter for your computer context. Stuck at the doctor's office with only your iPhone? Filter for just your tasks labeled phone. Are you ready to just do the next thing? Pull up your Today tab in ToDoist and do your next task. Try to finish your red and orange tasks every day. Go back and look at your completed tasks on Sunday and you will be amazed how much you are getting done.

9. HERE ARE SOME OTHER RESOURCES ON TODOIST AND GTD

No system is perfect. You have to find a system that works for you. Before I found my system, I had read many books and tried many different things. Here are some other links to resources about ToDoist and GTD:

  • Some of my methods were based on this ToDoist article on GTD.

  • This article helped me with some of my contexts and filters (note that ToDoist does not let you use labels with the < symbol anymore).

  • Here is a great blog post by Becky Kane (@19Kane91) about how she uses ToDoist and GTD.

  • Here is one more GTD and ToDoist Method.

10. BONUS TIP: USING A POMODORO TIMER

A Pomodoro timer is a method for driving flow - the ability to get lost in deep concentrative work where time seems to disappear, and you get tons of work done! Pomodoro is the best way I have found to get flow. The way it works is you set a timer for 25 minutes and work without breaking. Then you set another timer for 5 minutes and goof off on anything you want. You do this for four cycles and then take an extended break. Here is a quick and dirty Pomodoro Timer.

I hope your new year starts off great! But more importantly, I hope these tips will help you build a habit of organizing and attacking your tasks that will make 2016 your most productive year yet!

If you like this article, listen to Dialexa CEO, Scott Harper, on Custom Made talk to the business opportunity of custom development:

','url':'https://soundcloud.com/custom-made-dialexa/cm02-the-business-opportunity-of-custom-product-development-w-scott-harper','resolvedBy':'soundcloud','floatDir':null,'authorName':'Custom Made','version':1,'title':'CM01: The Business Opportunity of Custom Product Development w/ Scott Harper by Custom Made','resolved':true,'type':'rich','providerName':'SoundCloud','description':'For our first episode of Custom Made, I'm joined by Dialexa Co-founder and CEO Scott Harper. nnDialexa is a technology services firm that specializes in designing and building custom products and platforms for both funded startups and enterprise organizations.nnScott is a serial entrepreneur who has launched multiple technology product companies, the winner of the Ernst & Young Emerging Technology Entrepreneurs Of The Yearu00AE 2016 Southwest Award, and in this episode, Scott is sharing where he has seen the business opportunity for custom product development.nnBe sure to tweet at me twitter.com/dougplatts and let me know what you think of the show.','providerUrl':'https://soundcloud.com'}'>

Listen to all episodes of Custom Made for insights and perspectives from industry disruptors and technology leaders on iTunes or search 'Dialexa' on your favorite podcasting app.