Articles in this section

Prepare your CSV file for import

Published:
Updated:

A clean CSV is the difference between a smooth bulk import and a screen full of validation errors. This article defines the exact columns, formats, and rules your file must follow before you import penalty notices (Strafmandate).

Required columns

Your CSV must include a header row with all seven of these columns. Column names are matched case-insensitively, and any extra columns are ignored.

ColumnFormat and rule
violationTypeKeyRequired text. The offence type key.
occurredAtUtcRequired. A valid UTC ISO-8601 date/time, for example 2026-03-15T10:30:00Z.
locationRequired text.
amountRequired. A decimal number greater than zero, using a dot as the decimal separator (for example 120.00).
vehicleIdRequired. A whole number greater than zero identifying the fleet vehicle.
aktenzeichenRequired text. The authority case reference.
countryCodeRequired. Exactly two letters (ISO code); stored in uppercase.
Note: If the header is missing any required column, the entire import fails before any row is checked, with a message listing exactly which columns are missing.

Formatting rules

  • Header plus data — the file needs the header row and at least one data row. A header-only file is rejected.
  • Line endings — Windows and Unix line endings both work; empty lines are ignored.
  • Decimal separator — use a dot (.), not a comma, for the amount. The value is parsed with invariant formatting.
  • Dates in UTC — supply occurredAtUtc as UTC; values are read as universal time.
  • Country code — must be two letters; anything longer or shorter is rejected.

Values that contain commas or quotes

The importer understands standard CSV quoting. If a value contains a comma — common in a location — wrap the whole value in double quotes. To include a literal double quote inside a quoted value, double it.

  • "Berlin, Kurfuerstendamm 42" keeps the comma inside one field.
  • "Gate ""A"" entrance" produces the text Gate "A" entrance.

Avoiding duplicates

The importer identifies a notice by its Aktenzeichen and vehicle together. Two rows with the same Aktenzeichen and the same vehicleId are treated as duplicates — whether the match is against notices already in the system or another row in the same file. Duplicates are skipped, so give each distinct notice its own Aktenzeichen and confirm the vehicle is correct.

Example

violationTypeKey,occurredAtUtc,location,amount,vehicleId,aktenzeichen,countryCode
speeding,2026-03-15T10:30:00Z,"Berlin, Kurfuerstendamm 42",120.00,101,BL-2026-00001,DE
parking,2026-03-16T08:05:00Z,Hamburg Hafencity,35.50,102,HH-2026-00042,DE
Tip: Always run a dry run after preparing the file. It reports the exact row number and reason for any problem so you can fix it before committing.

Related

  • Bulk-import penalty notices from CSV
  • Preview a CSV import with a dry run
  • Required fields on a penalty notice
  • Correct an imported or captured penalty notice
AH
Written by Alexander Hagemann
Updated:
Access denied
Access denied