Guides
10 Gmail Filters Worth Copying Today, With the Exact Settings
Ten Gmail filters to copy and paste: newsletters, receipts, bills, deliveries, calendar replies and VIPs, with the exact criteria, actions and an import file.

Most Gmail filter advice explains what a filter is and leaves you to invent the useful ones yourself. This post is the other half. Our guide to Gmail labels and filters covers the concepts; below are ten filters worth setting up today, each with criteria you can paste straight into Gmail, the exact boxes to tick, and the gotcha that will bite you if there is one.
Every operator here was checked against Google’s search operator reference and filter help in September 2026. Replace anything that looks like a placeholder (you@gmail.com, boss@yourcompany.com) with the real thing.
How to turn a search into a filter
A Gmail filter is a search that runs by itself on every incoming message. So the workflow is always the same:
- Paste the criteria into the Gmail search box and press Enter. The results are exactly what the filter will catch, so read them.
- Click Show search options, the sliders icon at the right of the search box. Gmail carries your query into the form.
- Click Create filter, tick the actions, and click Create filter again.
Before that last click, there’s a checkbox worth knowing: Also apply filter to N matching conversations. Tick it and the filter sorts your existing mail too, once. Leave it and only new mail is affected.
Three things to understand before you build more than one:
- Every matching filter acts. There’s no “stop here” action, so if one filter archives a message and another wants it in the inbox, the archive wins. That’s why some recipes below exclude the others’ keywords.
- Replies are judged on their own. Google notes that a reply to a filtered message is only filtered if it meets the criteria itself.
- Labels should exist first. Create them before you start (Google’s instructions) so each filter has somewhere to put things.
1. Newsletters: out of the inbox, into a reading pile
Marketing email has to carry an unsubscribe link by law, and most newsletters include one anyway, which makes the word itself the best catch-all Gmail has. This files newsletters and marketing under one label, while excluding the transactional mail that later recipes handle.
unsubscribe -subject:(invoice OR bill OR statement OR payment OR overdue OR receipt OR order OR shipped OR dispatched OR delivery OR delivered) -from:notifications@github.com
Tick: Skip the Inbox (Archive it); Apply the label: Newsletters; Never mark it as important.
Watch out: plenty of real people send through mailing tools (your child’s school, your running club), and GitHub puts “unsubscribe” in every notification footer, hence that last exclusion. Add a -from: for anyone else who must stay in view. For one specific list, list: with the list’s address is more precise than the catch-all. And unsubscribe from the ones you never read before filtering the rest: our mass-unsubscribe guide covers doing that safely.
2. Receipts: filed, not read
Order confirmations and payment receipts are reference material. You’ll search for them at tax time or when something breaks, and never before.
subject:(receipt OR "order confirmation" OR "order confirmed" OR "thanks for your order" OR "thank you for your order" OR "payment received")
Tick: Skip the Inbox (Archive it); Apply the label: Receipts; optionally Mark as read.
Watch out: every shop words its subject lines differently. When a regular retailer slips through, add OR from:orders@thatshop.com rather than more keywords. To backfill, search category:purchases, Gmail’s own classifier, and label the results by hand.
3. Bills and invoices: kept in view
The opposite of a receipt: a bill is a task. This keeps it in the inbox and makes it harder to overlook.
subject:(invoice OR "payment due" OR "bill is ready" OR "statement is ready" OR "payment reminder" OR overdue)
Tick: Apply the label: Bills; Always mark it as important. Don’t skip the inbox.
Watch out: plenty of services call an already-paid receipt an “invoice”, so some paid ones will land here too. That errs on the right side.
4. Deliveries: labelled, not buried
Shipping updates matter for about three days and then never again. A label makes them easy to find without hiding them.
subject:(shipped OR dispatched OR "out for delivery" OR delivered OR "on its way" OR "tracking number")
Tick: Apply the label: Deliveries. Add Skip the Inbox (Archive it) if you’d rather check the label than see each one arrive.
Watch out: product newsletters love the word “shipped” (“we shipped dark mode”). If one keeps slipping in, add -from: for that sender.
5. Calendar replies: only the ones with something to say
“Accepted: Weekly sync” tells you nothing your calendar doesn’t already show. Google Calendar stamps its emails with a hidden X-Google-Calendar-Notification header, and Gmail’s header: operator can read it. This query comes straight from Google’s help page: it catches acceptances, maybes, and declines without a note.
header:X-Google-Calendar-Notification:rsvpAccepted OR header:X-Google-Calendar-Notification:rsvpTentative OR (header:X-Google-Calendar-Notification:rsvpDeclined -header:X-Google-Calendar-Notification:rsvpWithNote)
Tick: Skip the Inbox (Archive it); Apply the label: Calendar.
Watch out: the header only exists on Google Calendar’s own emails. For replies from other calendar apps, match the attachment instead: Google’s Workspace tips put invite.ics OR invite.vcs in Has the words with Has attachment ticked. That can catch new invitations as well as replies, so label rather than archive. Google’s Calendar help page also lists tokens for cancellations (eventCancelled), time changes (timeOrRecurrenceUpdated) and more, if you want to route those too.
6. GitHub and Jira: everything except what needs you
Tool notifications are the definition of mail you want to be able to find but don’t need to see. The trick is keeping the few that ask something of you. GitHub always sends from notifications@github.com and Cc’s an address that says why you got it, so you can let mentions, review requests and assignments through. Jira Cloud sends from jira@yoursite.atlassian.net by default.
from:(notifications@github.com OR jira@yourcompany.atlassian.net) -cc:mention@noreply.github.com -cc:review_requested@noreply.github.com -cc:assign@noreply.github.com
Tick: Skip the Inbox (Archive it); Apply the label: Notifications.
Watch out: the mentions that stay in your inbox don’t get the label. If you want them labelled too, add a second filter with just the from: part and Apply the label. If your Jira admin set a custom sender address, copy it from a real notification. For one noisy repository, list: works on GitHub’s List-Id, which takes the form repository.owner.github.com.
7. VIPs: the people who can’t wait
Your manager, your biggest client, your accountant in January. This makes their mail hard to miss whichever inbox layout you use.
from:(boss@yourcompany.com OR client@bigclient.com OR accountant@example.com)
Tick: Star it; Always mark it as important; Categorize as: Primary; Apply the label: VIP.
Watch out: keep the list short. Once it passes a dozen names it stops meaning anything, and you’re back to an inbox where everything is urgent. Categorize as only matters if you use inbox tabs, but it stops a VIP’s automated-looking email being classed as an Update.
8. A never-spam list for senders Gmail keeps losing
The school office, the club secretary, the accountant whose invoices come from an odd billing system. If Gmail keeps putting a trusted sender in Spam, Google’s own fix is a filter.
from:(accountant@example.com OR office@yourkidsschool.org OR secretary@yourclub.org.uk)
Tick: Never send it to Spam.
Watch out: this also waves through anything forged to look like it’s from that sender, so list exact addresses and never a whole free-mail domain like gmail.com. Don’t do it for your bank: a fake email from your bank is precisely what you want Spam to catch. Google notes that adding a sender to Google Contacts also keeps them out of Spam.
9. Plus addresses: sorting that starts at sign-up
Gmail delivers anything sent to you+anything@gmail.com to you@gmail.com, and Google suggests pairing it with a filter. Give shops you+shopping@gmail.com, and their mail sorts itself before you ever see it.
to:you+shopping@gmail.com
Tick: Skip the Inbox (Archive it); Apply the label: Shopping.
Watch out: some sign-up forms reject the plus sign, and anyone can strip the tag off, so treat this as a sorting tool rather than a privacy one. Give one company its own tag (you+acme) and it also tells you who shared your address, when mail to that tag turns up from somebody else.
10. Large attachments: a pile to clear when storage runs low
Gmail shares a Google account’s 15 GB of free storage with Drive and Photos, and a few years of attachments eat it quietly. Labelling big messages as they arrive gives you one place to go when the “storage almost full” warning appears.
has:attachment larger:10M
Tick: Apply the label: Large attachments. Tick Also apply filter to matching conversations to label the backlog too.
Watch out: larger: measures the whole message, not just the attachment. And archiving doesn’t free space: deleting does.
The filter you can’t build: archiving old newsletters
The filter everyone wants next is “archive newsletters once I’ve read them and they’re a month old”. It can’t be done. A filter looks at each message once, as it arrives, and a brand-new message is never read and never 30 days old. Ticking Also apply filter to matching conversations runs it once over existing mail, and it never runs again.
The manual version takes about ten seconds. Search:
in:inbox is:read older_than:30d unsubscribe
Tick the select-all checkbox above the results, click the link that appears to select every matching conversation rather than just the first page (Google’s instructions), and click Archive. older_than: takes d, m or y, so older_than:3m or older_than:1y work too.
If you want it to happen by itself, Google Apps Script can run that search on a schedule. At script.google.com, create a project and paste in:
function archiveOldNewsletters() {
const threads = GmailApp.search('in:inbox is:read older_than:30d unsubscribe', 0, 100);
GmailApp.moveThreadsToArchive(threads);
}
Run it once to grant access to your mail, then under Triggers, click Add Trigger and set a time-driven trigger to run it daily. It handles up to 100 conversations a run, so a large backlog clears over a few days. It’s your own script in your own account, but it does get full access to your mail, so read it before you run it.
Export, import, and all ten in one file
Gmail can save your filters as an XML file and load them back. Google’s steps: open Settings, See all settings, then Filters and Blocked Addresses. To export, tick the filters you want and click Export at the bottom of the page. To import, click Import filters, choose the file, click Open file, then Create filters.
That also means you can skip the clicking. The file below contains all ten recipes, in the Atom format Gmail’s own export uses (the same format filter tools such as gmailctl and gmail-britta generate for import). Save it as filters.xml, replace every placeholder address, delete the entries you don’t want, create the labels, and import.
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>
<title>Mail Filters</title>
<id>tag:mail.google.com,2008:filters:</id>
<updated>2026-10-25T00:00:00Z</updated>
<author>
<name>You</name>
<email>you@gmail.com</email>
</author>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='unsubscribe -subject:(invoice OR bill OR statement OR payment OR overdue OR receipt OR order OR shipped OR dispatched OR delivery OR delivered) -from:notifications@github.com'/>
<apps:property name='label' value='Newsletters'/>
<apps:property name='shouldArchive' value='true'/>
<apps:property name='shouldNeverMarkAsImportant' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='subject:(receipt OR "order confirmation" OR "order confirmed" OR "thanks for your order" OR "thank you for your order" OR "payment received")'/>
<apps:property name='label' value='Receipts'/>
<apps:property name='shouldArchive' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='subject:(invoice OR "payment due" OR "bill is ready" OR "statement is ready" OR "payment reminder" OR overdue)'/>
<apps:property name='label' value='Bills'/>
<apps:property name='shouldAlwaysMarkAsImportant' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='subject:(shipped OR dispatched OR "out for delivery" OR delivered OR "on its way" OR "tracking number")'/>
<apps:property name='label' value='Deliveries'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='header:X-Google-Calendar-Notification:rsvpAccepted OR header:X-Google-Calendar-Notification:rsvpTentative OR (header:X-Google-Calendar-Notification:rsvpDeclined -header:X-Google-Calendar-Notification:rsvpWithNote)'/>
<apps:property name='label' value='Calendar'/>
<apps:property name='shouldArchive' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='from:(notifications@github.com OR jira@yourcompany.atlassian.net) -cc:mention@noreply.github.com -cc:review_requested@noreply.github.com -cc:assign@noreply.github.com'/>
<apps:property name='label' value='Notifications'/>
<apps:property name='shouldArchive' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='from:(boss@yourcompany.com OR client@bigclient.com OR accountant@example.com)'/>
<apps:property name='label' value='VIP'/>
<apps:property name='shouldStar' value='true'/>
<apps:property name='shouldAlwaysMarkAsImportant' value='true'/>
<apps:property name='smartLabelToApply' value='^smartlabel_personal'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='from:(accountant@example.com OR office@yourkidsschool.org OR secretary@yourclub.org.uk)'/>
<apps:property name='shouldNeverSpam' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='to:you+shopping@gmail.com'/>
<apps:property name='label' value='Shopping'/>
<apps:property name='shouldArchive' value='true'/>
</entry>
<entry>
<category term='filter'></category>
<title>Mail Filter</title>
<content></content>
<apps:property name='hasTheWord' value='has:attachment larger:10M'/>
<apps:property name='label' value='Large attachments'/>
</entry>
</feed>
^smartlabel_personal is how the file spells “Categorize as: Primary”. If you want the labels on older mail too, search each recipe’s criteria, select all the results and apply the label by hand. And export your own set once it’s working: it’s the quickest way to move filters to a second account or recover from a bad edit.
Where the labels go next
Filters are sorting, not a workflow. They’ll reliably put the right mail under the right labels; what you do with those labels afterwards is still up to you.
That’s where Kanmail comes in, and full disclosure, it’s ours. Connect Gmail with one-click Google sign-in and every label these filters apply can become a column on a board: Inbox, Bills and Deliveries side by side, with Newsletters on a separate reading workflow you switch to when you have time. The filters run on Google’s side as mail arrives, so they keep sorting whether Kanmail is open or not, and because Kanmail handles Gmail labels properly over IMAP (why that’s harder than it sounds), a message with two labels shows up in both columns. Kanmail’s search also sends Gmail syntax straight to Gmail, so the queries in this post work there too, which is a handy way to test one before it becomes a filter.
If you’re new to the idea of running email as a board, start with kanban for email. Either way, set up the first three filters above today. They take five minutes and they’ll outlast whichever client you read your mail in.
Frequently asked questions
How do I create a filter in Gmail?
Type your criteria into the Gmail search box on the web and check the results. Click Show search options at the right of the search box, then Create filter at the bottom of the panel. Tick the actions you want, such as Skip the Inbox or Apply the label, and click Create filter. You can also tick the box next to an email, open the More menu and choose Filter messages like these. Google's instructions for filters are for Gmail on a computer.
Do Gmail filters work on emails I already have?
Only if you ask. A filter normally acts on mail as it arrives. When you create one, tick "Also apply filter to N matching conversations" and Gmail runs it once over everything that already matches. That is a one-off pass, not an ongoing one. Filters that forward mail are the exception: Google says they only ever affect new messages.
Why is my Gmail filter not working?
Run the criteria as a search first. If the search doesn't find the message, the filter won't either. Common culprits: criteria that describe a state rather than the message, such as is:read or older_than:, which can never be true when mail arrives; a second filter that archives the same mail; and replies, which Gmail only filters if they match the criteria themselves. Also check for typos in addresses, since filters match exactly what you type.
How many filters can I have in Gmail?
Google's Gmail API documentation sets a maximum of 1,000 filters. Few people get near it, but a list of one-sender-per-filter rules becomes unmanageable long before that. Combine related senders into one filter with OR, as in from:(a@example.com OR b@example.com), and export a backup from Settings, Filters and Blocked Addresses once you have a set you like.
Can a Gmail filter match several senders or words at once?
Yes. Put them in brackets with OR between them, as in from:(boss@example.com OR client@example.com). Curly braces do the same job, so {from:amy from:david} matches either. A minus sign excludes, as in unsubscribe -from:notifications@github.com, and quotes match an exact phrase, as in subject:"order confirmation". Anything you can type into the search box can go into a filter's Has the words field.
Can Gmail filters automatically archive old emails?
No. A filter looks at each message once, as it arrives, and a new message is never old or already read at that moment. For a one-off clean-up, search in:inbox is:read older_than:30d, select every matching conversation and archive them. For a recurring version, a few lines of Google Apps Script on a daily trigger can run the same search and archive the results.


