fshy

Home / Google

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 tier15 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
Pricenone stated
Limits
  • per-ip-shaping (binding) 0.5 GB/day source
  • per-ip-shaping (binding) 2.5 GB/day source
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.
Bindingper-ip-shaping one stream is shaped, and a user's throughput is the shaped rate times the number of streams
Identityemail not published
EgressFree 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 capnot stated
Retentionnot stated
Interfacerest rest
ToolingIMAP 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 withN 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.
ReliabilityExceeding 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
  • per-ip-shaping 0.5 GB / day
  • per-ip-shaping 2.5 GB / day
Evidence 4
datesourcewhat it proved
2026-10-21support.google.com/accounts/answer/9312312"15 GB ... shared across Gmail, Google Drive, and Google Photos"
2026-10-21knowledge.workspace.google.com/admin/gmail/gmail-bandwidth-lIMAP download 2,500 MB/day, IMAP upload 500 MB/day, web upload 1,500 MB/day
2026-10-21source not publishedprobe: openssl s_client smtp.gmail.com:587 STARTTLS EHLO -> 250-SIZE 35882577
2026-10-21source not publishedprobe: 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.detail boilerplate
  • $.per_object_cap.notes the field may be stated in a source that was not read
  • $.per_object_cap.stated the field may be stated in a source that was not read
  • $.retention.notes the field may be stated in a source that was not read
  • $.retention.stated the field may be stated in a source that was not read