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.

ButtonVorgeschlagener DateinameInhalt
Als JSON exportierenpulsaria-export-2026-07-25.jsonAlles — und die einzige Datei, die JSON importieren wieder einliest
Als CSV exportierenpulsaria-entries-2026-07-25.csvEine 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üsselInhalt
exportedAtISO-Zeitstempel des Export-Moments
versionImmer 1
projectsAlle Projekte, vollständig
kpiDefinitionsAlle KPI-Definitionen, vollständig
entriesByDateObjekt mit Schlüsseln YYYY-MM-DD, Datum aufsteigend — jeder Eintrag dieses Tages, sortiert nach createdAt aufsteigend
alertsDie gespeicherten Status-Warnungen (höchstens 100)
fetchLogDer Fetch-Log-Ringpuffer (höchstens 500 Einträge)
connectionsConnector-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.json wird 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 createdAt aufsteigend.
  • 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 seine kpiId, hat aber leeres kpiName und projectName.
  • 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.

FeldStandardHinweise
Uhrzeit18:00Lokale Uhrzeit, HH:MM
FormatJSON + CSVAlternativen: JSON (komplettes Backup), CSV (Tabelle / LLM)
Speicherort<App-Daten>/pulsaria/daily-exportNur-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:

SpalteBei einem KPIBei einer Verbindung
Deine VersionName, Ziel (mit Einheit), QuelleName, Connector, Parameter
Import-Versiondieselben drei Felder, aus der Dateidieselben 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

DatenAbgeglichen überVerhalten
ProjekteidNeue werden hinzugefügt. Ein vorhandenes Projekt behält immer die lokale Version — für Projekte gibt es keine Behalten/Ersetzen-Wahl.
KPIsidNeue werden hinzugefügt. Konflikte bleiben standardmäßig lokal und werden nur über Ersetzen überschrieben.
VerbindungenidGleiche Regel wie bei KPIs.
EinträgekpiId + createdAt, pro TagAppend-only und dedupliziert — derselbe Export ein zweites Mal importiert fügt nichts hinzu.
WarnungenidNeue werden eingemischt, neueste zuerst sortiert, bei 100 gekappt.
Fetch-LogWird 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, keine direction von up oder down, oder keinen source-String,
  • der Status eines Projekts nicht active, completed oder on-hold ist,
  • 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 entriesByDate nicht exakt YYYY-MM-DD lautet.

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 0 gesetzt 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.“

  1. Die Parameter — Site-URL, Property-ID, Region — sind aus dem Import bereits vorausgefüllt. Prüfe sie, tippe sie nicht neu.
  2. 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.
  3. Geh weiter bis Test starten, dann Verbindung speichern. Speichern bleibt deaktiviert, bis der Test grün zurückkommt.
  4. 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

  1. Ö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.
  2. 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.
  3. 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

  1. Installiere Pulsaria und schließe den ersten Start ab — siehe Installation & erster Start.
  2. 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.
  3. Wenn deine Daten in einem eigenen Ordner liegen, richte diesen vor dem Import ein — siehe Wo deine Daten liegen.
  4. 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.
  5. Arbeite dich durch den Verbindungs-Assistenten: jedes Geheimnis einfügen, Test starten, Verbindung speichern.
  6. 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.
  7. 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

Nicht gefunden?

Schreib uns — jede Mail liest ein Mensch, meistens der, der das Feature gebaut hat.

admin@one-pixel-ahead.com