The price per million tokens looks negligible until you multiply it by real volume. The usual culprit is not an expensive model but a process doing more work than it needs to, and nobody notices until the invoice arrives.
The biggest lever is model selection
Most routine calls do not need the strongest model. Classification, pulling data out of text, short answers, translation – the cheapest tier handles all of it equally well. The price gap between the cheapest and the most expensive tier runs to several multiples.
The practical approach is routing: simple tasks to a cheap model, complex ones to an expensive one. Teams that introduce this typically halve their bill or better, with no change in output quality.
Prompt caching
If you send the same system prompt or the same document on every call, that portion does not need to be billed at full rate each time. Caching lets the repeated part be charged at a much lower tariff – with most providers, around a tenth of the base input price.
For automation where the system prompt is identical across thousands of calls, this is the easiest saving available.
Batch processing
If you do not need the answer immediately, most providers offer a significant discount for asynchronous processing, typically around half price. Ideal for overnight jobs, data processing, and anything non-interactive.
The discounts usually stack, so a cached batch request can cost a small fraction of standard.
Constrain the output
Output tokens cost several times more than input tokens. If you want a summary, say how many sentences. If you want JSON, ask only for the fields you use. An unconstrained model writes longer than you need, and you pay for it.
Limits and monitoring
Set a spending cap before you put anything into production. It is the only thing standing between you and a stuck loop running all night.
Then track spending per task, not just in total. Without that you know the bill is rising but not why – and why is exactly the information that fixes the problem.
The order to do this in
Limits first, then model selection, then caching, then batching. The first two deliver most of the saving and take the least time.