How to Avoid NEM12 CSV Data Gotchas
A technical reference to record types, quality flags, spreadsheet traps, and timezone gotchas.
Last Updated: 2026-08-05
Key Takeaways
- The NEM12 CSV Format is a semi-structured, non-tabular exchange format from AEMO. Most gotchas start when a tool treats the file as an ordinary spreadsheet.
- One file mixes five record types — see the table below.
- Excel and Google Sheets can corrupt an NMI through scientific notation and stripped leading zeros. Import the file as text to prevent that parsing error.
- Real exports show non-compliance with the specification — see Structural Gotchas below.
- The register code (E1, B1) and the NMI Suffix sit on the 200 Record. Carry that context down before you read Quality Flags or judge Estimated vs Actual data.
- Every timestamp uses AEST, a fixed timezone offset of UTC+10 with no daylight savings adjustment. That offset is a common source of billing confusion.
- To skip manual parsing, our NEM12 Smart Meter Data Analyzer reads a NEM12 file directly in your browser.
Why the NEM12 CSV Format Creates Gotchas
Australian Smart Meter Data arrives in the NEM12 CSV Format from a DNSP portal or from an electricity retailer. AEMO defines that format in the Meter Data File Format (MDFF) specification for system-to-system exchange.
DNSPs and electricity retailers supply NEM12 because it is a well-defined format, it is readily available, and it carries Interval Data. They do not supply it because software tools, energy assessors, or customers find it easy to use.
| Record | Name | Carries |
|---|---|---|
| 100 Record | Header | Format version (NEM12), creation date, participant identifiers |
| 200 Record | NMI Metadata | NMI, NMI Suffix (E1, B1), meter serial number, Unit of Measure, interval length |
| 300 Record | Interval Data | One day of readings for one register, plus a Quality Flag |
| 400 Record | Interval Events | Substitution and estimation reason codes for a range of intervals |
| 900 Record | Footer | End-of-data marker that closes the file opened by the 100 Record |
Why One Column Position Means Different Things in NEM12
The leading record type number sets the schema for each row. The same column position therefore carries different information on different rows.
- Column 1 on every row: the record type, which a parser must read before anything else.
- Column 3 on a 200 Record: the meter serial number.
- Column 3 on a 300 Record: an energy reading in the declared Unit of Measure.
A generic CSV library assumes one schema for the whole file. That assumption causes a parsing error, or it causes silent misalignment that no error message reports.
The core gotcha: NEM12 is not tabular. A tool that assumes fixed columns across every row misreads the file. For a field-by-field walk-through of the specification, see our guide on how to understand the NEM12 CSV Format.
Spreadsheet Gotchas — Excel, Google Sheets, and Corrupted NMIs
Excel, Google Sheets, and LibreOffice Calc apply automatic number formatting when you open a CSV file directly. That formatting can damage an identifier before you read the first row.
- Scientific notation: a long numeric NMI can appear as
6.10203E+10, and the trailing digits are then lost. - Stripped leading zeros: the General format drops a leading
0from an NMI or an NMI Suffix, which breaks the identifier. - Unit of Measure drift: a reformat can change how a
kWh,Wh, orMWhvalue displays, which hides a unit mismatch.
Import the file as text instead of opening it directly. Set the column type yourself before the data lands in the sheet.
- Open a blank workbook. Then use Data and Import in Excel, or File and Import in Google Sheets.
- Choose the comma as the delimiter. Set the NMI column to Text, not General.
- If an NMI still shows scientific notation, repeat the import before you start any analysis.
The file stays non-tabular after a correct import. For a flat table, our NEM12 CSV Spreadsheet Converter reshapes the 300 Records into consistent columns. Our guide on how to open NEM12 data in a spreadsheet covers wide format and long format output.
Try our NEM12 CSV Spreadsheet Converter Tool
Structural Gotchas — Missing Rows and Multiple NMIs
The NEM12 specification is strict, and some portals do not follow it. Files from some DNSP and retailer systems show non-compliance that a strict parser rejects.
- Missing 100 row: some portals omit the mandatory header. Use a parser with an
ignore_missing_headeroption. - Missing row types: a truncated file can arrive without its 900 Record, which leaves the last block unterminated.
- Multiple NMIs in a single file: each NMI opens its own 200 Record block. Track the context per block, not per file.
- Multiple Meters in a single file: one site can list several meters, each with its own 200 Record and its own registers.
- Multiple Interval Lengths in a single file: one block can hold 30-minute data and another 5-minute data. Never hard-code 48 readings per day.
Route each row by its record type first. Validate the structure of the file before you trust any value inside it.
Watch for: an NMI is not a unique key inside a file. The same NMI and NMI Suffix can appear more than once when the meter configuration changed during the requested period.
Context Gotchas — Registers, the NMI Suffix, and Quality Flags
A 300 Record does not name what it measures. The 200 Record above it carries the NMI Suffix, and that code names the register for every reading below it.
- E1: a mains grid import register. Where a meter carries more than one E register, E1 is almost always the Main or General register.
- B1: solar export. B1 is always the register for electricity generated on site and sent back to the grid.
- E2: a secondary mains grid import register. A Controlled Load, such as a dedicated hot water circuit, typically appears here — never on B1.
- NMI Suffix: the register code itself. The NMIConfiguration field on the 200 Record lists every suffix present for one NMI.
Why the register matters: solar generation on site can only supply demand from loads connected to the Main or General register. A hot water circuit on E2 cannot draw from the site's own solar. From time to time a NEM12 file appears to show otherwise. Treat such a file as suspect, and verify it before you rely on it.
Carry the NMI Suffix down onto every 300 Record before analysis. Otherwise your import data and your export data blur together in the totals. Our guide on how to interpret your smart meter data covers the register codes in depth.
Try our NEM12 Smart Meter Data Analyzer Tool
Reading the Quality Flags on a 300 Record
Each 300 Record carries Quality Flags that record how a value was obtained. The Estimated vs Actual distinction matters for a billing audit, because a substituted interval is not a measurement.
| Flag | Meaning | Method flag |
|---|---|---|
| A | Actual — measured data | Not required |
| S | Substitute — estimated | Mandatory |
| F | Final substitute | Mandatory |
| E | Forward estimate | Mandatory |
| V | Variable — actual and substitute mixed within the day | Per interval |
If your bill shows only a 10-digit NMI, calculate the 11th digit before you request a file. Our NMI Checksum Digit Calculator derives that check digit from the first ten.
Try our NMI Checksum Digit Calculator Tool
Timezone Gotchas — AEST, Offsets, and Daylight Savings
Every timestamp in a NEM12 file uses AEST, which is Australian Eastern Standard Time at a fixed timezone offset of UTC+10. The format never applies a daylight savings adjustment.
- No daylight savings shift: Victorian clocks move to AEDT (UTC+11) from October to April. NEM12 timestamps stay on AEST all year.
- End-of-interval timestamps: a stamp of 00:30 covers the period from 00:00 to 00:30, not the half hour that follows it.
- Billing mismatch: AEDT peak and off-peak windows applied to AEST data shift every interval by one hour, which distorts time-of-use charges.
Treat the timezone offset as fixed. Apply any daylight savings conversion in your own tool, outside the file.
Rule of thumb: if a load profile looks shifted by exactly one hour in summer, suspect an AEST and AEDT mix-up before you suspect the meter.
Visualise Your Smart Meter Data Online
Frequently Asked Questions
- What is the NEM12 CSV Format? It is AEMO's semi-structured format for exchanging Interval Data from smart meters. One file mixes 100, 200, 300, 400, and 900 records rather than one tabular layout.
- What does a 200 Record declare? It declares the NMI, the NMI Suffix, the meter serial number, the Unit of Measure, and the interval length for the 300 Records below it.
- What does a 300 Record contain? It contains one day of interval data for a single register, followed by the Quality Flags for that day.
- What does a 400 Record do? It carries substitution and estimation reason codes for a range of intervals inside a day, separately from the readings themselves.
- What is the 900 Record for? It marks the end of the data and closes the file that the 100 Record opened.
- Why does a NEM12 file look broken in Excel or Google Sheets? The format is non-tabular, and a spreadsheet auto-formats numbers on open. Scientific notation and stripped leading zeros then corrupt the NMI.
- What causes a NEM12 parsing error? Usually a generic CSV parser that assumes fixed columns, or non-compliance with the specification such as missing row types.
- What happens when a NEM12 file has a missing 100 row? A strict parser rejects the file. A parser with an
ignore_missing_headeroption reads it anyway. - Can a file hold multiple NMIs in a single file? Yes. Each NMI opens its own 200 Record block, so a parser must track the context per block rather than per file.
- Can a file hold multiple Meters in a single file? Yes. One site can list several meters, each under its own 200 Record with its own registers.
- Can a file hold multiple Interval Lengths in a single file? Yes. One block can be 30-minute data and another 5-minute data, so never hard-code 48 readings per day.
- What is the NMI Suffix? It is the two-character register code, such as E1, E2, or B1, that names one measurement point within a single NMI.
- What do the E1 and B1 registers mean? E1 is a mains grid import register, and B1 is always solar export. The 200 Record names both through the NMI Suffix.
- Which register carries a Controlled Load? A Controlled Load appears on a secondary mains import register, typically E2. It never appears on B1.
- What do NEM12 Quality Flags tell me? They record Estimated vs Actual data. A marks measured data, and S, F, and E mark substituted or estimated values.
- What Unit of Measure does NEM12 use? Commonly kWh. Wh, MWh, and reactive units such as kVArh are also permitted, so read the Unit of Measure from the 200 Record before you aggregate.
- Why is NEM12 always in AEST with no daylight savings? AEMO fixes the timezone offset at UTC+10 so settlement stays consistent across the market. Anyone working in local time applies the daylight savings adjustment separately.
- What does a 00:30 timestamp mean in a NEM12 file? It marks the END of a 30-minute interval, so 00:30 covers the period from 00:00 to 00:30, not the half hour that follows it.
- Why can an AEST/AEDT mix-up distort time-of-use charges? Applying AEDT peak and off-peak windows to AEST-stamped data shifts every interval by one hour, which can misclassify usage into the wrong price period.
- How do I avoid these gotchas without writing code? Use a NEM12-aware tool. Our NEM12 Smart Meter Data Analyzer and NEM12 CSV Spreadsheet Converter apply the record types and the register context for you.
Try our NEM12 Smart Meter Data Analyzer Tool
Glossary
- 100 Record
- In the NEM12 Format, the header row that opens the file, carrying the format version, creation date, and participant details. Strict adherence to the NEM12 specification requires a single 100 Record.
- 200 Record
- In the NEM12 Format, a Metadata row that declares the NMI, NMI Suffix, Meter Number, Unit of Measure, and interval length for the data rows beneath it.
- 300 Record
- In the NEM12 Format, an interval data row carrying one day of readings for a single Meter Register plus a Quality Flag.
- 400 Record
- In the NEM12 Format, an optional interval event row giving substitution or estimation reason codes for a range of intervals.
- 900 Record
- In the NEM12 Format, the end-of-data footer that must close the file and match the opening 100 Record.
- AEMO
- Australian Energy Market Operator — the body that administers the National Electricity Market and defines and maintains the NEM12 specification.
- AEST
- Australian Eastern Standard Time — the fixed timezone (UTC+10) used for all NEM12 timestamps, with no daylight savings adjustment.
- B1
- In the NEM12 Format, the Meter Register code for Solar Export — electricity generated on site and fed back to the grid, typically measured in kWh.
- Check Digit
- The 11th digit of a full NMI — calculated from the first ten digits to detect transcription errors; some DNSP portals require it. Also called a 'Checksum'.
- Controlled Load
- A separately metered circuit controlled by a signal from the DNSP. These circuits typically contain a single specific appliance or type of appliance - eg. an Electric Hot Water Service (and historically Air-Conditioners or Electric Slab Heating). They are typically billed at a discounted rate and often run only during off-peak hours. They appear on a separate Meter Register on an Electricity Bill. See also: Dedicated Circuit.
- CSV
- Comma-Separated Values — a plain text file in which each row is a record and fields are separated by commas.
- Dedicated Circuit
- The physical wiring and breaker serving a Controlled Load device, isolated so the DNSP can independently control supply. See also: Controlled Load.
- DNSP
- Distribution Network Service Provider - the company that owns and operates the physical poles and wires of the local electricity network, and usually provides the smart meter data portal. Not the same as your Electricity Retailer. See also: Electricity Retailer.
- E1
- In the NEM12 Format, the Meter Register code (or NMI Suffix) for the sole/main/primary mains grid import channel — electricity drawn from the network. Where there is No (Solar) Generation on site, this is the Total Consumption. Typically measured in kWh.
- E2
- In the NEM12 Format, the Meter Register code (or NMI Suffix) for a secondary mains grid import channel — typically controlled-load or off-peak consumption such as dedicated hot water. Present only where that tariff exists.
- Electricity Retailer
- The company that sells electricity to the consumer, issues the bill, and manages the account. Not the same as your DNSP (Distribution Network Service Provider) which owns and operates the network. See also: DNSP.
- Estimated vs Actual
- In the NEM12 CSV Format, the distinction between measured readings (Actual, flag A) and filled-in values (Substitute or Estimate), important for billing audits.
- Interval Data
- Energy readings recorded at fixed time steps — typically every 30 minutes (but sometimes 5 or 15 minutes on newer meters) rather than as a single billing total. This allows charging different Tariffs at different times of day or days of the week. See also: Time-of-Use (TOU) Tariff.
- kVARh
- Kilovolt-Ampere Reactive Hour — the unit of Reactive Energy. Not the same as kWh. Reactive energy (kVARh) is measured by Q1 and K1 registers. It does not appear on residential electricity bills and is not used by solar analysis tools. See also: Reactive Energy.
- kW
- KiloWatt — the standard unit of (Electrical) Power: 1,000 Watts of Power used continuously for one hour is equivalent to 1000 Watt-Hours or 1 KiloWatt-Hour of Energy. Power is not an Amount of Energy but a Rate of Energy Transfer. See also: kWh.
- kWh
- KiloWatt-Hour — the standard unit of (Electrical) Energy: 1,000 Watts of Power used continuously for one hour is equivalent to 1000 Watt-Hours or 1 KiloWatt-Hour. NEM12 CSV records Electricity Use in kWh. See also: kW.
- MDFF
- Meter Data File Format — AEMO's file format specification for metering data, defining both the NEM12 interval structure and the NEM13 accumulation structure.
- NEM
- The Australian National Electricity Market — the interconnected electricity grid covering Queensland, New South Wales, Victoria, South Australia, Tasmania and the ACT. Western Australia and the Northern Territory operate separate grids.
- NEM12
- The AEMO file format (version 12) for exchanging Interval Data from Smart Meters across the Australian National Electricity Market (NEM). NEM12 Format records the Amount of Energy per Time Interval in kWh. And also other types of data, using specific types of labelled rows or records (100, 200, 300, 400, 900) to record different types of data. This makes it a 'Semi-Structured' 'Non-Tabular' Format. See also: AEMO, NEM, kWh, Semi-Structured, Non-Tabular.
- NEM12 CSV
- A NEM12 File stored as comma-separated values — the form most DNSP and retailer portals distribute. See also: NEM12, CSV.
- NEM12 CSV Format
- See NEM12 CSV.
- NEM12 Specification
- AEMO's Meter Data File Format document defining every record type, field position, and validation rule for NEM12. See also: NEM12, AEMO.
- NMI
- National Metering Identifier — the unique 10-digit identifier for an electricity connection point (11 with the Check Digit), permanent to the property. Note that the electricity connection point identified by the NMI, typically has multiple NMI Suffixes, and can have multiple Physical Meters. See also: Check Digit, NMI Suffix.
- NMI Suffix
- In the NEM12 Format, the short two-character code (E1, E2, E3, B1, B2, Q1, K1) identifying a specific Meter Register for recording electricity flows on the mains electricity connection identified by that NMI — also called the Meter Register or Register Code. See also: NMI, NEM12.
- NMIConfiguration
- The field on a NEM12 200 record listing every NMI Suffix present for the meter (e.g. "E1B1") — the quickest way to see which channels a file carries. See also: NMI, NMI Suffix.
- Non-Tabular
- Data that does not fit a single consistent grid — in NEM12's case because of its semi-structure, hierarchy and mixed-record layout.
- Quality Flag
- In the NEM12 Format, a single-letter code on each interval reading showing how the value was obtained — e.g. A (Actual), E (Estimated), S (Substituted), F (Final Substitute). See also: NEM12.
- Reactive Energy
- A property of AC electrical circuits related to the phase relationship between voltage and current. Measured in kVARh (not kWh). Recorded in Q1 (import) and K1 (export) registers. Not charged on residential electricity bills in Australia; not used by solar design tools or energy monitoring portals. See also: kVARh.
- Semi-Structured
- A data format that follows strict syntactic rules (e.g. comma separation, defined record codes) but does not enforce a consistent column schema across all rows. NEM12 is a Semi-Structured Format. See also: NEM12.
- Time-of-Use (TOU) Tariff
- A tariff with different prices at different times of day or days of the week (Peak, Shoulder, Off-Peak).
- Timezone Offset
- The fixed difference from UTC applied to NEM12 timestamps — always +10 hours (AEST).
- Unit of Measure
- In the NEM12 Format, the energy unit declared on the 200 Record — commonly kWh, but also Wh, MWh, and reactive units such as kVArh. See also: NEM12, kWh, kVARh.