Daten aus Odoo exportieren: Ausstieg und Archiv
Kurz gesagt
Vollständig ist nur die Datenbank-Sicherung: als zip-Sicherung mit Dateispeicher, bei Odoo Online über Back-up herunterladen. Für ein anderes System exportieren Sie zusätzlich je Datenklasse die Liste mit der Spalte Externe ID. Die Aufbewahrungsfristen laufen danach weiter: in Deutschland 10, 8 oder 6 Jahre (§ 147 Abs. 3 Satz 1 AO), in Österreich 7 Jahre (§ 212 Abs. 1 UGB), in der Schweiz 10 Jahre (Art. 958f Abs. 1 OR).
Das Wichtigste
- Listenexport: Objektliste öffnen, Aktionen (Actions) ‣ Exportieren (Export); Formate Excel (.xlsx) und CSV (.csv), Dokumentation 20.0.
- Updatable fields only filtert die Liste der verfügbaren Felder auf importierbare Felder; die Spalte Externe ID (External ID) steht nur nach manuellem Hinzufügen in der Liste der Exportfelder, ist aber im Export enthalten, solange der Schalter an ist (Dokumentation 20.0).
- Zip-Sicherung und Dateispeicher: Im Community-Datenbankmanager nimmt die zip-Sicherung den Dateispeicher nur mit angehaktem Kontrollkästchen Include filestore mit, das Format pg_dump custom format (without filestore) enthält ihn gar nicht; auf der Kommandozeile nimmt odoo-bin db dump --format zip den Dateispeicher mit, sofern --no-filestore weggelassen wird (Dokumentation 20.0).
- Odoo Online: Back-up herunterladen liefert eine ZIP-Datei; ist die Option deaktiviert, ist die Datenbank zu groß.
- Eine gekündigte Cloud-Datenbank bleibt drei Wochen deaktiviert (Schonfrist) und wird danach vernichtet; gelöschte personenbezogene Daten können bis zu zwölf Monate in den Sicherungen bleiben (Datenschutzerklärung, Stand 24. September 2026).
- Nach dem Export bleiben die Aufbewahrungsfristen bestehen: Deutschland 10, 8 oder 6 Jahre (Lieferscheine ohne Buchungsbelegfunktion enden mit der Rechnung), Österreich 7 Jahre, Schweiz 10 Jahre.
Ein Export aus Odoo bedeutet drei verschiedene Dinge, die einander nicht ersetzen: eine Tabelle für ein anderes System, den vollständigen Bestand als Sicherungsarchiv und die Unterlagen für die Aufbewahrung. Diese Anleitung ordnet jeder Datenklasse einen Weg zu und prüft anschließend, ob nichts fehlt; Grundlage ist Odoo 20.0, das die Dokumentation im September 2026 als Release führt. Den umgekehrten Weg behandelt Datenübernahme aus dem Altsystem nach Odoo.
Was Sie vorab brauchen
- Je Datenklasse eine Entscheidung: ins Zielsystem übernehmen, archivieren oder beides. Die drei Ziele brauchen verschiedene Dateien.
- Ein Konto mit Exportrecht: Nach dem Community-Zweig 20.0 (
odoo/orm/models.py) darf exportieren, wer Administrator ist oder der Gruppebase.group_allow_exportangehört, sonst endet der Aufruf mit einer Fehlermeldung. - Zugang zum Datenbank-Manager Ihrer Betriebsart: auf dem eigenen Server
<odoo-server>/web/database/managermit Master-Passwort, bei Odoo Online der Datenbankmanager unter odoo.com/my/databases, bei Odoo.sh der Reiter Back-ups des Zweigs. Ist er abgeschaltet – die Dokumentation empfiehlt das für internetzugewandte Systeme –, sichern Sie in der Systemadministration, etwa mitodoo-bin db dump --format zip. - Platz für die Dateien und eine Ablage auf einem anderen Rechner als dem, auf dem die Datenbank läuft.
- Die Liste der Objekte; die Modellnamen stehen im Entwicklermodus unter Einstellungen (Settings) ‣ Technisch (Technical) ‣ Datenbankstruktur (Database Structure) ‣ Modelle (Models).
Der Exportplan nach Datenklasse
Die Tabelle ist der Kern dieser Anleitung: je Datenklasse der Ort in Odoo, der Weg nach außen und die Prüfung, die belegt, dass nichts fehlt. Die Vollständigkeitsprüfung der letzten Spalte wird unten Schritt für Schritt ausgeführt.
| Datenklasse | Wo sie in Odoo liegt | Weg nach außen | Vollständigkeitsprüfung |
|---|---|---|---|
| Stammdaten (Kontakte, Produkte, Preise, Steuersätze, Zahlungsbedingungen) | Listenansicht der jeweiligen App | Aktionen (Actions) ‣ Exportieren (Export) mit der Spalte Externe ID | Zahl der Datensätze in der Liste gegen die verschiedenen Werte der Spalte Externe ID |
| Belege und Bewegungen (Angebote, Aufträge, Lieferungen, Bestellungen, Lagerbewegungen) | Listenansicht der jeweiligen App | wie Stammdaten; Verweise als Feld/Externe ID | Zeilen je Modell; Stichprobe eines Belegs mit seinen Positionen |
| Buchhaltung (Rechnungen, Buchungen, Journalposten, Zahlungen) | Buchhaltung, Listen und Berichte | Listenexport je Objekt; vollständig nur in der Sicherung | Summen je Journal und Periode gegen den Bericht |
| Anhänge und Dateien (Rechnungs-PDF, Bilder, hochgeladene Belege) | Dateispeicher (Filestore); Binärfelder ohne Dateispeicher in einer Spalte der Datenbank | Dateien im Dateispeicher nur in der Sicherung mit Dateispeicher; Binärfelder aus einer Datenbankspalte reisen im Listenexport als Base64-Text (Community-Zweig 20.0) | einen Anhang nach dem Einspielen der Sicherung öffnen |
| Nachrichten und Protokolle (Chatter, Aktivitäten, Protokolle) | Datenbank | Sicherung; dafür genügt der Datenbank-Dump | Stichprobe eines Datensatzes mit Verlauf |
| Konfiguration und Anpassungen (Studio, Automatisierungsregeln, Vorlagen, Sequenzen, Zugriffsrechte) | Datenbank; Studio zusätzlich als Modul studio_customization |
Sicherung; Studio zusätzlich als ZIP über den Studio-Export | Studio-Modul im Archiv; Import in eine Kopie derselben Version |
| Eigener Code (eigene Module, OCA-Module) | nicht in der Datenbank | Repository und Quelltexte mit dem installierten Stand sichern | Version für die Zielversion vorhanden |
Schritt für Schritt: exportieren, sichern, ablegen
Schritt 1: Datenklassen und Objekte festlegen
Notieren Sie, welche Objekte zu welcher Zeile der Tabelle gehören, und ergänzen Sie sie um Objekte, die nur in Ihrem Betrieb vorkommen. Ein Objekt ohne Listenansicht kommt nur über die Sicherung mit; die Modellnamen entnehmen Sie dem technischen Menü.
Schritt 2: Den Ausgangsstand festhalten
Öffnen Sie je Objekt die Listenansicht mit den Filtern für den vollen Bestand und notieren Sie den Zähler: oben rechts in der Listenansicht steht Wert / Gesamtzahl. Ein Pluszeichen daran heißt nach dem Community-Zweig 20.0, dass die Zahl noch nicht vollständig geladen ist; klicken Sie darauf, bis es verschwindet. Datum und Uhrzeit gehören dazu, denn der Export ist ein Stand.
Schritt 3: Die Liste exportieren
Markieren Sie die Datensätze und öffnen Sie Aktionen (Actions) ‣ Exportieren (Export). Der Dialog Daten exportieren (Export Data) zeigt links die Verfügbaren Felder (Available fields), rechts die Zu exportierenden Felder (Fields to export), dazu eine Suche und je Feld Unterfelder anzeigen (Show sub-fields). Als Format stehen Excel (.xlsx) und CSV (.csv) zur Wahl; eine Zusammenstellung lässt sich als Exportvorlage für alle Nutzer speichern. Schalten Sie Updatable fields only ein: Nach der Dokumentation 20.0 filtert er die Liste der Verfügbaren Felder auf Felder, die sich wieder importieren lassen, und lässt die Liste der Zu exportierenden Felder unverändert. Die Spalte Externe ID (External ID) steht in dieser Liste nur, wenn Sie sie von Hand hinzufügen; in die exportierte Datei kommt sie nach der Dokumentation dennoch, solange der Schalter an ist. Eine deutsche Beschriftung hat der Schalter im Zweig 20.0 nicht. Ist mehr als eine Sprache installiert und ist mindestens ein gewähltes Feld übersetzbar, erscheint unter der Liste ein Feld Sprachen (Languages): Ohne Auswahl gibt Odoo übersetzbare Felder in Ihrer Benutzersprache aus; jede von Ihnen gewählte Sprache ersetzt sie durch eine Spalte wie Name@fr_FR. Große Exporte können laut Dokumentation 20.0 in eine Zeitüberschreitung (Timeout) laufen; teilen Sie sie dann in kleinere Stapel, etwa je Geschäftsjahr. Auch in der Kanban-Ansicht geht der Export, dort wählen Sie Karten mit gedrückter Alt-Taste.
Schritt 4: Verknüpfungen mitnehmen
Beziehungsfelder lassen sich über den Namen, die Datenbank-ID (Database ID) oder die Externe ID schreiben; je Feld ist nur eine dieser drei Arten erlaubt. Die Datenbank-ID ist die laufende Nummer der Quell-Datenbank und im Zielsystem bedeutungslos, für einen Umzug nehmen Sie die Spalte mit der Endung /Externe ID. Externe Kennungen sind über alle Objekte eindeutig und tragen ein Präfix nach Tabelle, etwa kunde_12; mehr dazu unter Externe ID (Odoo). Achtung: Nach dem Community-Zweig 20.0 legt ein Export mit der Spalte Externe ID für Datensätze ohne Kennung eine solche an, im Modul __export__ und mit dem Namen <Tabelle>_<ID>_<acht Zeichen>; der Export ist damit kein reines Lesen. Probieren Sie ihn zuerst in einer Kopie aus.
Schritt 5: Die Datenbank-Sicherung mit Dateispeicher erstellen
Anhänge liegen im Dateispeicher, nicht in den Spalten der Listenexporte. Auf dem eigenen Server öffnen Sie den Datenbank-Manager, wählen die Datenbank und klicken auf Backup. Der Community-Zweig 20.0 zeigt dort das Format zip (vorausgewählt) und das Kontrollkästchen Include filestore, ebenfalls vorausgewählt; das zweite Format pg_dump custom format (without filestore) enthält den Dateispeicher nicht. Für Sichern, Wiederherstellen, Anlegen und Löschen verlangt die Seite das Master-Passwort. Ist der Datenbank-Manager abgeschaltet, sichern Sie mit odoo-bin db dump --format zip; --no-filestore lassen Sie weg, weil sonst die Anhänge fehlen. Beschriftungen und Voreinstellungen, die nur der öffentliche Community-Zweig 20.0 belegt, sind kein Nachweis für Enterprise, Odoo Online oder Odoo.sh; prüfen Sie den Dialog dort in Ihrer eigenen Datenbank.
Bei Odoo Online läuft der Schritt über den Datenbankmanager: Back-up herunterladen liefert eine ZIP-Datei; ist die Option deaktiviert, ist die Datenbank zu groß für diesen Weg. Für den Umzug auf einen eigenen Server nennt die Dokumentation genau diese Folge: Sicherung herunterladen und dort über den Datenbank-Manager wiederherstellen. Bei Odoo.sh finden Sie im Reiter Back-ups die Sicherungen zum Herunterladen und Wiederherstellen; jede automatische Sicherung der Produktionsdatenbank enthält Datenbank-Dump, Dateispeicher, Protokolle und Sitzungen. Die Datenschutzerklärung hält fest, dass Sie über Ihr Kundenkonto in der Cloud jederzeit eine vollständige Sicherung herunterladen können, um sie zu übertragen oder zu archivieren. Nach einer Kündigung bleibt die Cloud-Datenbank drei Wochen deaktiviert und wird danach vernichtet; holen Sie die Sicherung also vorher.
Schritt 6: Anpassungen und Code getrennt sichern
Studio legt jede Anpassung im Modul studio_customization ab und lädt es über den Studio-Export als ZIP-Datei herunter, wahlweise mit Daten und Anhängen. Der Import setzt dieselbe Odoo-Version und dieselben Apps und Module voraus, weil Studio die zugrunde liegenden Module nicht als Abhängigkeiten einträgt. Eigene und fremde Module stehen nicht in der Datenbank; sichern Sie den Codestand samt Version daneben. Die Sicherung selbst behandelt Odoo sichern: Backup-Strategie und Wiederherstellung.
Schritt 7: Das Archiv beschreiben
Legen Sie zu jedem Archivstück einen kurzen Vermerk: Betriebsart, Odoo-Version, Datum, Inhalt, Format, ob der Dateispeicher enthalten ist und mit welchem Werkzeug die Datei zu lesen ist. Ohne diesen Vermerk ist eine Sicherung nach zwei Jahren ein Fundstück.
So prüfen Sie die Vollständigkeit
- Sicherung einspielen. Stellen Sie die ZIP-Datei in einer Kopie wieder her, auf dem eigenen Server über den Datenbank-Manager mit dem Kontrollkästchen Neutralisieren, bei Odoo.sh in einem Staging-Zweig. Eine neutralisierte Datenbank ist eine Nicht-Produktivdatenbank, in der nach der Dokumentation 20.0 unter anderem geplante Aktionen, ausgehende E-Mails, die Banksynchronisierung, Zahlungsanbieter, Versandmethoden, IAP-Token und die Sichtbarkeit der Website abgeschaltet sind; die Aufzählung der abgeschalteten Funktionen ist nicht abschließend (Testumgebung für Odoo).
- Zeilen je Datei zählen. Vergleichen Sie die Datenzeilen der Exportdatei – ohne Kopfzeile – mit der Zahl aus Schritt 2. Weichen die Werte ab, prüfen Sie zuerst die Filter und danach, ob Unterfelder exportiert wurden.
- Kennungen zählen, nicht Zeilen. Wählen Sie Unterfelder einer Position, etwa die Zeilen eines Verkaufsauftrags, so steht nach dem Community-Zweig 20.0 nur die erste Position in der Zeile des Kopfes – der Export mischt die erste Zeile der Unterfelder in die Hauptzeile – und jede weitere Position kommt als zusätzliche Zeile hinzu, in der die Felder des Kopfes leer bleiben. Dieselbe Anordnung verlangt die Import-Dokumentation 20.0 für den Rückweg: die erste Auftragszeile steht in der Zeile des Auftrags, jede weitere in einer zusätzlichen Zeile ohne Angaben zum Auftrag. Zählen Sie daher die verschiedenen Werte der Spalte Externe ID: 12.000 Aufträge mit durchschnittlich 4,2 Positionen ergeben 12.000 Kennungen bei rund 50.400 Zeilen – je Auftrag eine Kopfzeile samt erster Position und je weitere Position eine Zeile (Beispielrechnung mit erfundenen Zahlen).
- Stichproben öffnen. Nehmen Sie je Datenklasse einen Datensatz: einen Artikel mit Bild, eine Rechnung mit angehängtem PDF, einen Kontakt mit Verlaufseintrag. Fehlt ein Anhang, kann die Sicherung ohne Dateispeicher entstanden sein; prüfen Sie dann im Community-Datenbankmanager das Kontrollkästchen Include filestore und auf der Kommandozeile, ob –no-filestore gesetzt war.
- Archivstücke zusammenstellen. Prüfen Sie, dass Sicherung, Listenexporte und Studio-ZIP-Datei denselben Stand haben, und öffnen Sie eine Datei auf einem Rechner ohne Odoo.
- Im Zielsystem testen. Importieren Sie eine kleine Stichprobe mit der Spalte Externe ID und prüfen Sie die Verknüpfungen; der Ablauf steht in Daten in Odoo importieren: CSV, Excel und externe IDs.
Wenn etwas nicht klappt
| Symptom | Ursache | Behebung |
|---|---|---|
| Der Export läuft in eine Zeitüberschreitung | Die Auswahl ist größer, als ein Durchgang verarbeitet (Dokumentation 20.0) | In kleineren Stapeln exportieren, etwa je Geschäftsjahr oder je Firma, und die Dateien danach zusammenführen |
| Die Spalte Externe ID fehlt in der Datei | Der Schalter Updatable fields only war aus, oder die Tabelle hat keinen eigenen Datensatztyp (Dokumentation 20.0; Community-Zweig 20.0) | Schalter einschalten; die Spalte ist dann im Export enthalten, auch wenn sie in der Liste Zu exportierende Felder nicht steht. Bei einer Tabelle ohne eigenen Datensatztyp exportieren Sie die Spalte Datenbank-ID und bilden die Kennung im Zielsystem neu. |
| Ein Feld fehlt in der Feldliste | Updatable fields only blendet nicht importierbare Felder aus | Schalter ausschalten, wenn die Datei nur gelesen wird; sonst das Feld über die Suche oder Unterfelder anzeigen (Show sub-fields) erreichen |
| Anhänge fehlen | Der Listenexport enthält nur die gewählten Felder; Anhänge am Chatter und in der Dokumenten-App stehen in keiner Spalte des Datensatzes | Die Sicherung mit Dateispeicher verwenden oder die Anhänge über ihre eigene Liste exportieren |
| Das PDF ist eine Textwüste | Ein Binärfeld wird als Base64-Text exportiert (Community-Zweig 20.0) | Die Datei über die Sicherung entnehmen und die Spalte im Export abwählen |
| Die Kopie verschickt E-Mails an Kundschaft | Sie haben ohne Neutralisieren wiederhergestellt | Kopie löschen und erneut mit Neutralisieren einspielen; bei Odoo.sh Staging verwenden |
| Zahlen und Datumswerte kommen falsch an | Trennzeichen, Währungszeichen oder Datumsformat passen nicht | CSV mit ISO-Datumsangaben (JJJJ-MM-TT) schreiben, Währungszeichen aus den Zellen entfernen und die Formatoptionen beim Import setzen |
Aufbewahrung: Was der Export nicht ersetzt
Der Export beendet die Aufbewahrungspflicht nicht, er erfüllt sie nur anders. In Deutschland beträgt die Frist zehn Jahre für Bücher und Aufzeichnungen, Inventare, Jahresabschlüsse, Lageberichte, die Eröffnungsbilanz und die Unterlagen nach § 147 Abs. 1 Nr. 4a AO, acht Jahre für Buchungsbelege und sechs Jahre für die sonstigen Unterlagen nach § 147 Abs. 1 AO (§ 147 Abs. 3 Satz 1 AO); bei empfangenen Lieferscheinen, die keine Buchungsbelege sind, endet sie mit dem Erhalt der Rechnung, bei abgesandten mit deren Versand (§ 147 Abs. 3 Satz 3 und 4 AO). Der Startzeitpunkt ist je Unterlagenart ein anderer: Nach § 147 Abs. 4 AO beginnt die Frist mit dem Schluss des Kalenderjahrs, in dem die letzte Eintragung in das Buch gemacht, das Inventar, die Eröffnungsbilanz, der Jahresabschluss oder der Lagebericht aufgestellt, der Handels- oder Geschäftsbrief empfangen oder abgesandt oder der Buchungsbeleg entstanden ist, ferner die Aufzeichnung vorgenommen oder die sonstige Unterlage entstanden ist. Für Institute nach dem Kreditwesengesetz einschließlich Zweigstellen nach § 53 KWG, für Unternehmen unter der Aufsicht nach § 1 Abs. 1 VAG und für Wertpapierinstitute ist § 147 Abs. 3 Satz 1 AO weiter in der am 31. Dezember 2024 geltenden Fassung anzuwenden; die Achtjahresfrist gilt für sie nicht (Art. 97 § 19a Abs. 3 EGAO). Bei einer Außenprüfung kann die Finanzbehörde verlangen, dass die Daten in einem maschinell auswertbaren Format übertragen werden (§ 147 Abs. 6 Satz 1 Nr. 3 AO); für den Ausstieg gilt die Erleichterung des § 147 Abs. 6 Satz 5 AO: Nach einem Systemwechsel oder der Auslagerung aus dem Produktivsystem genügt es, die Daten nach Ablauf des fünften Kalenderjahres, das auf die Umstellung folgt, ausschließlich auf einem maschinell lesbaren und maschinell auswertbaren Datenträger vorzuhalten, solange noch nicht mit einer Außenprüfung begonnen wurde. Die Frist selbst läuft weiter.
In Österreich sind Bücher, Inventare, Eröffnungsbilanzen, Jahresabschlüsse samt Lageberichten, Konzernabschlüsse samt Konzernlageberichten, empfangene und abgesandte Geschäftsbriefe und Buchungsbelege sieben Jahre geordnet aufzubewahren, und zwar darüber hinaus so lange, als sie für ein anhängiges gerichtliches oder behördliches Verfahren von Bedeutung sind, in dem der Unternehmer Parteistellung hat (§ 212 Abs. 1 UGB); die Frist läuft vom Schluss des Kalenderjahrs, für das die letzte Bucheintragung vorgenommen, das Inventar aufgestellt, die Eröffnungsbilanz und der Jahresabschluss festgestellt, der Konzernabschluss aufgestellt oder der Geschäftsbrief empfangen oder abgesandt worden ist (§ 212 Abs. 2 UGB). In der Schweiz gilt für Geschäftsbücher und Buchungsbelege eine Frist von zehn Jahren ab Ablauf des Geschäftsjahres (Art. 958f Abs. 1 OR); elektronisch aufbewahren ist zulässig, wenn die Übereinstimmung mit den Geschäftsvorfällen gewährleistet ist und die Unterlagen jederzeit wieder lesbar gemacht werden können (Art. 958f Abs. 3 OR). Ob im Einzelfall das Altsystem, eine Kopie oder Ihr Archiv genügt, klären Sie mit Ihrer Steuerberatung; welche Rolle Betriebsart und Abonnement spielen, behandelt Odoo und digitale Souveränität: Community, OCA, Ausstieg.
Wann Sie Hilfe holen sollten
- Das Master-Passwort fehlt oder der Datenbank-Manager ist abgeschaltet: Die Wiederherstellung gehört in die Systemadministration.
- Die Datenbank ist groß: Bei Odoo Online ist der Download dann gesperrt; planen Sie den Weg über den Support vor einer Kündigung.
- Es gibt mehrere Gesellschaften, eigene Module oder Studio-Anpassungen: Verknüpfungen und Modulversionen entscheiden, ob die Übernahme gelingt.
- Nur ein Teil des Bestands geht ins Zielsystem: Nehmen Sie Ihre Steuerberatung dazu, bevor Sie Systeme oder Datenträger abschalten.