has:newsletter is not a Gmail operator. The undocumented one that works is label:^unsub.
Every guide on this topic teaches you from:, list:, or category:promotions. None of them names the system label Gmail actually attaches to bulk mail. It is ^unsub, it is undocumented, and it works in every Gmail account (consumer and Workspace, web and mobile) right now.
has:newsletter is not a Gmail search operator. The working query is label:^unsub.
Gmail's official search operator reference at support.google.com/mail/answer/7190 lists every documented has: operator (attachment, drive, document, spreadsheet, presentation, youtube, image, userlabels, nouserlabels, plus star and marker colors). newsletter is not on the list. Typing the query returns zero results unless you happen to have a user-created label literally named newsletter applied to messages.
The working alternative is label:^unsub (note the caret). It matches every message Gmail's bulk classifier has tagged as newsletter or list mail. The caret prefix indicates a Gmail internal system label; it is not created by you and does not appear in the labels sidebar. Verified working in consumer Gmail and Google Workspace on 2026-05-13.
Every has: operator Gmail actually documents
From the official reference. If a has: string is not in this list, Gmail treats it the same way it treats a typo: it falls through to a substring search against your messages, which is almost never what you wanted.
has:attachment— messages with any filehas:drive— Drive link or filehas:document— Google Docshas:spreadsheet— Sheetshas:presentation— Slideshas:youtube— YouTube linkhas:image— inline imageshas:userlabels— any user label appliedhas:nouserlabels— no user label appliedhas:yellow-star,has:red-bang, … — star and marker colors
Newsletter is conspicuously absent. The omission is not an oversight; Gmail's newsletter classifier lives behind a different mechanism (a system label), and it uses a different operator prefix to read it.
The caret-prefixed system label family
Gmail prefixes its internal labels with ^. These do not show up in the sidebar, you cannot create or delete them, and their names rarely change. The complete set is not published, but the labels below have been observed in consumer Gmail and Workspace accounts and are stable to query.
^unsub
Bulk mail flag. Gmail applies this to messages it considers newsletters, promotional, or list-driven. The closest thing to what people mean when they type has:newsletter.
^smartlabel_newsletter
The original Smart Labels classifier flag for newsletters. Older accounts still match against it. Newer accounts route the same signal through ^unsub.
^smartlabel_promo
Promotional bulk mail (the Promotions tab). Useful when you want offers and coupons but not the bigger ^unsub set.
^all
Everything Gmail keeps for your account, including the chats, drafts, and spam your inbox view normally hides. label:^all is the broadest search you can run.
^t · ^i · ^s · ^b
Mailbox sections: trash, inbox, sent, chat. Functional but rarely needed since is:starred / in:sent / in:trash already exist.
^io_im
Important. Lets you grep against the importance markers Gmail computes for the priority inbox view.
The caret labels are undocumented. They can be renamed or removed by Google without notice, so build cleanup workflows on them but not load-bearing automations.
What happens when you actually run the query
One pattern for the use case most people are typing has:newsletterfor in the first place: clearing years of accumulated bulk mail to get under the storage quota.
Numbers above are illustrative; replace with your own. The query syntax is verbatim what Gmail accepts in the search bar.
Copy-paste queries for the eight things you probably wanted
Paste any of these into the Gmail search bar (web, Android, or iOS). Combine them with from:, to:, after:, before:, or larger_than: for tighter scopes.
Every Gmail primitive you could plausibly use, audited
Each row is one operator string people commonly try when looking for newsletter mail. The middle two columns answer two different questions: does Google document the operator at all, and does it return what you wanted.
| Operator | Documented | Returns what you want | Caveat |
|---|---|---|---|
| has:newsletter | No | No | Not in support.google.com/mail/answer/7190. Returns zero unless you have a label literally called newsletter applied to messages. |
| label:newsletter | Yes | Conditional | Works only if you (or a filter) created a user label called newsletter and applied it. label: cannot conjure a label that does not exist on the account. |
| label:^unsub | No | Yes | Undocumented system label. Gmail auto-applies it to messages it detects as bulk/newsletter mail. This is what most people are looking for. |
| list:* | Yes | Yes | Matches the List-ID header that legitimate newsletter senders set. Misses any sender that omits the header. |
| category:promotions | Yes | Yes | Catches what Gmail routed to the Promotions tab. Narrower than ^unsub: newsletters Gmail routed to Primary will not show up here. |
| category:updates | Yes | Yes | Order confirmations, bills, account updates. Often confused with newsletter mail by users; Gmail treats them as separate. |
| unsubscribe | Yes | Yes | A plain keyword search of the message body. Catches almost every newsletter (they all include the word) but also any one-off email that happens to mention unsubscribing. |
Why people type has:newsletter in the first place
Three reasons, in roughly the order they appear in feedback.
- The Gmail mobile app has a Newsletters view. Tap the side menu in the Gmail Android app and there is a section called Newsletters. The natural assumption is that the view is backed by an operator named
has:newsletter. It is not. The view runs the same classifier that powers^unsub; it just exposes the results as a curated screen rather than a search query. - Other has: operators look like a complete set.
has:attachmentandhas:drivesuggest a family of content-type filters. Newsletter feels like it belongs in that family. It does not: Gmail treats newsletter status as a label, not a content type. - Some third-party guides invented it. A handful of mid-2010s blog posts listed
has:newsletteras a Gmail operator, either confusing it with the mobile view or hallucinating it outright. The pages still rank. The operator still does not exist.
The signal side of the inbox is the part Gmail cannot operator
Newsletters are the easy half of an inbox problem. One query (label:^unsub) plus a select-all clears them, and you can rebuild the clean state any time. The hard half is the threads where a real client is waiting on a real move from you: a proposal you sent six days ago, an SOW countersign you forgot to nudge, a question the reply did not actually answer.
Gmail has no operator for that side. There is no has:waiting-on-me, no has:dodged-reply, no has:promise-pending. The reason is the same reason there is no has:newsletter: it is a classification problem, not a content-type problem, and a single Boolean cannot encode the answer. Clearing the noise side gets you a tidier inbox; it does not give you back any billable hours. The hours come back when something replaces the morning loop of opening every stale thread to figure out what state it is in.
That is the part we built Clone for. The detailed write-up is at label:replied is not a Gmail operator either; the short version is that the threads where you owe a move sort cleanly into five named states, the classifier writes a state to each one every morning, and a draft scoped to that state lands in your Drafts folder before you open Gmail.
See your inbox classified on a real call
Thirty-minute screen share. We open your Gmail, run label:^unsub to clear the easy half, and then walk through the five-state classifier on the harder half: the threads where a client is waiting on a real move from you. You leave the call with drafts in your Drafts folder.
Frequently asked questions
Is has:newsletter a real Gmail search operator?
No. The official Gmail search operator reference at support.google.com/mail/answer/7190 does not list has:newsletter. The has: operators it does list cover attachment, drive, document, spreadsheet, presentation, youtube, image, userlabels, nouserlabels, and the various star/marker colors. Typing has:newsletter into the Gmail search box gives you zero results unless you happen to have a Gmail label literally named newsletter, in which case Gmail falls through to label:newsletter behavior.
What is the working alternative?
label:^unsub (with the caret). It is the undocumented system label Gmail auto-applies to messages it classifies as bulk or newsletter mail. The caret prefix indicates a Gmail internal label rather than a user-created one; it cannot be created or deleted from the Gmail UI. The query has been working since at least 2019 and was recently re-surfaced in coverage at labnol.org/gmail-unsubscribe-search-operator-250728. You can combine it with other operators: label:^unsub larger_than:500k older_than:1y finds bulk mail older than a year and bigger than half a megabyte, which is the fastest way to reclaim a gigabyte of Gmail storage.
Why does Gmail hide these operators?
Caret-prefixed labels are an implementation detail. Gmail uses them to tag messages internally for the inbox, tabs, importance score, and so on. Exposing them as official operators would mean Google has to support them as a public API and never change the names. By keeping them undocumented, the team can rename or remove a label without breaking a published contract. The flip side is that any query you build on top of them can stop working without warning.
What is the difference between label:^unsub and category:promotions?
category:promotions is narrower. It matches only the messages Gmail routed to the Promotions tab in the tabbed inbox view. label:^unsub matches every message Gmail classified as bulk, including ones that landed in Primary because of how you have your tabs configured or because the sender is a known business contact. If you want every newsletter regardless of tab, use ^unsub. If you want what is in the Promotions tab right now, use category:promotions.
Will label:^unsub work in Google Workspace and on mobile?
Yes, in both. The system labels are account-level, not view-level. Workspace inboxes carry the same caret labels as consumer Gmail. The query works in the desktop web client, the Android Gmail app, and the iOS Gmail app. Where it does not work is in third-party clients that talk to Gmail via IMAP, since IMAP does not expose Gmail-specific labels.
How does Gmail decide what is a newsletter?
Two signals carry most of the weight. First, the message includes a List-Unsubscribe header (the standard RFC 8058 way for a sender to announce that the message is part of a list). Second, classifier signals: sender reputation, the volume of identical messages other Gmail accounts received, the presence of an unsubscribe link in the body, and the use of campaign-style HTML templates. A message can pick up ^unsub on the strength of the headers alone, even before the body classifier sees it.
What about Gmail mobile's "Newsletters" view? Does that map to an operator?
The mobile Newsletters view (and the "Manage subscriptions" surface in the desktop sidebar that started rolling out in 2025) draws from roughly the same set of messages that label:^unsub returns. There is no separate has:newsletter operator behind it; the UI is a saved view that ships built in. If you want the same view in any client, run label:^unsub.
Is there a way to find newsletters I have opened but not actually read?
There is no native Gmail operator for "opened but skimmed." You can approximate with label:^unsub is:read newer_than:14d, which gives you the bulk mail you have at least clicked open in the last two weeks. The remaining signal (did the eye actually scan the content) lives in client-side telemetry the public API does not expose. If that distinction matters to you, the right answer is to unsubscribe from anything you do not finish reading; the data does not exist to filter on.
What does this have to do with Clone?
Nothing, on the noise side. label:^unsub is the right primitive for clearing newsletters and Clone does not change it. Where Clone matters is the inverse problem: the threads in your inbox where a real person is waiting on a real move from you. Gmail has no operator for that. A consultant burning 10 hours a week on inbox triage is not losing those hours to newsletters (one keystroke clears those). They are losing them to the proposals, signed SOWs, and dodged replies that need a state-aware response. We wrote a longer guide on that primitive at /t/label-replied-gmail-search-operator.
Related primitives we have written about
label:replied Is Not A Gmail Operator. Use A Five-State Classifier Instead.
The closest sibling to this guide. Same shape (a missing Gmail operator) and the framing for the signal side of the inbox-noise problem.
Email Follow-Up Automation That Starts With A Read, Not A Send
The morning triage ritual that drafts state-specific follow-ups before you open Gmail.
Automate Consulting Follow-Ups
How to turn the post-call hour into one Slack approval instead of an afternoon of switching tabs.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.