Gmail (free @gmail.com) — 15 GB shared, and the honest ceiling of 'Gmail as infinite storage'
mail.google.comCloud drivestorage/gmail-15-gb-shared-and-the-honest-ceiling-of-gmail-as-inJSONcomparereport an errorprovider JSON
- Free allowance
- 15 GB per Google Account, shared across Gmail, Drive and Photos: "Each Google Account includes up to 15 GB of storage, which is shared across Gmail, Google Drive, and Google Photos." Attachments: 25 MB send ("For personal Gmail accounts, the limit is 25 MB"), 50 MB receive.
- Verdict
- fails: quotathe free allowance is too small to matter
- Cost
- free tier
- Identity
- emailno card, no phone
- Binding limit
- per-ip-shaping0.5 GB/day; 2.5 GB/day
- Evidence
- reported4 sources; a third party said so
- Freshness
- stale on 2026-11-05checked 2026-10-21 (inherited); stale on 2026-11-05
| Free tier | 15 GB per Google Account, shared across Gmail, Drive and Photos: "Each Google Account includes up to 15 GB of storage, which is shared across Gmail, Google Drive, and Google Photos." Attachments: 25 MB send ("For personal Gmail accounts, the limit is 25 MB"), 50 MB receive. unit GB; metered on stored-bytes |
|---|---|
| Price | none stated |
| Limits | SMTP advertises 250-SIZE 35882577 (34.2 MiB) per message. So per account the real write rate is ~0.5 GB/day and the real read rate is ~2.5 GB/day. Filling 15 GB therefore takes a **minimum of ~30 days per account**, and serving 500 GB/day of reads requires **~200 accounts running in parallel every day**. Gmail is not a fetch tier by two orders of magnitude. To reach 10 TiB of writes you would need 20,480 account-days of upload. Verdict on the idea: 15 GB × unlimited accounts is arithmetically true and operationally false — the daily byte meter, not the quota, is the wall. |
| Binding | per-ip-shaping one stream is shaped, and a user's throughput is the shaped rate times the number of streams |
| Identity | email not published |
| Egress | Free for the account holder — Gmail has no egress meter at all; the constraint is the bandwidth throttle, not a price. That is precisely why the throttle is the finding. |
| Per-object cap | not stated |
| Retention | not stated |
| Interface | rest rest |
| Tooling | IMAP probe-verified: imap.gmail.com:993 -> * OK Gimap ready / * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER (XOAUTH2 required for real use). Gmail API: messages.insert = 25 units, 6,000 units/min/user, 80,000,000 units/day/project. |
| Composes with | N accounts × 15 GB minus whatever Drive/Photos already took. But the multiplier that matters is not accounts — see limits. This is the classic 'infinite Gmail storage' idea and it does not survive arithmetic. |
| Reliability | Exceeding the bandwidth limit suspends IMAP upload for ~1 hour (up to 24 h); repeated heavy sync is the documented trigger, and the docs explicitly call out 'syncing a Gmail account to a third-party email client' as a cause. |
| Parsed numbers |
|
Evidence 4
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | support.google.com/accounts/answer/9312312 | "15 GB ... shared across Gmail, Google Drive, and Google Photos" |
| 2026-10-21 | knowledge.workspace.google.com/admin/gmail/gmail-bandwidth-l | IMAP download 2,500 MB/day, IMAP upload 500 MB/day, web upload 1,500 MB/day |
| 2026-10-21 | source not published | probe: openssl s_client smtp.gmail.com:587 STARTTLS EHLO -> 250-SIZE 35882577 |
| 2026-10-21 | source not published | probe: imap.gmail.com:993 -> * OK Gimap ready; CAPABILITY incl. QUOTA, X-GM-EXT-1, AUTH=XOAUTH2 |
More fields 1
{
"dead_end": {
"failure_class": "quota",
"why": "15 GB per Google Account, shared across Gmail, Drive and Photos: \"Each Google Account includes up to 15 GB of storage, which is shared across Gmail, Google Drive, and Google Photos.\" Attachments: 25 MB send (\"For personal Gmail accounts, the limit is 25 MB\"), 50 MB receive.",
"retry_when": null,
"first_recorded": "2026-10-21"
}
}Unknown values 5
$.identity_cost.detailboilerplate$.per_object_cap.notesthe field may be stated in a source that was not read$.per_object_cap.statedthe field may be stated in a source that was not read$.retention.notesthe field may be stated in a source that was not read$.retention.statedthe field may be stated in a source that was not read