Skip to content

Monthly Savings Report

On the 1st of each month, Grid Getter crunches the previous month’s complete data, and the savings report lands in your inbox at 6am local time on the 2nd. It covers what your battery earned by discharging during peak hours, what your solar saved you, what you got paid for excess export, and — if your plan has a demand charge — how much the battery shaved off your peak demand charge.

The report breaks down into:

  • Total estimated savings for the month
  • Per-kWh savings from battery discharge
  • Solar savings (self-consumption value plus net metering credits)
  • Demand savings, if your plan charges demand
  • Energy totals: solar produced, battery discharged, grid imported
  • How many times your automations fired
  • A shareable link to a public report card

Each report includes a unique link at gridgetter.com/r/<token>. Anyone with it can see your savings summary — no login needed. If you have a referral link, it gets embedded automatically; when someone signs up through it, you both get a free month.

  • An active, connected Tesla Powerwall site
  • An energy plan set up in Settings → Energy Plan

No energy plan means no report. The calculations need your rate schedule to mean anything.


Grid Getter works from a counterfactual: what would you have paid without the battery and solar, versus what you actually paid? Every data point gets priced at the TOU rate in effect at that exact hour.

Treat the result as an estimate of what your equipment earned, not a reconciliation of your bill. It prices only the parts a battery and solar can move, leaving out taxes, fixed charges, riders and consumption tiers, and the demand half assumes your utility measures peaks the same way we do. Energy savings are floored at zero, so a month where the battery cost more to charge than it returned reads as $0 rather than a negative number. For the assumptions this shares with your onboarding report, see How we calculate your numbers.

Every kWh record gets assigned a TOU period (ON_PEAK, OFF_PEAK, SUPER_OFF_PEAK, etc.) and a rate. The lookup works like this:

  1. Convert the UTC timestamp to your local timezone
  2. Find the season (Summer, Winter, etc.) based on the month
  3. Walk that season’s TOU windows to find one whose day-of-week and time-of-day range contains the timestamp
  4. Pull the import rate from energy_charges and the export rate from sell_tariff.energy_charges for that season + period

If no window matches — which shouldn’t happen with a well-formed tariff — the calculator falls back to OFF_PEAK rates and logs a warning.


For each hourly bucket, Grid Getter computes:

discharge_value = battery_kWh_discharged × import_rate_at_that_hour
charge_cost = battery_kWh_charged × import_rate_at_that_hour

Every kWh the battery discharged is a kWh you didn’t buy from the grid, valued at whatever rate was in effect that hour. Every kWh that went into charging is a cost, because without the battery you wouldn’t have pulled that energy. Net savings:

per_kWh_savings = max(sum(discharge_value) − sum(charge_cost), 0)

The max(..., 0) floor handles edge cases where the battery charges and discharges mostly off-peak, making the cycle net-zero or slightly negative. That shouldn’t count against you.


Two things roll into solar savings.

Self-consumption is the solar your home used directly — energy that didn’t touch the grid in either direction:

solar_self_consumed_kWh = max(solar_kWh − exported_kWh, 0)
self_consumption_value = solar_self_consumed_kWh × import_rate

You didn’t buy it, so it’s valued at what you would have paid for grid power at that hour.

Export credits are what the utility paid you for the excess:

export_credit = exported_kWh × export_rate

Export rates come from sell_tariff.energy_charges — your net metering or buyback rate, which is usually lower than your import rate.

solar_savings = self_consumption_value + export_credits

Demand charges are based on your single highest average power draw during any billing interval in on-peak hours — not your total consumption for the month, just your worst moment. The battery helps by covering that spike with stored energy so your grid draw stays lower.

Demand interval: 60 minutes for APS, 30 minutes for every other utility.

For each raw telemetry sample in a period your plan charges demand for (on-peak only on the SRP and APS presets):

  1. Assign it to a demand interval bucket, aligned to clock time in your timezone
  2. Track two values per sample: actual grid kW, and counterfactual grid kW (actual + battery discharge kW)
  3. Average all samples within each bucket
  4. The highest bucket average across the month is your peak demand for that season/period

Savings are then calculated as:

For flat-rate demand plans:

demand_savings = (peak_without_battery − peak_with_battery) × demand_rate

For tiered plans, where the rate itself changes as demand crosses thresholds:

demand_savings = tiered_charge(peak_without_battery) − tiered_charge(peak_with_battery)

Only periods with a demand charge entry in your tariff count. If the battery produced zero reduction, demand savings are omitted from the report.

The report card shows both the actual and counterfactual peak in kW so you can see exactly how much the battery shaved.

Your own rate. On any utility, you can enter your $/kW rate on the Demand charge card in Settings → Energy Plan. The report prices your peak reduction with that rate. A rate entered this way is a single flat rate with no seasons or tiers, so it applies to every period.

Detected plans. On SRP and APS you may not need to enter anything. If your stored tariff identifies a known plan — for example the utility reads “Salt River Project” and the rate code contains “E-27” — Grid Getter matches it to the built-in plan and applies that plan’s demand rates automatically. When this happens the report labels the plan as detected so you can confirm it.

SRP E-16 bills the average of your highest one-hour peak on each day, not your single highest peak. The report does not price that basis yet, so for E-16 the report shows your demand reduction in kW only, with no dollar figure for demand, at this time.

kW reduction without a dollar value. If DemandGuard actively shaved your peak but Grid Getter has no demand rate for your plan, the report still shows the kW reduction — how much lower your peak was thanks to the battery. If you told us your plan has a demand charge, the email reads “You told us your plan has a demand charge. DemandGuard shaved N kW off your peak — add your rate in Settings to see it in dollars,” with Settings linking straight to the Demand charge card. Otherwise it asks you to add your rate plan to see the dollar savings.


total = per_kWh_savings + solar_savings + demand_savings

demand_savings is 0 for energy-only plans or any month where the battery didn’t reduce the peak.


ComponentSource
Energy savings + solarHourly rollups (HistoricalPowerHistoryHourlyRollup)
Demand savingsRaw 1-minute telemetry (HistoricalPowerHistory)
Automation countAutomationActionLog, scoped to the calendar month
TOU ratesTesla’s live tariff, with demand charges layered from SiteDemandChargeTable (or a detected plan)

The cron fires on the 1st of each month. It queries a ±1 day UTC window to handle timezone edge cases, then filters down to records that fall within your local calendar month.


Why is demand savings missing from my report? Demand savings appear when Grid Getter has a demand rate for your plan. For SRP and APS, Grid Getter tries to detect the plan from your tariff, so most of those customers see it without any setup. On any other utility, enter your $/kW rate on the Demand charge card in Settings → Energy Plan. Until there’s a rate, a month where DemandGuard reduced your peak shows the kW reduction plus a prompt to add your rate; once it’s set, the next report values it in dollars. Energy-only plans don’t generate this section at all.

My kWh numbers are lower than what the Tesla app shows. Why? Grid Getter’s pipeline starts collecting data when you connect your account. Anything before that date isn’t in the system.

Can I pull up an old report? Yes — every email has a permanent shareable link. The report card stays live as long as your account is active.

The numbers look wrong. What should I check? Start with Settings → Energy Plan. If the TOU periods or rates are misconfigured, all three savings components will be off.