Feature
Your schema, not just extra fields.
Define object types per tenant — a slug, a label, the fields you actually track — then store records and associate them with contacts, companies, deals, or other custom types.
Field kinds that match real data
Custom fields can hang off a custom type or off contact, company, and deal. Soft-deleted types and fields stay out of the live list.
Scalars
- text, number, date, bool
- url
- enum (fixed options)
Structure
- relation (point at another type)
- required flag per field
- associations to contacts, companies, deals, or other custom records
Object types you name
Each type has a slug, singular/plural labels, and lives under your tenant. Properties, campaigns, listings, patients — whatever the business actually tracks.
Instances with your fields
Create, list, and fetch records for a type. Field values are stored on the record, not jammed into a contact note.
Associate to core CRM rows
Tie a custom record to a contact, company, deal, or another custom object so pipeline work and your domain model stay connected.
Your types, your tenant
Types, fields, records, and associations all carry tenant id. Soft-delete hides them without a hard wipe.
A model webhooks can sit next to
Core contact/deal/task changes still go out over signed webhooks. Custom objects are for the shapes those events do not cover.