Most small-business CRMs fail not from bad code but from a messy database. Here is the minimal table structure we start with for a custom CRM — it covers 90% of businesses.
The core tables
contacts — every person you do business with:
- id, full_name, phone, email, company, created_at
deals — one row per potential sale:
- id, contact_id, title, value, stage (new / contacted / quoted / won / lost), created_at, updated_at
activities — every call, visit or follow-up:
- id, deal_id, type, notes, happened_at, next_follow_up
products — what you sell:
- id, name, price
deal_items — which products belong to which deal:
- id, deal_id, product_id, quantity
Why this shape works
- One contact can have many deals; one deal has many activities. Nothing is duplicated.
- The
stagecolumn on deals drives the whole sales pipeline view — move a deal from "quoted" to "won" and your reports update themselves. -
next_follow_upon activities is the single most valuable field: it powers the daily "who do I call today" list that stops leads going cold.
What we add later
Only when the business asks: user roles, email templates, invoice tables, and integrations with accounting tools. Start small, grow on demand.
We build custom CRM systems like this at ZahrionTech for small businesses in the USA, UK and worldwide — shaped around how the team actually works. More at https://zahriontech.com/
Top comments (0)