Salesforce ships around 25 field data types you can pick when creating a custom field. They group into text/number/date primitives, special CRM types (Email, Phone, URL), relationship fields, derived fields (Formula, Roll-Up Summary), and a few specialized types (Geolocation, Time, External Lookup).
Primitive / scalar field types
| Type | Purpose | Notes |
|---|---|---|
| Text | Single-line string | Up to 255 characters; can be marked Unique and External ID |
| Text Area | Multi-line string | Up to 255 characters; basic textarea |
| Text Area (Long) | Long multi-line | Up to 131,072 characters (default 32,768); not searchable in old UI without indexing |
| Text Area (Rich) | HTML/rich content | Inline images, formatting; counts toward storage |
| Text (Encrypted) | Masked classic encryption | Different from Shield Platform Encryption; limited search |
| Number | Integer or decimal | Up to 18 digits total |
| Currency | Monetary amount | Respects multi-currency org settings |
| Percent | Percentage | Stored as the number, display includes % |
| Date | Date only | No time component |
| Date/Time | Date and time | Stored in UTC, displayed in user’s TZ |
| Time | Time only (no date) | Newer field type; supports business hours scenarios |
| Checkbox | Boolean | True/false |
| Email address | Validates format; supports mailto links | |
| Phone | Phone number | Click-to-call enabled |
| URL | Web address | Renders as hyperlink |
Picklist family
| Type | Purpose |
|---|---|
| Picklist | Single-value dropdown |
| Picklist (Multi-Select) | Multi-value dropdown — stored as semicolon-separated string |
| Global Picklist | Reusable picklist value set shared across multiple fields |
Picklists can have dependencies — a controlling picklist filters values in a dependent picklist (e.g., Country → State).
Relationship fields
| Type | Purpose |
|---|---|
| Lookup | Loose link to another object’s record |
| Master-Detail | Tight parent-child link (cascade delete, roll-ups) |
| Hierarchical | Only available on the User object — self-relationship |
| External Lookup | Lookup from any object to an external object |
| Indirect Lookup | Lookup from external object to standard/custom Salesforce object (matched on External ID) |
Derived fields
| Type | Purpose |
|---|---|
| Formula | Read-only computed value (Number, Text, Date, Date/Time, Currency, Percent, Checkbox) — recalculated on every read |
| Roll-Up Summary | Aggregate (COUNT, SUM, MIN, MAX) over master-detail child records — stored value, recalculated on write |
| Auto Number | System-generated sequence (e.g., INV-{0000}) — set once at insert |
Specialized types
| Type | Purpose |
|---|---|
| Geolocation | Latitude/longitude pair — supports DISTANCE() in formulas/SOQL |
| File | Attached files (used in Lightning vs old Attachment) |
Standard system fields (always present)
Every object also has built-in system fields: Id, Name (or auto-number), CreatedDate, CreatedById, LastModifiedDate, LastModifiedById, SystemModstamp, IsDeleted, OwnerId (on most objects). You can’t delete these.
Choosing the right type
- For integration keys → Text with External ID and Unique
- For categorization with few stable values → Picklist (not Text) so reports/filters work
- For computed totals → Roll-Up Summary (master-detail) or Formula
- For money → Currency, not Number
- For flags → Checkbox, not Picklist (Yes/No)
- For status sequences → Picklist, not Text — enables reports, validation, path UI
Once a field is created, you can sometimes convert types (Text → Picklist, Text → Email) but with restrictions — plan up front.
Verified against: Salesforce Help — Custom Field Types. Last reviewed 2026-05-17.