> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getnovaplan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect your data

> Bring in people, GL, and revenue from your existing systems, end to end.

Novaplan plans on your real numbers, so the first step is connecting a source. Connectors live
in **Admin -> Data** and **Admin -> Integrations**. Every source lands a lossless raw record,
then a curation step moves it into clean people, GL, and revenue records that the planning
engines and reports read.

## Sources

<CardGroup cols={2}>
  <Card title="HiBob (HRIS)" icon="users" href="/admin/connectors/hibob">
    Syncs your people: roles, departments, sites, start and end dates, and comp. Powers
    headcount actuals and the snapshot your plan builds on.
  </Card>

  <Card title="NetSuite (GL)" icon="building-columns" href="/admin/connectors/netsuite">
    Brings in actuals from the general ledger so budget vs actual reconciles to the penny.
  </Card>

  <Card title="Salesforce / HubSpot (CRM)" icon="chart-line" href="/admin/connectors/salesforce">
    Feeds revenue pipeline and ARR events into the revenue model.
  </Card>

  <Card title="Snowflake" icon="snowflake" href="/admin/connectors/snowflake">
    Pulls actuals or pipeline directly from your warehouse on a query you define.
  </Card>

  <Card title="CSV upload" icon="file-csv" href="/admin/connectors/csv">
    The universal path. Upload people, GL, ARR, or pipeline and map columns to fields.
  </Card>
</CardGroup>

## How ingestion works

Every source follows the same four-stage path, so a feed behaves the same way whether it
arrives from a warehouse, a CRM, or a spreadsheet.

<Steps>
  <Step title="Connect">
    Authorize a connector or upload a file in Admin -> Data. Each source carries a system label
    (HiBob, NetSuite, Salesforce, HubSpot, Snowflake, CSV) so its rows stay traceable.
  </Step>

  <Step title="Map">
    Map source fields to Novaplan's canonical fields using a per-source field map. CRM stages,
    departments, accounts, and vendors reconcile to your canonical dimensions. Nova can suggest
    a mapping from your column headers, which you review and adjust before saving.
  </Step>

  <Step title="Curate">
    The raw payload is preserved exactly as received (the audit trail), then a single
    config-driven curation step per domain applies the field map and writes canonical records.
    Rows that fail validation are flagged individually with a reason, never silently dropped,
    and one bad row never aborts the rest of the batch.
  </Step>

  <Step title="Refresh">
    Curated actuals update headcount, GL, and revenue, which triggers downstream recalculation.
    Plans and reports stay current without a manual rebuild.
  </Step>
</Steps>

## Canonical fields by domain

Mapping always targets the same canonical shape per domain, regardless of source.

| Domain        | Canonical fields you map to                                                                                    |
| ------------- | -------------------------------------------------------------------------------------------------------------- |
| People (HRIS) | Employee ID, name, job title, department, site, start date, end date, employment status, comp                  |
| GL (ledger)   | Account, department, entity / vendor, period (month), amount, memo                                             |
| ARR actuals   | Account, event month, ARR delta, movement component (new, expansion, contraction, churn), customer count delta |
| Pipeline      | Account, stage, amount, expected close, owner, segment                                                         |

<Tip>
  Department, account, and vendor identity is resolved by ID, not by name, so an upstream rename
  never scrambles your hierarchy. See [Dimensions](/admin/dimensions) for how raw values map onto
  the canonical set.
</Tip>

## Error recovery

<AccordionGroup>
  <Accordion title="A few rows failed to curate" icon="triangle-exclamation">
    Open the source in [Pipelines](/admin/pipelines) to see the per-row error reason (an
    unmapped value, a bad date cast, or a missing required field). Fix the value at the source or
    add the missing mapping, then re-run curation. The raw payload is retained, so re-running
    reprocesses without re-uploading.
  </Accordion>

  <Accordion title="I mapped a column wrong" icon="arrows-rotate">
    Curation is idempotent: it replaces the prior rows from the same source batch rather than
    appending. Correct the field map and re-run, and the canonical records are rewritten cleanly.
  </Accordion>

  <Accordion title="I need to undo an ingestion" icon="rotate-left">
    An ingestion batch can be reverted, which removes the canonical rows it produced while
    keeping the lossless raw record for reference.
  </Accordion>
</AccordionGroup>

<Note>
  Each Novaplan tenant is a separate database, so your raw and curated data is never co-mingled
  with another customer's. See [Permissions](/admin/permissions) for how field-level masking
  layers on top of that isolation.
</Note>
