arrow-left

All pages
gitbookPowered by GitBook
1 of 5

Loading...

Loading...

Loading...

Loading...

Loading...

CSV Upload Troubleshooting

Solutions for common CSV import issues in Veza

This document helps you identify and resolve common issues when importing CSV files into Veza.

hashtag
Understanding CSV Import Behavior

Before troubleshooting, it's important to understand how the CSV import process works:

hashtag
File Requirements

  • Maximum file size: 100MB per CSV file

  • Character encoding: UTF-8 recommended

  • First row: Must contain column headers

hashtag
Entity Requirements

  • Users: Each user must have either an id or name (or both)

  • Groups: Each group must have either an id or name (or both)

hashtag
Processing Rules

  • First-row behavior: For entities appearing in multiple rows, only the first row sets the entity properties

  • Subsequent rows: Additional rows with the same identifier only process group and role assignments

  • Role permissions: Permissions for the same role are added across all rows (additive)

hashtag
Common Issues and Solutions

hashtag
Configuration and Integration Issues

Issue
Solution

hashtag
Mapping Issues

Issue
Solution

hashtag
Data Format Issues

Issue
Solution

hashtag
HRIS-Specific Issues

Issue
Solution

hashtag
List Column Issues

Issue
Solution

hashtag
Preparation Best Practices

  1. Start with a test file

    • Begin with a small subset of data to verify your mapping configuration

    • Test with representative examples of your data structure

hashtag
Current Limitations

Be aware of these current limitations in the CSV import functionality:

  1. No application resources support

    • Resources within applications are not currently supported

  2. No direct user-to-permission mapping

hashtag
Getting Support

If you continue to experience issues after reviewing this guide:

  1. Review the for details on supported formats and mapping options

  2. Check the for guidance on structuring your CSV files

  3. Contact Veza Support with:

CSV Upload API

Automating updating CSV integration data

hashtag
Overview

In addition to using a simple web interface to update CSV data manually, you can automate a process to push new data using the Veza REST API and refresh the Veza graph. This document includes example utilities using Python and CLI tools.

hashtag

