Backup, Export & Umzug
Als JSON oder CSV exportieren, ein tägliches Backup planen, einen Export mit Konfliktklärung pro Eintrag importieren und Pulsaria auf einen neuen Mac umziehen.
Alles, was Pulsaria weiß, liegt als einfache Datei auf deinem Mac — ein Backup ist also eine Datei, die du in der Hand hast. Diese Seite erklärt die beiden Export-Formate, das geplante tägliche Backup, wie ein Import sich in vorhandene Daten einfügt, und die genaue Reihenfolge für den Umzug auf einen anderen Rechner.
Alles davon steckt an einer Stelle: im Seitenleisten-Eintrag App-Einstellungen, in den Karten Daten exportieren und Täglicher Auto-Export.
Manueller Export
Die Karte Daten exportieren hat drei Buttons: Als JSON exportieren, Als CSV exportieren und JSON importieren. Beide Export-Buttons öffnen einen nativen Speichern-Dialog mit bereits ausgefülltem Dateinamen, und beide funktionieren auch, wenn deine Testphase abgelaufen ist — deine Daten herauszubekommen ist nie blockiert. Nur JSON importieren braucht eine aktive Testphase oder eine Lizenz.
| Button | Vorgeschlagener Dateiname | Inhalt |
|---|---|---|
| Als JSON exportieren | pulsaria-export-2026-07-25.json | Alles — und die einzige Datei, die JSON importieren wieder einliest |
| Als CSV exportieren | pulsaria-entries-2026-07-25.csv | Eine Zeile pro Messwert, sonst nichts |
Das Datum im Namen ist dein lokaler Kalendertag. Nach dem Speichern erscheint ein Toast JSON-Export gespeichert (bzw. CSV-Export gespeichert) mit dem Pfad darunter, dazu unter den Buttons für rund vier Sekunden die Zeile Export gespeichert: <Pfad>.
Was in der JSON-Datei steht
Formatiertes JSON mit zwei Leerzeichen Einrückung. Die oberste Ebene:
| Schlüssel | Inhalt |
|---|---|
exportedAt | ISO-Zeitstempel des Export-Moments |
version | Immer 1 |
projects | Alle Projekte, vollständig |
kpiDefinitions | Alle KPI-Definitionen, vollständig |
entriesByDate | Objekt mit Schlüsseln YYYY-MM-DD, Datum aufsteigend — jeder Eintrag dieses Tages, sortiert nach createdAt aufsteigend |
alerts | Die gespeicherten Status-Warnungen (höchstens 100) |
fetchLog | Der Fetch-Log-Ringpuffer (höchstens 500 Einträge) |
connections | Connector-Verbindungen als Metadaten: Connector-ID, Name, Parameter und der Schlüsselbund-Verweis credentialRef |
entriesByDate ist die vollständige Historie, keine Zusammenfassung. Wurde ein KPI an einem Tag dreimal geschrieben, stehen alle drei Zeilen mit ihren Zeitstempeln in der Datei.
Was der Export bewusst weglässt
- Connector-Zugangsdaten. API-Keys, Tokens und Google-Service-Account-JSON-Keys liegen im macOS-Schlüsselbund und landen nie in der Datei. Der Export enthält nur den Verweisnamen
credentialRef, der ohne den Schlüsselbund-Eintrag dahinter wertlos ist. - App-Einstellungen. Design, Sprache, Datenverzeichnis, Erinnerungs-Einstellungen, Auto-Export-Einstellungen, weggeklickte Hinweise und Onboarding-Flags liegen in
config.json— die ist nicht Teil des Exports. - Deine Lizenz.
license.jsonwird nicht exportiert. Den Key gibst du auf dem neuen Rechner neu ein.
Eine Teilmenge lässt sich nicht exportieren — kein Datumsbereich, kein einzelnes Projekt, kein einzelner KPI. Jeder Export ist der komplette Dump.
Eine Ausnahme solltest du kennen, bevor du einen Export weitergibst: Ein Token, das du in eine Header-Zeile eines eigenen HTTP-KPI getippt hast, steht im Klartext in der KPI-Definition und nicht im Schlüsselbund — es ist also in der JSON-Datei. Siehe Eigene HTTP-Quellen.
Die CSV-Datei
Die CSV ist für Tabellenkalkulation, Pivot-Tabellen und dafür, deine Zahlen woanders weiterzuverarbeiten. Sie enthält nur Einträge — keine Projekte, keine Ziele, keine Warnungen, keine Verbindungen, kein Fetch-Log.
kpiId,kpiName,projectName,date,value,createdAt
- Eine Zeile pro gespeichertem Eintrag. Ein KPI, der an einem Tag dreimal aktualisiert wurde, ergibt drei Zeilen.
- Die Zeilen sind nach Datum aufsteigend gruppiert, innerhalb eines Tages nach
createdAtaufsteigend. - KPI-Name und Projektname sind bereits aufgelöst. Ein unternehmensweiter KPI hat ein leeres
projectName; ein Eintrag, dessen KPI inzwischen gelöscht wurde, behält seinekpiId, hat aber leereskpiNameundprojectName. - Werte mit Komma, Anführungszeichen oder Zeilenumbruch werden in doppelte Anführungszeichen gesetzt, innere Anführungszeichen verdoppelt.
- Die Datei beginnt mit einer UTF-8-BOM und nutzt CRLF-Zeilenenden, damit Excel Umlaute ohne Import-Assistent richtig darstellt. Nach der letzten Zeile folgt kein Zeilenumbruch mehr.
CSV geht nur in eine Richtung. Einen CSV-Import gibt es nicht.
Täglicher Auto-Export
Die Karte Täglicher Auto-Export schreibt einmal am Tag ein datiertes Backup, ohne dass du etwas tust. Schalte den Schalter Automatischer täglicher Export ein; die übrigen Bedienelemente erscheinen darunter.
| Feld | Standard | Hinweise |
|---|---|---|
| Uhrzeit | 18:00 | Lokale Uhrzeit, HH:MM |
| Format | JSON + CSV | Alternativen: JSON (komplettes Backup), CSV (Tabelle / LLM) |
| Speicherort | <App-Daten>/pulsaria/daily-export | Nur-Lese-Feld plus Wählen…; ein Button Zurücksetzen erscheint, sobald ein eigener Ordner gesetzt ist |
Der Standardordner ist ~/Library/Application Support/com.onepixelahead.pulsaria/pulsaria/daily-export. Die Dateien heißen genau wie beim manuellen Export — pulsaria-export-<YYYY-MM-DD>.json und pulsaria-entries-<YYYY-MM-DD>.csv — und ihr Inhalt ist identisch.
Wann er läuft
Der Scheduler wacht alle 60 Sekunden auf, solange Pulsaria geöffnet ist. Der Export läuft einmal pro lokalem Kalendertag, zur eingestellten Uhrzeit oder danach. War dein Mac um 18:00 im Ruhezustand oder die App geschlossen, läuft er beim ersten Takt, nachdem du Pulsaria an diesem Tag wieder öffnest — an einem späteren Tag wird er nicht nachgeholt. Vor dem Schreiben aktualisiert er deine automatischen KPIs, damit der Stand aktuell ist; scheitert diese Aktualisierung, wird das Backup trotzdem mit den vorhandenen Daten geschrieben.
Zwei Bedingungen gelten: Pulsaria muss geöffnet sein — es gibt keinen Hintergrunddienst, siehe Zeitpläne & Aktualisierung — und der geplante Lauf braucht eine aktive Testphase oder eine gültige Lizenz.
Status und Lauf von Hand
Unten in der Karte stehen eine Statuszeile und der Button Jetzt exportieren:
- Noch kein Export — nie gelaufen.
- Letzter Export vor 2 Stunden — der letzte Erfolg als relative Zeit.
- Letzter Export fehlgeschlagen — Speicherort prüfen — fahre mit der Maus darüber, um die tatsächliche Fehlermeldung zu lesen.
Jetzt exportieren ignoriert Uhrzeit und Einmal-pro-Tag-Regel und startet dieselbe Routine sofort, inklusive KPI-Aktualisierung. Die geschriebenen Dateipfade stehen anschließend im Toast. Nutze den Button einmal nach dem Ändern des Speicherorts, um zu prüfen, ob der Ordner wirklich beschreibbar ist.
Der Speicherort ist wichtiger, als er aussieht. Die Karte warnt, andere Orte funktionierten evtl. nur, solange die App geöffnet ist — ehrlicher gesagt: Ein Ordner, den du über Wählen… auf der Karte ausgesucht hast, behält seine Freigabe, weil Pulsaria per Dialog freigegebene Ordner beim Start wiederherstellt. Ein von Hand eingetippter Pfad bekommt nie eine, und der unbeaufsichtigte Lauf scheitert dann daran. Nach einem Wechsel des Ordners einmal Jetzt exportieren drücken: Schreibt der die Dateien, schreibt der geplante Lauf sie auch. Sollen die Backups an einem Ort liegen, den Pulsaria nie anfasst, ist es am einfachsten, den Standardordner zu lassen und ihn von Time Machine oder einem Sync-Client kopieren zu lassen.
Zwei Dinge noch: Eine Datei vom selben Tag wird überschrieben, und gelöscht wird nie etwas. Pro Tag sammeln sich eine JSON- und eine CSV-Datei an, unbegrenzt — aufräumen musst du selbst. Und bei einem Fehlschlag gibt es keine Benachrichtigung; die Statuszeile in dieser Karte ist das einzige Signal.
Einen JSON-Export importieren
JSON importieren liest einen Pulsaria-JSON-Export wieder ein und führt ihn mit deinen Daten zusammen. Gelöscht wird dabei nie etwas: Neues wird hinzugefügt, und bei allem, was schon existiert, entscheidest du pro Eintrag.
Ohne aktive Testphase oder Lizenz ist der Button deaktiviert, mit dem Tooltip Lizenz oder aktive Testversion nötig.
Schritt 1 — was hinzukäme
Wähle eine .json-Datei. Pulsaria liest und prüft sie, ohne etwas zu schreiben, und öffnet dann den Dialog Import. Unter Wird hinzugefügt siehst du je eine Zeile für KPIs, Verbindungen, Einträge, Projekte und Warnungen — aber nur die mit einer Anzahl größer null. Enthält die Datei nichts Neues, sondern nur Einträge, die kollidieren, steht dort Nichts Neues hinzuzufügen — nur Konflikte zu klären.
Gibt es weder Neues noch einen Konflikt, öffnet sich gar kein Dialog. Du bekommst den Toast Nichts Neues zu importieren — alles aus der Datei ist bereits vorhanden.
Kollidieren Einträge, nennt ein amberfarbener Hinweis die Anzahl, und der Hauptbutton heißt Konflikte klären (n). Ohne Konflikte heißt er schlicht Importieren.
Schritt 2 — ein Konflikt nach dem anderen
Ein Eintrag kollidiert, wenn seine interne id lokal bereits existiert. Der Dialog führt dich dann durch alle, zuerst KPIs, dann Verbindungen, überschrieben mit Konflikt 1 von 4. Jeder wird als zwei Spalten gezeigt:
| Spalte | Bei einem KPI | Bei einer Verbindung |
|---|---|---|
| Deine Version | Name, Ziel (mit Einheit), Quelle | Name, Connector, Parameter |
| Import-Version | dieselben drei Felder, aus der Datei | dieselben drei Felder, aus der Datei |
Drei Buttons:
- Behalten — deine Version bleibt unangetastet.
- Ersetzen — die importierte Version überschreibt deine.
- Alle übrigen behalten — alles noch Unentschiedene bleibt lokal, und der Import läuft sofort los.
Nach der letzten Entscheidung wird geschrieben. Danach erscheint Import abgeschlossen mit den Anzahlen pro Typ und, falls etwas überschrieben wurde, ein zweiter Toast: n vorhandene(r) Eintrag/Einträge durch die Import-Version ersetzt.
Wie die einzelnen Datenarten zusammengeführt werden
| Daten | Abgeglichen über | Verhalten |
|---|---|---|
| Projekte | id | Neue werden hinzugefügt. Ein vorhandenes Projekt behält immer die lokale Version — für Projekte gibt es keine Behalten/Ersetzen-Wahl. |
| KPIs | id | Neue werden hinzugefügt. Konflikte bleiben standardmäßig lokal und werden nur über Ersetzen überschrieben. |
| Verbindungen | id | Gleiche Regel wie bei KPIs. |
| Einträge | kpiId + createdAt, pro Tag | Append-only und dedupliziert — derselbe Export ein zweites Mal importiert fügt nichts hinzu. |
| Warnungen | id | Neue werden eingemischt, neueste zuerst sortiert, bei 100 gekappt. |
| Fetch-Log | — | Wird exportiert, aber nie importiert. Es sind Diagnosedaten. |
Zwei Dinge werden beim Einlesen bewusst entfernt:
- Jeder importierte KPI verliert seine Freigabe. Ein Bash- oder HTTP-KPI, der auf dem alten Mac freigegeben war, kommt ohne Freigabe an, und der Scheduler überspringt ihn, bis du den tatsächlichen Befehl bzw. die URL gesehen und erneut freigegeben hast. Das verhindert, dass eine Export-Datei einen Befehl einschleust, der unbeaufsichtigt läuft. Connector-KPIs hatten nie eine Freigabe.
- Jede importierte Verbindung verliert ihren Prüfstatus und gilt als nicht verifiziert, bis du das Geheimnis neu eingibst und testest.
Wo der Import streng ist — und wo er schweigt
Die Datei muss ein JSON-Objekt mit projects, kpiDefinitions und entriesByDate sein; alles andere wird abgelehnt mit Not a Pulsaria export (expected an object) oder Not a Pulsaria export (missing projects / kpiDefinitions / entriesByDate). Das Feld version wird nie geprüft.
Einzelne Zeilen, die die Prüfung nicht bestehen, werden kommentarlos verworfen. Verworfen wird eine Zeile, wenn:
- ein KPI keine id oder keinen Namen hat, ein
target, das keine endliche Zahl größer 0 ist, keinedirectionvonupoderdown, oder keinensource-String, - der Status eines Projekts nicht
active,completedoderon-holdist, - einer Warnung eines von id, kpiId, kpiName, newStatus, previousStatus, value, timestamp, dismissed fehlt,
- einer Verbindung id, name, connectorId, credentialRef, createdAt oder parameters fehlt,
- ein Datums-Schlüssel in
entriesByDatenicht exaktYYYY-MM-DDlautet.
Pulsaria zählt diese verworfenen Zeilen, zeigt die Zahl aber nie an. In der Praxis trifft das nur handbearbeitete Dateien — ein KPI, dessen Ziel du auf
0gesetzt hast, verschwindet lautlos aus dem Import. Vergleiche die Anzahlen in der Liste Wird hinzugefügt mit dem, was du erwartest, bevor du bestätigst.
Das Schreiben selbst läuft gestaffelt. Projekte, KPI-Definitionen und Verbindungen gehen als ein Block hinein, der zurückgerollt wird, wenn eine der drei Schreibaktionen scheitert. Warnungen und Einträge folgen danach im Best-Effort-Verfahren: Ein Fehler dort hinterlässt einen konsistenten Zustand, wird aber nicht gemeldet.
Es gibt kein Rückgängig für einen Import und keinen Snapshot zum Zurückrollen. Führe vorher Als JSON exportieren aus, wenn du in einen Mac importierst, auf dem bereits Daten liegen, die dir wichtig sind.
Connectoren nach dem Import neu verbinden
Weil Geheimnisse nie mit dem Export reisen, kommen Connector-Verbindungen nur als Metadaten an. Direkt nachdem sich der Import-Dialog schließt, prüft Pulsaria, für welche der eben geschriebenen Verbindungen im Schlüsselbund dieses Macs kein Zugang liegt, und öffnet für jede davon nacheinander den Verbindungs-Assistenten.
Die Überschrift lautet Search Console neu verbinden, darunter Verbindung 1 von 3 — Zugangsdaten erneut eingeben und ein amberfarbener Hinweis: „Zugangsdaten sind nie Teil eines Exports. Füge den Schlüssel oder das Token dieser Verbindung erneut ein, um sie auf diesem Rechner zu reaktivieren.“
- Die Parameter — Site-URL, Property-ID, Region — sind aus dem Import bereits vorausgefüllt. Prüfe sie, tippe sie nicht neu.
- Füge den Schlüssel oder das Token ein. Die Abkürzung „leer lassen, um den vorhandenen Schlüssel zu behalten“ aus dem normalen Bearbeiten ist hier deaktiviert: ein frisches Geheimnis ist Pflicht.
- Geh weiter bis Test starten, dann Verbindung speichern. Speichern bleibt deaktiviert, bis der Test grün zurückkommt.
- Schließt du den Dialog, wird diese Verbindung übersprungen und sofort die nächste geöffnet.
Überspringen ist eine Einbahnstraße. Es gibt keine Erinnerung und keinen Weg zurück in den Durchlauf — du müsstest die Verbindung später unter App-Einstellungen → Verbindungen über das Stift-Symbol nachziehen. Und eine Verbindung, die nie erfolgreich verifiziert wurde, wird in der Liste mit einem grünen Haken statt einer amberfarbenen Warnung gezeichnet — eine übersprungene sieht also nicht kaputt aus, bis ein Abruf scheitert. Siehe Connectoren.
Verbindungen, deren Connector diese Version nicht kennt — ein Export aus einer neueren Version — fallen kommentarlos aus der Warteschlange.
Umzug auf einen neuen Mac
Eine Export-Datei trägt die Daten. Der Rest der Arbeit ist, deine API-Keys erneut einzufügen und alles neu freizugeben, was einen Befehl ausführt.
Auf dem alten Mac
- Öffne App-Einstellungen → Daten exportieren → Als JSON exportieren und speichere die Datei irgendwohin, wo du vom neuen Rechner aus drankommst: AirDrop, USB-Stick, Cloud-Ordner.
- Notiere dir deine Verbindungen unter App-Einstellungen → Verbindungen. Für jede brauchst du das ursprüngliche Geheimnis erneut — das Google-Service-Account-JSON, den Plausible-Key, das Polar-Token. Pulsaria kann sie nicht herausgeben; die Schlüsselbund-Einträge bleiben auf dem alten Mac.
- Notiere, was nicht im Export steckt: Design, Sprache, die Erinnerungs-Uhrzeit, ob „Beim Anmelden starten“ an war, und deine Auto-Export-Einstellungen.
Auf dem neuen Mac
- Installiere Pulsaria und schließe den ersten Start ab — siehe Installation & erster Start.
- Gib deinen Lizenzschlüssel ein oder stelle sicher, dass die Testphase noch läuft. Im Nur-Lesen-Modus ist der Import blockiert; siehe Testphase & Lizenz.
- Wenn deine Daten in einem eigenen Ordner liegen, richte diesen vor dem Import ein — siehe Wo deine Daten liegen.
- App-Einstellungen → Daten exportieren → JSON importieren, Datei wählen, dann Importieren. Auf einer frischen Installation gibt es keine Konflikte, also ist es ein einziger Klick.
- Arbeite dich durch den Verbindungs-Assistenten: jedes Geheimnis einfügen, Test starten, Verbindung speichern.
- Gib deine Bash- und HTTP-KPIs neu frei. Öffne jeden, klicke Bearbeiten, lies Befehl bzw. URL, dann Freigeben. Bis dahin überspringt der Scheduler sie mit „Befehl nicht freigegeben — in den KPI-Einstellungen testen und freigeben“. Siehe Shell-Befehle und Eigene HTTP-Quellen.
- Stelle nach, was der Export nicht mitgebracht hat: Design, Sprache, Erinnerung, Start beim Anmelden und die Karte Täglicher Auto-Export. Siehe Einstellungen.
Deine Historie kommt mit ihren ursprünglichen Daten an — Einträge hängen an dem lokalen Kalendertag, an dem sie erfasst wurden, nicht an dem Tag, an dem du importiert hast.
Umziehen ist nicht dasselbe wie Syncen. Wenn zwei Macs gleichzeitig auf denselben Daten arbeiten sollen, ist das der Ordner-Setup aus Wo deine Daten liegen — mit eigenen Kompromissen.
Wie es weitergeht
- Wo deine Daten liegen — Dateiaufbau, die Datenverzeichnis-Einstellung, geteilte Ordner
- Datenschutz: Was den Mac verlässt — was wohin geht und was nie
- Connectoren — Verbindungen, Zugangsdaten und der Verbindungs-Assistent
- Zeitpläne & Aktualisierung — der 60-Sekunden-Scheduler, auf dem der Auto-Export mitfährt