> ## 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.

# CSV upload

> The universal path: upload people, GL, ARR, or pipeline and map columns to fields.

CSV upload is the universal way to bring data into Novaplan. Any domain (people, GL, ARR actuals,
or pipeline) can be loaded from a spreadsheet, so you can start planning on real numbers before a
live connector is in place, or backfill a one-off feed at any time.

## Upload a file

<Steps>
  <Step title="Start the upload">
    In Admin -> Data, choose CSV upload and select the domain the file belongs to.
  </Step>

  <Step title="Map your headers">
    Match each column header to a canonical field. Nova can suggest a mapping from your headers,
    which you review and adjust before saving.
  </Step>

  <Step title="Validate">
    The file lands as a lossless raw record, then curation validates each row. Rows that fail are
    flagged individually with a reason; good rows curate.
  </Step>

  <Step title="Confirm">
    Check [Pipelines](/admin/pipelines) to confirm the rows landed and to read any per-row errors.
  </Step>
</Steps>

## File format and headers

* Use a header row; column order does not matter because you map headers to fields.
* One row per record (one person, one GL posting, one ARR event, one opportunity).
* Use plain text for identifiers and numeric values for amounts (avoid currency symbols and
  thousands separators inside numeric cells where possible).

### Columns by domain

| Domain | Columns to provide (map to canonical fields) |
| - | - |
| People | Employee ID, name, job title, department, site, start date, end date, status, comp |
| GL | Account, department, entity / vendor, period (month), amount, memo |
| ARR actuals | Account, event month, ARR delta, movement component, customer count delta |
| Pipeline | Account, stage, amount, expected close, owner, segment |

<Warning>
  Dates must be real dates that parse cleanly. A month field is expected as a full date (the first
  of the month), not a bare year-month string, so that it casts and normalizes correctly during
  curation.
</Warning>

## Common questions

<AccordionGroup>
  <Accordion title="Will one bad row reject the whole file?" icon="list-check">
    No. Validation is per row. The good rows curate and the bad rows are flagged with a reason, so
    you fix and re-upload only what failed.
  </Accordion>

  <Accordion title="Can I re-upload to correct a mistake?" icon="file-csv">
    Yes. Curation is idempotent: re-uploading the same batch replaces its prior rows rather than
    duplicating them.
  </Accordion>
</AccordionGroup>

## Troubleshooting

* **Rows fail with a date error:** the date did not parse. Provide a full date (for a month field,
  the first of the month) and re-upload.
* **A value is not rolling up:** the raw value is unmapped. Add the mapping in
  [Dimensions](/admin/dimensions) or [GL Mapping](/admin/gl-mapping), then re-run curation.
* **A required field is missing:** the file is missing a column the domain requires, or it is not
  mapped. Add or remap it and re-upload.
* **Amounts import as text:** keep numeric cells unformatted so amounts curate as numbers.
