Estimate Consumption from a Bill Total
Use Bill Solve with Account Cost Calculation to estimate kWh usage from a monthly or annual utility bill total.
Use Bill Solve with Account Cost Calculation to estimate kWh usage from a monthly or annual utility bill total.
A common issue when analyzing a potential project is that you need to know how much electricity a home or business is using but cannot get access to meter data or good-quality usage numbers. Most customers don't know how much electricity they're using. They may know how much they pay for electricity, but not how that translates into kWh.
Use Bill Solve with Account Cost Calculation to estimate a customer's energy usage for a single billing period using the total cost of their bill. Similarly, if your customer knows their annual electricity cost, Bill Solve can estimate their annual kWh consumption.
Our Account Cost Calculation endpoint supports these Bill Solve calculations.
Bill Solve workflow
- Create or confirm an account with location, utility, and tariff data.
- Choose monthly or annual Bill Solve.
- Send a
totalproperty input withunitset tocost. - Include
baselineTypeset totypicalElectricityas the initial usage guess. - Read the estimated kWh from
results[].summary.kWh. - Optionally validate the estimate by sending the estimated
consumptionback into the calculator.
Key parameters
| Parameter | Use | Notes |
|---|---|---|
fromDateTime | Billing period start | Use the exact bill start date when available. |
toDateTime | Billing period end | Use the exact bill end date when available. |
billingPeriod | Billing-period charge handling | Use true for one bill. Use false for an annual or multi-period analysis. |
propertyInputs[].keyName=total | Bill amount to solve from | Set unit to cost so the calculator interprets the value as dollars instead of kWh. |
baselineType=typicalElectricity | Initial usage guess | Helps provide an hourly usage shape and can improve convergence for TOU customers. |
Choose monthly or annual Bill Solve
| Use case | Recommended option | Why |
|---|---|---|
| Customer has one or more exact bills | Monthly Bill Solve | Uses exact bill dates and reduces annual distribution assumptions. |
| Customer only knows annual electricity cost | Annual Bill Solve | Estimates annual kWh when bill-level data is unavailable. |
How Bill Solve works
Bill Solve estimates kWh usage by working backward from total bill amounts. It applies the correct tariff rates and structures for the specified billing period, determining how much energy consumption (kWh) would have been required to generate the given bill total.
While Bill Solve provides both monthly and annual estimation options, we recommend using the monthly option with exact billing dates for the highest precision. Calculating usage for one bill will yield more precise results than an annual calculation. The annual option requires assumptions about how a customer's usage is distributed over the year, which can introduce additional uncertainty.
What Bill Solve does well
Bill Solve is designed to work best with straightforward electricity tariffs, particularly those with fixed rate structures.
Supports standard tiered tariffs
- Works well when a tariff has clearly defined, fixed kWh tiers (e.g., 0–500 kWh, 501–1000 kWh, etc.).
- Best suited for cases where energy charges are the main component of the bill and do not fluctuate due to demand-based adjustments.
Handles time-of-use (TOU) rates
- Can estimate kWh distribution across fixed TOU windows (e.g., Off-Peak: 10 PM – 6 AM, On-Peak: 2 PM – 7 PM).
- Ideal when TOU rates are the primary driver of bill variation and demand-based components are minimal.
Accounts for basic fixed fees and simple demand charges
- Handles fixed monthly fees and basic demand charges that do not influence energy tier breakpoints.
- Works best when charges follow a fixed structure and do not introduce historical usage dependencies.
When Bill Solve may not be a good fit
While Bill Solve is a great tool for estimating usage under most standard tariff structures, it may not provide accurate results for tariffs with complex, demand-based, or historical pricing rules.
Tariffs with demand-dependent tiering
- If the kWh tier structure changes based on a customer's peak demand history, Bill Solve cannot correctly allocate usage across those tiers.
- Example: A tariff where the second tier starts at 80% of the customer’s highest demand in the past 12 months
- Bill Solve does not track historical demand, so it cannot determine the correct tier placement.
Complex demand charges that influence kWh allocation
- Some tariffs adjust kWh rates based on measured demand (e.g., higher per-kWh pricing for high-demand customers).
- Bill Solve assumes a standard energy rate structure and does not model demand-based rate shifts.
Ratchet-based pricing or dynamic tiering
- If a tariff includes historical peak demand ratchets (e.g., where past demand affects current pricing), Bill Solve does not retain past demand values and may misplace consumption into incorrect rate categories.
When to use Bill Solve vs. alternative methods
Use Bill Solve if your tariff has clear, fixed kWh tiers and TOU periods, and you need an approximate usage estimate. Most standard residential tariffs are a good fit for this functionality.
Consider alternative methods if your tariff includes demand-based pricing, historical ratchets, or shifting tier structures.
If you're unsure whether Bill Solve is a good fit for your use case, contact our team for guidance.
Monthly Bill Solve request
Use this template for a monthly Bill Solve request:
POST /rest/v1/accounts/pid/{providerAccountId}/calculate/{
"fromDateTime": "{billingPeriodStart}",
"toDateTime": "{billingPeriodEnd}",
"billingPeriod": "true",
"propertyInputs": [
{
"fromDateTime": "{billingPeriodStart}",
"toDateTime": "{billingPeriodEnd}",
"keyName": "total",
"dataValue": "{billTotal}",
"unit": "cost"
},
{
"fromDateTime": "{billingPeriodStart}",
"toDateTime": "{billingPeriodEnd}",
"keyName": "baselineType",
"dataValue": "typicalElectricity"
}
]
}Here's an example of how the monthly option works. For this scenario, we have the following customer:
- Residential customer in the Xcel Energy - Colorado service area on the "R" tariff (
masterTariffId599) - Actual bill of $60.49 for the period 2024-08-15 to 2024-09-15
To solve for this customer's monthly consumption value, we'll make the following call to Account Cost Calculation:
POST /rest/v1/accounts/pid/xcel-colorado-customer/calculate/{
"fromDateTime": "2024-08-15",
"toDateTime": "2024-09-15",
"billingPeriod": "true",
"propertyInputs": [
{
"fromDateTime": "2024-08-15",
"toDateTime": "2024-09-15",
"keyName": "total",
"dataValue": "60.49",
"unit": "cost"
},
{
"fromDateTime": "2024-08-15",
"toDateTime": "2024-09-15",
"keyName": "baselineType",
"dataValue": "typicalElectricity"
}
]
}The following parameters control the monthly Bill Solve request. You can see the full documentation for Account Cost Calculation.
Important parameters
- Prior to this call, we've created an account called
xcel-colorado-customerthat holds our customer's data. Most importantly, it has their ZIP code, their utility, and their tariff. In this case, the customer is on Xcel Energy - Colorado's "R" tariff (masterTariffId599). - We set our billing period with
fromDateTimeandtoDateTimeto2024-08-15and2024-09-15, respectively. To get the most accurate results, you'll want to make sure to use the actual dates on the bill. - We set
billingPeriodtotrue, because we want to ensure monthly charges (if any) are considered in the calculation. - We have two entries in the
propertyInputsarray. These are the inputs to our calculation. The first one is the most important one. For the billing period, our customer's cost is $60.49, so we send in atotalproperty with adataValueof 60.49. We also need to set theunittocostso the calculator knows we're talking dollars instead of kWh. - The second input sets our initial guess of usage. Instead of choosing a particular value, we tell the API to use our database of Typicals to set the first guess. This has two advantages: the typical profile should start out closer to the customer's actual usage, resulting in fewer guesses and a faster response. More importantly, it will give you fine-grained hourly data for your guess, resulting in more accurate results for TOU customers.
Run the calculation
Once we've got our request set up, we run it. This response snippet has been shortened to show the estimated usage in summary.kWh:
{
"status": "success",
"count": 1,
"type": "CalculatedCost",
"requestId": "edec3be8-d471-4ca5-ad2e-940367b0ea33",
"results": [
{
"calculatedCostId": "bac2e4d0-0117-4ff3-970b-dbc238a8a038",
"masterTariffId": 599,
"tariffName": "Residential",
"totalCost": 60.49000000,
"fromDateTime": "2024-08-15T00:00:00-06:00",
"toDateTime": "2024-09-15T00:00:00-06:00",
"currency": "USD",
"summary": {
"subTotalCost": 60.49,
"taxCost": 0.00,
"totalCost": 60.49,
"adjustedTotalCost": 60.49,
"nonBypassableCost": 7.10,
"kWh": 358.03,
"kW": 1.03
}
... Read the solved usage from results[0].summary.kWh. In this example, the customer's usage should be around 358 kWh for the billing period.
To validate the estimate, send the estimated consumption value back into the calculator and compare the returned bill cost:
POST /rest/v1/accounts/pid/xcel-colorado-customer/calculate/{
"fromDateTime": "2024-08-15",
"toDateTime": "2024-09-15",
"billingPeriod": "true",
"propertyInputs": [
{
"fromDateTime": "2024-08-15",
"toDateTime": "2024-09-15",
"keyName": "consumption",
"dataValue": "358"
}
]
}The results are:
{
"status": "success",
"count": 1,
"type": "CalculatedCost",
"requestId": "30bc8d6f-e009-4c20-b158-ba07649cf3bf",
"results": [
{
"calculatedCostId": "8972c045-2b65-48db-8e4a-bf1b6342f229",
"masterTariffId": 599,
"tariffName": "Residential",
"totalCost": 60.49000000,
"fromDateTime": "2024-08-15T00:00:00-06:00",
"toDateTime": "2024-09-15T00:00:00-06:00",
"currency": "USD",
"summary": {
"subTotalCost": 60.49,
"taxCost": 0.00,
"totalCost": 60.49,
"adjustedTotalCost": 60.49,
"nonBypassableCost": 7.10,
"kWh": 358.00,
"kW": 0
}
...That's how a monthly Bill Solve request works. You can also estimate consumption based on a year's electricity cost.
Annual Bill Solve request
You can use an annual Bill Solve request to turn your customer's annual cost into usage, then run a Savings Analysis with annual usage to calculate solar savings.
Use this template for an annual Bill Solve request:
POST /rest/v1/accounts/pid/{providerAccountId}/calculate/{
"fromDateTime": "{analysisStart}",
"toDateTime": "{analysisEnd}",
"billingPeriod": "false",
"propertyInputs": [
{
"fromDateTime": "{analysisStart}",
"toDateTime": "{analysisEnd}",
"keyName": "total",
"dataValue": "{annualBillTotal}",
"unit": "cost"
},
{
"fromDateTime": "{analysisStart}",
"toDateTime": "{analysisEnd}",
"keyName": "baselineType",
"dataValue": "typicalElectricity"
}
]
}Here's an example of how the annual option works. For this scenario, we have the following customer:
- Residential customer in Baltimore Gas & Electric's territory on the "R" tariff (
masterTariffId674) - Estimated annual cost of $1700 for the period 2016-10-15 to 2017-10-15
To solve for this customer's annual consumption value, we'll make the following call:
POST /rest/v1/accounts/pid/bge-cust/calculate/{
"fromDateTime": "2016-10-15",
"toDateTime": "2017-10-15",
"billingPeriod": "false",
"propertyInputs": [
{
"fromDateTime": "2016-10-15",
"toDateTime": "2017-10-15",
"keyName": "total",
"dataValue": "1700",
"unit": "cost"
},
{
"fromDateTime": "2016-10-15",
"toDateTime": "2017-10-15",
"keyName": "baselineType",
"dataValue": "typicalElectricity"
}
]
}
Important parameters
- For this example, we've created an account called
bge-custthat holds our customer's data. Like the first example, it has their ZIP code, their utility, and their tariff. In this case, the customer is on BG&E's "R" tariff (masterTariffId674). - We set our billing period with
fromDateTimeandtoDateTimeto2016-10-15and2017-10-15, respectively. As with monthly bill solve, using the day of the month from the bill will improve precision. - We set
billingPeriodtofalse, because this calculation will include many billing periods, not one. This is important for tariffs that have fixed monthly charges. - We have two entries in the
propertyInputsarray. These are the inputs to our calculation. The first one is the most important one. For the billing period, our customer's cost is $1700, so we send in atotalproperty with adataValueof 1700. We also need to set theunittocostso the calculator knows we're talking dollars instead of kWh or kW. - The second input sets our initial guess of monthly consumption. Instead of choosing a particular value, we tell the API to use our database of Typicals to set the first guess. This has two advantages: the typical profile should start out closer to the customer's actual usage, resulting in fewer guesses and a faster response. More importantly, it will give you fine-grained hourly data for your guess, resulting in more accurate results for TOU customers.
Run the calculation
Once we've got our request set up, we run it. This response snippet has been shortened to show the estimated annual usage in summary.kWh:
{
"status": "success",
"count": 1,
"type": "CalculatedCost",
"results":[
{
"masterTariffId": 674,
"tariffName": "Residential",
"totalCost": 1702.21,
"fromDateTime": "2016-10-15T00:00:00-04:00",
"toDateTime": "2017-10-15T00:00:00-04:00",
"currency": "USD",
"summary": {
"subTotalCost": 1702.21,
"taxCost": 0,
"totalCost": 1702.21,
"adjustedTotalCost": 1702.21,
"kWh": 11108.53,
"kW": 3.75
}
...
Read the solved usage from results[0].summary.kWh. In this example, the customer's usage should be around 11109 kWh for a year starting in mid-October of 2016.
To validate the estimate, send the estimated consumption value back into the calculator and compare the returned bill cost:
POST /rest/v1/accounts/pid/bge-cust/calculate/{
"fromDateTime": "2016-10-15",
"toDateTime": "2017-10-15",
"billingPeriod": "false",
"propertyInputs": [
{
"fromDateTime": "2016-10-15",
"toDateTime": "2017-10-15",
"keyName": "consumption",
"dataValue": "11109"
}
]
}
The results are:
{
"status": "success",
"count": 1,
"type": "CalculatedCost",
"results": [
{
"masterTariffId": 674,
"tariffName": "Residential",
"totalCost": 1708.23,
"fromDateTime": "2016-10-15T00:00:00-04:00",
"toDateTime": "2017-10-15T00:00:00-04:00",
"currency": "USD",
"summary": {
"subTotalCost": 1708.23,
"taxCost": 0,
"totalCost": 1708.23,
"adjustedTotalCost": 1708.23,
"kWh": 11109,
"kW": 0
}
...
Next steps
After estimating usage from a bill total, you can:
Updated 5 days ago