Column delimiters: Commas
  • Text qualifiers: Double quotes for fields containing commas

  • Roles: Each role must have either an id or name (or both)
  • If only id or name is provided for an entity, that value is used for both fields and must be unique

  • Minimum mapping: You must map at least one column for each entity type you want to import

  • All properties: All properties (including custom properties) are set only from the first row where that entity appears

    Import fails with duplicate column error

    Column names must be unique (case-insensitive). While mapping allows columns with different cases like "Email" and "email", the import will fail. Ensure all column headers have unique names regardless of case

    Validate CSV format
    • Ensure proper comma delimitation

    • Quote fields containing commas

    • Use consistent data formats across rows

  • Pre-plan your mapping

    • Identify which columns map to which entity types and attributes

    • Determine how to handle multi-value fields (as lists or multiple rows)

    • Identify custom properties and their data types

  • Consider data quality

    • Standardize identifiers (case consistency, no trailing spaces)

    • Use consistent naming for groups and roles

    • Validate data formats before import

  • Permissions must be assigned to roles, which are then assigned to users

  • Direct user-to-permission mappings (without a role) are not supported

  • No column transformations

    • The system cannot combine or transform column values during import

    • Column transformations or combinations are not supported

  • Full replacement updates

    • Each update completely replaces the previous data

    • Incremental updates are not supported

  • Custom property types are fixed after creation

    • Once a custom property type is set and data processed, it cannot be changed

    • Changing custom property types requires deleting the integration and recreating it

  • Default permissions

    • If no column is mapped to role permissions, Veza assigns a default "Uncategorized" permission.

  • HRIS Type field propagation

    • Updates to the HRIS Type field require a complete CSV file re-upload to propagate changes to downstream systems like Lifecycle Management (LCM)

    • Changing the HRIS Type field alone will not update entity names throughout the system

  • A sample of your CSV file (with sensitive data removed)
  • Your mapping configuration

  • A description of the unexpected behavior

  • Entity names inconsistent between CSV provider and Lifecycle Management (LCM) after update

    Critical: When updating the HRIS Type field for an HR System template integration, you must re-upload the complete CSV file immediately after changing the type. Updating the HRIS Type field without re-uploading data causes system-wide inconsistencies. See the HRIS Type Update Warning for detailed steps.

    CSV file is rejected with validation error

    Verify you've mapped the minimum required fields (id or name for all entity types)

    Only some properties appear

    Check that columns are mapped to the correct entity types and attributes

    Users appear without group/role assignments

    Ensure you've correctly mapped group and role columns

    Entities appear multiple times

    Boolean values not interpreted correctly

    Use standard values: true, t, yes, y, 1, active, or enabled for TRUE

    Timestamp data not processed

    Ensure timestamps are in one of the supported formats listed in the CSV Import documentation

    Multiple groups/roles not assigned properly

    For list columns, ensure values are comma-separated and enclosed in quotes if they contain commas

    Special characters causing parsing issues

    Manager field not populating on graph

    Ensure manager ID values are in lowercase. The system compares employee IDs to the lowercase value of the manager attribute. For example, use manager_id: emp001 instead of EMP001.

    Manager relationships not appearing after import

    Verify that the manager ID value exactly matches an existing employee's unique identifier (in lowercase format).

    Groups/roles in comma-separated lists not assigned

    Verify you've selected the list option when mapping the column

    Only first value in list is processed

    Check for proper quoting around values that contain commas

    Only some list values appear

    Check for inconsistent naming between list items and other references to the same entity

    CSV Import documentation
    CSV Upload Examples

    Ensure that the value you're using for id is unique (Veza automatically cleans whitespace and is case-insensitive)

    Save your CSV with UTF-8 encoding and ensure text with commas is properly quoted

    Using the Upload CSV REST API

    After creating a CSV upload integration, you can use the REST API operation Push Custom Provider Datasource CSV to upload new CSV data.

    Whenever a CSV is submitted, it is processed based on the current configuration of the CSV Upload Integration provider, including any column mapping settings.Authentication: To make API calls, you must include an authorization token in the header of each request. This can be:

    • A Personal API Key for a Veza administrator

    • A Team API Key, for a team assigned to manage CSV Upload integrations

    See Authentication for more details on creating API keys.

    Note: The CSV data must be complete for each upload. Veza will remove entities from the Graph for any entities that were present in the previous upload, but not in the current upload.

    hashtag
    Retrieving Integration IDs

    Using the REST API requires the Integration (Provider) and Data Source IDs. You can retrieve these in Veza on the Integration Details > Data Source tab:

    1. On the Veza Integrations page, click the CSV integration to view details

    2. On the Data Source tab, click the data source name to view details

    3. Copy the values from the Properties table:

      1. The unique data source "Id"

      2. The "Provider Id"

      Both values are in UUID format, e.g., 19b0c736-6686-4708-87e2-92171db6afb3.

    hashtag
    Uploading the Data

    Uploading the CSV data is made with a post call to the /api/v1/providers/custom/{provider_id}/datasources/{data_source_id}:push_csv endpoint.

    Note: The CSV contents must be base64-encoded into the JSON body of the request. Raw CSV values are rejected. You can automatically convert the data as part of your implementation, as shown below.

    hashtag
    Example using Curl

    hashtag
    Example using Python

    {
        "csv_data": "abc123="
    }
    CSV_PAYLOAD=$(cat my_app_data.csv | base64)
    curl --location https://example.vezacloud.com/api/v1/providers/custom/40bdd318-d320-4574-be90-ca556d59889a/datasources/9bc29dc6-8cd0-4926-992e-7d720305ae2f:push_csv \
    --request POST \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer $VEZA_API_KEY" \
    --data "{\"csv_data\": \"${CSV_PAYLOAD}\"}"
    #!/usr/bin/env python3
    
    import base64
    import json
    import os
    import sys
    
    import oaaclient.utils as oaautils
    from oaaclient.client import OAAClient, OAAClientError
    
    veza_url = "https://example.vezacloud.com"
    veza_api_key = os.getenv("VEZA_API_KEY")
    
    provider_id = "UUID of Provider"
    data_source_id = "UUID of Data Source"
    
    source_csv = "path/to/my_file.csv"
    
    print("Connecting to Veza")
    try:
        veza_con = OAAClient(veza_url, veza_api_key)
    except OAAClientError as e:
        print("Error connecting to Veza tenant")
        print(e)
        sys.exit(1)
    
    print("Loading CSV file")
    with open(source_csv, "rb") as f:
        encoded_csv = base64.b64encode(f.read())
    
    print("Pushing data to Veza")
    try:
        push_request = {"id": provider_id, "data_source_id": data_source_id, "csv_data": encoded_csv.decode()}
        veza_con.api_post(f"/api/v1/providers/custom/{provider_id}/datasources/{data_source_id}:push_csv", push_request)
        print("Push succeeded")
    except OAAClientError as e:
        log.error(f"{e.error}: {e.message} ({e.status_code})")
        if hasattr(e, "details"):
            for d in e.details:
                log.error(d)
        sys.exit(3)
    Retrieving IDs from Datasources details view

    CSV Transformations

    How to use transformations to format data during CSV upload

    When mapping CSV columns to Veza attributes, you can apply transformations to format, combine, or convert data during import. This enables data standardization without requiring modifications to source CSV files.

    Transformations are useful for:

    • Combining columns into a single attribute (e.g., display name from first and surname)

    • Reformatting dates or times to match expected formats

    • Standardizing case (uppercase, lowercase, title case)

    • Padding numbers to fixed widths, trimming whitespace or removing characters

    hashtag
    Using transformations

    To apply a transformation, enter a formatter expression in the Value field when mapping a CSV column.

    Formatter expressions use curly braces to reference column names. The pipe character (|) can chain transformation functions.

    circle-exclamation

    Column name format: When referencing CSV columns in transformers, use all lowercase with underscores replacing spaces. For example, a column named "User Name" becomes {user_name} in the transformer.

    hashtag
    Examples

    hashtag
    Combine two columns

    To combine first_name and last_name columns into a full name:

    hashtag
    Append a static string

    To generate an email address from the username column:

    hashtag
    Zero-pad a number

    To ensure an employee ID is always 8 characters with leading zeros:

    hashtag
    Supported transformers

    The following transformation functions are available for CSV imports:

    Category
    Functions

    For function documentation including parameters and syntax, see the . While reference examples use Lifecycle Management terminology, syntax is the same for CSV transformations.

    circle-info

    Some functions are only available in Lifecycle Management policies. For CSV imports, only the transformers listed in the earlier table are supported. Functions like APPEND, PREPEND, NEXT_NUMBER, LOOKUP, FROM_ENTITY_ATTRIBUTE, TITLE_CASE, SENTENCE_CASE, and generators (RANDOM_*

    hashtag
    Related topics

    • : CSV integration guide

    • : All transformation functions

    CSV Upload Examples

    Common patterns for importing identity and permissions metadata from CSV files

    This document provides practical examples for mapping data from CSV files into Veza using the integration.

    You can use the CSV integration to flexibly model user, group, and role relationships based on data exported from the source application. This document includes examples from basic user data import to modeling more complex organizational structures, which you can adapt based on your needs.

    Date/Time

    DATE_FORMAT, DATE_ADJUST, DATE_ADJUST_DAY, ASSUME_TIME_ZONE, UTC_TO_TIME_ZONE

    Encoding

    ASCII, REMOVE_DIACRITICS

    Standardization

    PHONE_NUMBER_E164, LANGUAGE_RFC5646, COUNTRY_CODE_ISO3166, REMOVE_DOMAIN

    ,
    UUID_GENERATOR
    ,
    NOW
    ) require policy context that does not exist during CSV import.

    Case

    LOWER, UPPER, LOWER_SNAKE_CASE, UPPER_SNAKE_CASE, LOWER_CAMEL_CASE, UPPER_CAMEL_CASE

    Trimming & Removal

    TRIM, TRIM_CHARS, TRIM_CHARS_LEFT, TRIM_CHARS_RIGHT, REMOVE_CHARS, REMOVE_WHITESPACE, REPLACE_ALL

    Substring

    FIRST_N, LAST_N, SUB_STRING, SPLIT

    Padding

    Transformer Reference
    CSV Upload
    Transformer Reference
    CSV Mapping Interface with transformation options

    LEFT_PAD, RIGHT_PAD, ZERO_PAD

    {first_name} {last_name}
    {username}@example.com
    {employee_id | ZERO_PAD, 8}
    Mapping Concepts
  • Basic User Mapping Example

  • Group and Role Assignment Methods

    • Method 1: Using List Columns

    • Method 2: Using Multiple Rows Per User

  • Advanced Role Permissions

  • Real-World Example: Complex Organization Structure

  • Supported Timestamp Formats

  • Boolean Value Handling

  • Custom Properties Example

  • Entity Owner Example

  • hashtag
    Mapping Concepts

    When importing CSV data into Veza, you are typically establishing one or more of these key components:

    1. Entities: Users, groups, and roles that exist in your application

    2. Attributes: Properties that describe each entity (e.g., name, email, status)

    3. Relationships: Connections between entities (user belongs to group, user has role)

    4. Permissions: Actions that roles allow users to perform

    The examples below demonstrate different approaches to mapping these components from CSV data into Veza's Access Graph.

    hashtag
    Basic User Mapping Example

    For a simple file containing user records, one user per row with a list or groups and roles. You can map columns directly:

    CSV Column
    Entity Type
    Veza Attribute
    Required?

    employee_id

    local_user

    id

    Yes

    display_name

    local_user

    Example CSV:

    Your CSV files may have column names that differ from Veza's standard attribute names.

    CSV Column
    Entity Type
    Suggested Mapping

    departments, department_names, teams

    local_group

    name list

    job_titles, positions, roles_assigned

    local_role

    name list

    hashtag
    Group and Role Assignment Methods

    The CSV integration supports two methods for assigning users to groups and roles:

    hashtag
    Method 1: Using List Columns

    Use a single column containing comma-separated values to assign a user to multiple groups or roles at once.

    Column mapping:

    CSV Column
    Entity Type
    Veza Attribute

    user_id

    local_user

    id

    groups

    local_group

    name list

    Example CSV:

    Key points about list columns:

    • Values must be comma-separated

    • Enclose lists in quotes if they contain commas

    • Whitespace around values is automatically trimmed

    • Empty values are ignored

    • Veza automatically creates any groups or roles that don't already exist

    • Additional properties on Groups and Roles is not supported

    hashtag
    Method 2: Using Multiple Rows Per User

    You can incrementally assign roles or groups using multiple rows with the same user id. This approach is useful when:

    • You have many groups or roles per user

    • Your source system exports data in this format

    • You need to include additional details for roles or groups such as custom properties

    Example CSV:

    Key points about multiple row assignments:

    • The first occurrence of an entity id sets all properties for that entity. If the same user or role is listed more than once, the user or role attributes are not updated for rows after the first.

    • Subsequent rows only process new group and role assignments

    hashtag
    Advanced Role Permissions

    The CSV can include a column with a list of permissions for each role. This enables searching and filtering by permission in Veza:

    You can assign permissions to roles and then users to roles:

    Note: If permissions column is not defined any Roles are automatically assigned the Member permission

    hashtag
    Real-World Example: Complex Organization Structure

    This example shows how to represent a complex organizational structure with departments, teams, roles with permissions, and user assignments:

    Column mapping for this example:

    CSV Column
    Entity Type
    Veza Attribute

    user_id

    local_user

    id

    display_name

    local_user

    name

    This example CSV will create:

    • 7 user entities with their properties

    • Department groups (Engineering, Product, Marketing, Finance, HR, Sales)

    • Team groups (Backend, Architecture, Frontend, Product Management, UX Research, Content, Social, Accounting, Recruiting, Enterprise Sales)

    • Multiple role assignments per user

    • Role permission assignments for different functional areas

    hashtag
    Supported Timestamp Formats

    The CSV integration supports various timestamp formats:

    Timestamps are considered unset when the value is never, null, none, false, or 0. Invalid timestamps will result in a processing error.

    hashtag
    Boolean Value Handling

    When mapping to boolean attributes like is_active:

    • TRUE values: true, t, yes, y, 1, active, enabled

    • FALSE values: Any other value including false, f, no, n, 0, inactive, disabled

    chevron-rightExample CSV:hashtag

    hashtag
    Custom Properties Example

    Any column can be mapped to a custom property for any entity type. When mapping to a custom property:

    1. Select Custom Property as the attribute

    2. Enter a name for the custom property

    3. Select the data type (String, Number, Boolean, Timestamp, or String List)

    chevron-rightExample CSV:hashtag

    hashtag
    Entity Owner Example

    Designated Entity Owners can up supplied for supported Application entity types as part of the CSV. This allows for automatically assigning the owner from the value in the CSV.

    This example indicates the owner of the Role and could be used auto-assign Access Review rows to the owner for each role.

    chevron-rightExample CSV:hashtag
    CSV Column
    Entity Type
    Suggested Mapping

    user_id

    local_user

    Id

    user_name

    local_user

    Name

    Note that when a Global Identity Provider is configured, Owner Type is optional. Otherwise, the owner type is used to specify the type of entity in Veza Graph that will be assigned as an owner. This will typically be a User entity in your organization's Identity Provider (such as an Okta, Azure AD User, or Active Directory User), representing a top-level human identity.

    For more information about Entity Owners, see:

    • Entity Owners for Access Reviews

    • OAA Core Concepts: Entity Owners

    CSV Upload
    CSV Upload Examples
    user_id,name,email,active
    B001,Boolean Example 1,[email protected],true
    B002,Boolean Example 2,[email protected],t
    B003,Boolean Example 3,[email protected],yes
    B004,Boolean Example 4,[email protected],y
    B005,Boolean Example 5,[email protected],1
    B006,Boolean Example 6,[email protected],active
    B007,Boolean Example 7,[email protected],enabled
    B008,Boolean Example 8,[email protected],false
    B009,Boolean Example 9,[email protected],f
    B010,Boolean Example 10,[email protected],no
    B011,Boolean Example 11,[email protected],n
    B012,Boolean Example 12,[email protected],0
    B013,Boolean Example 13,[email protected],inactive
    B014,Boolean Example 14,[email protected],disabled
    user_id,name,email,active,department,title,office_location,hire_date,employee_type,salary_band,performance_rating,certification,languages,project_ids,manager_id,emergency_contact
    CP001,Custom Property Example 1,[email protected],true,Engineering,Senior Developer,New York,2023-01-15,Full-time,B4,Exceeds Expectations,"AWS Certified, Azure Expert","Java, Python, Go","PROJ-001, PROJ-002",MGR-101,John Smith (555-123-4567)
    CP002,Custom Property Example 2,[email protected],true,Marketing,Marketing Manager,San Francisco,2022-05-10,Full-time,C2,Meets Expectations,Google Analytics,"English, Spanish",PROJ-003,MGR-102,Mary Johnson (555-987-6543)
    CP003,Custom Property Example 3,[email protected],false,Finance,Financial Analyst,Chicago,2023-08-22,Contract,A3,Needs Improvement,CPA,"English, French","PROJ-004, PROJ-005, PROJ-006",MGR-103,Robert Davis (555-456-7890)
    user_id,user_name,role_name,role_owner,role_owner_type
    10001,bob,admin,[email protected],,oktauser
    10002,sue,admin,[email protected],oktauser
    10003,marry,user,[email protected],oktauser
    10004,jane,user,[email protected],oktauser
    10005,sam,viewer,[email protected],oktauser
    10006,adam,viewer,[email protected],oktauser
    10007,brett,ops,[email protected],oktauser
    10008,robert,ops,[email protected],oktauser
    10009,chris,manager,,
    10010,nick,manager,,
    employee_id,display_name,email_address,account_status,join_date,last_access,password_updated,termination_date,groups,roles
    EMP001,Alex Johnson,[email protected],active,2023-04-15,2025-02-15T09:30:45Z,2024-11-10T08:15:30Z,,"Engineering, DevOps","Developer, System Administrator"
    EMP002,Taylor Smith,[email protected],true,2022-09-20,2025-03-01T11:45:20Z,2024-10-05T14:30:15Z,,"Product, UX Research","Product Manager, UX Designer"
    EMP003,Jordan Lee,[email protected],inactive,2021-11-05,2024-10-10T16:20:30Z,2024-06-15T09:45:10Z,2025-01-15,"Marketing, Content","Content Creator, Social Media Manager"
    EMP004,Casey Morgan,[email protected],1,2023-08-22,2025-02-28T15:10:25Z,2024-12-20T10:30:45Z,,"Finance, Accounting","Financial Analyst, Auditor"
    EMP005,Riley Brown,[email protected],0,2022-03-10,2024-11-15T08:45:30Z,2024-08-05T11:20:15Z,2024-12-31,"HR, Recruiting","HR Specialist, Talent Acquisition"
    user_id,groups,roles
    user1,"Engineering, QA Team, Product Team","Software Engineer, Technical Lead"
    user2,Marketing,"Content Writer, Editor"
    user3,Finance,"Accountant, Auditor"
    user4,HR,HR Specialist
    user5,"Support, Training",Customer Support Representative
    user_id,name,email,active,group,role,role_description
    user1,Alice Smith,[email protected],true,Engineering,Software Engineer,Core development role
    user1,Alice Smith,[email protected],true,QA Team,Technical Lead,Testing oversight role
    user1,Alice Smith,[email protected],true,Product Team,Technical Lead,Product development leadership
    user2,Bob Johnson,[email protected],false,Marketing,Content Writer,Content creation role
    user2,Bob Johnson,[email protected],false,Marketing,Editor,Content review role
    user_id,name,email,is_active,groups,role,permissions
    USR001,Alex Johnson,[email protected],true,"Dev Team",Developer,"view_code, edit_code"
    USR001,Alex Johnson,[email protected],true,"Backend Group",Code Reviewer,"approve_pull_requests"
    USR002,Taylor Smith,[email protected],yes,"Ops Team",System Administrator,"manage_infrastructure"
    USR002,Taylor Smith,[email protected],yes,"Cloud Admin",Release Manager,"deploy_production"
    USR003,Jordan Lee,[email protected],1,"Product Team",Product Owner,"create_requirements"
    USR003,Jordan Lee,[email protected],1,"Analytics Users",Data Analyst,"view_analytics"
    user_id,display_name,email,active,department,team,job_title,role,role_permissions
    emp101,John Smith,[email protected],true,Engineering,Backend,"Senior Developer","Developer Lead","read_all,write_backend,deploy_backend"
    emp101,John Smith,[email protected],true,Engineering,Architecture,"Senior Developer","Architecture Committee","approve_designs,modify_architecture"
    emp102,Jane Doe,[email protected],true,Engineering,Frontend,"UI Developer","Frontend Developer","read_all,write_frontend,deploy_frontend"
    emp103,Robert Johnson,[email protected],true,Product,"Product Management","Product Owner","Product Manager","read_all,create_requirements,approve_features"
    emp103,Robert Johnson,[email protected],true,Product,"UX Research","Product Owner","User Researcher","conduct_research,analyze_results"
    emp104,Maria Garcia,[email protected],true,Marketing,Content,"Marketing Specialist","Content Creator","read_marketing,write_content"
    emp104,Maria Garcia,[email protected],true,Marketing,Social,"Marketing Specialist","Social Media Manager","post_social,analyze_metrics"
    emp105,David Lee,[email protected],true,Finance,Accounting,"Finance Manager","Financial Controller","approve_expenses,manage_budgets,generate_reports"
    emp106,Sarah Wilson,[email protected],true,HR,Recruiting,"HR Specialist","Recruiter","post_jobs,review_applications,conduct_interviews"
    emp107,Michael Brown,[email protected],true,Sales,"Enterprise Sales","Sales Executive","Account Manager","manage_clients,create_proposals,close_deals"
    user_id,name,email,active,created_at,last_login_at,password_last_changed_at,deactivated_at
    TS001,Timestamp Example 1,[email protected],true,2023-04-12T15:34:56.123456789Z,2006-01-02T15:04:05Z07:00,20060102150405,
    TS002,Timestamp Example 2,[email protected],true,2006-01-30 15:04:05Z07:00,2006-01-30 15:04:05,2006-01-30,2006-01-30T
    TS003,Timestamp Example 3,[email protected],true,2006-01-30T15:04:05,2006-01-30T15:04:05Z,never,null
    TS004,Timestamp Example 4,[email protected],false,2024-03-15,none,false,0
    TS005,Timestamp Example 5,[email protected],true,1/2/2006,1/15/2023,11/22/2024,

    name

    No

    email_address

    local_user

    email

    No

    account_status

    local_user

    is_active

    No

    join_date

    local_user

    created_at

    No

    last_access

    local_user

    last_login_at

    No

    password_updated

    local_user

    password_last_changed_at

    No

    termination_date

    local_user

    deactivated_at

    No

    groups

    local_group

    name list

    No

    roles

    local_role

    name list

    No

    permissions, access_rights

    local_role

    permissions list

    roles

    local_role

    name list

    email

    local_user

    email

    active

    local_user

    is_active

    department

    local_group

    name

    team

    local_group

    name

    job_title

    local_user

    custom property (String)

    role

    local_role

    name

    role_permissions

    local_role

    permissions list

    role_name

    local_role

    Name

    role_owner

    local_role

    Owner Id

    role_owner_type

    local_role

    Owner Type

    CSV Upload

    Import identity and authorization data from CSV files into Veza

    hashtag
    Overview

    Use CSV Upload to integrate identity and authorization metadata from sources that don't have built-in Veza connectors, but can export or provide data in tabular format.

    You can create a CSV integration in Veza to:

    • Import user and authorization data from legacy or custom applications

    • Integrate with SaaS applications that support CSV exports

    • Model employee access to homegrown or specialized systems

    • Upload employee metadata from your HRIS as a source of identity for Lifecycle Management workflows

    The integration uses the Open Authorization API (OAA) to map CSV data to supported OAA templates:

    • Application - Models Users, Groups, Roles, and Resources across applications for a wide variety of authorization use cases. An introduction to the Application Template .

    • Human Resource Information Systems (HRIS) - Models employee information from HR sources for use with Lifecycle Management (LCM).

    Application Template - Use Custom Applications to model business applications and access permissions:

    • Models Users, Groups, Roles, and Resources across applications

    • For example, you can upload user permissions from a homegrown CRM system, data store, or any other application users can access.

    HRIS Template - Use for employee data from HR systems

    • Models employee information and organizational structure

    • For example, you can upload employee data for manager-based Access Reviews and automated provisioning with Lifecycle Management.

    circle-info

    Which template should I choose? If your CSV contains information about who can access what resources, choose Application. If it contains employee information like departments and managers, choose HRIS.

    triangle-exclamation

    Warning: Mapping Employment Status Properties with HRIS CSV

    When manually mapping your HRIS CSV, use only one of the following two fields: is_active or employment_status to avoid misleading data on employment type.

    hashtag
    When to Use CSV Integration

    CSV integration is ideal for systems that export tabular data but lack dedicated Veza connectors:

    • Legacy applications with user permission exports

    • Custom business applications built in-house

    • HR systems for employee lifecycle management

    CSV import enables modeling identity and permissions metadata for any application not natively supported by Veza, with flexible column mapping, custom properties, and support for multiple data formats.

    hashtag
    Adding a CSV Integration

    hashtag
    Prerequisites

    To create an integration from CSV, you will need:

    • A CSV file containing relevant data with column headers

    • Sufficient permissions in Veza (Admin or OAA CSV Manager role)

    • Understanding of the data model for the source application

    For more information about user roles and permissions, see .

    hashtag
    Format Requirements

    CSV (Comma-Separated Values) is a widely used file format that stores tabular data in plain text. Each row represents a record or a relationship between entities (e.g., User to Role), and columns represent attributes.

    When importing from CSV:

    1. The first row must contain column headers

    2. Each column can be mapped to a specific Veza attribute or custom attribute

    3. Columns can be ignored after uploading the file

    circle-exclamation

    Column Header Case Sensitivity: Column headers must be unique regardless of case. While the mapping interface is case-sensitive and may allow you to map columns with similar names like "Email" and "email", the import process is case-insensitive and will fail if duplicate column names exist with different casing. Ensure all column headers have distinct names.

    hashtag
    Create a CSV Integration

    To create a new CSV integration:

    1. Go to Integrations > Add Integration

    2. Choose Upload CSV from the options

    3. Upload a logo for the provider (optional) - This will appear throughout the Veza UI, including in Graph search, to identify the integration and entity types.

    hashtag
    CSV Column Mapping

    The CSV integration allows you to map columns in your file to specific Veza attributes. After uploading the CSV, Veza automatically detects all columns and presents them for mapping.

    For each column, you can:

    1. Select to include or exclude the column

    2. Select the target entity type for mapping (available entities depend on the selected template)

    3. Select the specific entity attribute to map to (only attributes applicable to the selected entity type will be shown)

    Example: Mapping CSV columns to Application template entities and attributes

    For more examples and detailed mapping patterns, see .

    Additionally, you can apply to column data for more flexibility and additional formatting. Transformations can be used to:

    • Combine columns to form a single attribute (e.g., first_name and last_name into a display name)

    • Reformat data such as dates, times, and case (uppercase, lowercase)

    • Apply padding, trimming, and character replacement

    hashtag
    Supported Entity Types and Attributes

    For all entities, an ID or Name is required. If ID is not provided, Name is automatically used as the unique identifier for the entity. Both are also supported.

    The available entity types and attributes depend on the template you select. Each template supports different entity types.

    triangle-exclamation

    ⚠️ Warning: Mapping Properties with HRIS CSV

    When manually mapping your HRIS CSV, use only one of the following two fields: is_active or employment_status to avoid misleading data on employment type.

    Application Template Entities

    User Attributes

    Attribute
    Description

    Group Attributes

    Attribute
    Description

    Role Attributes

    Attribute
    Description

    HR System Template Entities

    Employee Attributes

    Attribute
    Description
    circle-exclamation

    Manager Field Case Sensitivity

    When mapping the Managers or manager_id field in HRIS CSV imports, ensure that manager ID values are in lowercase. The system compares employee unique IDs to the lowercase value of the manager attribute when building manager relationships.

    hashtag
    Data Type Handling

    hashtag
    Boolean Values

    The following values are treated as TRUE (case-insensitive):

    • true, t

    • yes, y

    Any other value is treated as FALSE.

    hashtag
    Timestamp Formats

    Veza supports multiple timestamp formats:

    • 2023-04-12T15:34:56.123456789Z (RFC3339 with nanoseconds)

    • 2006-01-02T15:04:05Z07:00 (RFC3339)

    • 20060102150405 (Active Directory format)

    Timestamps are considered unset when the value is never, null, none, false, 0 or empty. Invalid timestamps will result in a processing error.

    hashtag
    String Lists

    For attributes that support lists (like Role Name List, and Group Name List), values should be comma-separated within the cell and the list enclosude by quotes ".

    hashtag
    Updating a CSV Integration

    Incremental updates are not supported; you must submit the complete data set for each update.

    triangle-exclamation

    ⚠️ Warning: Configuration Updates

    When updating the configuration fields or mappings for an existing CSV integration, changes are not reflected until after the next CSV Upload is processed. For example when updating the HRIS Type field, changing this field alone and saving the integration will not immediately change the type Veza system. Then new type will not be availble in graph or in other features such as Lifecycle Management (LCM) until after the next upload is processed.

    Required Process for changing configurations:

    hashtag
    Push new data for an existing integration

    1. Find the CSV integration on the Veza Integrations page

    2. Click on the integration name to view details

    3. Under Data Sources, click Upload CSV

    hashtag
    Update mappings for an integration

    1. Find the CSV integration on the Veza Integrations page

    2. Click on the integration name to view details

    3. Click Edit

    hashtag
    CSV Manager Role

    Veza provides a limited privilege "CSV Manager" role for users that need permission to manage a CSV integration, but should not have access to other functionality in Veza.

    circle-exclamation

    Early Access Feature: The CSV Manager role is currently in early access and must be enabled by Veza support before it can be assigned to users. Contact your Customer Success Manager or submit a support request to enable this role.

    Users with this role can:

    • Create new CSV integrations

    • Upload new CSV data

    • Edit existing CSV integrations, including delete

    This role can be combined with to further limit a user's scope. When a user with the CSV manager role is added to a non-root team, they can only manage CSV integrations assigned to their team.

    hashtag
    Processing Rules

    • Multiple Rows per Entity: If the same entity (user, group, or role) appears in multiple rows, Veza processes them as follows:

      • Properties are set based on the first row where the entity ID (or Name if it is being used as the unique ID) appears

      • For subsequent rows with the same identifier, only relationship assignments are processed (for example user to group, or user to role)

    hashtag
    Related Documentation

    Specialized industry tools without native APIs
    A plan for mapping between CSV columns and Veza attributes
    At minimum, you must map columns for unique identifiers (such as user ID or Name) for each entity type you plan to import (e.g., Users, Groups, Roles, or Employees).
    Enter an integration name
    • Use a title that uniquely identifies this integration source

    • Avoid generic terms like "application" or "CSV"

    • If you have multiple environments, consider including that in the name

  • Select a data source template (currently supports Application and HR Systems)

  • Enter template-specific information (fields will vary based on the selected template):

    For Application Template:

    • Name: A unique identifying name for this specific application instance (e.g., "Marketing CRM - Prod", "HR Portal - Dev").

    • Type: The general category or system type (e.g., "CRM", "DevOps Tool"). In Veza, the type appears as a prefix on entity names, e.g., CRM User, DevOps Tool Role.

    For HR System Template:

    • Name: A unique identifying name for the HR system (e.g., "Workday - Production", "HR Portal - Dev")

    • Type: The type of HR system (e.g., "HRIS", "ATS", "Benefits")

    • URL: The URL of the HR system

    Note: Naming is critical for easy search in Veza. For Applications, the Type enables searching for all entities of that category, while the Name differentiates between multiple instances of the same system type.

  • Upload the CSV file - Veza will read the column headers and show them for mapping

  • Map your columns to Veza attributes (see Column Mapping section)

  • Click Create Integration to trigger extraction and parsing

  • For custom properties, specify a name and data type
  • Mark the row value as required. If a column mapping is marked required the CSV upload will be rejected if any row is missing a value in that column.

  • Insert static values

    Last Login At

    Timestamp of the user's last login

    Deactivated At

    Timestamp when the user was deactivated

    Password Last Changed At

    Timestamp of the last password change

    Email

    User's email address

    Custom Properties

    Map any column to a custom user property (type varies)

    Owner ID

    Entity Owner ID to assign

    Owner Type

    User node type for Entity Owner(s)

    Owner ID

    Entity Owner ID to assign

    Owner Type

    User node type for Entity Owner(s)

    Owner ID

    Entity Owner ID to assign

    Owner Type

    User node type for Entity Owner(s)

    First Name

    Employee's first name

    Last Name

    Employee's last name

    Preferred Name

    Employee's preferred name

    Display Full Name

    Complete display name

    Canonical Name

    Standardized name format

    Username

    Employee's username

    Email

    Primary email address

    IDP ID

    Identity Provider ID

    Personal Email

    Personal email address

    Home Location

    Employee's home location

    Work Location

    Employee's work location

    Cost Center

    Cost center assignment

    Department

    Employee's department

    Managers

    Employee's manager(s) (supports list format)

    Groups

    Group memberships (supports list format)

    Employment Status

    Current employment status

    Is Active

    Boolean indicating active employment

    Start Date

    Employment start date

    Termination Date

    Employment end date

    Job Title

    Employee's job title

    Employment Types

    Types of employment (supports list format)

    Primary Time Zone

    Employee's primary time zone

    Custom Properties

    Map any column to a custom employee property (type varies)

    For example, if an employee has
    employee_number: EMP001
    , the manager reference for their direct reports should use
    manager_id: emp001
    (lowercase), not
    EMP001
    .
    1
  • active

  • enabled

  • 2006-01-30 15:04:05Z07:00

  • 2006-01-30 15:04:05

  • 2006-01-30

  • 2006-01-30T

  • 2006-01-30T15:04:05

  • 2006-01-30T15:04:05Z

  • 1/2/2006 (MM/DD/YYYY format)

  • Update the configuration fields in the integration settings

  • Re-upload the complete CSV file to apply the changes

  • Allow the Veza platform to complete the extraction and parse process

  • Verify that entity names are consistent across all Veza components

  • Select your updated CSV file and click Upload
    In the integration configuration, click Edit above the table of current mappings
  • Modify your column mappings as needed

  • Click Save Configuration to apply the changes

  • Role permissions are the only properties that are additive across all rows

  • Ignored Columns: Columns that are not mapped (unchecked) are ignored during processing

  • Additional Columns: CSV files can contain more columns than are mapped - extra columns are ignored

  • Entity Identifiers: Every entity type (user, group, role) requires an ID or Name (or both). If only one is provided, the same value is used for both fields and must be unique.

  • Identity Mapping: When using the Application template, you can choose the column(s) used to connect external identities.

  • Understanding the Veza Access Graph
  • Automating CSV Upload

  • ID

    Unique identifier for the user

    Name

    Display name for the user

    Is Active

    Boolean indicating if the user is active

    Created At

    ID

    Unique identifier for the group

    Name

    Name of the group (supports list format)

    Created At

    Timestamp when the group was created

    Custom Properties

    ID

    Unique identifier for the role

    Name

    Name of the role (supports list format)

    Permissions

    Permissions assigned to the role (supports list format)

    Custom Properties

    ID

    Unique identifier for the employee

    Name

    Employee name (typically full name)

    Employee Number

    Alternative employee identifier

    Company

    can be found here
    Learn more about the Application Template
    Roles
    CSV Import Examples
    transformations
    Teams
    Open Authorization API (OAA) Templates
    Managing Teams and Permissions
    Creating Custom Dashboards
    CSV Mapping Interface with column selection and attribute mapping options

    Timestamp when the user was created

    Map any column to a custom group property (type varies)

    Map any column to a custom role property (type varies)

    Employee's company