CSV Format

Complete specification for CSV files used to import shareholder data.

File Requirements

  • Encoding: UTF-8
  • Delimiter: Semicolon (;)
  • Header row: Required (first row)
  • File extension: .csv or .txt

Column Specification

The CSV must have the following columns in order:

ColumnNameTypeRequiredDescription
1orgnrStringYes9-digit Norwegian organization number
2selskapStringYesCompany name
3aksjeklasseStringYesShare class name (e.g., "A", "B", "Ordinary")
4aksjonarStringYesShareholder name
5fodselsarStringNoBirth year or organization number of shareholder
6postnrStringNoPostal code
7landkodeStringNoCountry code (e.g., "NO", "SE", "US")
8antallAksjerIntegerYesNumber of shares owned by this shareholder
9totalAksjerIntegerYesTotal shares in this share class
10stemmerettMultiplikatorNumberNoVotes per share (default: 1)

Header Row

The first row must contain the column names:

orgnr;selskap;aksjeklasse;aksjonar;fodselsar;postnr;landkode;antallAksjer;totalAksjer;stemmerettMultiplikator

Example File

orgnr;selskap;aksjeklasse;aksjonar;fodselsar;postnr;landkode;antallAksjer;totalAksjer;stemmerettMultiplikator
123456789;Example AS;A;John Smith;1980;0123;NO;500;1000;10
123456789;Example AS;A;Jane Doe;1975;0456;NO;300;1000;10
123456789;Example AS;B;Acme Corp;987654321;0789;NO;200;500;1
123456789;Example AS;B;Global Holdings Ltd;;0000;GB;300;500;1

Voting Multiplier Explained

The stemmerettMultiplikator field allows you to specify different voting rights per share class. This is common in dual-class share structures.

Example: Dual-Class Shares

  • Class A: 10 votes per share (stemmerettMultiplikator=10)
  • Class B: 1 vote per share (stemmerettMultiplikator=1)

If John Smith owns:

  • 500 Class A shares (10 votes each) = 5,000 votes
  • 100 Class B shares (1 vote each) = 100 votes
  • Total: 5,100 votes

When calculating voting percentage, Porto uses the weighted votes rather than just share count.

Identifying Shareholder Types

Porto automatically identifies shareholder types based on the fodselsar field:

  • Individual: 4-digit birth year (e.g., 1980)
  • Norwegian Company: 9-digit organization number (e.g., 987654321)
  • International Entity: Empty or non-matching format with foreign country code

Best Practices

  1. Use consistent naming: Ensure shareholder names are spelled consistently across rows
  2. Include organization numbers: For corporate shareholders, include their organization number in fodselsar to enable ownership chain tracing
  3. Set total shares correctly: The totalAksjer should be the total for the share class, not the company
  4. Check for duplicates: Avoid duplicate rows for the same shareholder/share class combination

Troubleshooting

Import Errors

  • "No valid data rows found": Check that your file uses semicolons, not commas
  • "Invalid organization number": Ensure orgnr is exactly 9 digits
  • "Parse error": Check for special characters or encoding issues

Common Issues

  • Missing column: Ensure all 9 required columns are present (column 10 is optional)
  • Wrong delimiter: Use semicolons (;), not commas
  • Empty values: For optional fields, leave empty (don't use "null" or "N/A")