Importing data
Import members, accounts, SEPA data, memberships, products, offers and bank statements from CSV or Excel, in the interface or via the API.
vynst (inwendo ERP) imports data from spreadsheets without a mapping tool. vynst recognises what a file contains from its file name and its header row, and imports it in the background. This guide shows the most important imports with sample files, and how to automate the same steps via the API.
Every single import with all its columns and an example file to download is described under Imports.
| Step | What you do |
|---|---|
| 1. Prepare | create a table with the matching header row and save it as CSV (UTF-8) or Excel |
| 2. Name | name the file so that vynst recognises the import, for example AFS_PERSON_members.csv |
| 3. Upload | Settings → Import → Add (Einstellungen → Import → Hinzufügen), or POST /api/dw/import/file.json |
| 4. Check | look at the status and the log, correct the error rows, and upload again |
Tip: You can repeat an import without risk. Identical numbers update existing records instead of creating duplicates.
Before you start
Rights
To use the Import menu item, you need the Imports access right. In addition, vynst checks the right for the area you import, for example CRM for people, Products for products or Payments for bank statements. Most imports are reserved for administrators.
Backup
An import cannot be undone with one click. Before larger imports, export the affected data under Settings → Export (Einstellungen → Export).
Preparing the file
- Format: CSV or Excel (
.xlsx,.xls). With Excel, each sheet is treated as a separate import. - Character set: UTF-8. In Excel: Save as → CSV UTF-8 (comma delimited) (CSV UTF-8 (durch Trennzeichen getrennt)).
- Delimiter: comma
,or semicolon;. Put texts that contain the delimiter in double quotes"…". - First row = header row with the column names from this guide. Keep the spelling exactly, including upper and lower case.
- Do not place required columns at the very end. At least one more column should follow them.
- Dates:
2026-03-01or01.03.2026. - Amounts:
1234.56or1.234,56. - Yes/No:
ja/nein(yes/no),1/0ortrue/false. - Size: up to 200 MB. vynst splits large files into batches of 1000 rows.
Numbers are the key
Each row needs a unique number, for example the membership number from your previous program. vynst stores it as the Imported ID (Importierte ID).
- A later import with the same number updates the record.
- A new number creates a new record.
- Later imports (memberships, SEPA data, links) refer to people and accounts by exactly these numbers. Use the same numbers in all files.
Running an import
- Open Settings → Import.
- Click Add and select the file.
- The file appears in the list immediately and is processed in the background. You do not need to reload the page.
Reading the status
Each import has a coloured line on its left:
| Line | Meaning |
|---|---|
| Black | waiting or running |
| Green | completed |
| Red | aborted, see the log |
Below the entry is the log. The most important lines:
| Line | Meaning | What to do |
|---|---|---|
Processed 250 lines / Read: 250 rows |
this many rows were read | nothing |
Info: split into 4 files |
the large file was split; the parts appear as separate entries | nothing |
Error: skipped … |
this row was not imported; below it, the row appears as LINE-DATA |
correct the row and import only these rows again |
Warning: … |
row imported, one value was ignored, for example an unknown product | check the value |
FAILED: No matching processor found. |
vynst did not recognise what the file is | check the file name and header row |
FAILED: not exactly one handler found |
the file matches several imports | choose a unique file name, for example with AFS_PERSON_ |
FAILED: User missing rights to import. |
you lack a right for this area | ask an administrator |
Green does not mean error-free. An import is green even if individual rows were skipped. Always check the log for
Error:.
The most important imports
Column names come in two variants: technical (FIRST_NAME) and German (Vorname). Both work. The tables show the German variant and, in brackets, the technical name.
Recommended order when switching over
1 Sections → 2 Products → 3 People → 4 Billing accounts → 5 Link person to account
→ 6 SEPA data → 7 Memberships → 8 Locations, rooms and offers
Each step uses the numbers from the previous steps.
1. Sections and categories
File name: any, for example sections.csv
Right: CRM
| Column | Required | Content |
|---|---|---|
UNIFIED_CATEGORY_IDENTIFIER |
yes, as the first column | your number for the section |
UNIFIED_CATEGORY_NAME |
yes, directly after it | name |
PARENT_IDENTIFIER |
number of the parent section | |
EXTERNAL_DESCRIPTION |
description for members | |
IS_PUBLIC |
ja if publicly visible |
|
CREATE_ACCESS_TAG |
ja creates a matching access tag |
UNIFIED_CATEGORY_IDENTIFIER,UNIFIED_CATEGORY_NAME,PARENT_IDENTIFIER,IS_PUBLIC
FB,Football,,ja
FB-JUG,Football youth,FB,ja
TUR,Gymnastics,,ja
2. Products (fees, tariffs)
File name: must contain AFS_PRODUCT_, for example AFS_PRODUCT_fees.csv
Right: administrator with Products
| Column | Required | Content |
|---|---|---|
Produkt-ID (PRODUCT_IDENTIFIER) |
yes | your number for the product |
Produktname (PRODUCT_NAME) |
yes | name on the invoice |
Preis (PRICE) |
yes | gross price per billing period |
Abrechnungsart (BILLING_TYPE) |
for example subscription for recurring fees, fixed for one-off charges |
|
Abrechnungsintervall (RECURRENCE) |
interval as set up in vynst, for example 1 month or 1 year |
|
Sparten-ID (UNIFIED_CATEGORY_IDENTIFIER) |
section from step 1 |
Produkt-ID;Produktname;Preis;Abrechnungsart;Abrechnungsintervall;Sparten-ID
ERW;Adults;12,00;subscription;1 month;FB
JUG;Youth;8,00;subscription;1 month;FB-JUG
FAM;Family;25,00;subscription;1 month;
For all fields of a product, use the detailed product import: under Settings → Export (Einstellungen → Export), download the products export (Export der Produkte), edit it and upload it again.
3. People and members
File name: must contain AFS_PERSON_, for example AFS_PERSON_members.csv
Right: administrator with CRM
| Column | Required | Also accepted |
|---|---|---|
Mitgliedsnummer (PERSON_IDENTIFIER) |
yes | Mitglieds-Nr., MitgliedID, PERSON_ID |
Vorname (FIRST_NAME) |
yes | |
Nachname (LAST_NAME) |
yes | Name |
Geburtsdatum (BIRTHDAY) |
Geburtstag |
|
Geschlecht (GENDER) |
||
Titel (TITLE) |
||
Straße (ADDRESS_STREET) |
Strasse, Straße und Hausnummer |
|
PLZ (ADDRESS_ZIP) |
Postleitzahl |
|
Ort (ADDRESS_CITY) |
Wohnort, Stadt |
|
Land (ADDRESS_COUNTRY) |
||
E-Mail (MAIN_EMAIL) |
E-Mail-Adresse, E-Mail 2 |
|
Telefon (MAIN_PHONE) |
Telefon 2, Mobil, Mobiltelefon |
|
Eintrittsdatum (START_DATE) |
Beginn, Eintritt |
|
Austrittsdatum (END_DATE) |
Ende, Austritt |
|
Notiz (NOTE) |
Bemerkung |
|
BuT-Nummer (FINANCIAL_SUPPORT_NUMBER) |
Mitgliedsnummer;Vorname;Nachname;Geburtsdatum;Straße;PLZ;Ort;E-Mail;Eintrittsdatum
1001;Lena;Hartmann;14.05.1988;Jakobistr. 39;30163;Hannover;lena@example.org;01.01.2020
1002;Jonas;Hartmann;02.09.2014;Jakobistr. 39;30163;Hannover;;01.03.2022
Additions in the file name:
| Addition | Effect |
|---|---|
WITH_COMPANY |
creates a separate billing account for each person straight away |
COMPANY_CONTACT |
only changes the contact data of existing accounts |
ohne_mitgliedschaft |
creates no membership |
4. Billing accounts
A billing account is the payer, for example a family or a company.
File name: must contain AFS_ACCOUNT_
Right: administrator with CRM
| Column | Required | Also accepted |
|---|---|---|
Kontonummer (COMPANY_IDENTIFIER) |
yes | ACCOUNT_IDENTIFIER, Abrechnungskontonummer |
Firmenname (COMPANY_NAME) or Vorname + Nachname |
yes | Firma, Abrechnungskontenname |
| Address, email, phone | as for people | |
| IBAN, BIC, Mandatsreferenz | see step 6 |
COMPANY_IDENTIFIER;Firmenname;Straße;PLZ;Ort;E-Mail
K-1001;Family Hartmann;Jakobistr. 39;30163;Hannover;lena@example.org
5. Link person to account
File name: must contain AFS_LINK_PERSON_
Right: administrator with CRM
PERSON_IDENTIFIER;COMPANY_IDENTIFIER;Vorname;Nachname
1001;K-1001;Lena;Hartmann
1002;K-1001;Jonas;Hartmann
6. SEPA direct debit data
File name: must contain AFS_SEPA_
Right: administrator with CRM
| Column | Required | Also accepted |
|---|---|---|
Kontonummer (COMPANY_IDENTIFIER) |
yes | |
IBAN (PAYMENT_IBAN) |
yes | IBAN |
Mandatsreferenz (PAYMENT_MANDATE) |
yes | SEPA-Mandatsreferenz, MandatNr |
Mandatsreferenz gültig ab (PAYMENT_MANDATE_SIGN_DATE) |
Mandatsreferenz gültig ab |
|
BIC (PAYMENT_BIC) |
BIC |
|
Kontoinhaber (PAYMENT_OWNER) |
Kontoinhaber |
COMPANY_IDENTIFIER;IBAN;Mandatsreferenz;Mandatsreferenz gültig ab;Kontoinhaber
K-1001;DE02120300000000202051;M-1001;01.01.2020;Lena Hartmann
7. Memberships
File name: must contain AFS_MEMBERSHIP_
Right: administrator with CRM
| Column | Required | Content |
|---|---|---|
PERSON_IDENTIFIER |
yes | membership number from step 3 |
COMPANY_IDENTIFIER |
yes | account from step 4; the person must be linked to that account |
Sparten-ID (UNIFIED_CATEGORY_IDENTIFIER) |
yes | section from step 1 |
Produkt-ID (PRODUCT_IDENTIFIER) |
yes | product from step 2 |
| Eintrittsdatum / Austrittsdatum | start and end | |
Produkt ermäßigt, Ermäßigt ab, Ermäßigt bis |
reduced fee for a period | |
Produkt passiv, Passiv ab, Passiv bis |
passive membership | |
Produkt beitragsfrei, Frei ab, Frei bis |
fee-free period | |
Zahlungsart (PAYMENT_TYPE) |
for example Lastschrift (direct debit) |
PERSON_IDENTIFIER;COMPANY_IDENTIFIER;Sparten-ID;Produkt-ID;Eintrittsdatum
1001;K-1001;FB;ERW;01.01.2020
1002;K-1001;FB-JUG;JUG;01.03.2022
8. Locations, rooms and offers
The easiest way is one Excel file with three sheets named Orte, Räume and Angebote (locations, rooms, offers). vynst imports them in this order. Keep the sheet names exactly as shown.
Right: Events
Orte (locations)
| Column | Required |
|---|---|
LOCATION_IDENTIFIER (Standort-ID) |
yes |
LOCATION_NAME (Standortname) |
yes |
ADDRESS_STREET_LEVEL, ADDRESS_ZIP, ADDRESS_CITY |
|
MAIN_EMAIL, MAIN_PHONE, WEBSITE |
Räume (rooms)
| Column | Required | Content |
|---|---|---|
OBJECT_IDENTIFIER (Raumnummer) |
yes | room number |
OBJECT_NAME |
yes | room name |
LOCATION_IDENTIFIER |
location the room belongs to |
Angebote (offers)
| Column | Required | Content |
|---|---|---|
EVENT_IDENTIFIER (Kurs-ID) |
yes | your number |
EVENT_NAME (Kursname) |
yes | name |
LOCATION_IDENTIFIER, OBJECT_IDENTIFIER |
location and room | |
START_DATE, END_DATE |
period | |
WEEKDAYS |
weekdays | |
PEOPLE_LIMIT |
maximum number of participants | |
MAIN_CONTACT_IDENTIFIER (Trainer) |
trainer: person number, member number or email | |
UNIFIED_CATEGORY_IDENTIFIERS |
several sections separated by |~|, e.g. FB|~|TUR |
|
EXTERNAL_DESCRIPTION |
description for members |
EVENT_IDENTIFIER;EVENT_NAME;LOCATION_IDENTIFIER;START_DATE;END_DATE;PEOPLE_LIMIT;Trainer
K-YOGA;Evening yoga;HALLE1;06.01.2026;30.06.2026;15;trainer@example.org
Bank statements
Import account statements from online banking under Billing → Bank imports → Add (Abrechnung → Bank-Importe → Hinzufügen). vynst then matches the transactions automatically to invoices, direct debits and accounts.
| Format | File | Where to upload |
|---|---|---|
| CAMT.052 / .053 / .054 | .xml |
Bank imports |
| CSV export (CAMT format, for example Sparkasse) | .csv |
Bank imports |
| Other bank CSV | .csv, file name starts with Bank, Zahlungen or Transaktionen |
Bank imports |
| MT940 | .sta or .txt |
Settings → Import |
vynst recognises transactions that are already imported and skips them. You can therefore upload overlapping periods.
For a general bank CSV, vynst understands these columns: Buchungstag, Valutadatum, Betrag, Verwendungszweck, Buchungstext, Beguenstigter/Zahlungspflichtiger (or Name), Kontonummer/IBAN, BIC (SWIFT-Code), Mandatsreferenz, Kundenreferenz (End-to-End).
Small helpers
The helpers work on people who are already in vynst. PERSON_IDENTIFIER holds the person number with its prefix as vynst shows it (for example M-1001) or the imported ID (for example AFS_CSV_1001 for member number 1001 from the person import). vynst reads a plain number as its internal record ID.
Change one field for many people
PERSON_IDENTIFIER,UPDATE_SINGLE_FIELD_NAME,FIELD_VALUE
AFS_CSV_1001,Newsletter,ja
AFS_CSV_1002,Notiz,Pays cash
Possible fields: Vorname, Nachname, Newsletter, Magazin, Notiz, Mitglied seit, Mitglied bis, BuT, BuT-Nummer. Use SET_IW_EMPTY to clear a field.
Enable logins for members
PERSON_IDENTIFIER,TRIGGER_ACTIVATE_PERSON_LOGIN
AFS_CSV_1001,ja
AFS_CSV_1002,ja
Vouchers from a legacy system
Vouchers are imported with a separate file. The inwendo team helps with the transfer.
Roles and functions
Roles and functions (board, trainers, instructors) are also created with a file. The inwendo team helps with the transfer.
Editing an export and importing it again
Some exports have exactly the header row of an import. Download such an export, edit it and upload it like any other import:
- Under Settings → Export (Einstellungen → Export), download for example the product export.
- Edit the file in Excel. Do not change the header row or the number column.
- Upload it again under Settings → Import (Einstellungen → Import).
This is how you change, for example, the prices of many products at once.
A few exports, currently the DOSB member export, also offer More options → Re-import data (Mehr Optionen → Daten reimportieren). vynst then remembers which export the file came from.
Importing via the API
Everything the interface can do is also available via the API. For writing, the token needs the Imports right (dwi), plus the right for the area, for example contacts (crm) for people.
Upload a file:
curl --request POST https://your-instance.iw-erp.de/api/dw/import/file.json \
--header 'x-iw-jwt-token: <TOKEN>' \
--form 'data[file]=@AFS_PERSON_members.csv'
Check the status:
curl 'https://your-instance.iw-erp.de/api/dw/import/file.json?filename=AFS_PERSON_members.csv&pageSize=5' \
--header 'x-iw-jwt-token: <TOKEN>'
processing |
processed |
success |
Status |
|---|---|---|---|
| 0 | 0 | n/a | waiting |
| 1 | 0 | n/a | running |
| 0 | 1 | 1 | successful |
| 0 | 1 | 0 | error |
vynst processes one file after another. Upload dependent files (people first, then memberships) one at a time, and wait for processed = 1 each time. Even with success = 1, individual rows may have been skipped. Search the log for Error:.
The endpoints are listed under System and settings, under ImportFile. AI assistants can propose imports through the MCP server.
Frequently asked questions
The import is red and the log says “No matching processor found”.
The file name or header row does not match any import. Check the spelling of the columns and the file name (AFS_PERSON_…).
Umlauts (ä, ö, ü) look broken. The file was not saved as UTF-8. In Excel, choose “CSV UTF-8”.
People appear twice. The numbers changed between two imports. Always keep the same membership number for each person.
A membership was skipped with “person … not linked with account”. Import step 5 (link person to account) first, then the memberships.
Can I undo an import? Not with one click. Correct the file and import it again, or re-import the export you saved beforehand.
Who can help? When switching from other programs (for example SPG-Verein, MAC, VEWA or Champ), the inwendo team takes care of the data transfer. Write to us at vynst.de/kontakt.