This Google Script will scan the inbox of your Gmail and archive any message that you’ve read (seen) and is older than a month. It skips messages that are either starred or marked with a particular label like toReply.
function archiveInbox() {
var query = 'label:inbox is:read older_than:30d -in:starred -label:toreply';
var batchSize = 100;
while(GmailApp.search(query, 0, 1).length == 1) {
GmailApp.moveThreadsToArchive(GmailApp.search(query, 0, batchSize));
}
}
Here's an alternate way to deal with the same issue. It checks for individual messages in a Gmail thread before moving them to the Archive.
function cleanInbox() {
var threads = GmailApp.getInboxThreads();
for (var i = 0; i < threads.length; i++) {
var thread=threads[i];
if (!thread.hasStarredMessages() && !thread.isUnread()) {
GmailApp.moveThreadToArchive(threads[i]);
}
}
}