Skip to main content
Bring any data source into Oleria, even without a native integration: an internal app, an HR system, or a database. You export your data as CSV files, upload them to an S3 bucket you control, and Oleria automatically reads, maps, and syncs the data on a recurring schedule.

What Oleria discovers

Oleria discovers whatever your CSV files contain and your config.yaml maps, including:
  • Accounts and identities - application users, service accounts, and IdP users.
  • Roles and groups - roles, permission sets, groups, and teams, plus which accounts belong to each.
  • People and HR data - person and employee records, departments, and managers.
  • Activity - audit log events, one row per event.

How it works

How the Custom Application integration works

Prerequisites

  • An Amazon S3 bucket in your AWS account where you will upload your data.
  • AWS IAM admin access to add a bucket policy to that S3 bucket.
  • Your application’s data exported as CSV files (comma-separated values with a header row).
Use a dedicated S3 bucket or a scoped prefix within your bucket for Oleria data to limit access to only what is needed.

Set up your S3 bucket

1

Create or identify your S3 bucket

Create or identify the S3 bucket you will use to share data with Oleria.
2

Organize your files

Organize your files inside the bucket using the following folder structure:S3 bucket folder structure
The config/ folder must contain exactly one .yaml file - Oleria discovers it automatically. The date-stamped folder under rawdata/ (for example, startedat=2026-04-17T00:00:00Z) tells Oleria which data is new. Each time you export fresh data, create a new folder with the current timestamp. Oleria always picks the most recent one. If your data does not change frequently, you can place your CSV subfolders directly inside rawdata/ without a date-stamped folder.

Prepare your CSV files

Your CSV files must have a header row. The column names in the header are what you reference in the config.yaml file. Column names can be anything - you map them to Oleria’s fields in the config. Example users.csv:
Example roles.csv:
Example user_roles.csv (membership - which user has which role):

Create your config.yaml

The config/config.yaml file maps your CSV columns to Oleria’s data model. Your Oleria Customer Success team can provide a starting config based on your data, or you can write it yourself using the format below.

What object types can I map to?

Entity objects - use these for things like users, roles, and groups: Relationship objects - connect two entities together. Always use the links shorthand for these:

source.s3 fields

These fields go inside source.s3 in your config.yaml. They tell Oleria how your S3 data is organized.
applicationaccount and identity - Application & IdP users
role - Roles & permission sets
usergroup - Groups & teams
person - HR person records
employee - HR employee records
department - Departments & org units
activity_analysis - Audit logs & events
application_instance - IdP-managed applications

Minimum viable example

The simplest possible config - application users and roles, with a membership relationship:

Full example (HR system)

This example models an HR export with employees, departments, and org hierarchy:
Complete sample data - each includes a ready-to-use config.yaml and matching CSV files. The config downloads as config.yaml.txt; save it as config.yaml in your bucket’s config/ folder: Keep the same folder layout when you upload a sample to your bucket: config/ for the YAML file and one subfolder per CSV under rawdata/.

Grant Oleria access to your S3 bucket

Oleria reads your data using a dedicated AWS IAM role. You need to add a bucket policy that allows this role to read your files.
Do not make your S3 bucket public. Oleria accesses your bucket securely using a private IAM role - no public access is required or recommended. Oleria only needs read-only access and will never write to, modify, or delete any files in your bucket. If this policy is not in place, your integration will appear connected in the UI but no data will be synced.
1

Get the Oleria IAM role ARN

Your Oleria Customer Success team will provide you with the exact IAM role ARN for your environment. The role follows this format:
2

Add a bucket policy

Go to your S3 bucket in the AWS Console -> Permissions tab -> Bucket policy -> Edit, and paste the following policy. Replace the placeholders with your values and select Save changes.
3

Update the KMS key policy (if applicable)

If your S3 bucket is encrypted with a customer-managed KMS key, update the KMS key policy. Go to AWS KMS -> select your key -> Key policy -> Edit, and add the following statement:
Without this KMS policy, Oleria will not be able to decrypt and read your files even if the bucket policy is correctly configured.

Connect your custom application to Oleria

1

Open the integration

Go to your Oleria workspace, select Integrations -> select Custom Application.Integrations page showing the Custom Application option
2

Complete the connection form

Fill in the connection form that appears:
  • Application Name - a label for this integration in Oleria. Use a name that describes your data source (for example, Internal HR app or Finance database).
  • S3 Data Path - the full S3 URL to the root folder of your data. This is the folder that contains your config/ and rawdata/ subfolders. Example: s3://your-bucket-name/your-prefix/ Connection form with Application Name and S3 Data Path fields
3

Authenticate

Select Authenticate. Oleria will verify it can reach your S3 bucket and read your configuration file.

Verify the integration

Confirm the Custom Application instance appears on the Connected tab of your Oleria Integrations page with a status of Healthy. After the first sync completes, you can review the discovered accounts, roles, groups, and activity in your Oleria workspace. Oleria syncs this integration on its regular sync schedule, and only processes data when new files are available. Connected Integrations section showing Custom Application as active

Troubleshooting

Oleria checks your bucket, configuration, and data folders when you select Authenticate. If something is wrong, Authenticate fails with one of these errors: If Authenticate succeeds but new data doesn’t appear, upload each fresh export to a new timestamped folder under rawdata/. When you use partition folders, Oleria reads the newest one.

Contact us

For questions about this integration, contact us at support@oleria.com.