Email Snooze and Gmail Zero

Friday, October 19, 2012
By dreeves

A mouse happy with Gmail Zero

Two years ago, when I still had a day job and Beeminder was just a side project, I wrote about my epic struggle with email:

My email is dysfunctional. I keep things in my inbox because I can’t afford for them to go out of sight, out of mind — but then that’s exactly what happens. They get buried deeper and deeper in my inbox by all the other messages I delusionally think I’m going to deal with.

That was the preface of my article, Inbox Zeroer, in which I proposed that we all declare email bankruptcy and stop adding things to each other’s task lists willy nilly. No, but seriously, I laid out a wish list for some tools to help me reach Inbox Zero, namely, email snooze, re-ping, and auto-expire. Today I’m happy to announce that I’ve implemented those features for Gmail, and you don’t even have to be a nerd to use them. It’s a one-click install, except for saying yes to all the scary sounding things it wants to do: [1]

The best part is that it’s completely unobtrusive. It doesn’t add or change anything in the Gmail interface, working purely off of standard Gmail labels.

How Gmail Snooze Works


A thread with a single number as a label, say “7”, will reappear in the inbox in 7 days. To snooze for 7 days (assuming you have keyboard shortcuts turned on in your Gmail settings) just type: v7<enter>. That moVes the thread from the inbox to the label “7”.

Every night at midnight, everything will shift: threads labeled i will be moved to i-1, with new labels being created as necessary. And anything with label “1” will reappear in the inbox, with no more numeric label. [2]


Re-Ping just refers to snoozing your own outgoing mail so it comes back to you and reminds you to follow up (or re-ping the person) if you haven’t gotten a response.

I originally conceived of this as an additional part of the interface of composing a message, since that’s when you want to decide when a follow-up would be needed. Instead, I implement this by having all of my own sent-mail get filtered so it lands right back in my inbox when I send it. That sounds annoying but it’s just two more keystrokes to get a message back out (“xy” — select and archive) if you won’t need to re-ping. If you will, snooze it like any other message. The idea is that all active conversations should initially be in your inbox until you explicitly allow them to go out of sight, out of mind.

Here’s how to create a filter to make your own sent mail go to your inbox:

  1. Create a filter (available from the “show search options” dropdown on the search box)
  2. Set the From to your own email address, or your username — something that will match all the email addresses you send from
  3. On the next screen, check nothing but “Never send it to Spam”

I find this far superior to what I consider the next best alternative,, because there’s no external service to rely on, and no clutter, either in Gmail’s interface or in your email threads.


[UPDATE 2017: I didn’t end up liking Auto-Expire so I removed it. I still use Snooze and Re-Ping constantly.]

Auto-Expire is like the inverse of Snooze. A thread in your inbox with a label like “x90” will automatically archive itself in 90 days. To apply such a label (again, assuming keyboard shortcuts are enabled in your Gmail settings), type lx90<enter>. That applies the Label “x90”.

Similarly to Snooze, the number after the x will decrement nightly, until the number disappears and the label is just “x” (indicating auto-expired), when it will disappear from your inbox.

I don’t yet have much experience with Auto-Expire but the theory is sound: When a message first has your attention is the best time to make decisions about it. If it’s an email about an upcoming event, set it to leave your inbox sometime after the event will happen. It will then disappear from your inbox after it’s no longer relevant, with zero further thought from you. If you establish a habit of setting an auto-expiration for all incoming mail it would reduce the painful slogs through your inbox, clearing out no-longer-relevant email.

You can even use snooze and auto-expire together, for example, by setting a message to come back to your inbox a week, and then automatically leave again in a month: lx30<enter>v7<enter>.


“The fundamental problem that all this tries to solve doesn’t have anything to do with email processing tools, it’s my damn brain.”

I’ve been using some version of Email Snooze and Re-Ping for years now, in various hacky forms, and I think they’re really powerful tools. But guess what I found out? The fundamental problem that all this tries to solve doesn’t have anything to do with email processing tools, it’s my damn brain. Having an amazing IDE with built-in refactoring tools and a Turing-complete macro language won’t just make you produce code. (To rephrase that for the non-nerds, an amazing word processor won’t make you produce prose.) And as great as email snooze and company are, they don’t solve your fundamental procrastination problem.

