What is SuiteCRM? SuiteCRM is an open-source Customer Relationship Management platform built on top of SugarCRM Community Edition. It provides a 360-degree view of your customers and business operations, bringing
What is SuiteCRM?
SuiteCRM is an open-source Customer Relationship Management platform built on top of SugarCRM Community Edition. It provides a 360-degree view of your customers and business operations, bringing together sales, marketing, and support workflows in one system.
On Day 1, you get comfortable with the SuiteCRM interface and SuiteCRM basics — understanding how data is structured, how to navigate the UI, and how the platform handles information across its core modules.
Core Modules
SuiteCRM organizes all business data into Modules. Each module represents a category of records — like tables in a database, but with a full UI built around them.
- Accounts: organizations or companies you do business with. The anchor record that links to Contacts, Opportunities, Cases, and more.
- Contacts: Individual people, typically linked to an Account. Holds phone numbers, emails, titles, and interaction history.
- Leads: Prospective customers not yet qualified. Can be converted into Contacts, Accounts, and Opportunities.
- Opportunities: Active sales deals with a monetary value, close date, and pipeline stage (e.g., Prospecting → Closed Won).
- Cases: Support tickets submitted by customers, used by the support team to track resolution.
- Calls: Meetings, Tasks, Notes. Activity modules that log every customer interaction and keep historical context.
- Campaigns: Email and marketing campaigns, complete with target lists, templates, and ROI tracking.
- Documents: Centralized file storage attached to any record in the system.
All 22 Field Types in SuiteCRM
Every module is made up of Fields — the individual data points stored on a record. SuiteCRM supports 22 field types. Custom fields added through Studio are stored in the _cstm table and use the _c suffix.
| # | Field Type | DB Type | Key Notes |
| 1 | Address | 5× VARCHAR | Composite field: Street, City, State, Postal Code, Country — 5 DB columns. |
| 2 | Checkbox | TINYINT(1) | Boolean true/false toggle. 0 = false, 1 = true in the database. |
| 3 | Currency | DECIMAL(26,6) | Monetary values. Uses system currency settings. |
| 4 | Date | DATE | Date only (no time). Formatted per user locale. |
| 5 | DateTime | DATETIME | Date + time. Always stored as UTC; displayed per user timezone. |
| 6 | Decimal | DECIMAL(26,6) | High-precision numbers for measurements or scientific values. |
| 7 | DropDown | VARCHAR(100) | Single-select from a named dropdown list (e.g., account_type_dom). |
| 8 | DynamicDropdown | VARCHAR(100) | Dropdown whose options depend on the value of a parent dropdown field. |
| 9 | Flex Relate | VARCHAR(36) + type | Polymorphic relate; can link to any module. Stores module name alongside ID. |
| 10 | Float | DOUBLE | Decimal numbers where precision is less critical. |
| 11 | HTML | TEXT | Read-only HTML block rendered inside the record view. Not stored as data. |
| 12 | IFrame | VARCHAR(255) | Renders an external URL inside an iframe within the record layout. |
| 13 | Image | VARCHAR(36) | Image file (JPEG/PNG/GIF). UUID stored; file saved in upload/ directory. |
| 14 | Integer | INT | Whole numbers. No decimal places. |
| 15 | MultiSelect | TEXT | Multiple options stored as caret-delimited string (^value1^^value2^). |
| 16 | Phone | VARCHAR(100) | Phone number string. No built-in validation — treated as text. |
| 17 | Radio | VARCHAR(100) | Single-select rendered as radio buttons instead of a dropdown. |
| 18 | Relate | VARCHAR(36) + name | UI link to another module. Stores both UUID and display name. |
| 19 | TextArea | TEXT | Multi-line input. No character limit enforced at DB level. Used for notes/descriptions. |
| 20 | URL | VARCHAR(255) | Web address. Renders as a clickable link in DetailView. |
| 21 | TextField | VARCHAR(255) | Single-line input for names, codes, short labels. Default max 255 chars. |
| 22 | WYSIWYG | TEXT (HTML) | Rich-text editor (TinyMCE). Stores full HTML markup; rendered in DetailView. |
Views in SuiteCRM
SuiteCRM renders each record through four distinct Views. Understanding which view you're in matters when customizing layouts in Studio.
| View | Description |
|---|---|
| ListView | Searchable grid of all records in a module. Configurable columns. Supports inline editing. |
| DetailView | Read-only single-record page. Shows all visible fields in a 2-column layout by default. |
| EditView | Form used to create or edit a record. Shares layout panel with DetailView in Studio. |
| SearchView | Basic and Advanced search forms above ListViews. Customized separately from other views. |
✅ DO: Always use Studio for client-facing layout changes.
❌ DON'T: Edit core module files in the modules/ directory — your changes will be overwritten on upgrade. Use the custom/ extension folder instead.
SuiteCRM Relationships
Relationships define how records in different modules connect to each other. SuiteCRM supports three relationship types:
| Type | How It Works | Example Table |
|---|---|---|
| One-to-One (1:1) | Rare. Usually a 1:M with a UI constraint. | — |
| One-to-Many (1:M) | Single parent → many children. Foreign key on child table (e.g., account_id on contacts). | accounts → contacts |
| Many-to-Many (M:M) | Any record in A ↔ any record in B. Stored in a join/relationship table. | accounts_contacts |
Read More: What Is CRM Hosting? Types, Comparison & How to Choose the Right Solution
Example: Relationship Definition in Vardefs
'relationships' => [
'accounts_contacts' => [
'lhs_module' => 'Accounts',
'lhs_table' => 'accounts',
'lhs_key' => 'id',
'rhs_module' => 'Contacts',
'rhs_table' => 'contacts',
'rhs_key' => 'account_id',
'relationship_type' => 'one-to-many',
],
],
Do's and Don'ts of SuiteCRM
- DO — Prefix all custom fields and modules with a company or project identifier (e.g., ow_) to avoid naming collisions.
- DO — Place all custom code inside custom/Extension/ or custom/modules/ — never in core directories.
- DO — Run Quick Repair & Rebuild (Admin → Repair) after any metadata change to regenerate caches.
- DON'T — Delete fields that have existing data — mark them hidden in layouts instead, then migrate data before removal.
- DON'T — Create relationships through direct SQL inserts — always use the SuiteCRM relationship API or Studio.
- DON'T — Share admin credentials. Use role-based access (Security Suite) for granular permissions.
Conclusion
The blog offers a deep understanding of the basics of SuiteCRM. It also offers the foundation for becoming an efficient CRM developer and administrator. With this blog, you can learn how modules, fields, layouts, and relationships work together. With this, the developers can also build a scalable and maintainable CRM solution.
The blog covers the core structure of SuiteCRM, which includes 22 field types, record views, relationship architecture, and best practices of customization. With these fundamentals, the developers can explore the advanced SuiteCRM development topics, like Logic Hooks, APIs, SQL queries, and automation workflows.
Respond to this article with emojis