Skip to content

Configure Data Sources

Under Settings → Data & Structure → Org Intelligence (/signals) you manage the data sources from which interaction signals are collected.

TypeData SourceRequired Credentials
msgraphMicrosoft Graph / Teams / ExchangeAzure Tenant ID, Client ID, Client Secret
confluenceAtlassian ConfluenceConfluence URL, Email, API Token
sharepointSharePoint OnlineAzure Tenant ID, Client ID, Client Secret + Site IDs
jiraJira / Jira Service ManagementJira URL, Email, API Token
csv_importAny CSV exportCSV content (paste directly or file path)
filesystemNetwork share / local syncDirectory path
icaliCalendar files (.ics)File URL or path
ldapLDAP / Active DirectoryLDAP URL, Bind DN, Password
chrome_crawlerIntranet web pages (headless Chrome)Optional login (username/password)

The system is openly extensible — new connector types can be added without UI changes.


Microsoft Graph / Teams / Exchange (msgraph)

Section titled “Microsoft Graph / Teams / Exchange (msgraph)”

Collects interaction signals from Microsoft 365 — Teams channels, calls, and Exchange calendar.

SignalMeaning
teams_channel_coactivityPeople active together in a Teams channel
teams_call_coparticipationParticipants of the same call
exchange_recurring_meetingOrganizer and attendees of recurring meetings
exchange_meeting_response_latencyResponse behavior to meeting invitations

You need an App Registration in Azure Entra ID with the following API permissions (Application permissions, not delegated):

  • Team.ReadBasic.All
  • CallRecords.Read.All
  • Calendars.Read
  • User.Read.All

Steps:

  1. Azure Portal → Entra ID → App Registrations → New registration
  2. Certificates & Secrets → Create new client secret
  3. API permissions → Add the above → Grant admin consent
  4. Enter Azure Tenant ID, Client ID, and Client Secret in roleALPHA
ParameterMeaningDefault
Max age (days)How far back to retrieve data90
Min interactionsMinimum count to keep an edgesee Scope of analysis
Auto-map personsLink email addresses directly to rA personsno
  • Only metadata is collected (no content, no audio/video data)
  • Graph API throttling is automatically handled with exponential backoff

Analyzes collaboration structure in Confluence wikis based on page edits and comments.