Which sounds like a case for — Beeminder! Specifically, Beeminder’s Gmail Zero Project.

How Gmail Zero Works

Gmail Zero is almost as easy to get started with as Gmail Snooze. There’s the usual scary sounding permissions [3] as you connect your Gmail and Beeminder accounts, but then it’s just a matter of picking a target inbox size. Beeminder makes a graphical yellow brick road for you to follow to gradually get there. It periodically checks your inbox throughout the day and records the number of Read messages, plotting the counts along that road. It only counts the minimum of the day, so that you just have to hit the low point and stay there long enough for Beeminder to pick up on it. This lets you (and — once you add a pledge — forces you to) make slow but inexorable progress toward inbox zero.

Gmail Zero only works for people who (try to) diligently archive messages. It doesn’t count Unread messages against you since you don’t have control over those. For example, the 1000 messages you get on vacation? Not a problem — it won’t count them until you get home and start reading through them.

Ignoring unread messages is a double-edged sword, of course. One person using Gmail Zero reports that he finds himself leaving things as unread in order to avoid Beeminder’s sting. We suggest a simple trick to combat that tendency: mark a batch of unread messages as read at the end of each day, when you’re already safely on your yellow brick road, putting yourself on the hook to deal with them tomorrow. Of course Gmail Snooze itself lets you postpone Beeminder’s day of reckoning. But I find that if I’ve snoozed something often enough I’ll eventually admit that I’m never going to deal with it and I’ll just archive.

For me, Gmail Snooze and Gmail Zero are a beautiful combination. I have the option to procrastinate indefinitely on something, by repeatedly snoozing it. But Gmail Zero forces me to keep cycling through those things, never letting a deep pile accumulate where important items can get buried and forgotten about till they come back and bite me. I leave the biting (or stinging) to Beeminder. Here’s how it’s been working for me:

My own Gmail Zero graph

Try it yourself:

UPDATE 2013 August: Google briefly broke Google Apps Script and the Gmail Snooze script was failing to do the automatic nightly snooze shifts for several days (and sometimes doing them too often). It’s now fixed. GmailZero, described in the second half of this article, was unaffected.

Related Reading


[1] It’s actually entirely safe except in the unlikely event that you happen to already use Gmail labels like “7” — labels that are bare numbers — in which case don’t use this or it will change those labels on you!

[2] There’s no limit to how many days you can snooze something for, and Gmail Snooze cleans up after itself, deleting empty integer labels. Except for one-digit labels (1-9) which it keeps to avoid the extra keystroke of confirming label creation for those. So the very first time you snooze for 7 days, you’ll have to confirm that you want a new label “7” but never again.

[3] This is worse than for Gmail Snooze, which is written with Google Apps Script and hosted by Google. For external apps, Google doesn’t give fine-grained enough permissions for Beeminder to ask just to see stats about your email. It’s all or nuthin’ with them. But Beeminder’s not actually reading your email, I promise! See the original blog post on Gmail Zero for more on exactly what it’s doing.


Illustration by Bethany Soule

