Skip to main content
This workshop decides how each structured export (HR, CRM, project and finance systems) becomes nodes and relationships in the graph. For every column you agree which entity type and attribute it fills, which column identifies the record, and which columns connect one record to another. Structured data is usually the most trusted source a firm has. If it is mapped well, it becomes the backbone that every document attaches to. If it is mapped badly, you get duplicate people, orphan projects and answers that miss half the facts. The result is a data mapping per export, plus an agreed load order.

At a glance

Before the workshop

FFE and Experio SMEs
  • Check the ontology is saved and has every entity type the exports will fill. A mapping is tied to one ontology.
  • Open each export and fill in a first draft of the worksheet below. The room corrects a draft much faster than it writes one from scratch.
  • Flag every column whose values must line up with another file (client names, emails, project codes). These are the columns the workshop is really about.
  • Try Auto-Map with AI on each header row (see Accelerate with AI) and bring its suggestions as a starting point.
Client homework (data owners)
  • Send a sample export with the exact header row the scheduled export will use. Column names that change later break the mapping.
  • Say which column is the system’s own unique ID, and which column records when a row was last changed.
  • Say how the export will be delivered: a file dropped in a Box, Google Drive, SharePoint or Dropbox folder, a manual upload, or a REST API. Experio has no direct database connector. Database data arrives as an export file or through an API.

Agenda

Running the workshop

1

Walk every column

Put the header row and three real rows on screen. For each column ask:
  • “What is this, in your words?”
  • “Which thing in our model does it describe?” (entity type)
  • “Which property of that thing is it?” (attribute)
  • “Does anyone ever ask a question that needs this column?” If nobody does, leave it out. Unmapped columns are ignored.
2

Pick the match key for each entity type

Ask: “If this row arrives again tomorrow, which column tells us it is the same person, client or project?” That column becomes the match key. The match property defaults to name; choose something more stable when you have it (an email, a project code).
Structured matching is exact only. The match property is compared value for value. There is no fuzzy, vector, AI or human-review step for structured rows. “Lakeshore Health” and “Lakeshore Health, Inc.” are two different clients to a data mapping. Leading and trailing spaces are trimmed; treat everything else (case, punctuation, suffixes) as significant.
3

Find the relationship columns

Look for columns that point at another record: a client name on a project row, a manager’s email on an employee row, a project code on an assignment row. Each becomes a relationship mapping: relationship type, start entity (column and match property), end entity (column and match property).Then ask: “Does the thing at each end already exist when this file loads?” A relationship mapping never creates its endpoints. If no node has that exact key value, the relationship is skipped. Node mappings, in this file or an earlier one, must create both ends first.
4

Agree type and format

Experio converts each mapped value to the attribute’s type in the ontology (text, number, date, boolean, list, enum) when it writes to the graph. You do not set transforms per column, so the export has to arrive in a format that converts cleanly. Agree with the data owner:
  • Dates: ISO format (2024-03-04) or one agreed format. Ambiguous values such as 03/04/2024 need a decision.
  • Numbers: plain numbers (1250000). Test any value that has currency symbols or thousands separators before you rely on it.
  • Lists: one agreed delimiter or a JSON array for list attributes (for example, a list of certifications). Test with a few rows.
  • Enums: values must match the ontology’s allowed values exactly (won, not Closed Won).
5

Set up incremental sync

Ask: “Which column uniquely identifies a row in your system?” and “Which column changes when a row is edited?”
  • Record ID Column: the system’s own row ID. If you leave it empty, Experio generates a hash-based ID. A stable ID from the source system is more reliable.
  • Timestamp Column: a last-modified date, used to filter to changed rows on later syncs. Leave it empty to track by record ID only.
6

Check formats across files and against documents

For every key column ask: “Is this value written the same way in every other export, and in the documents?” Pull five client names from projects.csv and look them up in accounts.csv. Look up five project codes in status report titles. Anything that does not match exactly goes on the export-fixes list with an owner.
7

Nested JSON and API sources

For JSON files and REST APIs, fields inside objects are addressed with dot notation: account.owner.email. Ask IT which authentication the API uses (API key, bearer token, basic, or OAuth2) and how it pages results. They set these on the connection.

Load order

Because relationships never create their ends, the order in which files load matters. Load master data first, then the files that connect it, then documents. Rows are processed one at a time, in file order. That matters for relationships inside a single file. If employees.csv lists a report before their manager, the REPORTS_TO edge for that row finds no manager and is skipped. Ask HR to sort the export from the top of the hierarchy down, or load reporting lines as a separate small export after employees.

How structured and document data converge

A structured row and a document mention end up on the same node only when both use the same entity type and the same key or name.
  • Structured mappings create the node with its canonical key: Client Lakeshore Health, Project NB-2024-117, Employee robert.chen@northbridge.com.
  • On the artifact type, set document entities to Create or Match (runs matching and can add new nodes) or Match Only (updates an existing node and never creates one).
  • Document matching tolerates variants (fuzzy, synonyms, suffix removal). Structured matching does not. So the canonical form belongs in the structured file, and documents are matched onto it. That is covered in Workshop 7: Identity & Matching.

