Ullage vs. fill level: what each number actually tells you
If you've pulled storage data from two different sources and gotten numbers that don't line up, the mismatch is often not an error. It's two different measurements being reported as if they were the same thing.
Fill level: how much is in the tank right now
Fill level is the straightforward one. It's the volume of product currently sitting in a tank, usually expressed as a percentage of shell capacity or as a height reading (feet or meters of liquid). A tank at 70% fill level has 70% of its working capacity occupied by crude. This is the number you want when you're comparing week-over-week builds or draws against an EIA or API print, or sanity-checking a terminal's reported stock against what the tank farm is reporting.
Ullage: the space that's still open
Ullage is the gap above the product, the empty headspace between the liquid surface and the top of the tank (or, on a floating roof tank, the clearance between the roof and the shell rim). It's the inverse question: not "how much oil is in there," but "how much more could go in before this tank is full."
Ullage matters most to anyone thinking about available storage space rather than current inventory. Terminal operators use it to plan incoming cargoes. Traders use it to figure out whether a hub has room to absorb a contango-driven storage play, or whether tankage at a given location is close enough to tapped out that any further inbound barrels have nowhere to go. A tank with high fill level and low ullage is a tank that's nearly full. A tank with low fill level and high ullage has a lot of open capacity sitting idle.
Add them together (roughly, once you account for the dead space a floating roof takes up even at zero product) and you get back to the tank's shell capacity. They're two ways of describing the same physical space from opposite ends.
Where the confusion comes from
The mix-up usually shows up in two places. First, some operators and data vendors report "ullage" as remaining shell capacity for an entire tank farm, which makes it hard to compare against a per-tank fill estimate for a single tank. Second, floating roof tanks measure fill level a bit differently than fixed roof tanks: because the roof rides directly on the liquid surface, the roof's height above the tank's base is the fill level. There's no separate "liquid level sensor" reading through a headspace of vapor. The roof position is the read.
That detail is also why floating roof tanks are the ones you can estimate from overhead imagery in the first place. As the roof rises and falls with the oil level, it casts a shadow against the inside wall of the tank, and the length of that shadow changes in a predictable way with sun angle and roof height. Measure the shadow, know the sun angle and tank dimensions, and you can back out where the roof sits, which gives you the fill level without anyone inside the fence disclosing a number. That's the basis of the daily per-tank read Oil Tank Fill runs across floating-roof tanks in a defined area.
Why this distinction matters for a storage read
When you're building a view of regional storage, the question you're asking determines which number you want. "Is this hub getting tighter or looser week over week" is a fill-level question, tracked over time. "Could this terminal take another VLCC worth of crude without running out of room" is an ullage question, a snapshot of remaining space. Pulling the wrong one into a trade thesis, or comparing a vendor's ullage figure against your own fill-level estimate without converting between them, is a quiet way to be wrong about a storage picture while feeling confident about it.
Neither number tells you anything on its own without knowing the tank's shell capacity, so if you're working from partial industry surveys or delayed inventory reports, it's worth confirming which of the two you're looking at before you build a trade around it.
If you want a fill-level read that doesn't depend on waiting for someone else's disclosure, that's the gap Oil Tank Fill is built to close.