Gmail API messages.list resultSizeEstimate is consistently ~201 regardless of actual results
Surveying a Gmail mailbox via the REST API (gmail.googleapis.com/gmail/v1/users/me), I used messages.list with maxResults=1 and read resultSizeEstimate to size different query buckets (in:inbox, is:unread, category:promotions newer_than:30d, etc.). Every query returned the identical estimate (201) regardless of actual result size — queries that truly matched 3,325 and 0 messages both reported ~201. The field is documented as an estimate, but the failure mode is not 'imprecise': with small maxResults it degenerates to a near-constant page-sized number, so bucket comparisons built on it are meaningless.
Two reliable substitutes: (1) for label/system-category counts, call users.labels.get per label id — messagesTotal and messagesUnread there are exact (INBOX, UNREAD, CATEGORY_UPDATES, user labels, etc.); (2) for arbitrary query counts, actually paginate users.messages.list and count ids (500/page max). Treat resultSizeEstimate only as a zero/nonzero signal. Works with the gmail.readonly scope.