Offers and courses
Create or update courses, workshops and programmes with times, location, trainer, number of participants and price.
- Format
- CSV (semicolon or comma)
- Access rights
- Write access to events
- Example files
- Angebote_beispiel_technisch.csv (technical column names)
Angebote_beispiel_anwender.csv (German column names)
In short: You enter each offer with its own number in a table. vynst creates or updates the offers based on this number. If you wish, vynst also creates the dates and the price straight away.
What you need this for
Offers are everything members can book, for example courses, workshops or programmes. With this import you transfer many offers at once from a table.
Before you start
- You need the right Imports (menu item Import) and write access for events (Schreibrecht Veranstaltungen).
- An administrator right is not required for this import.
- Import beforehand, if available: Locations (Orte), Rooms and objects (Räume und Objekte) and the sections (Sparten). You use the numbers from these tables in the columns location, room and section.
- The trainers must exist as persons in vynst. You can specify them by person number, member number, email address or a phone number in the format
+49 …. - A price creates a product with the name of the offer. For this, the product type for fixed prices must be set up in vynst. If it is missing, a message appears in the log.
Prepare the file
- Format: CSV with semicolon
;or comma,as separator. Excel files also work. - Header row: The first row contains the column names. The first two columns are
EVENT_IDENTIFIERandEVENT_NAME(orKurs-IDandKursname), in this order. - File name: It must contain
.csv. Names such asAngebote_Herbst.csvwork well. - Date:
06.01.2026or2026-01-06. Time:19:00or19.00. Price:12,00or12.00.
Columns
| Column | Required | Content | Example |
|---|---|---|---|
Kurs-ID (also EVENT_IDENTIFIER, Veranstaltungs-ID, AG-Nummer, Event ID) |
yes | your number for the offer | K-YOGA |
Kursname (also EVENT_NAME, Veranstaltungsname, AG-Name) |
yes | Name of the offer | Yoga am Abend |
Veranstaltungsart (also EVENT_TYPE, Veranstaltungstyp) |
Type of the offer, for example Programm, Kurs, Workshop, Info or Camp |
Kurs |
|
Wochentag (also BOOKING_DAY_OF_WEEK) |
Weekday of the offer, for example Montag |
Montag |
|
Uhrzeit Start (also BOOKING_HOUR_START, Startzeit) |
Start time | 19:00 |
|
Uhrzeit Ende (also BOOKING_HOUR_END, Endzeit) |
End time | 20:30 |
|
Beginn (also START_DATE, Startdatum) |
first day of the offer | 06.01.2026 |
|
Ende (also END_DATE, Enddatum) |
last day of the offer | 30.06.2026 |
|
Termine generieren (also GENERATE_BOOKING) |
ja, so that vynst creates the dates. This requires times or existing dates. |
ja |
|
Max. Teilnehmer (also MAX_PEOPLE_LIMIT, Teilnehmeranzahl) |
maximum number of participants | 15 |
|
Mindestteilnehmerzahl (also MIN_PEOPLE_LIMIT) |
minimum number of participants | 5 |
|
Warteliste (also HAS_WAITLIST) |
ja or nein |
ja |
|
Altersklasse (also AGE_RANGE, Altersbereich) |
Free text such as 6-18 Monate or 3-4 Jahre. Sets the age limits. |
6-12 Jahre |
|
Altersgruppe (also AGE_GROUP) |
for example Alle or Kinder & Jugendliche |
Alle |
|
Trainer (also MAIN_CONTACT_IDENTIFIER, Betreuungskraft, Hauptansprechpartner) |
Person number, member number, email or phone number +49 …. Separate several trainers with a comma: first trainer, second co-trainer, then further responsible persons. |
max.mustermann@example.org |
|
Co-Trainer (also SECONDARY_CONTACT_IDENTIFIER, Zweitansprechpartner) |
second trainer, if you give them in a separate column. An empty cell removes the co-trainer. | sabine.berger@example.org |
|
Sparte (also UNIFIED_CATEGORY_IDENTIFIER, Sparten-ID, Kategorie-ID) |
Sections of the offer, several separated by |~| |
FB |
|
Standort-ID (also LOCATION_IDENTIFIER, Orts-Nummer) |
Location from the locations import | HALLE1 |
|
Raumnummer (also BOOKABLE_IDENTIFIER, OBJECT_IDENTIFIER) |
Room from the rooms and objects import | R1 |
|
Zusatzraum-Nummer (also SECONDARY_BASE_BOOKABLE_IDENTIFIER) |
second room from the rooms and objects import | R2 |
|
Beschreibung (also EXTERNAL_DESCRIPTION) |
Description for members | Ruhiger Einstieg in die Woche |
|
Interne Beschreibung (also INTERNAL_DESCRIPTION) |
Note for you only | Matten im Geräteraum |
|
Bild URL (also IMAGE_URL, Bild) |
Address of the image or number of the media file | https://www.example.org/bilder/yoga.jpg |
|
COLOR |
Colour of the tile as hex value with #, or as the name of a colour from vynst. Without a value, the default colour applies. |
#2E7D32 |
|
Sichtbarkeit |
Who sees the offer: öffentlich, Mit Token, Mit Login, Ausgewählte Nutzer / Tags, Sparte or Schule |
öffentlich |
|
Anmeldung möglich für (also Anmeldung für, Selbstanmeldung) |
Who may register, for example öffentlich or Sparte |
öffentlich |
|
Kontaktdaten erforderlich (also REQUIRE_CONTACT) |
ja if members must give their contact details |
nein |
|
Adressdaten erforderlich (also REQUIRE_ADDRESS) |
ja if members must give their address |
nein |
|
Rechnungsdaten erforderlich (also REQUIRE_BILLING) |
ja if members must give billing details |
nein |
|
Alter erforderlich (also REQUIRE_AGE) |
ja if the age must be given |
nein |
|
Anmeldung für alle Termine (also CAN_SIGN_UP_MAIN_EVENT) |
ja so that members can register for all dates at once |
nein |
|
Ausschließlich Anmeldung für alle Termine (also ONLY_SIGN_UP_MAIN_EVENT) |
ja so that only registration for all dates is possible |
nein |
|
Personen in Termin kopieren (also COPY_MAIN_SIGNUPS_TO_BOOKING) |
ja so that registered persons are copied into the dates |
nein |
|
Anmeldestart (Tage vorher) (also SIGN_UP_LIMIT_DAYS_BEFORE) |
Number of days before the date from which registration is open | 60 |
|
Anmeldeschluss (Tage vorher) (also SIGN_UP_LIMIT_STOP_DAYS_BEFORE) |
Number of days before the date until which one can register | 1 |
|
Ticket erstellen (also CREATE_TICKET) |
ja so that a ticket is created on registration |
nein |
|
Preis je Anmeldung (€) (also Preis je Anmeldung) |
Price per registration. 0 means free of charge, an empty cell leaves the price unchanged. The column needs the product type for fixed prices in vynst. |
12,00 |
|
VISIBILITY_ACCESS_TAGS |
Access tags, several separated by |~|. If the column is present, it replaces the previous rights. |
Further columns are possible, for example Mindestalter, Höchstalter, Mindest-Klassenstufe and Maximal-Klassenstufe. The minimum and maximum age take precedence over the age range.
Example
EVENT_IDENTIFIER;EVENT_NAME;EVENT_TYPE;BOOKING_DAY_OF_WEEK;BOOKING_HOUR_START;BOOKING_HOUR_END;START_DATE;END_DATE;GENERATE_BOOKING;MAX_PEOPLE_LIMIT;MIN_PEOPLE_LIMIT;HAS_WAITLIST;AGE_RANGE;AGE_GROUP;MAIN_CONTACT_IDENTIFIER;SECONDARY_CONTACT_IDENTIFIER;UNIFIED_CATEGORY_IDENTIFIER;LOCATION_IDENTIFIER;BOOKABLE_IDENTIFIER;SECONDARY_BASE_BOOKABLE_IDENTIFIER;EXTERNAL_DESCRIPTION;INTERNAL_DESCRIPTION;IMAGE_URL;COLOR;VISIBILITY_TYPE;SELF_SERVICE_VISIBILITY_TYPE;REQUIRE_CONTACT;REQUIRE_ADDRESS;REQUIRE_BILLING;REQUIRE_AGE;CAN_SIGN_UP_MAIN_EVENT;ONLY_SIGN_UP_MAIN_EVENT;COPY_MAIN_SIGNUPS_TO_BOOKING;SIGN_UP_LIMIT_DAYS_BEFORE;SIGN_UP_LIMIT_STOP_DAYS_BEFORE;CREATE_TICKET
K-YOGA;Yoga am Abend;COURSE;Montag;19:00;20:30;06.01.2026;30.06.2026;ja;15;5;ja;6-12 Jahre;Alle;max.mustermann@example.org;sabine.berger@example.org;FB;HALLE1;R1;R2;Ruhiger Einstieg in die Woche;Matten im Geräteraum;https://www.example.org/bilder/yoga.jpg;#2E7D32;public;public;nein;nein;nein;nein;nein;nein;nein;60;1;nein
K-TURNEN;Turnen für Kinder;COURSE;Dienstag;16:00;17:00;06.01.2026;30.06.2026;ja;12;4;nein;6-10 Jahre;Kinder & Jugendliche;max.mustermann@example.org;;TUR;HALLE1;R2;;Spielerisches Turnen für Kinder;Kinderturnmatten im Geräteraum;https://www.example.org/bilder/turnen.jpg;#F9A825;public;public;nein;nein;nein;nein;nein;nein;nein;60;1;nein
Example files: Angebote_beispiel_technisch.csv with the technical column names, Angebote_beispiel_anwender.csv with the German column names.
The offer K-YOGA takes place on Mondays at 19:00 in room R1. The trainer and the co-trainer are assigned via their email addresses. The offer K-TURNEN uses room R2 and section TUR. Because Termine generieren is set to ja, vynst creates dates for both offers. The column Preis je Anmeldung (€) is missing in the example file, so no product is created. The file with the German column names contains the same offers. Because the course IDs stay the same, importing the second file updates the offers.
How to proceed
- Open Settings → Import (Einstellungen → Import).
- Click Add (Hinzufügen) and select the file.
- Check the log. Pay particular attention to
Warning:for trainers and toError:for rows. - After the import, the dates are created gradually in the background. You do not need to trigger anything.
Good to know
- If the course ID already exists, the offer is updated. A new course ID creates a new offer. This import never deletes offers.
- An empty cell leaves many values unchanged, but for text fields it deletes the old text. If a column is present in the file, this also applies to the trainer: an empty trainer cell removes the trainer.
- Visibility via sections: If
Sichtbarkeitis set toSparteorSchuleand there is no column for access tags, the offer takes over the access tags of its sections. The offer’s previous rights are then replaced. - Dates: The dates are not created immediately. Each row starts the run one minute later than the previous one.
- Price: vynst creates a product with the identifier
<Course ID>-PREISand updates it on every import. The price0creates a free product, so that registration remains possible. - Identifier: vynst first looks up a pure number as course ID as an internal number. If this hits a different offer, you change that offer. With a column
IMPORT_IDENTIFIER_PREFIXyou put a fixed prefix in front of every course ID, for exampleAG-. The value of this column then comes before the course ID, and the identifier in the system isAG-plus your number. - Rows: Completely empty rows (often left over from Excel) are ignored without a message. A row with a description but without a course ID or name is an error.
- Several sections are separated with
|~|(vertical bar, tilde, vertical bar), for exampleFB|~|TUR.
When something does not work
| Message in the log | Meaning | What to do |
|---|---|---|
Error: skipped missing event identifier |
Course ID or name is missing. The row appears below it as LINE-DATA. |
Complete the row and re-import only this row. |
Error: skipped empty line |
An empty row was skipped. | Nothing. |
Info: K-YOGA - Trainer über Personennummer/ID zugeordnet: 2001 |
The trainer was found. | Nothing. |
Warning: K-YOGA - Trainer nicht zugeordnet: keine Person mit Personennummer, ID, E-Mail oder Telefonnummer (Format +49 ...) "…" |
The trainer was not found, the offer is created without them. | Check the value in the file or create the person in vynst. |
Warning: K-YOGA - Trainer nicht zugeordnet: mehrere Personen mit E-Mail "…" |
The email belongs to several persons. | Give the person number instead of the email. |
Error: K-YOGA - Preis nicht importiert, Produkttyp "event-fixed" fehlt |
The product type for fixed prices is missing in vynst. The offer is created nevertheless. | Ask the administrator to set up the product type, then repeat the import. |
Read: 12 rows |
This many rows were read. | Nothing. |
Error: less then one line |
The file contains no data row. | Check whether the file is complete. |
FAILED: No matching processor found. |
File name or header row does not match any import. | Check the first two columns and the file name. |
See also
- Locations
- Rooms and objects
- Appointments and schedules
- Invitations
- Import overview
- Technical documentation