Direct answer

A defensible microgrid load profile is an 8,760-row series of hourly-average kW aligned to a documented non-leap clock convention, reconciled to trusted energy totals, and checked for gaps, duplicates, units, impossible values, peaks, ramps, and seasonal shape. Use measured interval data when available; otherwise build documented end-use scenarios. The answer changes with the system boundary, critical-load definition, growth, time zone, weather year, and missing-data treatment.

Key takeaways

  • Define the electrical boundary first: every value must represent the same loads, losses, operating mode, and unit convention.
  • Use exactly 8,760 finite, nonnegative hourly-average kW values for the current MicrogridModeler uploader; perform timestamp and calendar QA before removing timestamps.
  • Reconcile annual energy, monthly energy, peak demand, load factor, percentiles, ramps, zeros, and operating schedules before any capacity search.
  • Preserve normal, critical, flexible, auxiliary, and future loads as documented scenarios instead of hiding every uncertainty in one curve.
  • Annual kWh and peak kW do not prove chronology is correct: the worked six-hour shift keeps both unchanged but makes the retained screen infeasible.

Applicability, boundary, and assumptions

For this workflow, a load profile is the electrical demand the proposed off-grid bus must serve in every modeled hour. It is not a utility bill total, an equipment nameplate list, or a load-duration curve. Chronology matters because solar availability, battery state of charge, generator loading, and unmet energy depend on when each kW occurs and on the sequence before it.

Apply this guide to hourly PV + battery + diesel feasibility and sizing. It helps prepare the demand input and test whether it is internally credible. It does not replace subhourly motor-start studies, power flow, protection, harmonics, controls design, equipment derating, field metering plans, or a forecast of customer adoption.

The worked method assumes hourly-average kW on one aggregate electrical boundary, an explicitly chosen 8,760-hour non-leap calendar, and a resource series aligned to the same clock. It does not assume that synthetic data equal site evidence; the source class and reconciliation determine how much confidence the profile deserves.

Write the boundary in one sentence before touching the data: site, meters or end uses included, auxiliary and conversion loads, normal or contingency mode, gross or net convention, time zone, data period, and whether future phases are present. A perfectly clean file that represents the wrong boundary is still the wrong input.

  • Use kW for hourly-average power; calculate energy as the sum of kW multiplied by each interval duration.
  • Keep source timestamps and raw files immutable; create the model-ready series as a documented transformation.
  • Do not mix facility load, generator output, PV production, and battery flow unless the energy boundary explicitly requires a derived net load.
  • Keep one owner, source date, unit, time zone, and confidence level with every profile version.

Sources for this section: NLR guidance on utility bills and interval load data · World Bank and ESMAP mini-grid demand-profile workflow

Choose the strongest available load source

Measured interval data are usually the strongest starting point for an operating site because they preserve actual coincidence and operating schedules. NLR guidance recommends 15-, 30-, or 60-minute site data when available and uses bills to reconcile or scale simulated profiles. For a new site, productive-use program, or changed operating model, a transparent end-use build may be more honest than pretending an unrelated meter is representative.

Public reference profiles can supply a documented starting shape, but they are not site measurements. NLR describes its End-Use Load Profiles as simulated building-stock data calibrated and validated against empirical datasets. Use that distinction in the evidence note: measured, calibrated simulation, local parametric shape, survey build, and assumed schedule are different evidence classes.

Practical hierarchy for selecting and documenting a demand source
SourceBest useRequired checksMain limitation
Boundary meter or SCADAExisting site with representative operationsMeter coverage, interval meaning, clock, outages, missing values, bills, and known abnormal periodsHistory may omit future growth, new equipment, suppressed demand, or changed operating policy
Submeters plus schedulesCampus, clinic, camp, or process with separable end usesNo double counting, coincident operation, standby loads, duty cycles, diversity, and seasonal schedulesSchedule assumptions can hide peaks and operator behavior
Appliance or customer survey buildNew village mini-grid or site without reliable meteringCounts, watts, utilization by hour and season, customer segments, productive use, and survey error cleaningDemand uptake, affordability, and suppressed demand remain forecasts
Calibrated public reference profileEarly screening or a missing segment with a defensible analogueBuilding or customer type, climate, year, temporal resolution, calibration basis, and scaling totalReference-stock behavior may not match the specific remote site
Simple parametric archetypeTransparent first screen and teachingDaily shape, weekend rule, seasonality, base load, annual energy, peak, and scenario rangeNot measured, calibrated customer evidence, or a forecast

