2026-09-11

How to Evaluate BESS Manufacturers: 9 Years and $214,000 in Sourcing Mistakes

Most BESS sourcing decisions fail on the same three things — and none of them are in the catalog. A sourcing manager's field notes on system-level certification, LCOS assumptions, warranty fine print, and the five checks that actually filter suppliers.

The question that starts every sourcing call

"Send me your lithium battery catalog and your price per kWh."

That's the opening line of maybe 80% of the inbound emails I get. And honestly, I get it. $/kWh is the only number that fits neatly into a spreadsheet cell, and a spreadsheet is what you need to bring to whoever signs off on your budget. So you collect catalogs from six BESS suppliers, drop the price into column B, the cycle life into column C, the chemistry into column D, and you pick the winner.

I did that in 2017. Then again in 2020, and again in 2022. Three rounds, and roughly $214,000 in decisions I'd take back if I could — most of it mine, not the suppliers'.

Here's what I wish someone had told me in year one: almost every "how to evaluate BESS manufacturers" guide out there is answering the question "which cell is best." That's not the question that decides whether your project works. It's just the question that feels answerable.

The catalog describes a cell. You're buying a system.

I'll give you the specific version, because the general version never landed for me either.

September 2022. We brought in 40 racks of lithium modules for a behind-the-meter project. Every datasheet number checked out. Cells from a reputable manufacturer, modules UL 1973 listed, cycle life claim matched our load profile on paper. I approved it myself. Around $1.4M.

What I hadn't locked down was the controls layer. The BMS did speak Modbus TCP — with a vendor-specific register map that was "available on request." It arrived eleven weeks later, in a PDF that hadn't been updated since two firmware revisions back. Our integrator burned three weeks reverse-engineering it. Then the auxiliary load estimate turned out to be based on an assumed 22°C ambient. Our site hits 41°C in August. Thermal management ate roughly 30% more parasitic load than the model showed, and the system underdelivered during exactly the peak window we'd promised the customer.

The most frustrating part of this whole category: it wasn't a bad battery. The battery was fine. It was a bad system, and I'd evaluated it as a component.

This is where certification language matters more than chemistry. UL 9540 is a system-level listing — it's issued to a specific configuration of battery, PCS, controls, and enclosure, not to a cell. UL 9540A is a test method for thermal runaway fire propagation, and the report is configuration-specific. UL 1973 covers the battery and module layer. UN 38.3 governs transport of the lithium cells. Those are four different documents, and a supplier who can only produce one of them is telling you something.

"Per NFPA 855 (2023 edition), stationary energy storage installations must meet system-level requirements that your AHJ will verify during permitting. Verify current requirements with your local authority — they vary more than most suppliers admit."

If you've ever had an AHJ reject a submittal two weeks before commissioning, you know that sinking feeling. The listing on the quote said UL 9540. The listing certificate didn't match the configuration we were installing. That's a three-week permit delay, and it's not the supplier's fault if you never asked for the certificate with the model number on it.

What was best practice in 2020 — buy the cheapest listed cell, integrate it yourself, sort out protocols in commissioning — doesn't survive contact with a 2026 permitting environment. The fundamentals of battery safety haven't changed much. The evidence bar has.

Nobody's LCOS number survives contact with the assumptions

This one took me the longest to internalize, and it's the reason the keyword "form energy iron air battery LCOS" gets searched as often as it does.

LCOS — levelized cost of storage — is a model, not a specification. It's the output of a spreadsheet someone else built, with assumptions you usually can't see. When a vendor hands you a slide that says $0.09/kWh, you're not looking at a performance figure. You're looking at the conclusion of a forecast.

The assumptions that move LCOS most, in my experience:

  • Cycles per year — often assumed at the maximum the chemistry allows, not what your dispatch profile will actually call
  • Round-trip efficiency measured at what C-rate and what cell temperature
  • Depth of discharge, and whether the warranty allows it
  • Augmentation schedule and the cost of the augmentation at year 7, not year 0
  • Residual value at end of contract

Change three of those and the same system swings by 40%. Lazard's public LCOS analysis (v8.0, mid-2024) is worth reading specifically because the methodology is disclosed — you can see which levers they moved and argue with them. Most vendor decks don't give you that option.

There's a second problem underneath the first: comparing across duration classes is a category error, and it happens constantly in procurement spreadsheets.

