# Importing Businesses (Entities)

## Open the import screen

From **Entities**, choose **Import**. Select the import type, **CSV** or **Excel**, choose your file, then **Import**. Use **Download Templates** for the correct column headers.

---

## Create an entity manually

- Go to **Entities** → **Add entity** (or from a user’s profile, **Add entity** to tie an owner).
- Fill in the form and save.

Use a file import when you have many rows or spreadsheet data already prepared.

---

## Import entities only (one sheet)

For **entity** rows only (no separate business-profile sheet).

- Import type: **Entities**
- Format: **CSV** or **Excel**
- Download the **Entities** template, fill it, upload, then **Import**

**Matching:** Each row matches on **`name`**. The same name as an existing entity **updates** that record.

**Columns**

- **`name`** — required
- **`owner_first_name`**, **`owner_last_name`** — optional; both must match an existing user’s first and last name to attach that user as **owner**
- **`description`**, **`dbas`**, **`email`**, **`website_url`**, **`import_context`** — optional text
- **`phone_number`** — optional; numeric (10-digit style)
- **`type`**, **`tax_classification`** — optional; use **enum keys** from [Allowed enum values](#allowed-enum-values-for-imports) (not the display labels)
- **`naics_code`** — optional; must be a code that **already exists** in RISE (see note under that section)
- **`state`**, **`locality`**, **`town`** — optional; see **State, locality, and town** under [Allowed enum values](#allowed-enum-values-for-imports)
- **Social URLs** — optional; one column each: `facebook_url`, `twitter_url`, `instagram_url`, `linkedin_url`, `youtube_url`, `meetup_url` (valid URLs)
- **`comments`** — optional; creates a comment on the entity

---

## Import entities and business profiles (two worksheets, Excel)

One workbook for **entities** plus **business profiles**.

- Download **Entities and Profiles (Multiple Sheets)**
- Import type: **Entities and Profiles (Multiple Sheet)**
- Format: **Excel** (`.xlsx`), upload, then **Import**

**Worksheet 1** — same columns and behavior as **Import entities only**.

**Worksheet 2** — one business profile per row.

- **`entity_id`** — optional; RISE entity ID (used first if present)
- **`entity_name`** — optional; exact entity name if `entity_id` is not used (must match sheet 1 or an entity already in RISE)
- **`entity_stage`** — optional; enum **key** (see [Entity stage](#entity-stage-entity_stage))
- **`registered_on_va_scc`** — optional; `0` or `1`
- **`chamber_link`** — optional; URL
- **`target_market`** — optional; text
- **`import_context`** — optional; text

If neither `entity_id` nor `entity_name` resolves to an entity, that row does not create a profile.

---

## Business profiles only

If entities already exist, use the **Business Profiles** shortcut on the entity import page and its single-sheet templates.

---

## Errors

Failed rows may list on the screen with a short message; fix the file and import again.

---

## Allowed enum values for imports

Imports expect the **key** (left column). Labels are for reference when reading the UI or exports.

### Entity type (`type`)

| Key | Label |
|-----|--------|
| `sole-proprietorship` | Sole Proprietorship |
| `s-corp` | S-Corporation |
| `c-corp` | C-Corporation |
| `b-corp` | B-Corporation |
| `corporation-type-unknown` | Corporation (Type Unknown) |
| `llc` | Limited Liability Company (LLC) |
| `partnership` | Partnership |
| `pllc` | Professional Limited Liability Company (PLLC) |
| `llp` | Limited Liability Partnership (LLP) |
| `pc` | Professional Corporation (PC) |
| `cooperative` | Cooperative |
| `501c3` | Nonprofit - 501(c)(3) |
| `nonprofit-other` | Nonprofit - Other |
| `not-yet-formed` | Not yet formed |
| `government` | Government |
| `other` | Other |

### Tax classification (`tax_classification`)

| Key | Label |
|-----|--------|
| `disregarded-entity` | Disregarded Entity |
| `partnership` | Partnership |
| `c-corp` | C-Corporation |
| `s-corp` | S-Corporation |
| `501c3` | Nonprofit - 501(c)(3) |
| `llc` | Limited Liability Company (LLC) |
| `trust` | Trust |
| `estate` | Estate |
| `exempt` | Exempt |
| `not-applicable` | N/A |

### Entity stage (`entity_stage`, worksheet 2)

| Key | Label |
|-----|--------|
| `ideation` | Ideation |
| `startup` | Startup |
| `growth` | Growth |
| `expansion` | Expansion |
| `mature` | Mature |

### NAICS code (`naics_code`)

Not a fixed list in this manual: the value must match a **NAICS code already stored** in RISE. If import fails on `naics_code`, use a code from the app’s NAICS list or leave the column empty.

### State, locality, and town (`state`, `locality`, `town`)

These follow **RISE region configuration** (states such as **VA** and **NC**, with **locality** and **town** keys under each—for example county keys like `halifax`, `mecklenburg`, and town keys nested under the locality). The importer may normalize some **human-readable** county or town names to the correct keys when `state` is set. When in doubt, use the same **keys** as on an exported entity or as shown when editing an entity in the UI.

In this project, **entities import** does not use a separate “county” column. The spreadsheet column **`locality`** is validated and normalized against `config('enums.region_localities')` for the given **`state`** (`EntitiesImport` maps either the **enum key** or the **display label** case-insensitively to the stored key). Counties, cities, and other places all live in that same **`region_localities`** list.

Below are markdown tables you can paste into docs or a PR.

---

### Virginia — `locality` enum (`state` = `VA`)

| Stored enum key (`locality`) | Import/display label | Typical kind |
|------------------------------|----------------------|--------------|
| `halifax` | Halifax County | County |
| `mecklenburg` | Mecklenburg County | County |
| `brunswick` | Brunswick County | County |
| `lunenburg` | Lunenburg County | County |
| `charlotte` | Charlotte County | County |
| `prince_edward` | Prince Edward County | County |
| `cumberland` | Cumberland County | County |
| `buckingham` | Buckingham County | County |
| `nottoway` | Nottoway County | County |
| `amelia` | Amelia County | County |
| `pittsylvania` | Pittsylvania County | County |
| `henry` | Henry County | County |
| `patrick` | Patrick County | County |
| `fairfax` | Fairfax County | County |
| `danville_city` | City of Danville | City |
| `martinsville_city` | City of Martinsville | City |
| `charlottesville` | Charlottesville | City |
| `centreville` | Centreville | Place |
| `dumfries` | Dumfries | Town |

---

### North Carolina — `locality` enum (`state` = `NC`)

| Stored enum key (`locality`) | Import/display label | Typical kind |
|------------------------------|----------------------|--------------|
| `durham` | Durham | City / locality |
| `garner` | Garner | Town |
| `greensboro` | Greensboro | City |
| `chatham` | Chatham | Locality (label as in config) |

---

### Import behavior (short)

| Column | Role |
|--------|------|
| `state` | Must match a key in `region_localities` (e.g. `VA`, `NC`). |
| `locality` | Use the **stored enum key** (e.g. `halifax`) **or** the **display label** (e.g. `Halifax County`); import lowercases and resolves labels to keys when they match that state’s map. |