<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shawn Yang</title>
    <description>The latest articles on DEV Community by Shawn Yang (@romeroyang).</description>
    <link>https://dev.to/romeroyang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4106089%2Fd47c9243-4cf4-43ee-ba82-a044bb1ff9a1.jpg</url>
      <title>DEV Community: Shawn Yang</title>
      <link>https://dev.to/romeroyang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/romeroyang"/>
    <language>en</language>
    <item>
      <title>Gemini's free tier, measured: 20 requests a day, and Google no longer publishes the number</title>
      <dc:creator>Shawn Yang</dc:creator>
      <pubDate>Wed, 02 Sep 2026 11:58:34 +0000</pubDate>
      <link>https://dev.to/romeroyang/geminis-free-tier-measured-20-requests-a-day-and-google-no-longer-publishes-the-number-4gf2</link>
      <guid>https://dev.to/romeroyang/geminis-free-tier-measured-20-requests-a-day-and-google-no-longer-publishes-the-number-4gf2</guid>
      <description>&lt;p&gt;If you want to know how many requests the Gemini free tier gives you, you can no longer look it up. Google pulled the RPM/RPD tables out of its docs and left one sentence: check Google AI Studio for your own.&lt;/p&gt;

&lt;p&gt;So we measured every model with a key created that morning. Numbers and method below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;p&gt;Measured 2026-09-02, on a Google account, project and API key all created that day, with no billing attached:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;RPM&lt;/th&gt;
&lt;th&gt;RPD&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-3.7-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-3.6-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-3.5-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-3-flash-preview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-3.1-flash-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemini-embedding-2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two caveats belong with those figures. Quota is counted &lt;strong&gt;per project, not per key&lt;/strong&gt; — minting extra keys in the same project buys you nothing. And RPD resets at &lt;strong&gt;midnight Pacific&lt;/strong&gt;, not at your local midnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google stopped publishing them
&lt;/h2&gt;

&lt;p&gt;This is not a case of the table being hard to find. The Gemini rate-limits page now contains &lt;strong&gt;zero occurrences of the phrase "free tier"&lt;/strong&gt;. Its only tables are spend-based rate limits, the qualification thresholds for each paid tier, and batch quotas for Tiers 1 through 3. There is no free-tier table at all.&lt;/p&gt;

&lt;p&gt;The prose says limits "can be viewed in Google AI Studio" and that "specified rate limits are not guaranteed". The individual model pages carry no RPM or RPD either.&lt;/p&gt;

&lt;p&gt;The third-party articles that still quote figures are mostly copies of an older revision of that page. They disagree with each other, and none of them cover the 3.x models currently on sale, so republishing one amounts to inventing a vendor's numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  You don't have to count — the 429 tells you
&lt;/h2&gt;

&lt;p&gt;The obvious way to measure a rate limit is to hammer the endpoint until it fails and count what got through. That only ever gives you a &lt;strong&gt;lower bound&lt;/strong&gt;: concurrency, retries and window boundaries all cost you a few requests, and you never learn how many.&lt;/p&gt;

&lt;p&gt;You don't need to. When Gemini rejects you, the 429 body &lt;strong&gt;contains the limit itself&lt;/strong&gt;. The error's &lt;code&gt;details&lt;/code&gt; array carries a &lt;code&gt;google.rpc.QuotaFailure&lt;/code&gt;, and each violation names the quota and its value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quotaMetric"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"generativelanguage.googleapis.com/generate_content_free_tier_requests"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quotaId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GenerateRequestsPerDayPerProjectPerModel-FreeTier"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quotaDimensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini-3.5-flash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"global"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quotaValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trip the limit once and Google hands you the answer. Every figure in the table above was read out this way rather than counted, which makes each one &lt;strong&gt;the limit&lt;/strong&gt; rather than an observed floor — a distinction worth caring about if you plan to design around the number.&lt;/p&gt;

&lt;p&gt;Three quota ids are worth knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GenerateRequestsPerMinutePerProjectPerModel-FreeTier&lt;/code&gt; → RPM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GenerateRequestsPerDayPerProjectPerModel-FreeTier&lt;/code&gt; → RPD&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EmbedContentRequestsPerDayPerUserPerProjectPerModel-FreeTier&lt;/code&gt; → embeddings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note the extra &lt;code&gt;PerUser&lt;/code&gt; in the last one. Embeddings are metered on a different basis from text generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2.5 models are closed to new signups
&lt;/h2&gt;

