GPT-5.5 Was Overkill: I Ran the Same Job on Three OpenAI Models and Measured the Bill
I run a small bot that writes articles automatically. Every day it reads incoming search-trend data and produces a piece explaining what is rising and why. The problem was that its writing had no substance: barely a thousand characters, padded with empty phrases like "interest is heating up" and "this offers meaningful implications."
So I upgraded it to OpenAI's top-tier model, gpt-5.5. The writing improved, no question. And five dollars vanished in a single day — after the previous two weeks had cost a grand total of twelve cents. That accident prompted this experiment: run the same job through three different models and actually measure length, quality, and cost.
How the test was set up
I controlled the conditions as tightly as I could. Identical input data (the same trend email from the same day), an identical prompt, the same tools (web search allowed), the same output format (JSON). Only the model changed. The requirements were identical too: at least 2,500 Korean characters, 8 to 12 paragraphs, use web search to find the real cause, and say plainly when a cause could not be verified.
The three models were all OpenAI: gpt-5.5 (the one that caused the accident), gpt-5.4-mini (the cheap end), and gpt-5.6-luna in between. Prices are per 1M tokens (input/output) from the official price list at the time of the test, July 2026.
| Model | Input | Output | Note |
|---|---|---|---|
| gpt-5.5 | $5.00 | $30.00 | the one that burned the money |
| gpt-5.6-luna | $1.00 | $6.00 | newly tested here |
| gpt-5.4-mini | $0.75 | $4.50 | cheapest candidate |
Results
| Metric | gpt-5.5 | gpt-5.4-mini | gpt-5.6-luna |
|---|---|---|---|
| Korean length | 5,405 chars | 467 chars | 3,983 chars |
| Paragraphs | ~10 | 1 | 14 |
| Time taken | 193 s | 28 s | 36 s |
| Followed instructions | Yes | No | Yes |
| Cost per article | ~$0.72 | ~$0.05 | ~$0.11 |
The numbers make the conclusion look obvious. What was actually interesting sat behind them.
Finding 1. Even gpt-5.5 does not guarantee good writing
Here is how the 5,405-character piece from gpt-5.5 opened: "In the Rising search CSV, the number one entry 'click on ai' was captured as Breakout, and number two, 'ai digital education material portal,' was captured at 4,950%."
This is a blog post for readers, written in the voice of someone reading an internal worksheet aloud. The reader has never seen a CSV and has no reason to care. It was not an article; it was a status report to whoever commissioned the work. The length and factual density were excellent, but it was not written for a human reader.
When I traced the cause, it was not the model. It was my own prompt, in three places. First, the prompt literally said "quote the increase values and ranks from the CSV rows." Second, I handed the model its input data labelled "Rising search CSV rows JSON" — so it copied that label straight into the prose. Third, I had cast its role as a "senior AI-industry analyst." Give an analyst a spreadsheet and you get a report; that is exactly what an analyst does.
No amount of money fixes that. gpt-5.5 followed my instructions faithfully. The instructions were wrong.
Finding 2. gpt-5.4-mini ignores instructions
The opposite extreme was just as clear. Asked explicitly for "at least 2,500 characters, 8 to 12 paragraphs," gpt-5.4-mini returned 467 characters in a single paragraph. It finished in 28 seconds, which means it barely searched the web at all.
The interesting part is that those 467 characters were not bad. The voice was clean, and it caught something the others could have missed. That day's data showed a spike for the query "ai cập" — and gpt-5.4-mini correctly identified it as Vietnamese for "Egypt," i.e. World Cup match searches that had leaked into an AI keyword list purely because the letters "ai" appear in them. It was also honest about what it could not verify.
In other words, it did not lack comprehension; it lacked stamina. It says the essential thing and stops. For summarising, that is a strength. Ask it for a long, deep piece and it simply ignores the request.
Finding 3. The real cost bomb was not the model
This was the most valuable finding. What burned five dollars in a day was not the model tier — it was web search.
The prompt told the model to "research each of the top 5 to 8 rising keywords with web search." It performed, on average, 13 searches per article. And the billing lands in three layers.
- Search call fees — OpenAI's web search tool bills $10 per 1,000 calls, one cent each.
- Search results billed again as input tokens — the fetched page content flows straight into the next request's input. Input per article swelled to roughly 69,000 tokens. Before web search, it was 3,000–5,000.
- That huge input processed by the priciest model — a high input rate multiplied across a very large number.
Breaking the bill down, more than half the cost was input tokens. I paid more for the search results being read in than for the article being written out. Lowering the model tier while leaving search untouched only solves half the problem.
Finding 4. Without json_schema, you cannot use cheap models
gpt-5.4-mini's first attempt failed outright. The returned JSON broke at character 4,763 and could not be parsed.
Opening the code revealed why. The prompt was merely asking the model to "respond in JSON." The whole design hoped the model would comply. gpt-5.5 happened to comply; gpt-5.4-mini broke the format somewhere in the middle of a long Korean string.
The OpenAI Responses API offers schema-enforced output via json_schema. Declare the response shape with strict: true and the model cannot deviate from it. Once I applied that, gpt-5.4-mini ran reliably. That single design flaw had effectively locked the system into "only expensive models work here."
Conclusion: gpt-5.6-luna won
The final pick was gpt-5.6-luna. It produced 3,983 characters across 14 paragraphs, meeting both the length and depth requirements, with zero occurrences of the banned worksheet vocabulary. Where it could not verify a cause, it said so honestly. It ran 1,400 characters shorter than gpt-5.5 — but most of that gap was padding.
And the cost fell from $0.72 to $0.11 per article, once I also capped searches at four and lowered the output token ceiling. At 30 articles a month, that is $21 down to $3.
What I took away
- Don't try to buy your way out of a quality problem. Our bot wrote badly not because the model was cheap, but because I had blindfolded it (no web access) and told it to be brief (the prompt). Fix those two and gpt-5.6-luna — one seventh the price of gpt-5.5 — is plenty.
- Voice is the prompt's job. Even gpt-5.5 will write "captured in the CSV as." If you never state who the writing is for — a reader or a client — the model will not decide for you.
- Tool use is billed twice, sometimes three times. OpenAI's web search charges per call and then returns as input tokens. Always cap the number of calls when you enable a tool.
- Skip
json_schemaand you narrow your model choices. Without an enforced schema you become dependent on "expensive models that happen to follow formats." - gpt-5.4-mini isn't stupid — it's short. Comprehension is fine; stamina isn't. Depending on the job, that can be a feature.
- Every test run is a real bill. Experimenting repeatedly on an expensive configuration costs money by itself. Compare against output you already paid for, and generate only one new sample at a time.