Worked example: Northbridge Consulting

Marcus Lee (super user) ran four short sessions: HR for Workday, Sales ops for Salesforce, and Finance/PMO for the two Deltek exports.

employees.csv (Workday)

assignments.csv (Deltek)

This file creates no nodes. Every row depends on an Employee and a Project that earlier files created. The session turned up two export fixes:
  • Deltek listed contractors who are not in Workday, so their assignments would be skipped. HR agreed to include active contractors in employees.csv.
  • Deltek wrote role titles two ways (“Engagement Lead”, “Engagement Mgr”). Finance/PMO standardised them, because golden question Q1 asks “who led each?” and the assistant’s Cypher instruction looks for the role Engagement Lead.

The other mappings

  • accounts.csv → Client (Create or Match on name, the canonical Salesforce name), with account_id and industry as attributes. Industry values match the Industry taxonomy.
  • projects.csv → Project (Create or Match on project_code), Project FOR_CLIENT Client (end matched on the client name column, which must equal accounts.csv exactly), Project DELIVERED_BY Practice.
  • opportunities.csv → Proposal outcome updates, matched on opportunity name. Optional; deferred to after the pilot.

Accelerate with AI

Auto-Map with AI is available in the mapping editor today. It reads the source columns (and sample values when you upload a CSV) and suggests node mappings (column → entity type and attribute) and relationship mappings against the mapping’s ontology.
  1. Open or create a mapping in Model & Define > Data Mapping and add the source fields, either by uploading a sample CSV or with Import from API. The button stays disabled until the mapping has source fields and an ontology.
  2. Click Auto-Map with AI. Choose a model and, if you want, add a user instruction, for example “Employees are matched on work email; practice is a separate Practice entity”.
  3. Click Generate. Review the node mapping and relationship mapping suggestions, clear the checkboxes for any you reject, and click Add mapping.
  4. Columns the AI did not map are listed separately. Map them by hand or leave them out on purpose.
Treat the output as a first draft for the workshop, not a result. The AI cannot know which column your data owner trusts as the key, or whether the client names match across files. Those are the decisions this workshop exists to make. Admin Copilot (⌘J) can also answer questions about mapping options from these docs while you work.

Entering it in Experio

1

Create the mapping

Model & Define > Data Mapping > Create New Mapping. Choose the ontology, then add source fields (upload a sample CSV, add fields by hand, or Import from API).
2

Add node mappings

For each column, choose the entity type and attribute. For the key column of each entity type, set the operation (Create Only, Match Only or Create or Match) and the match property.
3

Add relationship mappings

Choose the relationship type, the start and end entity types, and for each end the column and property used to find it. Add relationship attributes (such as role and hours).
4

Set incremental ingestion

In Incremental Ingestion, set the Record ID Column and the Timestamp Column. Save.
5

Connect the source and pick the mapping

Set up the connection in Connect > Connectors (file storage or an API connection), then create the structured data source in Connect > Data Sources and select the mapping definition.
6

Load in order and check

Run the scans in the agreed load order. Process > Flows can chain them so the order holds on every refresh. After each load, check node and relationship counts against the row counts in the file.
See Data Mapping and Data Sources for field-level detail. Mappings show a compatibility status against the ontology. An invalid mapping blocks its data source’s jobs until you fix it and re-validate.

Common pitfalls

  • Key values formatted differently across files. Lakeshore Health in one file and Lakeshore Health, Inc. in another gives two Client nodes. Structured matching will never join them.
  • Loading a connecting file before its master data. Assignments loaded before employees produce no edges, and nothing looks broken until someone asks a staffing question.
  • Expecting a relationship mapping to create missing people or projects. It never does. Missing ends are skipped.
  • Header rows that change between exports. A renamed column silently stops filling its attribute. Agree a fixed export layout with the data owner.
  • Mapping every column “just in case”. Unused attributes add noise to Cypher generation. Map what the golden questions need.
  • Names as keys when a code exists. Match on project_code and email whenever you can. Names change; codes rarely do.
  • Keys that don’t match what the documents say. If status reports cite NB-2024-117 but Deltek exports 2024117, documents set to Match Only will never find the project.

Exit criteria

  • A mapping worksheet exists for every structured export in the inventory, signed off by its data owner.
  • Each entity type has one agreed match key, with the same format in every file that uses it.
  • Every relationship mapping has both ends created by a node mapping earlier in the load order.
  • Record ID and timestamp columns are chosen for each export (or explicitly left empty).
  • Date, number, list and enum formats are agreed; export fixes have owners and dates.
  • The load order diagram is agreed and recorded.
  • Each mapping is saved in Model & Define > Data Mapping and shows a valid compatibility status.
  • A test load of the sample rows gives the expected node and relationship counts.

Next

Continue to Workshop 7: Identity & Matching to decide how document mentions are matched onto the nodes these mappings create.