Sources for this section: NLR End-Use Load Profiles for the U.S. building stock · NLR guidance on utility bills and interval load data

Build the 8,760-hour series in ten ordered steps

Keep a source table with timestamps until the calendar and interval checks are complete. Only the final handoff to the current MicrogridModeler uploader should become a one-column numeric series.

  1. Write the load boundary and operating mode. Name every included meter, end use, auxiliary load, loss, and excluded future phase.
  2. Archive the raw source. Preserve the original file, meter export settings, time zone, interval convention, units, and retrieval date.
  3. Normalize the interval. Convert energy readings to average kW using kW = interval kWh divided by interval hours; aggregate subhourly power to hourly energy-weighted averages.
  4. Normalize the calendar. Choose a documented non-leap model year, time zone, and daylight-saving treatment; resolve duplicate, missing, and out-of-order timestamps before stripping them.
  5. Repair only with an explicit rule. Flag outages, telemetry gaps, impossible values, and substitutions; retain an unfilled series and a repair log.
  6. Reconcile energy. Compare interval totals with trusted bills, fuel-generation records, submeters, or equipment schedules by month and for the year.
  7. Test power and shape. Review peak, minimum, load factor, percentiles, ramps, zero runs, weekday/weekend patterns, seasons, and known operating hours.
  8. Separate scenarios. Preserve a central case plus credible low, high, growth, critical-load, and flexible-load variants rather than averaging uncertainty away.
  9. Export the model-ready column. Use exactly 8,760 finite, nonnegative hourly-average kW values in chronological order for the current uploader.
  10. Upload last and verify. Finish site and load-control edits first, upload the CSV, rerun, confirm annual load in results, and independently recalculate peak from the cleaned source column; re-upload after any edit that regenerates the load.

Sources for this section: NLR REopt load-profile input tutorial · World Bank and ESMAP mini-grid demand-profile workflow

Use the safe MicrogridModeler CSV contract

The current uploader accepts CSV or text, splits all content on commas, semicolons, whitespace, and line breaks, discards nonnumeric tokens, and sends the first 8,760 numeric values to the engine. The safest contract is therefore one numeric hourly-average kW value per row, exactly 8,760 rows, with no numeric timestamp or index column.

This parser normalizes length; it does not certify data quality. A short sequence is tiled and a long sequence is truncated. The interface currently does not show those parser warnings. Timestamp strings may be ignored without proving their order, and negative values are not rejected. Treat the table below as an acceptance benchmark anchored to the evidence commit, not a promise that malformed data are safe.

Original parser acceptance audit against engine commit b7da228
Input caseObserved behaviorPlanner decision
8,760 one-column kW valuesValues are preserved with no parser warningPreferred final schema after external timestamp and QA checks
ISO timestamp plus one kW columnNonnumeric timestamps are discarded and values happen to remainDo not rely on this: order, gaps, duplicates, and time zone are not validated
Numeric hour index plus kWBoth columns become numeric tokens; 17,520 tokens are flattened and truncatedUnsafe and corrupts the load series
8,759 numeric valuesSequence is tiled to 8,760, appending the first valueFail the file before upload; do not accept silent repair
8,761 or 8,784 numeric valuesOnly the first 8,760 values are retainedCalendar-normalize explicitly; truncation is not leap-year handling
Negative or implausible valuesFinite negatives and extremes are accepted as numbersRun nonnegative, unit, range, and ramp checks before upload
No numeric valuesA zero-filled 8,760-hour series is createdTreat as a hard failure, not a usable profile

Apply a pass-or-fail load-profile audit

A useful QA sheet ends in a decision, not a gallery of charts. Mark each check pass, fail, accepted exception, or not applicable; record the evidence and the person who accepted any exception.

