BDS0.1

Deal

One proposal, its offer, negotiated value and commercial outcome.

Reviewed 2026-11-06Markdown

A Deal is one proposal to one client, and since 2026-11-04 it is also where a lead lives: a new lead is a Deal at stage Lead. The client is Company° and/or People°. Product* selects an Offer from Offer (mirror), not a Product record. Offer (Price) is the catalog price; Value* is the negotiated amount and can differ.

Rules and relationships

Link the client in Company°, People° or both, then choose the accountable company and a membership in it. Lead, Contacted, Meeting Scheduled, Pitched, Proposal Sent and Negotiation remain open; Won, Lost and Abandoned close the deal. A disqualified lead is Lost, with the reason in Notes°. Blank stage also produces Open in Deal Status. Product*, Value* and Expected Close Date* are required only at Proposal Sent, Negotiation and Won; a lead needs only the client, the accountable pair and the stage. Source° records how the lead reached us. Closing does not create an agreement or invoice.

The Relationship rows were migrated to Deals on 2026-11-04: 476 Deals were created and 3 existing ones updated. Each migrated Deal carries the tag relationship-cleanup and, in Legacy Relationship ID, the coreId of the Relationship it came from. The Cal.com booking flow creates a Deal at Meeting Scheduled, or moves the person’s open Deal with the same seller from Lead or Contacted to Meeting Scheduled. The Relationship table was deleted the same day, together with the Deal fields that pointed to it (Relationship*, its lookups and Attribution Relationship Count).

Expected Close Date* is a forecast, not proof of acceptance. Campaign° links the Core campaign the lead came from, through the Campaign mirror; leave it empty for a lead that came from no campaign. Results per campaign are the Deals linked to it, listed in Deals (Campaign) on the Campaign mirror, and each Interaction of the Deal shows the same campaign in its Campaign lookup. The Campaign Participation table and its Deal fields (Campaign Participation°, the Campaign lookup, Participation Relationship UUID, Participation Key, Participation Duplicates, Participation Count and Campaign Attribution Check) were deleted on 2026-11-04. The Cal.com flow does not set Campaign°. There is no line-item table, contract generation or verified payment flow in this scope. Currency formatting uses $; the amount alone does not normalize currencies or billing units.

Fields

Field Storage Current configuration
Name Formula Calculated; see rules below.
Product* Linked records Offer (mirror); Multiple-record picker
Offer (Price) Lookup Via Product* → Price*
Value* Currency $
Notes° Long text Stored value or system-managed audit; edit according to the workflow.
Deal # Sequence number Stored value or system-managed audit; edit according to the workflow.
Accountable (Person)* Linked records People; Multiple-record picker
Deal Stage* Single choice Lead, Contacted, Meeting Scheduled, Pitched, Proposal Sent, Negotiation, Won, Lost, Abandoned
Expected Close Date* Date Stored value or system-managed audit; edit according to the workflow.
Deal Status Formula Calculated; see rules below.
Intake Step Formula Calculated; see rules below.
Deal Check Formula Calculated; see rules below.
Offer (Item) Lookup Via Product* → Item (Name)
Offer (Unit) Lookup Via Product* → Unit*
Auth User Lookup Via Accountable (Person)* → Account Binding
Interactions Linked records Interaction; Multiple-record picker
Accountable (Company)* Linked records Companies; Multiple-record picker
Accountable (Person Companies) Lookup Via Accountable (Person)* → Companies
Owner Email Lookup Via Accountable (Person)* → Company Email (from Memberships)
Created By Created by Stored value or system-managed audit; edit according to the workflow.
Created At Creation time Stored value or system-managed audit; edit according to the workflow.
Record health Formula Calculated; see rules below.
Health check Formula Calculated; see rules below.
Contact Email Lookup Via People° → Email
Open send mail link Button Opens Gmail in compose with Contact Email as recipient
Accountable (Membership)* - to delete (deprecated) Linked records Membership (mirror); Deprecated since 2026-11-06; read-only until deleted, replaced by Accountable (Person)*
Accountable (Person) lookup - to delete (deprecated) Lookup Via Accountable (Membership)* → Member; Deprecated since 2026-11-06; read-only until deleted
Auth User (Membership) - to delete (deprecated) Lookup Via Accountable (Membership)* → Auth User; Deprecated since 2026-11-06; read-only until deleted
Owner Email (Membership) - to delete (deprecated) Lookup Via Accountable (Membership)* → Company Email; Deprecated since 2026-11-06; read-only until deleted
Accountable (Business Unit) - to delete (deprecated) Lookup Via Accountable (Membership)* → Business Unit; Deprecated since 2026-11-06; read-only until deleted, replaced by Accountable (Person Companies)
Team (Accountable<membership>) - to delete (deprecated) Lookup Via Accountable (Membership)* → Teams; Deprecated since 2026-11-06; read-only until deleted
Tags Linked records Tags; Multiple-record picker
Notes Linked records Notes table; Multiple-record picker
Tasks Linked records Tasks; Multiple-record picker
Company° Linked records Companies; Multiple-record picker. The client company; leave empty when the lead is a person with no company yet
People° Linked records People; Multiple-record picker. The main contact
Source° Single choice Referral, Networking Event, Inbound, Cold Outreach, Existing Relationship
Campaign° Linked records Campaign; Multiple-record picker. Links the campaign this lead came from, for example an event or a landing page. Pick one campaign when the lead belongs to one; leave it empty otherwise. A missing campaign is created in Core, not here
Legacy Relationship ID Single line text coreId of the Relationship this Deal was migrated from on 2026-11-04; empty on Deals created later. Do not edit

