How do I know if my solar panels are working?

By Olivier Beauchemin · Updated October 2026 · first published August 2026

You want to know if your solar panels are working because something does not add up. The bill is still high, or higher than before the panels went up. The app shows a green dot and a graph, and you cannot tell whether the number on it is good. You called the installer, and they said production is "within the expected range," and when you asked what the range was, the answer was vague. You are paying a loan or a lease every month for something you cannot verify, and nobody's job is to verify it for you.

There are two questions inside "are they working": are they on, and are they producing what I was promised. You can answer the first yourself in ten minutes, and the four checks below walk you through it. The second is a number that only exists once someone computes what your roof should have made, and it is the one that decides whether you are owed money.

Question one: are they on?

Do these on a clear day, in order. A real fault shows up in the first two minutes.

1. Look at the box in the garage

Your system has a communications box: the gateway on an Enphase system, the inverter's own display or cellular stick on a string system. It has status lights and the manual has a legend. Steady green is normal. Amber, red or a blinking pattern maps to a listed fault. No lights at all points to a tripped breaker, so check the panel before calling anyone.

2. Watch today's curve

Open the app and look at today, not the month. A working system draws a hill: production starts near sunrise, climbs through the morning, peaks around midday and tapers to nothing at sunset. A hill that quits at 1pm on a cloudless day, or a flat line at zero while the sun is out, is a real signal. If the graphs are hard to read, our guide to reading solar monitoring data goes screen by screen.

3. Check every panel is reporting

Microinverter and optimizer systems show a roof layout with one tile per panel. In daylight every tile should carry a number. A grey or blank tile is a panel that is not phoning home and, on most systems, not producing. This is the check people skip and the one that catches quiet failures: one dead microinverter on a thirty-panel roof costs you a slice of production and never trips anything on the summary screen. We wrote up when panel-level monitoring earns its keep.

4. Cross-check the bill

Your utility bill is a witness outside the app. If the app says you exported a healthy amount last month and the bill shows no credit, one of them is wrong, and that is worth knowing before you call anyone. It also catches the case where the panels are fine and the export side is not, which is a different problem with a different phone number. The common reasons a bill stays high are in why is my electric bill higher after solar.

Green means reporting. It does not mean right.

This is where the easy part stops, and the useful part begins just past it. A monitoring app is a communications tool. It answers one question: did the equipment phone home, and what number did it send? It has no opinion on whether that number should have been higher.

Your dot is green when a microinverter reports 180 watts at noon in June. It is also green when the same microinverter reports 240 watts under the same sky. Both are "working" as far as the app is concerned. Only one is right.

The two comparisons people reach for both break on contact:

What "within the expected range" should mean, and rarely does when an installer says it, is: we modeled your roof under the weather you had, and your output is within a few percent of that model. If they cannot show you the model, the phrase is a way of ending the call.

Question two: are they producing what I was promised?

"On" is a yes-or-no about equipment. "What I was promised" is a number, and it lives in two places: your contract, which has an annual kWh figure and, in many contracts, a production guarantee clause around it, and a model of what your specific roof should have made. Getting an honest answer takes four ingredients:

None of that is exotic. The model is public: NREL's PVWatts, the same one the installer should have used for the proposal. We published how OwlWatt runs it for your roof, with every input listed so your installer can check the work.

Nobody is going to do this for you. If your contract has a production guarantee, an installer put a kilowatt-hour number in writing and agreed to make you whole if the system falls short. There is no calendar reminder at that company to check it on your behalf, and the gap between what you were promised and what you got only exists once someone measures it.

The gap in dollars, using your numbers

Use your own figures, not mine. Take the annual production your contract promised and the rate off your own electric bill. Say the promise is 10,000 kWh a year and your rate is $0.30 per kWh. Those are stated examples, so swap in yours.

ShortfallLost kWh per yearLost $ per year at $0.30
5%500$150
10%1,000$300
15%1,500$450
20%2,000$600