SignalMeaning
confluence_coauthorshipMultiple authors editing the same page
confluence_mentionComment authors connected to page authors
confluence_cross_space_linkLinks between different spaces
  1. Atlassian → My account → Security → Create API token
  2. Enter Confluence URL (e.g. https://company.atlassian.net), email address, and token in roleALPHA

The user needs read access to all spaces to be analyzed.

ParameterMeaningDefault
Max age (days)How far back version history is evaluated90
Min interactionsMinimum number of shared editssee Scope of analysis

Evaluates file changes on SharePoint sites and detects collaborative document work.

SignalMeaning
sharepoint_coauthorshipCreator and last editor of a file
sharepoint_site_coactivityUsers active on the same site

Same Azure App Registration as MS Graph (Client Credentials Flow), additional permission:

  • Sites.Read.All

Find Site IDs via: https://company.sharepoint.com/sites/SITENAME/_api/site/id

ParameterMeaningDefault
Site IDsComma-separated list of sites to evaluate—
Max age (days)File changes within this period90
Min interactionsMinimum number of shared editssee Scope of analysis
  • sharepoint_site_coactivity requires SharePoint Analytics, not included in all licenses
  • Without site analytics, only sharepoint_coauthorship signals are generated

Detects collaboration from issue assignments, updates, and comments.

SignalMeaning
jira_co_assigneeReporter and assignee of the same ticket
jira_cocommentAll pairs of people who commented on the same ticket
  1. Atlassian → My account → Security → Create API token
  2. Enter Jira URL (e.g. https://company.atlassian.net), email address, and token in roleALPHA
ParameterMeaningDefault
Project keysRestrict to specific projects (empty = all)all
Max age (days)Tickets within this period (by last update)90
Min interactionsMinimum shared activitiessee Scope of analysis

The fastest entry point without API access — any interaction data from a CSV file.

Any interactions: the signal type is freely configurable (default: csv_interaction).

fromPerson,toPerson,count
alice@company.com,bob@company.com,12
carol@company.com,alice@company.com,7
  • fromPerson / toPerson: External IDs (email, name, any identifier)
  • count: Optional — interaction count (default: 1 per row)
  • Column names are freely configurable
ParameterMeaningDefault
From columnColumn name for the source actorfromPerson
To columnColumn name for the target actortoPerson
Count columnColumn name for interaction count (optional)—
Signal typeLabel for this signal sourcecsv_interaction
  • CSV content can be pasted directly into the text field or given as a server file path
  • Identical pairs across multiple rows are automatically summed
  • Ideal for initial data import or one-time analyses

Reads Office documents from a local or network path and extracts co-authors from metadata.

SignalMeaning
filesystem_coauthorshipCreator and last editor of a document

.docx, .xlsx, .pptx (OOXML format — metadata from core.xml)

ParameterMeaningDefault
PathDirectory scanned recursively—
File extensionsFiltered formats.docx, .xlsx, .pptx
Max age (days)Files by modification date90
Min interactionsMinimum co-authorshipssee Scope of analysis
  • The server must have read access to the specified path
  • Only metadata is evaluated (no document content)
  • Creator and last editor must be different people — pure self-edits are ignored
  • Network shares only work if the ra-signals service has the path mounted

Evaluates calendar files in iCalendar format and identifies shared meeting participants.

SignalMeaning
ical_coapplicantAll attendees and organizers of the same event
ParameterMeaningDefault
Calendar URLHTTP(S) URL to the .ics file—
Calendar pathAlternative server file path—
Max age (days)Events within this period90
Min interactionsMinimum shared eventssee Scope of analysis
  • Either URL or path must be provided
  • Supports public calendar URLs (e.g. shared Outlook calendars) and local .ics exports
  • Creates connections between all participants of all captured events

Derives collaboration signals from group memberships — who is in which groups?

SignalMeaning
ldap_group_coactivityAll members of the same LDAP group

A read-only bind user is sufficient. Required:

  • ldap:// or ldaps:// URL (e.g. ldap://dc.company.com:389)
  • Bind DN (e.g. cn=readonly,dc=company,dc=com)
  • Bind password
ParameterMeaningDefault
Search baseBase DN for group search—
Group filterLDAP filter for groups(objectClass=group)
Max age (days)(used for threshold)90
Min interactionsMinimum shared groupssee Scope of analysis
  • Supports member, uniqueMember, and memberUid attributes
  • Connection is closed immediately after retrieval
  • For very large directories (>10,000 groups) a narrower search base is recommended

Crawls internal web pages (intranet, wikis, web apps) via headless Chrome and extracts mention and co-authorship signals.

Special note: The crawler runs as a CLI tool on the client machine — not as a server process. Data is sent to roleALPHA via API after crawling. This source entry documents the start URLs and configuration as a reference.

SignalMeaning
web_cocitationTwo people mentioned on the same page
web_person_entityPerson and entity (role, value stream, OKR …) on the same page
web_entity_cooccurrenceTwo entities mentioned together
web_coauthorshipDetected co-authors of a page
web_cocommentComments from multiple people on a page
  • Google Chrome on the executing machine (auto-detected)
  • Node.js + tsx to run the CLI
  • Network access to start URLs
  • No root privileges required
Terminal window
tsx services/ra-signals/chrome-crawler/index.ts \
--url https://wiki.internal/home \
--pattern "https://wiki\\.internal/.*" \
--depth 3 \
--max-pages 100 \
--endpoint https://ra.example.com \
--token <jwt-token> \
--tenant <tenant-uuid>
ParameterMeaningDefault
--urlStart URL(s) — can be specified multiple times—
--patternRegex to scope the crawl areaPrefix of first URL
--depthMax crawl depth3
--max-pagesSafety limit on pages100
--endpointroleALPHA URL—
--tokenJWT token (from Settings → Personal → Profile)—
--tenantTenant UUID—
--login-urlLogin form URL (optional)—
--login-userUsername for login—
--login-passPassword for login—
--author-selectorCSS selector for author elements—
--chrome-pathPath to Chrome binaryauto-detected
[ 1/100] https://wiki.internal/home — 3 entities found (Alice Müller, Value stream X, OKR Y)
[ 2/100] https://wiki.internal/team-a — 5 entities found
...
✔ Ingest successful: 234 edges, 18 actors

Every discovered connection carries the concrete source URLs. These appear in the Org Intelligence Reports gap analysis as clickable links — making every insight fully traceable.


  1. Click New Source.
  2. Select the collector type from the dropdown.
  3. Fill in the credentials and configuration (the form adapts dynamically to the type).
  4. Enable Automatic collection for hourly scheduled runs.
  5. Save.

Troubleshooting: collector type list is empty

Section titled “Troubleshooting: collector type list is empty”

If the collector type dropdown stays empty (and existing sources are not shown either), the Org Intelligence service (ra-signals) is not switched on, unreachable or not yet rolled out for this tenant.

In that case the dialog shows an explicit notice instead of an empty selection. Resolution:

  1. The Org Intelligence data node (ra-signals) must be switched on under Settings › Data Nodes (Data Nodes) — the tenant admin does that themselves.
  2. By the platform admin: the ra-signals service must be running on the tenant’s deployment target. If the service was added later, use the Re-Sync button on the deployment target in Platform Admin — it triggers a fresh rollout (the service starts, routes are set up, and it registers in the service registry).

Troubleshooting: a source reports an error and “Last collected” stays empty

Section titled “Troubleshooting: a source reports an error and “Last collected” stays empty”

If an enabled source shows an error and the “Last collected” timestamp stays empty, the collect run started but failed while writing. The error is shown on the source; the analyses (org gaps, signal reports) stay empty because no edges arrive.

Important to understand: an empty analysis here does not mean “no signals”, it means “nothing ingested”. So always check the error on the source first, before concluding from an empty report that there is no collaboration.

The service repairs the most common cause itself: if the uniqueness index that ingestion relies on is missing, ra-signals creates it on the next run (removing duplicate edges from the existing data first). If the error persists after that, the database role most likely lacks the permission to create an index — then the platform admin can help.

All sensitive fields (passwords, API tokens, client secrets) are stored AES-256-GCM encrypted and never returned in the API.

  • Heart icon: Tests the connection to the external API without collecting data.
  • Play icon: Starts an immediate collect run (runs in the background).
ParameterMeaningDefault
Max age (days)How far back interactions are collected90
Min interactionsThreshold: edges with fewer interactions are discardedsee Scope of analysis

Enabled sources are collected hourly automatically. The “Last collected” timestamp shows the last successful run.