Skip to content

Blog

Three kinds of absence, and only one is about the tool

A vendor can print Not available, publish figures we could not split, or serve us nothing. Two leave no row, and a missing row cannot say which.

By the editorial desk · Updated Aug 25, 2026

When a figure is missing from one of our tool profiles, the row is missing with it. A tool profile's source ledger does not print a blank cell for a value we could not establish: it prints no row, and on one profile no ledger at all. That absence can look like a gap in our research, or a gap in the product. It is usually neither. Three separate things produce it, and only one of them is a fact about the tool. The other two are facts about a page, and about what happened when we tried to read it.

When the vendor states there is nothing to offer

Sometimes the vendor answers the question directly, in a specific field, with a specific word, and there is nothing left to infer. Google's Gemini API pricing page lists a Free Tier row for Google Veo. For Veo, that row does not sit blank. It reads Not available, printed by Google, and it is the reason Veo's profile carries a free tier row of its own.

That is Google stating the absence, not us concluding one from silence. The same page prints a per-second rate for the model, $0.05 per second at 720p, so the page is not simply silent on numbers in general. The Free Tier row is not an unfinished part of the page. It is a finished row with a specific answer, and the answer is that Veo has no free tier through the Gemini API, which is the surface we read. We did not check Google's consumer products for a separate way in.

Reading it this way changes what a buyer does with it. A pricing page that simply omits a free tier leaves you guessing whether to ask sales or assume the worst. A page that states Not available tells you the decision is already made: budget for the $0.05 per second from the first request, or evaluate a different tool for nothing on the surfaces where one still offers that.

When a vendor publishes a figure we cannot split

Sometimes the vendor does publish a number, and the failure sits on our side of reading it rather than on theirs. HeyGen's pricing page offers a monthly cadence and a yearly one, prints a figure against its cheapest paid plan, and gives us no way to tell from the document which of the two that figure belongs to.

We read that page, twice, and the second time with an explicit English preference. Both times it served us its Vietnamese edition, and the English path we tried returned a 404. So no entry price appears on that profile. What does appear is the free tier, because the page states that one plainly. This case looks like a ledger with a row missing out of the middle of it, and the gap is a fact about the card and about our confidence in reading it, not a fact about what HeyGen charges.

This case used to be Runway's, and it is worth saying why it moved rather than quietly swapping the name. Runway's card prints two monthly figures side by side and an earlier reading could not tell them apart. It can now: one of them is struck through, the card says billed annually and names the saving, and the saving is exactly the gap between the two across twelve months. Nothing changed about our standard. The page got easier to read, so a row that had been missing was filled in.

This is a different absence from Veo's, and it does not look the same on the page either. Google's answer is a row you can read. HeyGen's is a row that was never written. Google chose a word; HeyGen printed a figure and left the cadence to a control we could not read. The figure is legible if you open HeyGen's own page, and reading it there is better than taking one from us that we were not sure was the right one.

When the page does not reach us

The third case is not a wording problem or a reading problem. It is an access problem: the page we needed never returned anything we could read. OpenAI Sora's developer pricing page always did, publishing a per-second rate of $0.10 per second at 720p for the sora-2 model. The pages a consumer would open, the ones carrying plan pricing and any free allowance, did not. So that profile carries a ledger with the per-second rate in it and no free tier row underneath.

What those pages were carrying is the part worth sitting with. OpenAI had discontinued the Sora apps on April 26, 2026, and the product URL redirects to a help center article saying so. The document was there the whole time. Our fetcher could not read it, and what we could not read turned out not to be a price at all. It was the fact that the product had already gone.

That cuts both ways and only one of them is comfortable. Writing that the consumer page showed no free tier would have put a claim about an offer on a page we never opened, and the offer had already stopped existing, so the claim would have been wrong twice over. Not writing it is the policy working. But the same failed fetch let a line stand at the top of that profile for four weeks saying Sora reaches most people through the consumer app, because nothing here was checking a sentence that came from expectation rather than from a document. The policy protects the rows. It does nothing for the prose above them.

Midjourney is the same case carried to its end. Both of the clients we asked with were refused, on every URL we tried, so that profile carries no ledger at all rather than a ledger with a gap in it. There is nothing for us to print, and nothing we are willing to say about what Midjourney charges in either direction.

Why we leave the row off rather than fill it

A row filled with a guess is worse than no row, because a guessed figure reads exactly like a checked one until a reader has already budgeted around it and it turns out wrong. So a value goes in when we have read it and dated it, and stays out when we have not.

Our methodology page states the policy behind all three cases: where a vendor publishes nothing on a point, we leave the field empty rather than fill it. What an unfilled field records is what we did not find, never that the feature is missing. On a profile it prints no row, and on Midjourney's it prints no ledger.

The three cases above are what that policy looks like against real pages: Google stating an absence outright, HeyGen printing a figure whose cadence we could not settle, and OpenAI's consumer pages carrying an answer our fetcher could not read. Only the first is about the product, and only the first leaves a row where the figure would have gone. The other two leave none, and an absent row cannot say which of them it was: it records that we did not establish a figure, never what stopped us. That is why each of those three profiles says in words what a missing row cannot.