Minimum QA checks before the profile enters a capacity search
CheckCalculation or reviewPass rule
Length and orderCount timestamps and values; sort only after detecting duplicates and disorderExactly 8,760 unique chronological hourly records in the chosen model calendar
Interval and unitsConfirm whether source fields are kW, kWh per interval, W, or cumulative meter readingsEvery final value is hourly-average kW with a documented conversion
Finite and nonnegativeCount blanks, nonnumeric values, infinities, and negative loadsZero invalid values unless an explicitly modeled export convention is intended elsewhere
Energy reconciliationAnnual kWh = sum of hourly kW; also sum by monthDifference from trusted totals is explained and inside the study tolerance
Peak and minimumFind magnitude, timestamp, and neighboring hoursEvents agree with equipment, operations, and meter expectations
Load factorAnnual kWh divided by 8,760 hours and peak kWPlausible for the site type and consistent with the peak
Percentiles and zerosReview P1, P5, median, P95, P99, zero hours, and longest zero runTails and shutdowns have a documented operating cause
Ramps and stepsFind largest one-hour increase and decrease and repeated identical blocksLarge steps and repeated patterns are operationally credible or documented repairs
Clock alignmentPlot average by hour, weekday, month, and known shift or occupancy schedulePeaks and shutdowns occur at the expected local clock times
Scenario coverageCompare central, low, high, growth, critical, and flexible-load versionsThe retained range covers uncertainties that could change capacity or reliability

Download and reproduce the worked 8,760-hour artifact

The downloadable CSV is a deliberately synthetic format and QA example. It uses MicrogridModeler’s local deterministic Outpatient parametric shape, a 2017 non-leap calendar convention, 100,000 kWh annual target, and 5.6°N seasonal phasing. The values were rounded to six decimals before the audit, so the file—not the unrounded generator array—is the evidence object.

The CSV contains one value per row and no header. Its SHA-256 fingerprint is a7efdf80e9d8d0bf97a6e8d27509b3341553fdf80fc7f7efc95dcf5956d58274. The companion manifest records assumptions, calculations, the capacity-search boundary, the clock-shift sensitivity, and limitations. Neither file represents a real outpatient clinic or a downloaded DOE/NLR reference time series.

Machine-generated QA summary for the six-decimal CSV
MetricResultInterpretation
Rows and validity8,760; 0 negative, zero, or nonfinite values; no parser warningsPasses the narrow numeric uploader contract
Annual and monthly energy99,999.999938 kWh; monthly range 6,570.124008 to 10,763.530933 kWhRounding closes to the 100,000 kWh target; summer is the high-energy season
Power range2.579606 kW minimum; 11.415525 kW mean; 28.325081 kW peakThe parametric profile maintains a nonzero base and a defined peak
Load factor40.3018%Mean load divided by peak load; useful for shape checks, not a sizing rule
DistributionP5 2.883089 kW; median 8.497524 kW; P95 26.077059 kWThe spread exposes more than annual energy and peak alone
Largest one-hour ramps+7.081270 kW into record 4,400; −7.081270 kW into record 4,410Inspect the schedule transition that creates each step

Original sensitivity: the same values, six hours out of alignment

To isolate clock alignment, the shipped automatic sampled and locally refined search was run on the worked profile at the synthetic Remote clinic site. It evaluated a 256-point coarse grid plus 71 local-refinement calls and retained a first-pass design of 140 kW PV, 190 kWh / 38 kW battery, 16.9 kW aggregate genset, and 126 kW converter. This is the lowest-NPC point found by that sampled procedure, not a continuous global optimum.

The retained design was then simulated unchanged after moving the same 8,760 load values six clock hours later. Annual energy, peak, minimum, percentiles, and load factor remain identical. Only alignment changes. The shifted profile was not re-optimized, because the test asks whether the original recommendation survives a timestamp error.

The lifecycle figures use the manifest’s editable benchmark assumptions: a 25-year project, 8% nominal discount rate, 2% inflation, $1.45/L starting diesel, 2% real fuel escalation, and a 30% credit on eligible clean-energy capital. These are transparent calculation inputs, not current supplier quotes, financing advice, or values to reuse without a project-specific review.

