Contacts — people
A contact is a single human being. One name, one set of contact details, one activity timeline. The diner who booked a table, the host who called about a catering inquiry, the vendor rep you emailed last week — each is a contact.
Key fields:
- Email and phone — the two identifiers CRM uses for dedupe. Either one alone is enough to track a contact uniquely.
- Primary account — the company or household this person belongs to (optional).
- Tags — a free-form list CRM uses for segmentation:
vip,wine-club,no-show-risk. - Source — where the contact came from:
queue,reservations,csv,gmail, manual. Set automatically on creation. - Do-not-contact — one flag that suppresses the contact from every campaign and transactional marketing message across the whole platform.
Accounts — companies, households, groups
An account is any organization or group that contains contacts. Use accounts when:
- You sell to companies (B2B catering, wholesale, corporate events) and the same contact at an account could turn over.
- You serve households (a family of regulars where the reservation is booked by one person but the whole group walks in).
- You track chains or multi-locations. The account is the chain; each site's contacts roll up under it.
If every customer is a solo retail guest, you may never need accounts. Contacts alone are fine. Accounts are there when groups matter.
Key fields: name, website, industry, primary contact (one named contact who represents the account), and a tier you define per pipeline (e.g., strategic, mid-market, SMB).
Deals — opportunities moving through a pipeline
A deal is a specific, trackable opportunity with a stage, a value, and at least one contact. Use deals when something has a meaningful “will they / won't they” outcome — not every interaction warrants one.
Typical deals in a hospitality org:
- Catering inquiry — stages: Inquiry → Quoted → Contracted → Served.
- Private-event hold — stages: Hold → Deposit → Confirmed → Served.
- Corporate partnership — stages: Intro → Pilot → Signed → Active.
Every deal has:
- Stage — where it is in your pipeline.
- Value — expected revenue (USD unless you've set a different currency).
- Primary contact — the person you talk to. A deal can have many linked contacts but exactly one primary.
- Expected close — when you expect to win or lose. Drives forecasting.
- Owner — the team member responsible. Used for reporting and pipeline assignment.
How they link
Contacts belong to an optional account. Deals reference one account (optional) and many contacts (one primary, any number of participants). That's the whole shape:
- Contact: has one account (optional), many deals (as primary or participant).
- Account: has many contacts, many deals.
- Deal: has one account (optional), one primary contact, many participant contacts.
How other NOWAITN apps plug in
CRM publishes crm.contact.created, crm.contact.updated, crm.deal.stage_changed, and similar events to the platform_api event bus. CRM also consumes events from spoke apps and turns them into activity-log entries or automatic deal progression (Advanced & Admin tiers):
queue.guest.joined→ upsert contact, log “joined waitlist” activity.reservations.booked→ upsert contact, optionally create a deal when party_size > 8.printing.job.sentwith templatecrm.profile_card→ log “profile card printed” against the contact's activity.payments.invoice.paidon a deal-linked invoice → advance the deal to the next stage automatically.
See Building your first sales pipeline for how to wire these events into your own stages.