CSV import

Under Settings → Tools → Import data, a 5-step wizard helps you bring addresses, contacts, and objects into your workspace from a CSV file.

Each CSV row represents one record. Addresses, contacts, and objects are read from the same row. When you import addresses, the object in row n is automatically linked to the address in row n.

Internet required: AI mapping and the final import (validation, saving, synchronisation) need an active internet connection.

Where to find it

  1. Open Settings (gear icon).
  2. Scroll to Tools.
  3. Tap Import data.

A step indicator at the top shows all five steps. You can skip individual sections if your CSV only contains contacts or only objects.


Step 1: Select CSV file

Goal: Provide the raw data.

You have two options (only one at a time):

OptionHow
Upload fileTap Choose CSV file and select a .csv file on your device.
Paste textCopy CSV content into the Paste CSV text field.

After selection, the app reads column headers from the first row. You cannot continue without a file or pasted text.

Tap Continue.


Step 2: Addresses

Goal: Map CSV columns to object addresses (locations where objects sit).

AI mapping (optional)

Tap AI map fields (sparkles icon). AI analyses your column headers and suggests mappings for address, contact, and object fields — even when you are only on the address step. Review suggestions and adjust manually if needed.

Map fields manually

Assign a CSV column to each app field (dropdown Select column or None):

FieldRequiredNotes
Address line 1YesStreet or first address line
Address line 1 – part 2Noe.g. house number — combined with line 1
Address line 2NoUnit, floor, c/o
Address line 2 – part 2NoSecond part of line 2
CityNo
Postal codeNo
CountryYesSet via country picker (not a CSV column). Default: your favourite country from settings.
Administrative areaNoState, province, region

Continue is enabled only when address line 1 and country are set.

Skip addresses

If your CSV has no location addresses, tap Skip addresses. Objects will be imported without an address link.


Step 3: Contacts

Goal: Create contacts (people and companies) from the CSV.

AI mapping (optional)

As in step 2: AI map fields assigns column headers to contact fields. The same run fills mappings for all areas — review the result.

Contact fields

FieldRequiredNotes
SalutationNoCSV column or fixed value
Person titleNoe.g. Dr., Prof.
First nameYes
Last nameYes
EmailYes
Phone numberNo
Company nameNo
RoleNoCSV column or fixed role (e.g. tenant, owner)

Map role values

If you choose a CSV column for role (e.g. “Tenant”, “Landlord”, “Owner”), the app lists every unique value in that column. Each value must be mapped to an app role:

  • Tap a CSV value and pick the matching role.
  • Or use AI map enum values — AI suggests matching app roles.

Contact address (embedded)

Under Contact address, you can optionally map a separate postal address for the contact (not the same as the object address from step 2):

  • Address lines, city, postal code, administrative area
  • Country: default from settings, or a dedicated CSV column per row

Continue requires first name, last name, and email to be mapped.

Skip contacts

Tap Skip contacts if you only want to import addresses and/or objects.


Step 4: Objects

Goal: Create objects (e.g. apartments, vehicles) from the CSV.

AI mapping (optional)

Tap AI map fields again — the same AI function as in steps 2 and 3.

Object fields

FieldRequiredNotes
Object nameNo*CSV column with a label. *Without a column, the app generates names like “Apartment 1”, “Apartment 2” (based on object type).
DetailsNoFree-text description
Object typeYesEither a CSV column or one fixed type for all rows
Customer object IDNoYour internal reference — helps detect existing objects

Map object type values

With a CSV column for type (e.g. “Apartment”, “Garage”, “Office”), every distinct value must be mapped to an enabled object type in your settings:

  • Tap a CSV value → choose the object type.
  • Or AI map enum values for automatic suggestions.

Only object types enabled in Settings are available.

Continue is enabled when the object type is fully mapped (all CSV values mapped if a column is selected).

Skip objects

Tap Skip objects if you only import addresses and/or contacts.


Step 5: Preview and import

Goal: Review what will be created — then import.

The preview shows a summary:

  • Count of addresses, contacts, objects
  • Per entry a New badge (will be created) or Existing badge (already in the workspace — reused, not duplicated)

How “Existing” is detected

Data typeMatch criteria
AddressAddress lines, city, postal code, country, and region all match
ContactSame email and (first name + last name + salutation or company name)
ObjectSame customer object ID, or same name + same address

Review the list carefully. Tap Back to fix mappings.

Start import

  1. Tap Import.
  2. The app validates the data (test run).
  3. On success, records are saved and synchronised.
  4. After a successful import you return to the start page.

If validation fails, an error list is shown — fix the CSV or mapping and try again.

Without an internet connection, the import button stays disabled.


AI automation overview

The Protocol App uses AI (Mistral) in three places:

