Was ist die Flyo Import Integration?
Die Flyo Import Integration dient dazu, Inhalte automatisiert aus externen Quellen in das Flyo System zu importieren. Typische Quellen sind JSON-APIs oder veröffentlichte CSV-Dateien.
Der wichtigste Zweck dieser Integration ist nicht nur der einmalige Import, sondern die laufende Synchronisation. Wenn sich die Quelldaten ändern, kann Flyo bestehende Inhalte wiedererkennen, Änderungen übernehmen und je nach Konfiguration auch Vorschläge für Aktualisierungen erzeugen.
Damit das zuverlässig funktioniert, muss jeder Datensatz aus der Quelle eindeutig identifizierbar sein. Flyo verwendet dafür einen stabilen Quell-Identifier, der im Mapping auf source_id gelegt wird. Nur so kann Flyo erkennen, ob ein Datensatz neu ist, geändert wurde oder unverändert geblieben ist.
Allgemeine Anforderungen an die Quelle
Damit eine Quelle mit der Import Integration verwendet werden kann, sollte sie die folgenden Anforderungen erfüllen:
- Die Quelle muss über eine öffentliche
https://-URL erreichbar sein. - Die URL muss beim Abruf erfolgreich antworten.
- Als Format werden insbesondere
CSVundJSONunterstützt. - Die Struktur der Daten muss konsistent sein, damit Flyo Spalten und Werte sauber zuordnen kann.
- Jeder Datensatz muss ein eindeutiges und stabiles Identifier-Feld enthalten.
Dieser Identifier ist besonders wichtig. Er darf sich für denselben Datensatz nicht bei jedem Export ändern. Geeignet sind zum Beispiel externe IDs, ERP-IDs, Event-IDs, Produktnummern oder andere dauerhafte Schlüssel aus dem Quellsystem.
Anforderungen an die Struktur
Für alle Quellen gilt:
- Jeder Datensatz muss als eigenständige Zeile oder als eigenes Objekt vorliegen.
- Alle Datensätze sollten dieselbe Grundstruktur haben.
- Pflichtfelder sollten nicht nur gelegentlich, sondern möglichst durchgehend vorhanden sein.
- Leere oder wechselnde Spaltennamen erschweren den Import und sollten vermieden werden.
Für CSV gilt zusätzlich:
- Die erste Zeile sollte eine Header-Zeile mit klaren Spaltennamen enthalten.
- Eine dieser Spalten muss den eindeutigen Identifier enthalten.
- Die Datei sollte als vollständiger Export der gewünschten Datensätze bereitgestellt werden.
Für JSON gilt zusätzlich:
- Die Daten sollten als Liste von Objekten bereitgestellt werden.
- Jedes Objekt sollte dieselben zentralen Keys enthalten.
Anforderungen an den Identifier
Der Identifier muss:
- pro Datensatz eindeutig sein,
- dauerhaft stabil bleiben,
- nicht zufällig pro Export neu erzeugt werden,
- für denselben Eintrag immer denselben Wert liefern.
Flyo mappt diesen Wert auf source_id. Fehlt dieser Wert oder ändert er sich laufend, kann Flyo Datensätze nicht mehr korrekt verfolgen.
Pagination
Wenn die Quelle viele Datensätze enthält, sollte die Bereitstellung vorab sauber geplant werden:
- Bei
JSONkann Pagination verwendet werden. - Empfohlen sind HTTP-
Link-Header mitrel="next", damit Folgeseiten automatisch geladen werden können. - Die Pagination sollte stabil aufgebaut sein und keine Endlosschleifen erzeugen.
- Bei
CSVist in der Regel ein vollständiger Export über eine einzelne URL sinnvoller als Pagination.
Beispiel für einen Link-Header:
Link: <https://example.org/api/items?page=2>; rel="next"Anforderungen an JSON-Quellen
JSON ist das empfohlene Format, wenn Daten strukturiert und flexibel bereitgestellt werden sollen.
Eine gültige JSON-Quelle sollte folgende Anforderungen erfüllen:
- Der oberste JSON-Wert ist ein Array.
- Das Array ist nicht leer.
- Jeder Eintrag im Array ist ein Objekt.
- Das erste Objekt enthält bereits die relevanten Keys, damit Flyo die Struktur erkennen kann.
- Jedes Objekt enthält ein stabiles ID-Feld für das Mapping auf
source_id.
Nicht geeignet sind zum Beispiel:
- ein leeres Array
[], - ein Array mit primitiven Werten wie
["a", "b"], - ein einzelnes Objekt statt einer Liste von Datensätzen.
Beispiel für ein gültiges JSON:
[
{
"id": "1001",
"title": "Sommerfestival",
"starts_at": "2026-08-10T18:00:00.000Z",
"image": "https://cdn.example.org/images/festival.jpg"
},
{
"id": "1002",
"title": "Herbstmarkt",
"starts_at": "2026-10-12T09:30:00.000Z",
"image": "https://cdn.example.org/images/markt.jpg"
}
]Empfohlene Content-Types für JSON:
application/jsontext/json
Beispiel: Google Spreadsheet als CSV-Quelle verwenden
Eine einfache Möglichkeit für nicht-technische Teams ist es, Inhalte in Google Sheets zu pflegen und das Spreadsheet als CSV-Quelle für Flyo zu veröffentlichen.
Tabelle vorbereiten
Erstelle in Google Sheets eine Tabelle mit einer klaren Header-Zeile, zum Beispiel:
| id | title | description | image |
|---|---|---|---|
| evt-1001 | Sommerfestival | Open-Air Event im Park | https://example.org/image1.jpg |
| evt-1002 | Herbstmarkt | Markt mit regionalen Produkten | https://example.org/image2.jpg |
Wichtig ist dabei:
- Die Spalte
identhält den stabilen eindeutigen Identifier. - Jede weitere Spalte entspricht einem späteren Mapping-Feld in Flyo.
- Bild- oder Dateispalten sollten direkte
https://-URLs enthalten.
Tabelle veröffentlichen
In Google Sheets:
- Öffne das gewünschte Spreadsheet.
- Wähle
Datei>Freigeben>Im Web veröffentlichen. - Wähle das gewünschte Tabellenblatt.
- Wähle als Format
CSV. - Veröffentliche das Blatt.
Google Sheets erzeugt danach eine öffentliche CSV-URL.
Sie sieht typischerweise so aus:
https://docs.google.com/spreadsheets/d/e/EXAMPLE/pub?gid=0&single=true&output=csvDiese veröffentlichte CSV-URL kann direkt als Import-Quelle in Flyo verwendet werden. Dadurch lassen sich Inhalte auch ohne eigene API automatisiert aus einem Spreadsheet nach Flyo importieren.
Wenn das veröffentlichte Google Sheet aktualisiert wird, kann Flyo die Änderungen beim nächsten Importlauf erkennen und den zugehörigen Inhalt aktualisieren oder als Änderungsvorschlag verarbeiten.
Transformationen und Feldanforderungen
Beim Import werden Werte abhängig vom Ziel-Feldtyp verarbeitet. Deshalb sollte die Quelle nicht nur formal korrekt sein, sondern auch inhaltlich passende Werte liefern.
Es gelten dabei einige Grundregeln für alle Feldtypen:
- Leere Werte werden nicht übertragen.
null,""und der Text"null"führen dazu, dass für dieses Feld kein Wert aus der Quelle übernommen wird. Was das bei einer Aktualisierung bedeutet, hängt vom Aktualisierungsmodus ab (siehe unten). 0gilt nicht als leer und wird geschrieben.- Mehrere Quellspalten in einem Feld ergeben immer eine Zeichenkette. Wenn du im Mapping mehrere Spalten (oder Spalten und Freitext) zu einem Feld kombinierst, entsteht ein zusammengesetzter Text. Feldtypen, die ein Array oder Objekt erwarten, brauchen darum genau eine Quellspalte.
- Filter im Mapping helfen beim Anpassen der Quellwerte. Zur Verfügung stehen:
Wert eines Array-Keys(z.B.bild.src, um aus einem verschachtelten JSON-Objekt einen Wert zu holen),Zeichenkette teilen(erzeugt aus"a,b,c"ein Array),HTML-Tags entfernen,KürzenundURL-Endung (Slug) generieren. - Ein Datensatz, der die Validierung nicht besteht, wird nicht importiert. Im Protokoll der Integration erscheint eine nach Problem gruppierte Zusammenfassung mit den betroffenen Quell-IDs.
Aktualisierungsmodus beachten
Werden Änderungen als Vorschlag übernommen (Standard), bleiben die bestehenden Inhalte in Flyo unverändert. Die Werte aus der Quelle landen als Änderungsvorschlag und werden erst durch das Annehmen des Vorschlags aktiv.
Werden Änderungen direkt übernommen, wird der Eintrag vollständig aus dem Mapping neu geschrieben. Das heisst: Ein leerer Wert in der Quelle löscht den bisherigen Inhalt in Flyo, und Felder, die gar nicht im Mapping enthalten sind, werden dabei ebenfalls geleert – auch wenn sie zuvor manuell in Flyo befüllt wurden.
Verwende den direkten Modus darum nur, wenn die Quelle die alleinige Wahrheit für alle Felder der Entität ist. Felder, die redaktionell in Flyo gepflegt werden, gehören in diesem Modus in eine eigene Entität oder es braucht den Vorschlagsmodus.
Feldtypen im Überblick
Die folgende Liste führt zu den Anforderungen des jeweiligen Feldtyps. Was ein Feldtyp in Flyo grundsätzlich macht und wie er konfiguriert wird, ist unter Feldtypen beschrieben – hier geht es ausschliesslich darum, wie der Wert in der Quelle aussehen muss.
text– einzeiliger Texttextarea– mehrzeiliger Textwysiwyg– formatierter Inhalt (HTML)slug– URL-Endungnumber– Zahlcheckbox– Ja/Neindropdown– Auswahl aus einer Listeradiolist– Auswahl aus einer Liste (Radiobuttons)checkboxList– Mehrfachauswahldatepicker– Datumdatetimepicker– Datum und Zeitopeninghours– Öffnungszeitenemail– E-Mail-Adressetel– Telefonnummerurl– Webadresselink– Verweis (URL, E-Mail, Telefon oder Datei)youtube– YouTube-Videoaddress– Adresselatlng– Koordinatencolor– Farbeimage– Bildfile– Dateiimages– mehrere Bilderfiles– mehrere Dateienschema– Verknüpfung zu einem Eintragschemas– Verknüpfungen zu mehreren Einträgenschemarow– Verknüpfung zu einem beliebigen Eintragpool– Verknüpfung zu einem Pooljson– freie JSON-Strukturmultipleinputtype– Tabelle mit mehreren Zeilen
Alle Feldtypen in einem Beispiel
Das folgende JSON zeigt für jeden Feldtyp, wie der Wert in der Quelle aussehen soll. Die Keys sind hier absichtlich nach dem Feldtyp benannt – in einer echten Quelle heissen sie natürlich so, wie es zu deinen Daten passt (title, starts_at, image, …).
{
"source_id": "evt-1001",
"text": "Sommerfestival",
"textarea": "Open-Air Event im Stadtpark.\nEintritt frei.",
"wysiwyg": "<p>Open-Air Event im <strong>Stadtpark</strong>.</p>",
"slug": "sommerfestival-2026",
"number": 500,
"checkbox": 1,
"dropdown": "concert",
"radiolist": "indoor",
"checkboxList": ["music", "family"],
"datepicker": "2026-12-30",
"datetimepicker": "2026-12-30T18:00:00.000Z",
"openinghours": {
"regular": [{ "weekday": 1, "t1": "09:00", "t2": null, "t3": null, "t4": "18:00" }],
"specials": []
},
"email": "info@example.org",
"tel": "+41791234567",
"url": "https://example.org/programm",
"link": "https://example.org/tickets",
"youtube": "https://www.youtube.com/watch?v=xTJOOj51Aug",
"address": "Bahnhofstrasse 102, 5000 Aarau",
"latlng": { "lat": 47.3925, "lng": 8.0442 },
"color": "#FF6600",
"image": "https://cdn.example.org/images/festival.jpg",
"file": "https://example.org/dokumente/programmheft.pdf",
"images": [1042, 1043],
"files": [1044],
"schema": 512,
"schemas": "512,513,514",
"schemarow": 512,
"pool": 7,
"json": { "capacity": 500, "tags": ["open-air"] },
"multipleinputtype": [{ "stage": "Bühne A", "capacity": 250 }]
}text
Erwartet eine einzeilige Zeichenkette.
- HTML-Tags werden entfernt.
- Sonderzeichen werden anschliessend HTML-kodiert. Ein
&bleibt dabei als&erhalten. - Reiner Plain Text ist als Quelle am zuverlässigsten.
{ "text": "Sommerfestival im Stadtpark" }textarea
Wie text, Zeilenumbrüche (\n) bleiben erhalten.
{ "textarea": "Open-Air Event im Stadtpark.\nEintritt frei." }wysiwyg
Erwartet ein HTML-Fragment als Zeichenkette. Der Wert wird unverändert übernommen, HTML-Tags bleiben also erhalten.
{ "wysiwyg": "<p>Open-Air Event im <strong>Stadtpark</strong>.</p>" }slug
Erwartet eine URL-taugliche Zeichenkette (Kleinbuchstaben, Bindestriche, keine Leerzeichen und Sonderzeichen). Der Wert wird unverändert übernommen.
Liefert die Quelle nur einen Titel, verwende im Mapping den Filter URL-Endung (Slug) generieren: aus Sommerfestival 2026 wird damit sommerfestival-2026.
Ist das Feld als eindeutig konfiguriert, muss der Wert über alle Einträge hinweg eindeutig sein.
{ "slug": "sommerfestival-2026" }number
Erwartet einen numerischen Wert. Verwende keine Tausendertrennzeichen und als Dezimaltrenner einen Punkt. Bei der Ausgabe wird der Wert als Ganzzahl geliefert, Dezimalstellen werden abgeschnitten.
{ "number": 500 }checkbox
Erwartet 1 (angewählt) oder 0 (nicht angewählt). In JSON funktionieren auch die booleschen Werte true und false.
Werte wie "ja", "yes" oder "wahr" werden nicht erkannt und führen zu einem Validierungsfehler.
{ "checkbox": 1 }dropdown
Erwartet genau einen der im Feld konfigurierten Options-Schlüssel – nicht die angezeigte Bezeichnung. Ist im Feld z.B. der Schlüssel concert mit der Bezeichnung «Konzert» konfiguriert, muss die Quelle concert liefern.
{ "dropdown": "concert" }radiolist
Identisch zu dropdown: genau ein konfigurierter Options-Schlüssel.
{ "radiolist": "indoor" }checkboxList
Erwartet ein Array von konfigurierten Options-Schlüsseln. Nicht konfigurierte Schlüssel werden ignoriert.
Bei einer CSV-Quelle (oder einer Textspalte in JSON) liefere die Schlüssel kommagetrennt und verwende im Mapping den Filter Zeichenkette teilen mit dem Separator ,.
{ "checkboxList": ["music", "family"] }datepicker
Datumswerte sollten im Format YYYY-MM-DD geliefert werden. Der Wert wird in dieses Format überführt und ohne Zeitanteil gespeichert.
WARNING
Ein rein numerischer Wert wird als Unix-Timestamp interpretiert. 20261230 ergibt darum kein Datum im Jahr 2026, sondern den Zeitpunkt dieses Timestamps. Liefere Datumswerte immer mit Bindestrichen.
{ "datepicker": "2026-12-30" }datetimepicker
Datums- und Zeitwerte sollten im ISO-8601-Format geliefert werden. Der Wert wird in UTC umgerechnet und als YYYY-MM-DDTHH:MM:SS.mmmZ gespeichert.
- Mit Zeitzonenangabe (
Zoder+02:00) ist der Wert eindeutig – das ist die empfohlene Variante. - Ohne Zeitzonenangabe (
2026-12-30 18:00:00) wird der Wert als Zeit inEurope/Zurichinterpretiert und entsprechend nach UTC verschoben. - Ein rein numerischer Wert wird als Unix-Timestamp interpretiert.
{ "datetimepicker": "2026-12-30T18:00:00.000Z" }openinghours
Erwartet ein Objekt mit den Schlüsseln regular (reguläre Woche) und specials (datumsbasierte Ausnahmen). Nur aus einer JSON-Quelle sinnvoll importierbar.
Bei regular gilt: weekday von 1 (Montag) bis 7 (Sonntag), t1/t4 sind Öffnung und Schliessung, t2/t3 optional Beginn und Ende der Mittagspause (null = keine Pause). Nur geöffnete Tage werden aufgeführt.
Bei specials beschreibt jeder Eintrag einen Sondertag oder einen Datumsbereich:
| Feld | Typ | Hinweis |
|---|---|---|
label | string | Pflicht. Kurze Bezeichnung, z.B. "Feiertag" |
start_date | string | Pflicht. Datum YYYY-MM-DD |
end_date | string | Pflicht. Datum YYYY-MM-DD, bei einem einzelnen Tag identisch zu start_date |
closed | boolean | true = ganzer Tag geschlossen |
periods | array | Pflicht. Liste der Öffnungsspannen, bei closed: true ein leeres Array |
periods[].open | string | Zeit HH:mm |
periods[].close | string | Zeit HH:mm |
note | string|null | Optionale Bemerkung |
Einträge in specials ohne gültiges start_date und end_date im Format YYYY-MM-DD werden verworfen.
{
"openinghours": {
"regular": [
{ "weekday": 1, "t1": "09:00", "t2": "12:00", "t3": "14:00", "t4": "18:00" },
{ "weekday": 3, "t1": "09:00", "t2": null, "t3": null, "t4": "18:00" }
],
"specials": [
{
"label": "Heiligabend",
"start_date": "2026-12-24",
"end_date": "2026-12-24",
"closed": false,
"periods": [{ "open": "09:00", "close": "13:00" }],
"note": "Nur vormittags geöffnet"
}
]
}
}email
Erwartet eine E-Mail-Adresse als Zeichenkette. Der Wert wird unverändert übernommen.
{ "email": "info@example.org" }tel
Erwartet eine Telefonnummer als Zeichenkette. Der Wert wird unverändert übernommen. Empfohlen ist das internationale Format ohne Leerzeichen.
{ "tel": "+41791234567" }url
Erwartet eine Webadresse. Fehlt das Schema, wird automatisch https:// ergänzt: aus www.example.org wird https://www.example.org. Anschliessend muss der Wert eine gültige URL sein, internationalisierte Domainnamen (IDN) sind erlaubt.
{ "url": "https://example.org/programm" }link
Erwartet eine Zeichenkette. Flyo erkennt automatisch, um welche Art von Verweis es sich handelt:
| Quellwert | erkannter Typ |
|---|---|
mailto:info@example.org oder info@example.org | email |
tel:+41791234567 oder +41 79 123 45 67 | tel |
alles andere, z.B. example.org/tickets | url (mit ergänztem https://) |
Als Telefonnummer wird ein Wert erkannt, der nur aus Ziffern und den Zeichen +, Leerzeichen, (, ), /, . und - besteht. Das Linkziel ist bei der automatischen Erkennung immer _self.
Alternativ kannst du aus einer JSON-Quelle ein vollständiges Link-Objekt liefern. Es wird unverändert übernommen:
{ "link": { "type": "url", "target": "_blank", "value": "https://example.org/tickets" } }Erlaubte Werte für type sind url, email, tel, file, nitropagelink und nitrodetaillink, für target _self, _blank, _parent und _top. Bei type: "file" muss value die ID einer bereits in Flyo vorhandenen Datei sein.
youtube
Erwartet eine YouTube-URL. Sowohl die watch- als auch die embed-Variante funktioniert – bei der Ausgabe wird /watch?v= automatisch zu /embed/.
{ "youtube": "https://www.youtube.com/watch?v=xTJOOj51Aug" }address
Adresswerte werden als einzeiliger Freitext geliefert und automatisch in die strukturierten Einzelteile street, street_nr, zip und city aufgeteilt.
Das erwartete Format ist:
<Strasse> [<Hausnummer>], [<PLZ>] <Ort>Strasse und Ortsteil werden durch ein Komma getrennt. Die Hausnummer ist optional und wird als letzter numerischer Teil des Strassenabschnitts erkannt. Die PLZ ist ebenfalls optional und muss, wenn vorhanden, am Anfang des Ortsteils stehen.
Folgende Formate werden korrekt erkannt:
| Eingabe | street | street_nr | zip | city |
|---|---|---|---|---|
Bahnhofstrasse 102, 5000 Aarau | Bahnhofstrasse | 102 | 5000 | Aarau |
Bahnhofstrasse 102, Aarau | Bahnhofstrasse | 102 | (leer) | Aarau |
Bahnhofstrasse, Aarau | Bahnhofstrasse | (leer) | (leer) | Aarau |
Hinter dem Hof 4, Aarau | Hinter dem Hof | 4 | (leer) | Aarau |
Sagenhofstrasse, 53, 6030 Ebikon | Sagenhofstrasse | 53 | 6030 | Ebikon |
, 6002 Luzern | (leer) | (leer) | 6002 | Luzern |
Hausnummern wie 4a, 12-14 oder 12/14 werden ebenfalls unterstützt. Zusätzliche Segmente nach dem Ort (z.B. Ländername) werden ignoriert.
Weitere Punkte:
- Die PLZ muss numerisch sein. Ein nicht numerischer Wert führt zu einem Validierungsfehler.
- Die Koordinaten werden aus PLZ, Ort, Strasse und Hausnummer automatisch ermittelt.
- Aus einer JSON-Quelle kannst du die Einzelteile auch direkt als Objekt liefern (
street,street_nr,zip,city, optionalcustom_cords,cords_lat,cords_lng). Ein Objekt wird unverändert übernommen und nicht geparst.
{ "address": "Bahnhofstrasse 102, 5000 Aarau" }latlng
Erwartet ein Objekt mit den Schlüsseln lat und lng. Beide Werte müssen gesetzt und numerisch sein – ein einzelner Wert allein führt zu einem Validierungsfehler. Nur aus einer JSON-Quelle importierbar.
{ "latlng": { "lat": 47.3925, "lng": 8.0442 } }color
Erwartet einen Hex-Farbwert. Das führende # ist optional und wird bei der Ausgabe ergänzt, Buchstaben werden in Grossschreibung ausgegeben. Ein achtstelliger Wert mit Alphakanal (#FF6600CC) ist ebenfalls möglich.
{ "color": "#FF6600" }image
Erwartet eine URL, die direkt auf eine Bilddatei zeigt:
- Die URL muss über
https://für Flyo abrufbar sein. - Das Bild wird beim Import heruntergeladen und in der Dateiverwaltung der Organisation abgelegt.
- Ist eine identische Datei (gleiche Prüfsumme) bereits vorhanden, wird sie wiederverwendet – es entstehen keine Duplikate.
- Die Datei muss tatsächlich ein Bild sein.
Ist die URL ungültig oder schlägt der Download fehl, wird der betroffene Datensatz nicht importiert.
{ "image": "https://storage.flyo.cloud/integrationsgruppe-flyowebseite_7a158241.jpg" }file
Wie image, aber für beliebige Dateitypen.
{ "file": "https://example.org/dokumente/programmheft.pdf" }images
WARNING
Für images werden keine URLs heruntergeladen. Erwartet wird ein Array mit IDs von Dateien, die in Flyo bereits vorhanden sind. Ein Import von Bild-URLs in ein Mehrfachbild-Feld ist nicht möglich – verwende dafür mehrere einzelne image-Felder.
{ "images": [1042, 1043] }files
Wie images: ein Array mit IDs von bereits in Flyo vorhandenen Dateien, keine URLs.
{ "files": [1044] }schema
Erwartet die ID eines Eintrags aus der im Feld verknüpften Entität. Die ID muss existieren, sonst wird der Datensatz nicht importiert.
{ "schema": 512 }schemas
Erwartet die IDs als kommagetrennte Zeichenkette. Ein JSON-Array führt hier zu einem Fehler. Alle IDs müssen in der verknüpften Entität existieren.
{ "schemas": "512,513,514" }schemarow
Erwartet die ID eines Eintrags aus einer beliebigen Entität der Organisation.
{ "schemarow": 512 }pool
Erwartet die ID eines Pools der Organisation.
{ "pool": 7 }json
Erwartet eine freie JSON-Struktur (Objekt oder Array). Aus einer CSV-Quelle kann der Wert auch als JSON-Zeichenkette in einer Spalte geliefert werden.
{ "json": { "capacity": 500, "tags": ["open-air"] } }multipleinputtype
Erwartet ein Array von Objekten – ein Objekt pro Zeile. Die Schlüssel innerhalb einer Zeile entsprechen den Identifiern der im Feld konfigurierten Unterfelder. Nur aus einer JSON-Quelle sinnvoll importierbar.
{
"multipleinputtype": [
{ "stage": "Bühne A", "capacity": 250 },
{ "stage": "Bühne B", "capacity": 120 }
]
}Allgemeine Empfehlungen für saubere Importe
- Liefere möglichst stabile Feldnamen.
- Verändere die Struktur der Quelle nicht ohne Not.
- Verwende für gemappte Felder keine zufällig generierten Werte.
- Teste neue Quellen zuerst mit einer kleinen Datenmenge.
- Stelle sicher, dass Pflichtwerte nicht leer sind.
So bleibt die Synchronisation zwischen Quelle und Flyo langfristig stabil und nachvollziehbar.

