How can I both:

  1. Keep mailing lists out of my inbox (to read separately later)
  2. Selectively hide mailing list conversations (including their future messages)

I've tried using a filter for mailing lists that adds a label and skips the inbox. When it's time to read through mailing lists, I simply view that label.

That accomplishes goal #1, but I'm not sure how to accommodate #2. I've tried:

  • Muting conversations—but they still show up when I view the label.
  • Adding -is:muted to the filter—but Gmail warns me that this won't have any effect.

What have I missed? Are these goals really incompatible?

  • Please explain goal #2 more precisely. You can remove the label from one of these threads after you read it. Is that sufficient? The Y and ] and [ keyboard shortcuts are good for this.
    – Jerry101
    Commented May 3, 2014 at 1:00
  • Just removing the label isn't sufficient; it gets re-added by the filter every time someone replies within the conversation, and I don't want conversations to reappear after I've hidden them.
    – ændrük
    Commented May 3, 2014 at 1:33
  • Have you found any good solution since you asked the question? Commented Nov 10, 2016 at 17:22

5 Answers 5


Alas, the "mute" feature only keeps incoming messages from putting that thread back into the inbox. (1) It doesn't keep the thread out of a label even if you use a label as a secondary inbox. (2) There's no equivalent of "mute" to mute a thread from another label. (3) Filters can't test if the incoming message is going into a muted thread.

Archive or mute Gmail messages says:

When you mute a message: Any replies stay out of your inbox. You can search for the conversation if you want to find it again.

And in the Help Forum:

if you mute a conversation from a mailing list new emails in that thread wont appear in the inbox but will be archived in all mail until you unmute it or one comes addresses directly to you

Filter criteria seem to apply to incoming messages before filter actions. They apply after spam classification even though the UI warns otherwise. So this does work:

Matches: in:spam (from:("christianmingle" OR "DeVry University" OR "Fidelity Life Insurance" OR "Walmart Points"))
Do this: Delete it

If -is:mute worked in a filter (i.e. if the test applied to the new message's thread instead of to the new message itself, which isn't yet in a muted thread), you could use one filter to skip the inbox and a second filter with the same criteria plus -is:mute to apply the label.

Or similarly, if the filter criteria could test labels on the new message's thread, you could move your undesired threads to a different label muted as a hack way to mute them, then use a pair of filters with -label:muted as part of the second filter's criteria.

But Gmail doesn't currently work that way. You can use the Send Feedback feature (in the gear menu) to request one of these tweaks.

As a desperate way to handle an occasional annoying thread, you could add a filter just for that thread which just removes it from the Inbox and the alternate lable.

More ideas: Write a Google Apps Script, or a Greasemonkey script, or a Chrome extension to extend Gmail.


After encountering the same problem, encountering your thread, and leaving sad, a hack just occured to me. Manual muting:

What if we make a tag "MUTED" and add it to conversations we no longer want to follow. Then, when you check your email, you open the muted tag, click more->"Mark all as read". Then the rest of your tags are now cleaned.

  1. Create a second filter that adds a nested 'not-muted' label to the first message within a thread. A couple possible ways to filter by the first message:

    1. subject:(-"Re: [nodejs]")

      NOTE: The name of the group is important. Gmail ignores special characters

    2. Use a gmail period or plus email for your user-group (e.g., if your gmail is [email protected] use [email protected] when joining the group.
  2. Instead of muting a conversation, remove 'not-muted'.
  3. Now, the nodejs/not-muted label contains the conversations you want.

The only downside to this approach is that you'll have an unread messages count in nodejs that you don't care about since you only really care about the count in nodejs/not-muted.


As Jerry101 suggested, you can use a Google Apps Script.

Below is an instruction with the script I wrote to solve #2 in the OP:

  1. Setup Google Scripts with Gmail API following Google's tutorial.

  2. Use this function, replacing "News" and "Bugs" with your labels.

    function listLabels() {
      var myLabelNews = GmailApp.getUserLabelByName('News');
      var myLabelBugs = GmailApp.getUserLabelByName('Bugs');
      var threads = GmailApp.search('label:Muted AND is:unread AND newer_than:7d');
      for (var i = 0; i < threads.length; i++) {
  3. Run the script every time before checking mail.

Possible improvements:

  1. You can extend the script to look up existing labels for each thread and removing just them, but if you have just a few labels like I do, removing every possible label makes the code more simple.

  2. You can schedule the script to run every N minutes. That's unnecessary in my case, as I've bookmarked gmail and a bunch of messengers and use "open all" browser feature when I'm ready to zero my inboxes. So I just bookmarked the script right next to gmail and run it manually every time.

  3. I also have an "Arch" label that I use to create filters that mute unwanted emails. You can't setup a filter that mutes a message, but you can apply a custom "Arch" label, and adjust the script hide those emails too:

    GmailApp.search('(label:Muted OR label:Arch) AND is:unread AND newer_than:7d');

In your first filter:

Doesn't have: Label:Muted

In a second filter if you want:

Has the words: Label:Muted

When a message arrives...

Mark as Read

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.