Field Stories10 min read

The Solar Roof That Waited 16 Days for Its Grid Paperwork

By Ergini, Software & AI Developer

A composite story. The company and the people in it are invented. The problem, the rules and the system are real, and the full blueprint is in the use case library.

TL;DR

A composite story: a 20-person solar and heat pump installer near Landshut finishes about 30 roofs a month, and one office manager holds every grid operator's quirks in her head. While she is on holiday, a finished system sits switched off for sixteen days. The agent I would build keeps a verified template per grid operator, maps the job file onto each form, checks completeness and units in code, and fills portals up to the submit button. She logs in, checks and submits every application, and confirms each MaStR registration.

Monday, 08:05, a dark inverter near Landshut

The first call of the week is from Claudia, a homeowner in a village outside Landshut. Thirty modules have been on her roof for sixteen days, the battery is wired in, and the whole system is switched off, because the meter has not been changed.

"My neighbour's was running two days after they finished," she says. She is not angry yet. She will be by Thursday.

Sabine, who runs the office of a 20-person solar and heat pump installer, finds the problem in four minutes. The completion notice went to the grid operator's general mailbox, not the route that operator uses for meter requests. The one person who would have noticed was Sabine, and she was away for the last two weeks of August.

The firm is invented, and so are Sabine and Claudia. The sixteen days are not. Most installers who file with more than one grid operator know a roof like this, finished and dark, waiting for a piece of paper.

The firm has four roof crews, two heat pump teams, a planner who designs every system in OpenSolar, and an office of three. It completes about 30 installations a month, mostly rooftop PV with a battery, and a growing share of air-to-water heat pumps. The order book is full into next season.

Before the crew arrives, the connection request goes to whichever operator owns the local network: one large regional operator for most jobs, then a long tail of municipal utilities, each with its own portal, PDF form or email address. Section 14e of the Energy Industry Act (EnWG) makes grid operators run a joint internet platform, but it sends applicants on to each operator's own route. A heat pump is notified as a controllable consumption device under section 14a EnWG. For the KfW heating subsidy, the homeowner needs the firm's confirmation before applying in Meine KfW. After commissioning come the completion notice, the meter request and the Marktstammdatenregister entry, due within one month.

Sabine does most of it, largely from memory. She knows which utility wants the single-line diagram as a separate file, which portal times out on page four, and which operator only answers by letter. None of it is difficult. It is a hundred small formats, and together they set how many roofs the firm can finish in a month. When she is away, the crews keep working and the paperwork quietly stops.

"File one while I watch"

Markus, the owner, books a call once Claudia's meter is in. I work from Pristina, so we meet on video, and I ask Sabine for something that sounds too simple: share your screen and file one real application while I watch, without tidying anything up first.

She picks a job with a battery and a heat pump for the big regional operator. It takes her forty minutes, and three things stand out.

First, she has two windows open, the OpenSolar project and the portal, and copies from one to the other: module count and type, inverter, battery, address, metering point. Every value already exists in the job file, and some she types twice, because the heat pump notification asks again.

Second, the labels do not match. This portal wants "max. Scheinleistung", a municipal utility's PDF form calls the same number "Wechselrichterleistung", and a third operator asks for "Einspeiseleistung". Sabine translates without thinking. A new colleague would guess.

Third, on page five the portal refuses the single-line diagram. The file is over the upload limit. She sighs, opens a PDF tool, compresses it and tries again. "Every time," she says. It is the first thing that goes into my notes.

Then I ask for a year of jobs from the CRM, counted by grid operator. Five operators cover most of the roofs. The rest is a long tail of small utilities, some filed with once a year. Nobody should build a template for those.

Five templates before any model

The model is not where this starts. When a job reaches "contract signed" in the CRM, the first step is a lookup: which grid operator owns the network at that address and metering point. It is never guessed: an application sent to the wrong operator is one nobody answers.

The second piece is a template for each of the five operators, versioned and dated. It records whether the operator takes a portal, a PDF form or an email, every required field and attachment, the file size limits, and a fingerprint of each portal page as it looked when the template was last checked. Most of what Sabine knows ends up here, in a form someone else can read and correct.

Only then does a model get a job, and it is a narrow one: take the job record and map it onto this operator's labels, under a strict schema. Where it cannot fill a field, it marks the field as open instead of inventing a value. Its tools are small and typed, the way I design tool calls for any agent that touches the outside world.

Whether a package is complete is not the model's call either. Code checks it against the operator's own list of requirements, and that matters: section 8 of the Renewable Energy Sources Act (EEG) gives the operator eight weeks for the grid compatibility check, counted from when it has the information it needs. An application missing one datasheet can sit for weeks before the query arrives, with no clock running.

For portals, the agent works in a supervised browser. Sabine logs in and types the SMS code, then hands over the open session. The agent fills page by page, uploads the attachments, saves a screenshot of every page and stops on the summary page. PDF forms are filled field by field; email operators get a draft with the attachments in place. The whole flow is in the full blueprint for grid connection paperwork for installers.

Sabine's notebook, line by line

Sabine does keep a notebook, a spiral pad in the second drawer with a page per operator. Almost every line of it becomes something in the build, and deciding which kind of thing is most of the design:

What the notebook saysWhere it goesHandled by
"Regional portal: plans max 4 MB!"The file limit in that operator's template; oversized PDFs are compressed and checked for legibility before uploadCode
"Scheinleistung = WR-Leistung = Einspeiseleistung"Mapping the job record onto each operator's labels, with unfillable fields marked openModel
"They only answer by letter. Scan it!"The shared Outlook mailbox is read daily, scanned letters included, and each reply is matched to its job by the operator's referenceModel
"Cost estimate from the operator: call Markus"Rejections, cost estimates and grid reinforcement demands always go to a personSabine, Markus
"MaStR: battery separately!!"The PV system and the battery are always prepared as two units, checked against what the operator approvedCode, then a person confirms
"KfW: condition in the contract BEFORE she applies"The contract must carry the suspensive or resolutive condition KfW requires, and the confirmation must match its heat pump and costsCode; the homeowner applies

The model gets two rows of six, the two where the input is unpredictable: another operator's vocabulary, and a letter in free German prose. Anything with one right answer is ordinary code, including the clocks: the timetable an operator owes without delay, the eight weeks, the month for the MaStR entry, and a polite chaser when an operator goes quiet. Anything that commits the firm or the homeowner goes to a person.

Two weeks in the shadow

Each template first gets a test job, filled on the live portal and never submitted. Then the agent runs in shadow for two weeks, preparing every filing while Sabine files as usual, and each evening we compare the two versions field by field.

On the third day there is a difference that matters. On the town utility's PDF form, the agent has put 12.3 into the feed-in power field. Sabine put 10. The model read the module peak power, in kWp, where the form wanted the inverter's output in kVA. It is the mistake a new colleague would make, and the kind a grid operator notices.

The fix is not a better prompt. Capacities and units are arithmetic with one right answer, so code now checks every power field against the job record, kWp against kVA and the sum of the inverter outputs, and a mismatch blocks the filing and shows Sabine both numbers.

On the ninth day the regional operator changes a portal page overnight. The agent opens page three, finds it no longer matches the template's fingerprint, and stops with a screenshot and an alert. That job is filed by hand, the template is updated and tested, and the agent carries on. A browser agent that improvises on a page it has never seen is how wrong capacities end up at a grid operator.

The button that stays with Sabine

Sabine logs in to every portal herself and types every one-time code. Those codes exist to prove that a person is present, and the build respects that: it never stores a code and never tries to get past a CAPTCHA. Passwords sit in a vault with access per operator and per user, and every session is logged.

She presses every submit button, because an application speaks for the homeowner, under the mandate they signed, and for the firm. First she sees the summary page, the screenshots and the differences from the job record, usually none. She answers every objection and cost estimate, often after a call with the customer about money. She confirms each MaStR registration, since the duty to register sits with the system's operator, usually the homeowner. The homeowner's own steps in Meine KfW are chased by email, never done for them.

Submission never becomes automatic, however well the shadow run goes. The agent earns its independence in preparing, chasing and keeping the record, which is where Sabine's hours went. The reasoning is the same as in any human-in-the-loop system.

The next August

A year on, Sabine takes her two weeks again, and this time the paperwork keeps moving. Her colleague gets a Teams message when a filing is ready: which job, which operator, what the agent fixed, which clock starts when it goes in. She logs in, types the code, looks through the screenshots and submits. The operator's reference goes onto the job, and the reminders set themselves.

When a crew finishes a roof, the completion notice goes by the route written in that operator's template, not the route someone remembers. The MaStR entry is prepared with both units for the homeowner to confirm. The small utilities are still filed by hand, with the agent drafting the email.

Sabine's notebook still sits in the second drawer. She rarely opens it. Most of what was in it now lives in five templates that anyone in the office can read, and that stop and say so when an operator changes something.

Before you build anything

Check what you already pay for. Reonic, for example, lists registrations and subsidy processes among the work it takes over for installers, and if your platform covers your operators, use it. A custom agent earns its place when your jobs spread across many operators, when the job data lives in your own CRM or a planning tool no platform reads, or when you want the filings to stay in-house.

If that is you, it is usually one of the smaller AI agent builds. The price moves with the number of operator templates, how many of them are portals, and whether KfW paperwork and heat pump notifications are in scope. The full blueprint has the filing table, the rollout order and the failure modes, and the browser technique is the same one behind automating systems with no API.

Frequently asked questions

Can AI fill out grid connection applications for solar installers?

It can fill them, but a person should submit them. An agent maps the job file from the planning tool onto each grid operator's portal or PDF form, uploads the attachments, checks completeness against that operator's requirements and stops at the submit button with a screenshot of every page. The office logs in, completes any one-time code, checks the summary and submits, because the application speaks for the homeowner and the firm.

When does a PV system have to be registered in the Marktstammdatenregister?

Within one month of commissioning, under section 5 of the MaStR ordinance. The duty sits with the system's operator, usually the homeowner, although installers often prepare the entry for them. A PV system with a battery counts as two units, and the grid operator checks entries against its own records, so capacities and dates should match what was approved. An agent can prepare the entry from the commissioning report for a person to confirm.

What happens when a grid operator changes its portal?

A well-built filing agent stops. Each operator template stores a fingerprint of the portal pages as they looked when the template was last verified. If a page differs, the session halts with a screenshot and an alert, and that job is filed by hand until someone updates the template. A browser agent that improvises on an unfamiliar page is how wrong capacities end up at a grid operator.

What does a grid paperwork agent cost to build?

It usually sits in the smaller tier of AI agent builds. The price moves with the number of grid operators that get a template, how many of those are portals rather than PDF forms or email, where the job data lives, and whether KfW heat pump paperwork is in scope. Running costs are small: cents of model usage per job, a small server, and template upkeep whenever an operator changes its portal.