Illustrative arithmetic on a stated 10,000 kWh year at $0.30/kWh. Use your own promised production and your own rate.

Two things make those rows bigger than they look. Most guarantees are assessed per contract year, so a real gap repeats every year the guarantee runs, often 10 to 25 years. And the smallest row, $150, is already about twice the cost of finding out: an independent audit of your most recent contract year is $79, once.

The honest half: an audit measures the gap and documents it. It does not recover the money. Whether a claim gets paid depends on what your contract says and, past a point, on a licensed attorney in your state who can use the documentation. I will not promise you a dollar outcome and you should be wary of anyone who does.

The other honest half: the answer may be that there is no meaningful gap. Plenty of systems produce what they were supposed to. Knowing that is worth something too. It ends the nagging, and the next time the bill jumps you can look somewhere other than the roof.

What to do next

  1. Run the four "is it on" checks. Lights, today's curve, every panel reporting, the bill. If something is plainly broken, that is this week's call, while warranty windows are open.
  2. Find your promised number. The contract and the proposal. You are looking for a guaranteed or estimated annual kWh figure and any clause about how and when it is assessed. Our walkthrough of whether your performance guarantee is being met shows where the clauses hide.
  3. Get a rough independent number, free. The production estimator takes six dropdowns and a ZIP code and gives you a modeled annual range for a system like yours. Within about 10% of it, you are probably fine. More than 15% under, keep going.
  4. Get the real answer: an independent solar performance audit. Your exact roof, the actual weather for your most recent completed contract year, the clause in your contract, and the exact shortfall in kWh and dollars, with month-by-month charts behind every figure. Earlier years appear as a range. That is the document you send, or the document that tells you there is nothing to send. See the audit.

One note on who is telling you this. OwlWatt sells no panels, installs nothing, and takes no referral fee or commission from any installer or inverter vendor. We are the independent party doing the measurement, which is the only position from which the number is worth anything when you are disagreeing with the company that sold you the system. And we never contact your installer. The report is yours.

You wanted to know if they are working. Find out if they produce what you were promised.

An independent solar performance audit for $79: exact expected versus actual for your most recent completed contract year, shortfall in kWh and dollars, PVWatts-based with every input listed, month-by-month charts verifiable against your own Enphase records. Earlier years shown as a range. Enphase systems today. If there is nothing wrong, you will know that too.

See the audit → Or run the free estimator first

Common questions

How can I tell if my solar panels are working?

Four checks, about ten minutes on a clear day: (1) steady green on the gateway or inverter, (2) a production curve that rises from sunrise, peaks midday and falls to zero at sunset, (3) every panel tile showing a number in daylight, and (4) a utility bill that shows the credit the app implies. Pass all four and the panels are on. Whether they produce what you were promised needs a comparison against an expected figure for your roof.

Why is my electric bill still high if my solar panels are working?

One of three things: the system is on but producing less than it was sized to produce, your usage went up (an EV, a heat pump, a hot summer), or the rate structure changed so each exported kWh is worth less than the proposal assumed. Only the first is a panel problem. Compare twelve months of production to what a system your size should make before deciding which one you have.

My installer says production is within the expected range. How do I check that?

Ask for the range and the model behind it. If they cannot show you one, get an independent expected figure: PVWatts, run with your panel count, wattage, tilt, orientation and the weather your address received. Compare it to the app's twelve-month total. Within about 10% is normal, and 15% or more under is worth a full audit against your contract.

Do I need someone to come out and look at the panels?

Not first. Whether the panels produce what you were promised is answered in the data, with no roof visit. If the data shows a real gap, a physical inspection is the second step, and the audit report tells the inspector where to look.

What does an independent solar performance audit cost?

$79 one-time for Enphase systems: exact expected versus actual for your most recent completed contract year, shortfall in kWh and dollars, PVWatts-based, with month-by-month charts verifiable against your own Enphase records. Earlier years are shown as a range. No subscription required, no site visit, and OwlWatt never contacts your installer.