Custom Fields
Define custom data fields for contacts, deals, and companies to capture data unique to your business.
Custom Fields
Custom fields let each workspace define its own data model. Add fields like "Contract Type", "Annual Budget", or "Industry Segment" to contacts, deals, and companies — then use those fields in forms, detail views, and webhook integrations.
Custom Fields require Admin or Owner permissions. Navigate to CRM > Settings > Custom Fields to get started.
Why Custom Fields?
Every business tracks different data. Workestra ships with a standard set of fields (name, email, phone, etc.), but your workflow likely needs more:
- A real estate agency needs Property Type and Budget Range on deals
- A SaaS company needs Contract Length and MRR on contacts
- A recruiting firm needs Specialization and Rate Card on companies
Custom fields solve this without modifying the database — they're stored in a flexible JSONB column and rendered dynamically based on your definitions.
Supported Field Types
| Type | Description | Example |
|---|---|---|
| Text | Short text input | "Contract ID" |
| Number | Numeric value with optional min/max | "Employee Count" |
| Date | Date picker | "Renewal Date" |
| Single Select | Dropdown with predefined options | "Industry" |
| Multi Select | Multiple selections from a list | "Services Interested" |
| Checkbox | Boolean toggle | "NDA Signed" |
| URL | Web address (clickable in detail view) | "Company Website" |
| Email address | "Billing Email" | |
| Phone | Phone number | "Direct Line" |
| Currency | Monetary value with $ prefix | "Annual Budget" |
| Long Text | Multi-line text area | "Special Requirements" |
| Rating | 1-5 star rating | "Lead Quality" |
Managing Custom Fields
Creating a Field
- Go to CRM > Settings > Custom Fields
- Select the entity tab: Contacts, Deals, or Companies
- Click Add Field
- Configure:
| Setting | Description |
|---|---|
| Label | Display name shown to users |
| Field Key | Auto-generated snake_case identifier (immutable after creation) |
| Field Type | One of the 12 types above |
| Required | Whether the field must be filled |
| Description | Help text shown below the input |
| Section Group | Group related fields under a heading (e.g. "Billing Info") |
-
For Select and Multi Select types, add options:
- Type each option and press Enter
- Reorder or remove options as needed
-
For Number and Currency types, optionally set:
- Min / Max constraints
-
Configure visibility:
| Toggle | Default | Purpose |
|---|---|---|
| Show in forms | On | Display in create/edit dialogs |
| Show in detail | On | Display on entity detail pages |
| Show in list | Off | Display as a column in list views |
- Click Create Field
Editing a Field
- Click the pencil icon on any field
- Modify label, description, options, validation, or visibility
- Click Save Changes
The field key and field type cannot be changed after creation. This ensures existing data remains valid. To change a field's type, create a new field and migrate data manually.
Reordering Fields
Fields appear in the order they're listed. To change the order:
- Use the up/down arrows on each field card
- Order saves automatically
Fields within the same Section Group are displayed together.
Deleting a Field
- Click the trash icon on the field
- Confirm deletion
Deleting a field definition removes it from forms and views, but does not delete existing data. Values already stored on contacts, deals, or companies are preserved in the database. If you recreate a field with the same key, the old data will reappear.
Using Custom Fields
In Edit Dialogs
When editing a contact, deal, or company, custom fields appear below the standard fields. They're grouped by section and show validation errors inline.
In Detail Views
Custom field values display in the entity's detail sidebar, grouped under their section headings. Each type renders appropriately:
- URLs are clickable links
- Emails are mailto links
- Ratings show as star icons
- Multi Select values show as badges
- Currency values show with formatting
- Dates are formatted in your locale
In Webhook Integrations
Custom fields integrate with the inbound webhook pipeline. When configuring a webhook source's field mapping, use the cf. prefix to map incoming data to custom fields.
Example payload map:
{
"email": "data.email",
"first_name": "data.contact.first_name",
"cf.contract_type": "data.contract",
"cf.annual_budget": "data.budget",
"cf.industry": "data.organization.industry"
}Any field in the map prefixed with cf. will be stored in the entity's custom fields. The part after cf. must match the field key defined in Custom Fields settings.
In Routing Rules
You can route inbound items based on custom field values. When creating routing rule conditions, reference custom fields with the cf. prefix:
| Field | Operator | Value | Effect |
|---|---|---|---|
cf.annual_budget | greater than | 50000 | Route high-value leads to senior reps |
cf.industry | equals | Healthcare | Assign to healthcare team |
cf.contract_type | in | Enterprise, Premium | Skip low-tier leads |
Validation
Custom fields enforce validation at multiple levels:
- UI validation — Required fields, min/max, format checks shown inline
- Webhook validation — Incoming data is coerced to the correct type (e.g., string
"42"becomes number42) - Select validation — Values must match defined options
Type Coercion for Webhooks
When data arrives via webhooks, values are automatically coerced:
| Field Type | Raw Value | Stored As |
|---|---|---|
| Number | "42" | 42 |
| Checkbox | "true" | true |
| Multi Select | "a,b,c" | ["a", "b", "c"] |
Section Groups
Use section groups to organize related fields visually. Fields with the same Section Group name are displayed together under a shared heading.
Example:
| Field | Section Group |
|---|---|
| Contract Type | Contract Details |
| Contract Length | Contract Details |
| Renewal Date | Contract Details |
| Annual Budget | Financials |
| Payment Terms | Financials |
| NDA Signed | Compliance |
This creates three collapsible sections in the detail view and edit forms.
Best Practices
- Use descriptive labels — "Annual Contract Value" is clearer than "ACV"
- Group related fields — Use section groups to keep forms organized
- Keep it minimal — Only create fields you actually need. Too many fields slow down data entry
- Use Select for constrained values — Prefer dropdowns over free text when options are known
- Set required sparingly — Only mark truly essential fields as required
- Plan field keys carefully — They can't be changed after creation, and webhook mappings reference them
Next Steps
- CRM Settings — Pipeline stages and price books
- Contacts — Where custom fields appear
- Deals — Deal-specific custom fields
- Companies — Company-specific custom fields