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.

Grid connection requestThe local grid operator's portal, form or mailboxBefore installationA missing datasheet or site plan, which means the operator's clock has not started
Heat pump notificationThe same grid operator, as a controllable device under section 14a EnWGBefore connectionAn outdated form version, or the control equipment details left blank
KfW confirmation for the application (BzA)To the homeowner, who applies in Meine KfWBefore the homeowner appliesA contract without the suspensive or resolutive condition KfW requires
Commissioning report and meter requestThe grid operator, and the metering operator where they differAfter installationSerial numbers or the commissioning date not matching what was applied for
MaStR registrationThe MarktstammdatenregisterWithin one month of commissioningThe battery forgotten as a second unit, or values the operator's check sends back
The MaStR deadline comes from section 5 of the MaStR ordinance, and the KfW steps from the rules of programme 458, which KfW adjusted on 21 July 2026. Rules like these change, so they live in the build as dated configuration, not in anyone's memory.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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
  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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

  1. The office manager logged in to the operator's portal and entered the SMS code, then handed the open session to the agent.
  2. 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
  3. get_template(operator: "regional-operator", version: "2026-08")portal, 6 pages / attachments: site plan, single-line diagram, unit certificate, datasheets / page fingerprints match
  4. validate(job: "26-0417")all required fields present / inverter certificate on file / system under 30 kW: simplified rule in section 8 (5) EEG applies
  5. fill_page(page: 2, fields: 14)14 of 14 filled / screenshot 02.png saved
  6. upload(page: 5, file: "single-line-diagram.pdf")refused by portal: maximum 4 MB, file is 6.1 MB
  7. compress_pdf(file: "single-line-diagram.pdf", max_mb: 4)2.3 MB, text still legible / uploaded / screenshot 05.png saved
  8. stop_before_submit(page: 6)summary page reached / 38 fields, 5 attachments / differences from job record: none
  9. 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.

  10. Office manager · Teams

    submitted, ref NA-2026-118204

  11. record_submission(job: "26-0417", ref: "NA-2026-118204")reference stored / clocks started / screenshots archived with the job
  12. 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.
The model mapped the fields and later read the operator's email. The validation, the file fix and the deadline arithmetic were code, and the submit button belonged to a person.

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.

  1. 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.
  2. 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.
  3. 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.
  4. Switch to supervised filing: the agent fills, the office checks the screenshots and submits. For portals, this is the permanent mode.
  5. 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.
  6. 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