Calculated rules

The expressions below use field names for readability. View filters and checks guide work; they are not access controls. Name reads Company° and People°, and falls back to “No client”. Intake Step is blank on a closed Deal; Deal - 1 has no client, Deal - 2 lacks the accountable pair, Deal - 3 is at Proposal Sent or Negotiation without Product*, Value* or Expected Close Date*, and Deal - 4 is complete. Deal Check warns only about an accountable mismatch, and a passed expected close date on an open Deal.

Name

IF(AND({Company°}, {People°}), ARRAYJOIN({Company°}, ", ") & " - " & ARRAYJOIN({People°}, ", "), IF({Company°}, ARRAYJOIN({Company°}, ", "), IF({People°}, ARRAYJOIN({People°}, ", "), "No client"))) & IF(ARRAYJOIN({Offer (Item)}) != "", " - " & ARRAYJOIN({Offer (Item)}), "") & " - #" & {Deal #}

Deal Status

SWITCH({Deal Stage*}, "Won", "Won", "Lost", "Lost", "Abandoned", "Abandoned", "Open")

Intake Step

IF({Deal Status} != "Open", "",
IF(AND({Company°} = BLANK(), {People°} = BLANK()), "Deal - 1",
IF(OR({Accountable (Company)*} = BLANK(), {Accountable (Person)*} = BLANK()), "Deal - 2",
IF(AND(OR({Deal Stage*} = "Proposal Sent", {Deal Stage*} = "Negotiation"), OR({Product*} = BLANK(), {Value*} = BLANK(), {Expected Close Date*} = BLANK())), "Deal - 3",
"Deal - 4"))))

Deal Check

IF(AND({Accountable (Company)*}, {Accountable (Person)*}, FIND(ARRAYJOIN({Accountable (Company)*}), ARRAYJOIN({Accountable (Person Companies)}, ", ")) = 0), "⚠ Accountable person has no membership in the accountable company. ", "") &
IF(AND({Deal Status} = "Open", {Expected Close Date*}, IS_BEFORE({Expected Close Date*}, TODAY())), "⚠ Expected close date has passed; update it or close the deal. ", "")

Record health

SUM(
IF(OR(COUNTA({Company°})>0, COUNTA({People°})>0),1,0),
IF(COUNTA({Accountable (Company)*})>0,1,0),
IF(COUNTA({Accountable (Person)*})>0,1,0),
IF({Deal Stage*},1,0),
IF(OR({Value*}, NOT(OR({Deal Stage*}="Proposal Sent", {Deal Stage*}="Negotiation", {Deal Stage*}="Won"))),1,0),
IF(OR(COUNTA({Product*})>0, NOT(OR({Deal Stage*}="Proposal Sent", {Deal Stage*}="Negotiation", {Deal Stage*}="Won"))),1,0),
IF(OR({Expected Close Date*}, NOT(OR({Deal Stage*}="Proposal Sent", {Deal Stage*}="Negotiation", {Deal Stage*}="Won"))),1,0)
)/7

Health check

IF(
  AND(
    OR(COUNTA({Company°})>0, COUNTA({People°})>0),
    COUNTA({Accountable (Company)*})>0,
    COUNTA({Accountable (Person)*})>0,
    {Deal Stage*},
    OR(NOT(OR({Deal Stage*}="Proposal Sent", {Deal Stage*}="Negotiation", {Deal Stage*}="Won")), AND({Value*}, COUNTA({Product*})>0, {Expected Close Date*}))
  ),
  "✅",
  "Missing: " & REGEX_REPLACE(
    CONCATENATE(
      IF(OR(COUNTA({Company°})>0, COUNTA({People°})>0), "", "Company or People, "),
      IF(COUNTA({Accountable (Company)*})>0, "", "Accountable (Company), "),
      IF(COUNTA({Accountable (Person)*})>0, "", "Accountable (Person), "),
      IF({Deal Stage*}, "", "Deal Stage, "),
      IF(OR({Deal Stage*}="Proposal Sent", {Deal Stage*}="Negotiation", {Deal Stage*}="Won"),
        IF({Value*}, "", "Value, ") & IF(COUNTA({Product*})>0, "", "Product, ") & IF({Expected Close Date*}, "", "Expected Close Date, "), "")
    ),
    ", $", ""
  )
)

Next steps

Open the task guide · Find the view