◉GEMINI LABJP
●ARGON — gemini-4-argon is generally available as of 10/13, aimed at complex coding, agents, math and science●DEEP RES — deep-research-pro-preview-12-2025 shuts down today (10/23). Move to deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 is GA (10/06). gemini-3.1-flash-image is deprecated with no shutdown date yet●MCP — One write-up cut an 85,000-token tool result to 310 tokens by wrapping it in an ADK FunctionTool●FLASH — gemini-3.7-flash and 3.5-flash now route automatically to newer Flash models (10/08)●NEW — Stop Re-Reading Every Crash Report: Gre…●ARGON — gemini-4-argon is generally available as of 10/13, aimed at complex coding, agents, math and science●DEEP RES — deep-research-pro-preview-12-2025 shuts down today (10/23). Move to deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 is GA (10/06). gemini-3.1-flash-image is deprecated with no shutdown date yet●MCP — One write-up cut an 85,000-token tool result to 310 tokens by wrapping it in an ADK FunctionTool●FLASH — gemini-3.7-flash and 3.5-flash now route automatically to newer Flash models (10/08)●NEW — Stop Re-Reading Every Crash Report: Gre…
Articles/API / SDK
◈ API / SDK/2026-09-08Beginner

Writing my first Gemini cost estimate in two columns, one for now and one for January

Introductory pricing for Gemini Flash ends on December 31, 2026, and standard pricing starts on January 1, 2027. Staying on an older generation does not avoid it. Here is the small, working estimator I use to see both prices at once.

Gemini API250pricing9cost management4Flash3indie development28

✦ Premium Article

I was reworking next year's numbers late one evening, looking at the 0.75 I had typed by hand into the corner of a spreadsheet. The batch jobs I run as an indie developer are all small ones, but the number of them that fire every day keeps growing, and the end-of-month invoice always lands a little outside what I expected.

What I was thinking at that moment was simple. If I don't move up to the newer Flash, I keep this rate.

I opened the migration docs one more time, just to be sure, and my hand stopped. I had read it wrong.

The end of the introductory price is attached to the calendar, not to the model

Google's What's new in Gemini 3.8 Flash states the pricing plainly. The introductory rate is $0.75 per 1M input tokens and $3.75 per 1M output tokens, through December 31, 2026. Standard pricing of $1.50 and $7.50 takes effect on January 1, 2027.

Here is the part I had misread. The same page says that introductory pricing runs through the end of 2026 for Gemini 3.8 Flash, Gemini 3.7 Flash, and Gemini 3.6 Flash. The deadline sits on the calendar, not on the generation you happen to be calling.

Staying put on an older model does not move that date. My assumption — that not upgrading would keep the rate where it was — never held in the first place.

That isn't a hostile design. It was my own assumption. But a spreadsheet built on that assumption will lie to me in January without saying a word, because spreadsheets don't raise their hand.

Estimates break the moment a price is written as a number

For a long time I kept these estimates in a spreadsheet. Type 0.75 into the rate cell, multiply by tokens, read the month. I thought that was enough.

It stopped being enough once I was calling more than one model. The month I started using different models for the classification batch on my wallpaper app and for the first pass of translations on my sites, I could no longer tell what the rate in that cell had been for. A cell holds a number and nothing else. Which date it came from, which model it belonged to, when it was last touched — none of that lives inside the digits.

At first I tried patching around it with a notes column. That did not go well. Notes stop being updated while the number keeps walking around on its own.

So I drew a different line. A price is not a number; it is a record with a start date and an end date attached. Being able to doubt the 0.75 I typed is the whole point. Once the number knows when it is valid, the January calculation comes back into my hands.

What follows is the smallest version of that idea. Python, standard library only.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦You will be able to build one small estimator of your own that keeps working across the day the price changes
✦You will be able to decide when to move models without the false comfort of thinking an older generation keeps your rate frozen
✦You will avoid the long detour of hard-coding a rate and only noticing next January, when the invoice tells you
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Gemini Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

◈ API / SDK2026-09-29
The Size Column Said 'F6' and 'About A4' — I Let Gemini Read It, and Let a Table Do the Math
An artist's spreadsheet mixed 'F6', '41×31.8cm', and 'about A4' in one size column. Here is the small tool I built: Gemini reads each cell, a lookup table converts to centimeters, and the artwork image decides the orientation. Working code, step by step.
◈ API / SDK2026-09-11
When Transcription Keeps Mangling Proper Nouns: Choosing What Earns a Custom Vocabulary Slot
gemini-3.5-transcribe accepts up to 1,000 custom_vocabulary entries, but filling the list is not the goal. Here is a 60-line script that picks entries from your own reference-and-hypothesis pairs, plus the rules I use to decide what to leave out.
◈ API / SDK2026-09-07
The day Lyria 3.5 landed, I changed how my audio folders are laid out
When Lyria 3.5 brought full-length generation, my generated takes were sitting in the same folder as the tracks I had chosen by hand. Here is the forty-line ledger gate that draws the line by hash, not by filename.