1. AI map fields

  • Available in Addresses, Contacts, and Objects steps.
  • AI reads column headers only (not cell content) and maps them to fields — e.g. “Street” → address line 1, “No.” → address line 1 part 2, “Email” → email.
  • Works with German and English column names.
  • One tap fills mappings for addresses, contacts, and objects at once.
  • Results are suggestions — always review them.
  • Repeated imports with the same headers may reuse a cached mapping.

2. AI map enum values (object type)

  • Appears after you select a CSV column as object type.
  • AI compares CSV values (e.g. “Apt”) with enabled object types in your workspace.
  • Unmapped values must be assigned manually before you can continue.

3. AI map enum values (contact role)

  • Appears after you select a CSV column as role.
  • AI maps CSV labels to app roles (e.g. “Tenant” → RENTER, “Landlord” → LESSOR).

Note: AI features require internet. If AI fails, map every field manually via the dropdowns.


What an importable CSV should look like

Basic rules

  1. First row = column headers (required).
  2. Each further row = one record (one address, one contact, one object — in parallel on the same row).
  3. Delimiter: comma ,, semicolon ;, or tab — detected automatically (most frequent character in row 1).
  4. Quotes: wrap values containing commas or semicolons in "..."; escape " inside a value as "".
  5. Empty lines are ignored.
  6. File format: .csv (UTF-8 recommended).

Column layout (real estate example)

A complete row can contain object, object address, contact, and contact address — in this order:

SectionColumnsPurpose
ObjectObjectObject type (e.g. apartment, garage) — mapped to an object type during import
Object addressAddressLine1, AddressLine2, PostalCode, City, CountryLocation of the object
Object detailsObjectName, ObjectDescriptionLabel and free text
ContactFirstName, LastName, Phone, EmailPerson to contact
Contact addressAddressLine1, AddressLine2, PostalCode, City, CountryContact’s postal address (may differ from the object location)

Important: Each column header must appear only once in the CSV. For object and contact addresses, use distinct names — e.g. Object_AddressLine1 and Contact_AddressLine1. AI mapping usually recognises such variants automatically.

You do not need these exact names — AI or manual mapping links your headers to app fields.

Sample data (readable)

ObjectObject_AddressLine1Object_AddressLine2Object_PostalCodeObject_CityObject_CountryObjectNameObjectDescriptionFirstNameLastNamePhoneEmailContact_AddressLine1Contact_AddressLine2Contact_PostalCodeContact_CityContact_Country
ApartmentMain Street 122nd floor left10115BerlinGermanyApartment 1st floor3 rooms, balconyMaxMustermann+49 170 1234567[email protected]Main Street 1210115BerlinGermany
ApartmentExample Road 380331MunichGermanyPenthouseRoof terrace, liftAnnaSchmidt+49 171 9876543[email protected]Sun Alley 8Rear building12045BerlinGermany

The contact address can differ from the object address (e.g. tenant lives elsewhere than the property).

Copy-paste CSV example

Semicolon-separated (common in European Excel exports). First row = header — select and copy:

Object;Object_AddressLine1;Object_AddressLine2;Object_PostalCode;Object_City;Object_Country;ObjectName;ObjectDescription;FirstName;LastName;Phone;Email;Contact_AddressLine1;Contact_AddressLine2;Contact_PostalCode;Contact_City;Contact_Country
Apartment;Main Street 12;2nd floor left;10115;Berlin;Germany;Apartment 1st floor;3 rooms, balcony;Max;Mustermann;+49 170 1234567;[email protected];Main Street 12;;10115;Berlin;Germany
Apartment;Example Road 3;;80331;Munich;Germany;Penthouse;Roof terrace, lift;Anna;Schmidt;+49 171 9876543;[email protected];Sun Alley 8;Rear building;12045;Berlin;Germany

Notes on this example:

  • Object_Country: For the object address you also pick the country in step 2 in the app (default from settings). The CSV column helps as a reference; Contact_Country can be mapped directly from a CSV column.
  • Object holds values like “Apartment” — map each to an object type during import (manually or with AI).
  • Empty fields (e.g. Contact_AddressLine2 in row 1) are allowed.

Minimum requirements per area

AreaFor a row to be imported
AddressAddress line 1 + country (country is chosen in the app, not from CSV)
ContactFirst name, last name, email
ObjectObject type (name optional — generated if missing)

Rows missing required fields do not appear in the preview for that area.

Optional column ideas

ContentTypical column names
Street + house number splitStreet, HouseNumber → combined into one line
Company contactCompanyName, Email
Object detailsDescription, Notes, Details
Internal object IDCustomerID, ObjectNo, customerObjectID
Image URLsImages — multiple URLs separated by | or ;

Common mistakes to avoid

  • No header row — the app cannot map columns.
  • Inconsistent spelling for roles or object types — use enum mapping or AI.
  • Country only in CSV but no country picker for addresses — for object addresses you pick country in the app; for contact addresses you can optionally map a country column.
  • Rows without email — the contact is skipped for that row.
  • Very large files — test with a small sample first and check the preview.

Next steps