A 4-hour lithium system and a multi-day iron-air system do not solve the same problem, and putting them in adjacent rows of the same table is how you end up with the wrong asset on site. Form Energy's iron-air systems are publicly positioned around a roughly 100-hour discharge duration — that's multi-day firm capacity, not peak shaving. Judging it on $/kWh of nameplate capacity misses the entire point, because the value of a multi-day asset is what it delivers on the third consecutive cloudy, windless day, not in a 2-hour arbitrage window.

If round-trip efficiency is your primary metric, you're optimizing for a use case you may not have. Lithium wins on RTE. Multi-day chemistries win on days of autonomy per dollar. Pick the metric that matches your load profile before you pick the technology.

What the mistakes actually cost

I keep a running ledger, mostly so I stop repeating myself. A few entries:

2017 — bought on price without a BMS communication protocol clause in the contract. $18,400 in integration labor plus a three-week schedule slip. Lesson: protocol documentation is a deliverable, and it has a version number.

September 2022 — the 40-rack order above. Wrong auxiliary power assumption, $9,600 in re-cabling, plus a permit review delay that pushed commissioning past the customer's deadline. That one cost me more credibility than money.

Q1 2024 — third AHJ rejection in eighteen months, all for the same reason: certificate didn't match installed configuration. That's the one that finally produced our pre-check list.

But the money isn't really the cost. The cost is the schedule you can't compress, the customer who now double-checks your numbers, and the 11pm spreadsheet session where you're trying to figure out whether a warranty clause means what you think it means.

And the warranty clauses are where the real exposure sits. I've read enough of them now to know that the phrase "10 years" is doing a lot of quiet work. Usually it's 10 years or 6,000 cycles, whichever comes first. Usually there's a state-of-charge window you have to stay inside, an ambient temperature range, an annual throughput cap, a requirement to use the approved PCS, and a remote monitoring feed the manufacturer can see. Capacity is typically measured at cell temperature, not site ambient — which matters a great deal if your site runs hot.

I spent two weeks going back and forth between an established integrator and a lower-cost OEM on one project. The established name offered a service network within four hours and an audit trail I could hand to a lender. The OEM offered about 25% savings and real private-label flexibility — our branding on the enclosure, our firmware config, our spec sheet. On paper it was obvious. My gut said the service network mattered more for a flagship site. I went with the established integrator there, and with the OEM for a second, non-critical site where flexibility was worth more than response time. Documented both decisions so I could be honest about which one aged better (so far: the flagship, narrowly).

Which brings up private label specifically, because it gets treated as a branding question when it's actually a liability question. Four things to nail down before you put your name on someone else's hardware: who owns and updates the BMS firmware, who dispatches field service, what exactly appears on the nameplate and the certification documents, and what notification you get if the OEM changes a cell supplier mid-production. That last one is the one people forget.

What we screen for now

We've run this list past 47 supplier submissions in the last 18 months and caught issues on 19 of them. It's short on purpose.

  1. Certification stack with matching model numbers. UL 9540 for the exact configuration quoted, UL 9540A test report, UL 1973 for the modules, UN 38.3 for the cells. Certificates dated within the last 18 months. If the certificate says a different enclosure size than the quote, that's a stop.
  2. The LCOS model, not the LCOS slide. Ask for the spreadsheet. If they won't share it, treat the number as marketing and build your own.
  3. Warranty boundary test. Three questions: at what cell temperature is capacity measured, what's the annual throughput cap, and what voids the warranty. Vague answers are answers.
  4. Service map. Who's within a six-hour drive of the site, and are they employed by the manufacturer or contracted. Get a name, not a region.
  5. Cell supply and change notification. Who makes the cells, is there a second source, and what notice do you get if that changes.

That's it. It doesn't cover everything, but it filters out most of the submissions that would have cost us a quarter.

There's something genuinely satisfying about the moment a pre-check list starts catching things before they cost money. After three rejected submittals and one very long August, seeing a mismatch caught at the document stage instead of at commissioning — that's the payoff. No more 11pm warranty clause sessions. Mostly.

The short version

Read the certification stack before the catalog. Ask for the LCOS model before you compare the LCOS number. Match the duration class to the problem you actually have. And put the protocol documentation, the warranty boundaries, and the change-notification clause in the contract, not in the follow-up email.

The fundamentals of sourcing storage haven't changed much — verify, document, and don't let a spreadsheet cell make a decision a site visit should make. The execution has changed a lot. The bar for evidence is higher than it was in 2020, and that's honestly good news for anyone buying.