Skip to content
Developer

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_IDENTIFIER and EVENT_NAME (or Kurs-ID and Kursname), in this order.
  • File name: It must contain .csv. Names such as Angebote_Herbst.csv work well.
  • Date: 06.01.2026 or 2026-01-06. Time: 19:00 or 19.00. Price: 12,00 or 12.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

  1. Open Settings → Import (Einstellungen → Import).
  2. Click Add (Hinzufügen) and select the file.
  3. Check the log. Pay particular attention to Warning: for trainers and to Error: for rows.
  4. 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 Sichtbarkeit is set to Sparte or Schule and 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>-PREIS and updates it on every import. The price 0 creates 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_PREFIX you put a fixed prefix in front of every course ID, for example AG-. The value of this column then comes before the course ID, and the identifier in the system is AG- 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 example FB|~|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