&lt;p&gt;Something else fell out of the run. &lt;code&gt;gemini-2.5-pro&lt;/code&gt;, &lt;code&gt;gemini-2.5-flash&lt;/code&gt; and &lt;code&gt;gemini-2.5-flash-lite&lt;/code&gt; all return 404 to a freshly created key, with the message that the model "is no longer available to new users". We reproduced it from Singapore and Tokyo.&lt;/p&gt;

&lt;p&gt;Google's pricing page &lt;strong&gt;still lists all three as free of charge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vendor documentation can lag the vendor's own API. That is worth remembering if you maintain any kind of comparison table: what a page says is available is not the same as what a key can actually reach. It caught us too — our own free-tier listing was serving three entries no new reader could open, and this run is how we found out.&lt;/p&gt;

&lt;p&gt;There is a knock-on effect. Free Google Search grounding — 500 requests a day, shared — is attached to exactly two models, &lt;code&gt;gemini-2.5-flash&lt;/code&gt; and &lt;code&gt;gemini-2.5-flash-lite&lt;/code&gt;. On every 3.x model the free-tier column reads "Not available". So new signups cannot get free grounding at all any more. The allowance did not shrink; the route to it closed.&lt;/p&gt;

&lt;h2&gt;
  
  
  3.7 Flash works, but you'll wait
&lt;/h2&gt;

&lt;p&gt;The newest model, &lt;code&gt;gemini-3.7-flash&lt;/code&gt;, is genuinely usable on the free tier — it just queues badly. Issued one at a time, requests came back in 27 to 148 seconds. Under concurrency, latency rose monotonically with queue depth: we logged 27, 71, 132, 141, 178, 171, 174, 270 and 354 seconds, and one request was still unanswered when a 500-second timeout fired.&lt;/p&gt;

&lt;p&gt;That is not a rate limit and will never appear in an RPM or RPD figure, but it shapes what the model is good for far more directly.&lt;/p&gt;

&lt;p&gt;A methodological aside, because it nearly cost us the finding: our first probes used 30- and 45-second timeouts. All four failed, from two continents, while &lt;code&gt;countTokens&lt;/code&gt; on the same model answered in 0.2s — and we were about to write the model up as gated on the free tier. &lt;strong&gt;A timeout is not evidence of absence.&lt;/strong&gt; Four probes that share one too-short budget are one probe, not four. Give an endpoint an absurd budget once before you declare it dead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 20 requests a day actually buys
&lt;/h2&gt;

&lt;p&gt;Note that this is 20 requests &lt;em&gt;per day&lt;/em&gt;, not per minute.&lt;/p&gt;

&lt;p&gt;A single agent run with tool calls will make a dozen or more round trips, so the Flash free allowance covers roughly &lt;strong&gt;one or two complete agent tasks a day&lt;/strong&gt;. Any batch script, or any automation you wire into a pipeline, hits the wall on its first run.&lt;/p&gt;

&lt;p&gt;Flash-Lite is meaningfully more generous and remains fine for classification, extraction and tagging work, and 1000 embedding calls a day is enough to index a personal project. What has effectively gone away is running a real workload on free Flash.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check it yourself
&lt;/h2&gt;

&lt;p&gt;These numbers can change at any time, and Google explicitly does not guarantee them. Reproducing the measurement takes one command: grab a key, fire a dozen requests at one model as fast as you can, and read the first 429.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 12&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"content-type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"contents":[{"parts":[{"text":"hi"}]}],
         "generationConfig":{"maxOutputTokens":8}}'&lt;/span&gt; &amp;amp;
&lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;wait&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whatever &lt;code&gt;quotaValue&lt;/code&gt; comes back is your project's real limit.&lt;/p&gt;

&lt;p&gt;For RPD, keep sending just under the RPM figure until the day's allowance runs out — and use a throwaway key, because that project is finished for the day once you do.&lt;/p&gt;




&lt;p&gt;We keep these figures, alongside other providers' free allowances, on a &lt;a href="https://aiplug.work/en/deals" rel="noopener noreferrer"&gt;free-tier comparison page&lt;/a&gt; that is recollected daily, and mirror the underlying dataset to &lt;a href="https://github.com/RomeroYang/free-llm-api-deals" rel="noopener noreferrer"&gt;a public repo&lt;/a&gt; under CC BY 4.0 if you'd rather diff the raw JSON.&lt;/p&gt;

&lt;p&gt;If you want the other fields worth checking before you commit to a provider, there's &lt;a href="https://aiplug.work/en/blog/how-to-vet-an-llm-relay" rel="noopener noreferrer"&gt;a ten-minute checklist&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gemini</category>
      <category>api</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