Fixed-design clock-alignment sensitivity; year-one technical results with project-life acceptance and economics; not a field result
ResultOriginal clockSame load moved 6 hours later
Profile summary99,999.999938 kWh; 28.325081 kW peak; 40.3018% load factorIdentical
Feasibility under 0% unmet-load rulePass; 0 kWh unmet in year one and every modeled yearFail; 82.483 kWh unmet in year one (0.0825%); worst modeled year 0.102%
First-year diesel operation792 L; 149 running hours; 20 starts11,615 L; 2,205 running hours; 260 starts
Renewable fraction97.81%67.84%
Curtailment70,929 kWh101,670 kWh
Fixed-design lifecycle result$280,738 NPC; $0.217/kWh LCOE$565,242 NPC; $0.434/kWh LCOE

Interpret the sensitivity without overgeneralizing it

This is not evidence that every six-hour error doubles lifecycle cost or that the retained capacities suit a real clinic. It shows something narrower and more useful: annual kWh, peak kW, and load factor can all pass while the hour-to-hour relationship with solar changes enough to invalidate a zero-unmet-load recommendation.

The high curtailment in both runs and the sharp shifted-case failure are reasons to widen the design and scenario review, not to defend the first-pass point. Re-optimize each accepted profile version, inspect difficult hours, and compare nearby feasible designs. If a clock convention is uncertain, resolve it or retain separate alignments as scenarios before recommending equipment.

Normalize leap years, daylight saving, and missing intervals explicitly

An 8,760-hour model year is a convention, not a property of every meter export. Leap years contain 8,784 hours. Daylight-saving clocks can create a missing or duplicated local hour. UTC data avoid daylight-saving ambiguity but must still align with a solar series and operating schedules. The current uploader reads position, not timestamp, so those decisions must happen upstream.

NLR’s REopt tutorial requires the correct row count, a series beginning with the first hour of January 1, and a year that preserves day-of-week alignment; its legacy leap-year example removes December 31. That is a tool-specific rule, not a universal repair. Choose the calendar expected by the receiving model, document the transformation, and compare hourly index zero in load and resource before running dispatch.

  • Keep raw UTC or local timestamps, offset, and daylight-saving flag in the source archive.
  • Resolve duplicates with interval energy and meter semantics, not by deleting whichever row looks inconvenient.
  • Fill gaps from adjacent days, matched operating days, a model, or zero only when the physical meaning supports it; flag every filled record.
  • Do not blindly truncate 8,784 rows and call the result calendar-normalized.
  • After transformation, recalculate annual and monthly energy and inspect the hours around every repair.

Sources for this section: NLR REopt load-profile input tutorial

Keep critical, flexible, and future loads as explicit scenarios

A normal operating profile and a critical-load profile answer different questions. Critical load should identify the services that must remain energized under a defined contingency, not simply multiply every hour by one convenient percentage. Flexible loads such as pumping, ice making, or charging need an energy requirement, power limit, operating window, and service consequence before a model may shift them.

For future demand, build phase- and adoption-based profiles when timing can change. A flat annual multiplier preserves shape and may be adequate for a narrow sensitivity, but it cannot represent a new evening productive load, daytime pumping program, clinic expansion, or changed occupancy schedule. World Bank guidance builds mini-grid demand by customer segment, equipment, hourly utilization, season, and expected productive use; retain those assumptions beside the aggregate.

Profiles and scenarios to keep separate in the study package
ProfileDefinitionUse in the decision
Normal loadExpected total demand under normal operations inside the system boundaryEnergy feasibility, fuel, economics, and routine dispatch
Critical loadExplicit services and hours that must be served under a named contingencyReliability and resilience cases; requires stakeholder and electrical-boundary review
Flexible loadDemand with documented energy, power, timing, and service constraintsTests whether scheduling can reduce curtailment, fuel, or storage needs
Growth or phase loadAdded customers, equipment, occupancy, or operating hours by implementation stagePrevents a static historical curve from standing in for the future site
Low and high casesPlausible boundary profiles, not arbitrary percentages aloneShows whether uncertainty changes capacity, service, or the next data-collection action

Sources for this section: World Bank and ESMAP mini-grid demand-profile workflow · NLR resilience guidance on critical-load timing

A practical decision rule

