Use caseAI agentBrowser automation
Grid connection and subsidy paperwork for solar and heat pump installers, prepared by an agent
An agent that prepares grid connection requests, KfW heat pump documents and MaStR entries per job, and stops before submission so a person can check.
A blueprint, not a client story. The business described is illustrative; the architecture, integrations and trade-offs are real, and this is how I would build it. By Ergini, .
The short version
An agent for German solar and heat pump installers that turns the job file in the planning tool into the paperwork each installation needs: the grid connection request in each operator's own portal or form, the heat pump notification, the documents for the homeowner's KfW subsidy, and the Marktstammdatenregister entry after commissioning. It fills forms in a supervised browser, saves a screenshot of every page, tracks the legal clocks and chases missing items. A person logs in, checks and submits every application.
- Best for
- Solar and heat pump installers in Germany who file with many grid operators and whose office, not the crews, sets how many jobs get done.
- Connects to
- Grid operator portals and forms, Marktstammdatenregister (MaStR), Meine KfW, OpenSolar or the installer's CRM, Outlook, Supervised browser with a credential vault
- The AI does
- Maps job data onto each operator's field names, reads operator emails and letters, and drives the portal in a browser up to the submit button.
- People do
- Log in and complete one-time codes, check and submit each application, answer operator objections, and confirm the MaStR registration.
- Built as
- AI Agent Development, usually $12K - $30K
Thirty installations a month, and every one waits on the office
Picture a 20-person installer near Landshut in Bavaria: four roof crews, two heat pump teams, a planner who designs every system in OpenSolar, and an office of three. The firm completes about 30 installations a month, mostly rooftop PV with a battery, and a growing share of air-to-water heat pumps. Demand is not the constraint. The order book is full into next season.
Each job creates filings before and after the crew is on site. The connection request goes to whichever operator owns the local low-voltage network: one large regional operator for most jobs, then a long tail of municipal utilities and small local operators, each with its own portal, PDF form or email address. There is no single front door. 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 submission route rather than replacing them. Heat pumps are notified too, as controllable consumption devices under section 14a EnWG, which is also how the homeowner gets the reduced grid fee.
One person in the office does most of this, 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. When she is away, applications stall, crews are scheduled around approvals that have not been requested, and a finished system waits for its meter because the commissioning report went to the wrong address. None of it is difficult. It is a hundred small formats, and it caps the number of roofs the firm can finish.
The filings behind one rooftop and one heat pump
Most of these share the same data: address, metering point, module and inverter models, capacities, serial numbers and dates. That overlap is why one job record, written into each format, beats five people retyping it.
| Filing | Where it goes | When | What usually holds it up |
|---|---|---|---|
| Grid connection request | The local grid operator's portal, form or mailbox | Before installation | A missing datasheet or site plan, which means the operator's clock has not started |
| Heat pump notification | The same grid operator, as a controllable device under section 14a EnWG | Before connection | An outdated form version, or the control equipment details left blank |
| KfW confirmation for the application (BzA) | To the homeowner, who applies in Meine KfW | Before the homeowner applies | A contract without the suspensive or resolutive condition KfW requires |
| Commissioning report and meter request | The grid operator, and the metering operator where they differ | After installation | Serial numbers or the commissioning date not matching what was applied for |
| MaStR registration | The Marktstammdatenregister | Within one month of commissioning | The battery forgotten as a second unit, or values the operator's check sends back |
From signed contract to registered system
The model does two jobs here: matching job data to unfamiliar field labels, and reading what operators send back. Deciding which operator, which form, whether a package is complete and when a deadline falls is ordinary code, and a person presses every submit button.
01 Trigger · CRM webhook, OpenSolar
A job reaches 'contract signed'
The CRM stage changes, or the OpenSolar project is marked sold. The agent opens a filing plan for the job: which operator, which forms, whether a KfW subsidy is involved, and which filings depend on which.
02 Plain code
Find the operator and load its template
The grid operator is looked up from the address and metering point, never guessed. Each operator has a versioned template in the build: portal or PDF or email, required fields, required attachments, file size limits, and a fingerprint of the portal pages as they looked when the template was last verified.
03 AI model · Structured output
Map the job onto the operator's fields
Operators label the same value differently ('Wechselrichterleistung', 'max. Scheinleistung', 'Einspeiseleistung'). A model maps the job record onto the template's labels under a strict schema and marks any field it cannot fill instead of inventing a value. The tools it may call are narrow and typed, in line with how I design tool calls.
04 Decision
Is the package complete and current?
Rules decide, against the operator's own list of requirements.
- Every field and attachment present, capacities and units consistent then the agent prepares the filing
- A document is missing: roof plan, datasheet, unit certificate, signed mandate then a request to the planner or the homeowner, and the filing waits
- The portal no longer matches the template's fingerprint then stop, alert, and file this one by hand until the template is updated
05 System · Playwright, credential vault
Fill the portal in a supervised session
After a person has logged in and completed any one-time code, the agent takes over the open session, fills page by page, uploads the attachments and saves a screenshot of every page. PDF forms are filled field by field; email filings become drafts with the attachments in place.
06 Person
The office checks and submits
The office manager sees the filled summary page, the screenshots and a diff against the job record, and submits herself. The operator's reference is captured and stored on the job. The reasoning behind keeping this step human is in human-in-the-loop AI.
07 AI model · Microsoft Graph
Read what the operator sends back
Acknowledgments, queries, approvals and cost estimates arrive in Outlook, some as scanned letters. A model classifies each, extracts the operator's reference and what is being asked for, and attaches it to the job. Rejections, cost estimates and grid reinforcement demands always go to a person.
08 Plain code
Run the clocks and the chasers
Code tracks the dates that matter: the timetable the operator owes without delay after a request, the eight weeks section 8 of the EEG allows for the grid compatibility check once the operator has the information it needs, and the one-month MaStR deadline after commissioning. A polite chaser is drafted when an operator goes quiet.
09 Result
A prepared MaStR registration
The commissioning report's date, serial numbers and capacities become a prepared registration, with the PV system and the battery as two units, ready for the office or the homeowner to confirm.
Where the agent stops and the office starts
The line follows one question: does this step commit the homeowner or the firm to something? If it does, a person owns it.
The AI model
Map job data onto each operator's field labels
Labels and layouts differ by operator; the underlying values do not.
Classify operator replies and extract references
Free German prose, often scanned, rarely in the same format twice.
Plain code
Look up the grid operator for an address
A wrong operator means an application nobody ever answers.
Check capacities, units and attachments
kWp against kVA, and the sum of inverter outputs, are arithmetic with one right answer.
A person
Logins, one-time codes and CAPTCHAs
They exist to prove a person is present, and the build respects that.
Submit each application
It speaks for the homeowner under their mandate, and for the firm.
Respond to objections, cost estimates and reinforcement demands
These are negotiations, and often a conversation with the customer about money.
Confirm the MaStR registration
The duty to register sits with the system's operator, usually the homeowner.
A Tuesday filing, screenshot by screenshot
A 12.3 kWp system with a battery and a heat pump, filed with the regional operator. The office manager spends a few minutes on it; the agent does the rest of the typing.
Operator portal session, Tuesday 15 September, 09:12, job 26-0417
- The office manager logged in to the operator's portal and entered the SMS code, then handed the open session to the agent.
- load_job(id: "26-0417")PV 12.3 kWp, 30 modules / hybrid inverter 10 kVA / battery 10.2 kWh / heat pump 9 kW / mandate signed 2 Sep
- get_template(operator: "regional-operator", version: "2026-08")portal, 6 pages / attachments: site plan, single-line diagram, unit certificate, datasheets / page fingerprints match
- validate(job: "26-0417")all required fields present / inverter certificate on file / system under 30 kW: simplified rule in section 8 (5) EEG applies
- fill_page(page: 2, fields: 14)14 of 14 filled / screenshot 02.png saved
- upload(page: 5, file: "single-line-diagram.pdf")refused by portal: maximum 4 MB, file is 6.1 MB
- compress_pdf(file: "single-line-diagram.pdf", max_mb: 4)2.3 MB, text still legible / uploaded / screenshot 05.png saved
- stop_before_submit(page: 6)summary page reached / 38 fields, 5 attachments / differences from job record: none
Filing agent · Teams
Job 26-0417 is ready to submit on the regional operator's portal. All 38 fields match the job record. I compressed the single-line diagram to fit their 4 MB limit. The system is under 30 kW, so if the operator sends no timetable within a month of receiving the request, it may be connected under section 8 EEG; I have set a reminder for 15 October. Six screenshots are on the job.
Office manager · Teams
submitted, ref NA-2026-118204
- record_submission(job: "26-0417", ref: "NA-2026-118204")reference stored / clocks started / screenshots archived with the job
- On Thursday the operator emailed asking for photos of the meter cabinet. The agent matched the email to the job by its reference and asked the site surveyor for the photos from the survey folder.
What breaks a filing agent, and the guard against each
Filling forms is the easy part. These are the situations that decide whether the office trusts the agent after a busy spring.
The portal changes overnight
Operators redesign portals without notice. Each template stores a fingerprint of the pages it expects, and if a page differs, the session stops with a screenshot and an alert. That job goes back to manual until someone updates the template. A browser agent that improvises on an unfamiliar page is how wrong capacities end up at a grid operator.
An incomplete application does not start the clock
Section 8 of the EEG gives the operator eight weeks for the grid compatibility check from receipt of the information it needs. A package missing one datasheet can sit for weeks before the query arrives. The completeness check runs before submission, against each operator's own requirements, which is why the templates matter more than the model.
The battery nobody registered
In the MaStR, a PV system with a battery is two units. The prepared registration always lists both, and code compares capacities and dates with what the operator approved, because the grid operator checks MaStR entries against its own records and sends mismatches back for correction.
Subsidy steps in the wrong order
KfW wants a supply contract with a suspensive or resolutive condition before the homeowner applies, and the installer's confirmation for the application. Code checks the contract template carries the condition and that the confirmation matches the contract's heat pump model and costs. The homeowner's own steps in Meine KfW are chased by email, never done for them.
Rolling it out one grid operator at a time
The build starts where the volume is and leaves the long tail manual until the numbers justify a template.
- Pull a year of jobs from the CRM and count filings per grid operator. In the Bavarian scenario, five operators cover most jobs; everything else stays manual at first.
- Build and verify templates for those five: fields, attachments, file limits and portal pages. Each template gets a test job that is filled on the live portal but never submitted.
- Run in shadow for two weeks: the agent prepares every filing in parallel while the office files as usual, and differences are reviewed at the end of each day.
- Switch to supervised filing: the agent fills, the office checks the screenshots and submits. For portals, this is the permanent mode.
- Add the operators that work by PDF form or email. The agent fills the form and drafts the email with attachments; the office sends it.
- Add MaStR preparation and the KfW document checks once commissioning reports flow into the job record.
Submission never becomes autonomous in this design. The agent earns autonomy over preparation, chasing and record-keeping, which is where the office's hours actually go.
Is there software that files grid applications for you?
Partly. Design and proposal tools such as OpenSolar and Aurora Solar produce most of the data a grid application needs, from the module layout to the inverter choice, but filing with each German grid operator is not what they are built for. German installer platforms go further: Reonic, for example, lists registrations and subsidy processes among the work it takes over. If you already run a platform like that and it covers your operators, use it before commissioning anything custom.
A custom agent earns its place when your jobs spread across many operators, when your job data lives in your own CRM or a planning tool no platform reads, or when you want filings to stay in-house rather than outsourced application by application.
Start small either way: templates for the five operators you file with most, the mailbox reader, and MaStR preparation. The browser layer is the same technique I use for automating systems that have no API, and related builds for trades are collected under construction.
How you would know it is working
A blueprint has no results to report, so here is what I would measure from the first week instead, on your own data.
- Days from signed contract to submitted application
- Per operator, from the CRM stage change to the stored submission reference, so the slow steps show up by name.
- Applications returned for missing items
- Operator queries per filing and per operator. Every new query type becomes a completeness rule in that operator's template.
- Template health
- Sessions stopped by an unexpected page, per operator per month, and how long each template took to fix.
- MaStR registrations on time
- Share of commissioned systems registered within a month, battery included, and corrections sent back after the operator's check.
- Office time per installation
- Hours logged on paperwork per job, sampled before and after. This is the number that says whether the firm can take on more roofs without another hire.
What a build like this costs
This is built as AI Agent Development, which runs $12K - $60K overall. A build like this one usually lands in the single-purpose agent tier: $12K - $30K, 2-5 weeks. The first working version runs on your real data well before the end of that window.
What it costs to run
Model usage is small, mostly mapping fields and reading operator emails, and comes to cents per job. The browser sessions run on a small server. The real ongoing cost is template upkeep when an operator redesigns its portal, which is why a mismatch stops and alerts rather than guessing.
What moves the price
- How many grid operators get a template, and how many of those are portals rather than PDF forms or email
- Where the job data lives: OpenSolar or a CRM with an API, or spreadsheets and folders that need cleaning up first
- Whether KfW subsidy paperwork and heat pump notifications are in scope, or PV only
- How much template maintenance is included, since every portal change needs a verified update
Who this is for
- Solar and heat pump installers in Germany completing 15 or more installations a month across several grid operators
- Firms where one office person holds all the operator knowledge, and filings stop when she is away
- Installers who outsource grid applications per job and want the work back in-house with less effort
- PV installers adding heat pumps and meeting section 14a notifications and KfW paperwork for the first time
Questions people ask about this
Can AI fill out grid connection applications (Netzanmeldung) automatically?
It can fill them, but it should not submit them. The agent maps your job data onto each operator's form or portal, uploads the attachments, checks completeness and stops at the submit button with a screenshot of every page. A person logs in, checks and submits, because the application speaks for the homeowner and your firm, and portals change without warning.
How do I automate Marktstammdatenregister registrations for my customers' systems?
Prepare them from the commissioning data you already hold. The agent builds the MaStR entry from the commissioning report, with capacities, dates, location and grid operator, and lists the battery as a separate unit. The legal duty to register within a month of commissioning sits with the system's operator, so the homeowner, or your office acting for them, confirms the entry.
Does it work with every German grid operator?
Not on day one, and it does not need to. Each operator needs a verified template covering its portal or form, required fields, attachments and file limits. I would start with the five operators you file with most, keep the rest manual, and add templates as volume justifies them. When a portal changes, the agent stops and alerts rather than guessing.
What happens with CAPTCHAs, logins and two-factor codes on operator portals?
They stay with a person. Someone logs in, completes the code or CAPTCHA, and hands the open session to the agent, which fills the pages. The build never stores one-time codes and never tries to defeat a CAPTCHA. Passwords live in a vault with access per operator and per user, and each session is logged.
What does a grid paperwork agent cost to build and run?
It sits in the smaller range of agent builds. The price moves with the number of operator templates, where your job data lives, and whether KfW paperwork and heat pump notifications are included. Running costs are modest: cents of model usage per job and a small server, plus template upkeep whenever an operator changes its portal.
Sources
- Section 8 EEG 2023: grid connection procedure
- Section 5 MaStRV: registration within one month of commissioning
- Section 14a EnWG: controllable consumption devices
- Section 14e EnWG: joint internet platform of grid operators
- MaStR help: registering a solar installation
- KfW 458: heating subsidy for private homeowners
- Reonic: software and services for installers