Tags: , , ,

  • Kevin Canini

    You’re aware of boomerang, I hope?

  • Daniel Reeves

    Yeah, I have it listed under Related Reading, other tools. And I guess it works by a similar label-based principle. But I don’t like it messing with the Gmail interface and the labels it adds are unwieldy. It just generally feels too heavy weight. I’m really happy with the simplicity of my Gmail Snooze app.

    Though if Boomerang has added keyboard shortcuts since I last tried it, I’ll give it another go. I think that’s the best part of Gmail Snooze. That you can snooze things with just a couple keystrokes (and they’re just standard Gmail keystrokes!).

  • Pingback: Gmail Zero: Beeminding Your Inbox | Beeminder Blog

  • ᑌ⍵ℯ

    Great tool, but could it be made to make the labels invisible (like not showing in my default view)? Or at least so that it doesn’t delete the labels again (I could set them invisible that way)?

  • Daniel Reeves

    I’m not sure if I can set the labels invisible (and not sure I’d want to) and I also think that they should be deleted when they’re empty. Otherwise if you snooze something for 1000 days then eventually you’ll have a lot of empty labels hanging around. But the labels 1-9 are never deleted so if you limit your snoozing to 9 days (not a bad policy) then you could make those labels invisible and this script wouldn’t mess with them.

  • Colin DeVilbiss

    I installed Gmail Snooze (and clicking on the button above now takes me to an info page instead of an auth request). I have a single message tagged with label “1” and it hasn’t moved in 2 days. Am I missing something?

  • Colin DeVilbiss

    It worked tonight; I don’t know if you had to intervene, but I’m very glad that it worked! I like the simple semantics and quick use from any gmail client. Thanks for a neat project!

  • Daniel Reeves

    Awesome, thanks, Colin! I didn’t intervene but one thing that’s bitten me before, in case this is the explanation for the delay in your case: If you refresh the page after midnight but before the nightly snooze shift has run then it will set up the trigger to happen at midnight the following night.

  • Colin DeVilbiss

    It’s working really well; however, now I’ve started getting near-daily (daily?) notices that time-based triggers are failing for unknown macros cleanup1 and cleanup2. Expected behavior? (Is there some way to get to the source, having installed it?)

    Thanks again!

  • Daniel Reeves

    Thanks for reporting, Colin! I changed some things around and apparently broke the cleanup script. Can you try refreshing again and see if that fixes it?

  • Pingback: Beeminder: We Use That; or, WeUseThat: Beeminder | Beeminder Blog

  • Jan Frederik Léger

    Hey, great product!
    What a pity you left out the Auto-Expire feature. Could you re-activate it? That’s one of the reasons for me to choose Snooze.


  • Daniel Reeves

    Yay! Glad you like it! It’s been a little flaky for me lately (google sometimes kills the process for running too long, so my snoozes can end up delayed too much — I snooze too much stuff!). So I’m going to robust it up soon and am open to turning auto-expire back on. But were you actually using it or just like the idea in theory? I liked it in theory but not in practice so I turned it off.

  • Jan Frederik Léger

    Hmm, I just installed it, so I thought “in theory” that auto-expire is a great feature. I recognize the use case very much: letting a message rotten in my mailbox until it is not relevant anymore.
    However, as soon as you have a good inbox-discipline, this feature shouldn’t be necessary anymore.

  • Jan Frederik Léger

    Does Snooze work with multi-digit labels as well (e.g. label “30”)?

  • Daniel Reeves

    Yeah, no problem with that. The current implementation bogs down when you have dozens of labels so my workaround is to snooze to an existing label as much as possible.

  • Daniel Reeves

    Yeah, my problem with it is that if I had the discipline to set an auto-expiry then I might as well get it out of the inbox right then — often by snoozing it. So, really, snooze is all you need.

    If you had filters for auto-expiry it might be useful. Like “messages containing the word ‘unsubscribe’ get label ‘x14′” — so anything likely from a mailing list will take itself out of your inbox in 2 weeks.

    I’ll keep experimenting!

  • Mike Rosulek

    Readers of the blog post might be interested in a similar google apps script that I put together: .. The user experience is much more reminiscent of, which is mentioned above.

    Here, you send email (forward, bcc, etc) to an address like:


    etc etc. The threads then reappear in your inbox at the specified time.

    Compared to your gmail snoozer, I’d concede that forwarding to an email address is probably a little bit clunkier than applying a label. On the other hand, more flexible syntax is supported (i.e., snoozing an email until “jul 17” without figuring out how many days that is) that would otherwise clutter up your labels namespace. Also, times of day are supported (though limited by the reliability/granularity of google apps’ time-triggering of scripts).

    Anyone reading this is welcome to try it out and send feedback!

  • Daniel Reeves

    Thanks so much for sharing this. Beautifully done! I added it to the list of other tools at the end of the post for now. Would like to say more about it in the post too. I’m actually wondering if it could make sense to combine these approaches into a single tool that does both.

  • Amitmai

    Hi, I love the gmail snooze app. Is there a way to have it automatically mark the returning emails as unread?

  • Daniel Reeves

    I used to have it do that but decided I didn’t like it. I have the code here if you want to fork it / generalize it:

  • Pingback: GmailZero: Not Just For Your Inbox Anymore | Beeminder Blog