Accept a microgrid load profile for capacity screening only when its boundary and provenance are explicit; the calendar contains exactly the intended 8,760 ordered hours; units and intervals are correct; repairs are logged; annual and monthly energy reconcile; peaks, ramps, zeros, and schedules are plausible; and central, critical, flexible, growth, and uncertainty scenarios cover the decisions the model must support.

If any check fails, do not hide the uncertainty inside extra battery or generator capacity. Correct the data, collect better meter or survey evidence, or preserve the uncertainty as a named scenario. Size the system only after the input owner and model reviewer can explain what record 1 and record 8,760 mean.

Limitations and engineering handoff

The worked file is synthetic, hourly, deterministic, and single-boundary. It contains no measured outages, subhourly peaks, motor starting, power factor, harmonics, operator interventions, forecast distribution, or customer adoption data. Its solar resource and capacity screen are also synthetic. Use it to reproduce the QA and parser method, not as a clinic design input.

The current MicrogridModeler uploader does not preserve filename, timestamps, time zone, source, repair log, or profile confidence. It can tile or truncate numeric data, and site or load-control edits can regenerate the current load. The results view reports annual load but does not display the uploaded series peak; the separate configuration peak is not recalculated on upload. Keep the evidence outside the browser, finish those edits before upload, upload the final one-column series last, verify annual load in results, independently recalculate peak from the cleaned source, and re-upload after any relevant edit.

Hand the next analyst the raw source, cleaned timestamped table, final 8,760-value column, QA record, transformation script or formulas, scenario register, source owner, checksum, model version, and unresolved exceptions. The evidence package should make it possible to rebuild the input without guessing.

Sources for this section: Sandia Microgrid Conceptual Design Guidebook · IEA PVPS blueprint for off-grid feasibility studies

Bottom line

Build the load profile before sizing the equipment. Preserve timestamps while cleaning, convert every interval to the right power convention, reconcile energy, inspect shape, separate scenarios, and only then export the exact one-column 8,760-value series the model expects.

The decision rule is deliberately strict because load errors propagate everywhere: PV energy, battery power and duration, generator duty, fuel, renewable fraction, unmet load, and lifecycle economics. A smaller model run with a defensible profile is more useful than a sophisticated optimization of the wrong hours.

Keep exploring

Sources and review notes

This article is grounded in the cited technical sources and the stated modeling assumptions. Recheck project inputs, equipment data, and local requirements before using it for design.

National Laboratory of the Rockies: Interpreting Utility Bills—Load DataReviewed July 20, 2026; page updated May 26, 2026. Used for the preference for measured interval data, load timing, and reconciling or scaling simulated profiles with bills.National Laboratory of the Rockies: REopt load-profile input tutorialReviewed July 20, 2026; official May 2020 publication. Used for actual interval-data preference, CSV chronology, row-count, January 1, leap-year, and year-alignment guidance.National Laboratory of the Rockies: End-Use Load Profiles for the U.S. Building StockReviewed July 20, 2026. Used for the scope, simulated-data status, empirical calibration and validation, temporal resolution, and downloadable profile formats of the public EULP dataset.World Bank and ESMAP: Mini Grids for Half a Billion PeopleReviewed July 20, 2026. Used for demand assessment by household, commercial and productive, and public segments; hourly utilization and seasonality; survey cleaning; and the role of load profiles in system optimization.National Laboratory of the Rockies: REopt resilience load guidanceReviewed July 20, 2026. Used for actual versus simulated load shapes, monthly versus annual scaling, critical-load definition, and the importance of outage, peak-load, peak-solar, and net-load timing.Sandia National Laboratories: Microgrid Conceptual Design GuidebookReviewed July 20, 2026. Used for the site-specific conceptual-design boundary, systematic data gathering, service needs, constraints, priorities, and early-design limitations.IEA PVPS: Blueprint for off-grid photovoltaic systems feasibility studiesReviewed July 20, 2026. Used for the feasibility-study data, modeling, assessment, recommendation, and decision-handoff structure.

Validate the load, then run the sizing screen

Finish site and load-control edits, upload exactly 8,760 hourly-average kW values, verify annual energy in results, independently confirm the cleaned-source peak, then inspect dispatch before accepting any capacity recommendation.