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

# Custom Fields

> Add your own fields to Contacts, Accounts, Opportunities, and Tasks — organize them into sections, control visibility, and map them automatically during CSV import.

<div
  style={{
background: "linear-gradient(135deg, #143D4E 0%, #1C758A 55%, #30C8CA 100%)",
borderRadius: "24px",
padding: "28px",
marginBottom: "28px",
color: "#FFFFFF",
boxShadow: "0 20px 50px rgba(20, 61, 78, 0.22)",
position: "relative",
overflow: "hidden",
border: "1px solid rgba(255,255,255,0.08)"
}}
>
  <div
    style={{
position: "absolute",
top: "-36px",
right: "-36px",
width: "170px",
height: "170px",
background: "rgba(255,255,255,0.08)",
borderRadius: "999px"
}}
  />

  <div
    style={{
position: "absolute",
bottom: "-48px",
left: "-24px",
width: "130px",
height: "130px",
background: "rgba(255,255,255,0.06)",
borderRadius: "999px"
}}
  />

  <div
    style={{
  display: "inline-flex",
  alignItems: "center",
  background: "rgba(255,255,255,0.14)",
  color: "#FFFFFF",
  padding: "7px 14px",
  borderRadius: "999px",
  fontSize: "12px",
  fontWeight: "700",
  marginBottom: "12px",
  letterSpacing: "0.08em",
  textTransform: "uppercase"
}}
  >
    CUSTOM FIELDS
  </div>

  <p style={{ margin: 0, fontSize: "16px", lineHeight: "1.9", maxWidth: "760px", color: "#FFFFFF" }}>
    ParsaLink ships with sensible defaults for every entity, but every business has its own data shape. Custom fields let you extend Contacts, Accounts, Opportunities, and Tasks without leaving the app.
  </p>
</div>

## How Custom Fields Work

ParsaLink uses **Tenant Field Schemas** — one schema per entity type per tenant. Each schema is divided into **Sections** (groups of fields) and contains **Field Definitions** (individual fields).

Default sections (you can rename them or add more):

* **Primary** — the main identifying fields (name, email, phone)
* **Additional** — secondary fields (title, LinkedIn, notes)
* **Address** — postal address fields

Every entity carries both its built-in columns (`first_name`, `email`, etc.) AND a `data` JSON field where your custom fields live. The schema tells the UI how to render and validate them.

***

## Adding a Custom Field

<Steps>
  <Step title="Open the field settings">
    Go to **CRM → Field Settings** (or **Settings → CRM → Fields**) and pick the entity you want to extend.
  </Step>

  <Step title="Pick a section">
    Place the new field in an existing section or create a new one (e.g. "Marketing Preferences").
  </Step>

  <Step title="Define the field">
    Set the **field key** (machine name, e.g. `vat_number`), **label** (display name), and **type**:

    * `text` — single-line string
    * `number` — integer or decimal
    * `boolean` — yes/no toggle
    * `date` — date picker
    * `list` — multi-select array
    * `select` — single choice from a fixed list
  </Step>

  <Step title="Set CSV aliases (optional)">
    List the column header names CSV imports should map to this field. If your contact CSV has columns like "VAT" and "Tax ID" that both mean the same thing, add both as aliases so any future import auto-maps without manual mapping.
  </Step>

  <Step title="Toggle visibility and required">
    Set whether the field is visible (admins can stage fields without exposing them) and required (entity create/update fails if missing).
  </Step>
</Steps>

***

## Core vs Custom Fields

Built-in fields (`email`, `phone`, `first_name`, etc.) live as real database columns. Custom fields live in the `data` JSON column.

Both behave identically in the UI — the same list filters, the same record detail panels, the same CSV import mappings. The difference only matters when you're querying via the API:

* Built-in: `Contact.objects.filter(email="x")`
* Custom: `Contact.objects.filter(data__vat_number="x")`

The CRM AI agent handles both transparently — ask "find contacts where vat\_number is X" and it figures out the right query shape.

***

## Sections and Field Order

Each field has a `display_order`. Drag to reorder fields within a section, or move them between sections. The Add/Edit forms and the detail page both respect the order.

Sections themselves are ordered. A common pattern:

1. **Primary** — the must-haves at the top of the form
2. **Sales context** — qualifying fields specific to your process
3. **Address** — collapsed by default since it's used less often
4. **Internal** — fields admins use for routing or accounting

***

## CSV Import Mapping

Custom fields participate in CSV import. When you upload a CSV, ParsaLink:

1. Auto-maps columns whose normalized header matches a built-in field name
2. Auto-maps columns whose normalized header matches any of your custom field's CSV aliases
3. Leaves unmapped columns for you to map manually OR mark as "track always" to add them to the schema in-place

The third option turns CSV import into a schema-building tool — surveys with new columns can populate your schema as you go.

<Tip>
  When you map a column during import, you can also tick **Track this column going forward** to add it to your schema permanently. The next CSV with the same column gets auto-mapped.
</Tip>
