ELSTER: Bescheide aus dem Posteingang abholen, ohne daran zu denken
Mein ELSTER stellt Bescheide und Finanzamts-Mitteilungen in einen Posteingang, den jemand öffnen muss. Diese Vorlage setzt hinter der Zertifikatsanmeldung an, liest alles, was seit einem Stichtag angekommen ist, lädt die PDFs und übergibt die Liste an deine Buchhaltung.
Der Weg von Hand, Klick für Klick
Die Schritte stammen aus der öffentlichen Hilfe von Mein ELSTER. Beschriftungen sind so zitiert, wie die Hilfeseiten sie führen; zeigt dein Konto etwas anderes, ändere die Blockanweisung und nicht diese Seite.
-
Bei Mein ELSTER anmelden
elster.de öffnen, Mein ELSTER wählen, Login. Die Hilfe nennt als Anmeldearten die Zertifikatsdatei (.pfx mit Passwort), die App ElsterSecure, den Personalausweis mit der AusweisApp, den Sicherheitsstick und die Signaturkarte.
-
Mein Posteingang aufrufen
Dort liegen die elektronisch bereitgestellten Bescheide - vorausgesetzt, du hast der elektronischen Bekanntgabe zugestimmt - und die Mitteilungen des Finanzamts. Ungelesenes ist markiert.
-
Eintrag öffnen, PDF laden
Jeder Eintrag hat eine Detailansicht mit dem Dokument als PDF. Einen Sammeldownload beschreibt die öffentliche Hilfe für den Posteingang nicht: ein Eintrag, ein Download.
-
Das Bekanntgabedatum festhalten
Ein zum Abruf bereitgestellter Bescheid gilt nach § 122a AO eine feste Zahl von Tagen nach der Benachrichtigungsmail als bekanntgegeben. Dieses Datum gehört in dein eigenes System, denn daran hängt die Einspruchsfrist.
-
Abmelden
Über den Abmelde-Link. Die öffentlichen Seiten sagen, dass die Sitzung nach einer Zeit ohne Aktivität endet; wie lang genau, hat diese Seite nicht geprüft.
Wer den ELSTER-Posteingang heute öffnet
Der Posteingang sieht bei einer Zwei-Personen-GmbH aus wie in einer Konzernsteuerabteilung. Unterschiedlich ist nur die Zahl der Zertifikate.
- Buchhaltung im Haus, monatlich
- Nach jeder Voranmeldung und zu jedem Veranlagungszeitraum meldet sich jemand mit dem Firmenzertifikat an, scrollt durch den Posteingang, lädt das PDF und legt es im DMS ab. Ein kurzer Schritt, den man leicht verschiebt - und so liegt ein Bescheid drei Wochen ungelesen da.
- Konzernsteuerabteilungen, wöchentlich
- Mehrere Gesellschaften, mehrere Zertifikate, ein gemeinsames Postfach für die Benachrichtigungsmails. Die Mail sagt, dass etwas bereitliegt; sie sagt nicht, für welche Gesellschaft und worum es geht. Also eine Anmeldung pro Fall.
- Steuerberatung mit Mandantenzugängen
- Wer für Mandanten abruft, wiederholt denselben Ablauf mit fremden Zertifikaten und muss dokumentieren, wann welcher Bescheid geholt wurde. Das Protokoll ist dabei so wichtig wie die Datei.
- Was schiefgeht
- Die Einspruchsfrist von einem Monat läuft ab der Bekanntgabefiktion des § 122a AO, nicht ab dem Moment, in dem jemand liest. Ein übersehener Eintrag ist deshalb keine verlorene PDF-Datei, sondern eine verlorene Frist.
Anmeldung, Sitzung und was der Lauf nicht tut
Browserberg gehört nicht zu ELSTER und steht in keiner Verbindung zur bayerischen Steuerverwaltung, die das Portal betreibt. Hier steht, wie du ein öffentliches Portal mit einem Zugang bedienst, den du ohnehin besitzt.
Die Zertifikatsdatei bleibt Sache einer Person
Der Tresor speichert Feldwerte und TOTP-Geheimnisse. Er speichert keine Zertifikatsdatei, und der Browser kann keine von deinem Rechner holen. Deshalb beginnt die Vorlage bewusst nach der Anmeldung: Das Skript legt eine Session an, erzeugt einen Watch-Link mit erlaubter Übernahme, und eine Person meldet sich darin an - mit ElsterSecure per Bestätigung am Telefon oder mit der Zertifikatsdatei, sofern sie in der Session verfügbar ist. Sobald die Übernahme zurückgegeben ist, startet der Lauf, und der Validierungsblock prüft als Erstes, ob die angemeldete Startseite wirklich da ist. Ist sie es nicht, scheitert der Lauf im zweiten Block mit genau dieser Begründung.
Wann die Sitzung endet
Mein ELSTER beendet eine Sitzung nach einer Zeit ohne Aktivität, und die Browserberg-Session hat ihre eigene Frist. Für einen Lauf von wenigen Minuten ist beides kein Thema; für einen Lauf, der auf eine Person in der Mittagspause wartet, ist es eines. Starte also erst, wenn die Anmeldung steht. runSequentially mit festem Schlüssel sorgt dafür, dass nie zwei Läufe gleichzeitig an derselben Zertifikatsanmeldung hängen.
Was die Effect Gates ablehnen
Jeder Klick läuft durch die Effect Gates, und die stufen das Element unter dem Cursor ein, nicht die Anweisung. Posteingang lesen und PDF laden sind Lese-Effekte. Ein Bedienelement, das nach löschen, zurücknehmen oder zahlen klingt, gilt als zerstörend oder als Zahlung und wird unter der Standardrichtlinie abgelehnt, egal was in der Anweisung stand. Tippen wird nie geblockt, und diese Vorlage tippt nichts außer dem Stichtag.
Was nach dem Lauf da ist
Jeder Block steht mit seinem Status im Lauf, jede Aktion im hash-verketteten Aktionsprotokoll. Die im Loop geladenen PDFs liegen als Artefakte am Lauf; die Liste selbst geht als JSON an deinen Webhook.
Was die Vorlage über Mein ELSTER voraussetzt
| Anmeldearten | Zertifikatsdatei, ElsterSecure, Personalausweis (eID), Sicherheitsstick, Signaturkarte Öffentliche Hilfe von Mein ELSTER |
|---|---|
| Gültigkeit des Zertifikats | Ein ELSTER-Zertifikat gilt drei Jahre und wird vor Ablauf aus Mein ELSTER heraus verlängert Öffentliche Hilfe von Mein ELSTER |
| Elektronische Bekanntgabe | Bescheide kommen nach Zustimmung in den Posteingang statt per Post Öffentliche Hilfe von Mein ELSTER |
| Bekanntgabefiktion | § 122a AO legt den Tag fest, an dem ein zum Abruf bereitgestellter Bescheid als bekanntgegeben gilt - unabhängig davon, wann ihn jemand öffnet § 122a AO |
| Was der Tresor hält | Feldwerte und TOTP-Geheimnisse. Eine Zertifikatsdatei ist kein Tresorfeld, deshalb ist die Anmeldung der Schritt einer Person in der Live-Ansicht |
Stand: 2026-09-08
Die Vorlage und wie du sie veröffentlichst
Das JSON so veröffentlichen und den Lauf auf einer Session starten, in der sich bereits jemand angemeldet hat. Die Labels werden zu Variablen: Posteingang_lesen liefert Posteingang_lesen_output, das der Loop und der Webhook lesen.
{
"title": "Mein ELSTER: neue Bescheide aus dem Posteingang einsammeln",
"parameters": [
{
"key": "ab_datum",
"description": "Nur Posteingänge ab diesem Tag berücksichtigen (JJJJ-MM-TT)",
"required": true
},
{
"key": "ziel_webhook",
"description": "Dein Endpunkt, der die Liste der Bescheide entgegennimmt",
"required": true
}
],
"runSequentially": true,
"sequentialKey": "mein-elster",
"blocks": [
{
"blockType": "navigation",
"label": "Startseite",
"url": "https://www.elster.de/eportal/start"
},
{
"blockType": "validation",
"label": "Angemeldet",
"criterion": "Die Startseite von Mein ELSTER ist im angemeldeten Zustand zu sehen, der Posteingang ist aus der Navigation erreichbar, und es steht weder ein Anmeldeformular noch eine Zertifikatsabfrage auf der Seite"
},
{
"blockType": "action",
"label": "Posteingang_oeffnen",
"instruction": "Öffne Mein Posteingang aus der Navigation von Mein ELSTER"
},
{
"blockType": "extraction",
"label": "Posteingang_lesen",
"instruction": "Jeder Eintrag im Posteingang ab dem {{ ab_datum }}: Datum, Absender (das Finanzamt), Betreff, ob es sich um einen Bescheid oder eine Mitteilung handelt, und ob ein PDF hinterlegt ist",
"schema": {
"type": "object",
"properties": {
"eintraege": {
"type": "array",
"items": {
"type": "object",
"properties": {
"datum": {
"type": "string"
},
"absender": {
"type": "string"
},
"betreff": {
"type": "string"
},
"art": {
"type": "string",
"enum": [
"bescheid",
"mitteilung"
]
},
"hatPdf": {
"type": "boolean"
}
},
"required": [
"datum",
"betreff",
"art",
"hatPdf"
]
}
}
},
"required": [
"eintraege"
]
}
},
{
"blockType": "loop",
"label": "Je_Eintrag",
"over": "{{ Posteingang_lesen_output.eintraege }}",
"maxIterations": 50,
"blocks": [
{
"blockType": "action",
"label": "PDF_laden",
"nextLoopOnFailure": true,
"instruction": "Öffne den Eintrag vom {{ loopValue.datum }} mit dem Betreff {{ loopValue.betreff }} und lade das hinterlegte PDF herunter"
}
]
},
{
"blockType": "http_request",
"label": "Liste_senden",
"method": "POST",
"url": "{{ ziel_webhook }}",
"headers": {
"content-type": "application/json"
},
"body": "{{ Posteingang_lesen_output }}"
}
]
}
import { Browserberg } from '@browserberg/sdk';
import vorlage from './elster-bescheide.json' with { type: 'json' };
const bb = new Browserberg({
apiKey: process.env.BROWSERBERG_API_KEY,
baseUrl: 'https://browserberg.com',
});
const wf = await bb.workflows.publish(vorlage);
// Der Zertifikatsschritt gehört einer Person: Watch-Link öffnen, übernehmen, anmelden.
await using session = await bb.sessions.create();
const { url } = await bb.sessions.watchLink(session.id, { allowTakeover: true });
console.log('Hier bei Mein ELSTER anmelden, danach den Lauf starten:', url);
const lauf = await bb.workflows.run(wf.workflowId, {
sessionId: session.id,
inputs: {
ab_datum: '2026-08-01',
ziel_webhook: 'https://erp.intern.example/hooks/elster',
},
});
console.log(lauf.status, lauf.endedBy, lauf.outputs.Posteingang_lesen_output);
Hinweis · Aus der öffentlichen Dokumentation entworfen
Diese Vorlage ist gegen die öffentlichen Hilfeseiten von Mein ELSTER und die Blockreferenz geschrieben, nicht gegen ein echtes ELSTER-Konto. Menübeschriftungen, die Start-URL und der Aufbau des Posteingangs können von dem abweichen, was dein Konto zeigt. Nimm das JSON als Ausgangspunkt und rechne damit, beim ersten Lauf ein, zwei Anweisungen nachzuziehen.
Fragen vor dem ersten Lauf
Kann der Tresor mein ELSTER-Zertifikat aufnehmen?
Nein. Ein Zertifikat ist eine Datei plus Passwort, und der Tresor hält Feldwerte und TOTP-Geheimnisse, keine Dateien. Die Anmeldung erledigt eine Person in der Live-Ansicht; die Session trägt den angemeldeten Zustand danach durch den Lauf.
Startet die Einspruchsfrist, weil der Lauf den Bescheid liest?
Nein - und sie startet auch nicht dadurch, dass ein Mensch liest. Nach § 122a AO gilt ein Bescheid eine feste Zahl von Tagen nach der Benachrichtigungsmail als bekanntgegeben, ob ihn jemand öffnet oder nicht. Die Vorlage gibt es, damit niemand einen Bescheid zu spät entdeckt.
Läuft das nach Zeitplan?
Die Blöcke nach der Anmeldung schon, aber eine geplante Auslösung legt eine eigene Session an, in der sich niemand angemeldet hat - der Validierungsblock scheitert sofort. Bei ELSTER startet den Lauf eine Person oder ein Skript, sobald der Zertifikatsschritt erledigt ist. Für Zeitpläne eignen sich Portale mit Tresor-Anmeldung.
Was passiert bei einem Eintrag ohne PDF?
Die Extraktion meldet hatPdf als false, und der Download-Block im Loop scheitert für diesen Eintrag. Er trägt nextLoopOnFailure, also geht es mit dem nächsten Eintrag weiter, und der Fehlschlag steht bei dieser Iteration.
Wo landen die PDFs?
Als Artefakte am Lauf, abrufbar über den Artefakt-Endpunkt. Der Webhook bekommt die strukturierte Liste, nicht die Dateien; dein System entscheidet, was es holt und wohin es das legt.
Weiterlesen
- Live-Ansicht und Übernahme Wie eine Person den Zertifikatsschritt macht und den Browser zurückgibt
- Zugangsdaten-Tresor Was der Tresor hält - und warum eine Zertifikatsdatei nicht dazugehört
- ATLAS IAA-Plus Dasselbe Zertifikat, das andere Behördenportal
- Kundenportal-Überwachung Die allgemeine Form: ein Portal, keine API, eine Person am Aktualisieren-Knopf
Beim nächsten Bescheid ausprobieren
Fünf Browserstunden, keine Karte. Vorlage veröffentlichen, einmal über die Live-Ansicht anmelden, und dem Posteingang beim Leeren zusehen.