<<<<<<<< Salesforce CRM Connector — Schema Editor

Salesforce CRM Connector — Schema Editor

Microsoft Graph External Connection schema · Platform soft limit: 100–128 properties (overall) · Recommended: keep queryable count well below that · 5 objects: Account, Contact, Lead, Opportunity, Case · Schema annotations guide

63Properties
34Queryable
35Searchable
61Retrievable
4Refinable
Common 33 props · 22 Q S 17 · R 31 · Ref 3
Account 4 props · 0 Q S 4 · R 4 · Ref 0
Contact 6 props · 1 Q S 4 · R 6 · Ref 1
Lead 4 props · 0 Q S 2 · R 4 · Ref 0
Opportunity 10 props · 8 Q S 4 · R 10 · Ref 0
Case 6 props · 3 Q S 4 · R 6 · Ref 0
1 with semantic label but not Retrievable (guideline: labels require Retrievable): ParentId1 Q value changed from reviewed MD: ParentId
Open Questions for Schema Review 3 questions
  1. Q1. Whether the current property and queryable slot numbers in this design can be properly supported by the platform?
  2. Q2. Properties ObjectName & Type can be confusing — can the multi-tooling feature help in such scenario?
  3. Q3. CRM domain-specific requirements: (a) What is the recommended type for financial amount fields (including currency type)? (b) How can aggregation and analysis on important amount values (revenue, probabilities) be supported?
Note: IsPrivate might not be supported by the connector platform. IsDeleted shall not be crawled — deleted records are excluded from ingestion.
Section: Common Account Contact Lead Opportunity Case
#SectionPropertyTypeDescriptionSemantic LabelS?Q?R?Ref?NoteSF SourceRationale
1 Common Id String
Unique Salesforce record identifier (18-char). Maps to the external item ID in the Graph connection. Not displayed to users directly.
Exact match required
Id
Salesforce record ID; used as external item ID
2 Common Url String
Direct URL to open the record in Salesforce. Enables deep-linking from search results and Copilot cards.
url
Computed: {instanceUrl}/{Id}
Deep link to the SF record
3 Common IconUrl String
URL to the object-type icon asset displayed on search result cards (e.g. Account icon, Case icon).
iconUrl
Computed: per-object icon asset URL
Drives result card icon
4 Common ObjectName String
CRM object type name (Account, Contact, Lead, Opportunity, Case). Used as the primary entity-type filter and for the itemType semantic label.
itemType
Computed: "Account" / "Contact" / ...
Entity-type discriminator for filtering
5 Common Type String
Record sub-classification within an object (e.g. 'Customer', 'Partner' for Account; 'Problem', 'Question' for Case). Null for Lead and Contact.
Null for Lead & Contact
Acct: Type; Opp: Type; Lead: null; Contact: null; Case: Type
Classification label (e.g. "Customer", "Problem")
6 Common Source String
Marketing/lead attribution source indicating how the record entered the pipeline (e.g. 'Web', 'Phone Inquiry', 'Partner Referral'). Merges AccountSource, LeadSource, and Origin into one unified property.
Merges Origin (Case) with LeadSource
Acct: AccountSource; Opp: LeadSource; Lead: LeadSource; Contact: LeadSource; Case: Origin
Pipeline attribution — "leads from web form"
7 Common Number String
The number assigned to an Account or Case. For Account this is the customer/vendor AccountNumber; for Case this is the auto-generated CaseNumber. Contains null if the record is not an Account or Case.
secondaryId
Exact match required
Acct: AccountNumber; Case: CaseNumber; Contact: null; Lead: null; Opp: null
Account or Case number — "find account #12345" / "find case 00001234"
8 Common Name String
Primary display name of the record (e.g. account company name, contact full name, opportunity deal name, case subject). Mapped to the 'title' semantic label for search result rendering.
title
Name
Primary display name; queryable for name lookups
9 Common Description String
Free-text description field. Mapped to the CONTENT property for semantic search and Copilot summarization rather than as a schema property, to save property budget.
Mapped to CONTENT; not a property slot in practice
Description
Rich text description
10 Common Owner Principal
The user who owns this record, resolved as a Principal type carrying both display name and profile URL. Enables queries like 'show my leads' or 'leads owned by Alice'.
assignedToPeople
Acct: Account Owner; Opp: Opportunity Owner; Lead: Lead Owner; Contact: Contact Owner; Case: Case Owner
Record owner — "leads owned by Alice"
11 Common CreatedBy Principal
The user who created this record, resolved as a Principal type. Semantic label 'createdBy' enables platform-native 'created by' filtering in Microsoft Search.
createdBy
CreatedById → resolve Name + URL
Audit; semantic label enables platform "created by"
12 Common CreatedDate DateTime
Timestamp when the record was created. Enables time-based queries like 'cases opened this week' or 'leads created last month'. Semantic label 'createdDateTime'.
createdDateTime
CreatedDate
"Cases opened this week"
13 Common LastModifiedBy Principal
The user who last modified this record, resolved as a Principal type. Semantic label 'lastModifiedBy' for platform audit features.
lastModifiedBy
LastModifiedById → resolve Name + URL
Audit field
14 Common LastModifiedDate DateTime
Timestamp of the most recent modification to the record. Enables recency-based queries like 'recently updated opportunities'. Semantic label 'lastModifiedDateTime'.
lastModifiedDateTime
LastModifiedDate
"Recently updated opportunities"
15 Common AccountName String
Name of the related Account record. For Lead, only populated after conversion (null for unconverted leads). Enables queries like 'find contacts at Acme Corp'.
Lead only populated after conversion; null for unconverted leads
Acct: Name; Opp: Account.Name; Contact: Account.Name; Lead: ConvertedAccount.Name; Case: Account.Name
"Find contacts at Acme Corp"
16 Common AccountId String
Salesforce ID of the related Account record. Enables relationship traversal across objects. For Lead, only populated after conversion (null for unconverted leads).
Changed from AccountUrl to AccountId per Yogesh review 2026-04-09: IDs enable relationship traversal
Acct: Id; Opp: AccountId; Contact: AccountId; Lead: ConvertedAccountId; Case: AccountId
Related Account ID — enables relationship traversal
17 Common ContactName String
Full contact name. For Contact and Lead records, this is computed by concatenating Salutation, FirstName, and LastName (e.g. 'Dr. John Smith'). For Opportunity and Case, this is the related Contact's name. Null for Account.
For Contact & Lead: merged from Salutation, FirstName, LastName — concatenated as "{Salutation} {FirstName} {LastName}", trimmed. For Opp & Case: related contact name. Null for Account.
Acct: null; Opp: Contact.Name; Contact: Computed: "{Salutation} {FirstName} {LastName}" (e.g. "Dr. John Smith"); Lead: Computed: "{Salutation} {FirstName} {LastName}"; Case: Contact.Name
Contact's full name with salutation, or related Contact name for other objects
18 Common ContactId String
Salesforce ID of the related Contact record. For Lead, maps from ConvertedContactId (null for unconverted leads). Null for Account and Contact itself. Enables cross-object relationship traversal.
Merged from Opp ContactId, Lead ConvertedContactId, Case ContactId into Common per Yogesh review 2026-04-09
Acct: null; Opp: ContactId; Contact: null; Lead: ConvertedContactId; Case: ContactId
Related Contact ID — enables relationship traversal
19 Common ContactDetails String
Consolidated contact details combining all phone, email, and fax fields into a single searchable JSON string. Contact: work/home/other/mobile/assistant phone + fax + email; Lead: work/mobile phone + fax + email; Account: phone + fax. JSON structure preserves field-type labels. Searchable for keyword discovery but not queryable.
Merged from Phone, Email, Fax, MobilePhone, HomePhone, OtherPhone, AssistantPhone. Stored as JSON to preserve field-type labels. (2026-04-10)
Computed: JSON object per object — Contact: {"phone":{work,home,other,mobile,assistant,fax}, "email":Email}; Lead: {"phone":{work,mobile,fax}, "email":Email}; Acct: {"phone":Phone, "fax":Fax}; Opp: null; Case: null
Consolidated contact info — searchable for keyword discovery, not queryable (avoids LLM confusion from multiple similar fields)
20 Common Email String
Primary email address. Queryable for exact-match lookups like 'find lead with email X'. Also present in the ContactDetails JSON for keyword discovery. Null for Account and Opportunity.
Also stored in ContactDetails JSON; this dedicated property enables direct email queries
Acct: null; Contact: Email; Lead: Email; Opp: null; Case: ContactEmail
"Find lead with email X" — explicit queryable email for exact-match lookups
21 Common Address String
Consolidated address field combining all address sources per object into a single searchable JSON string. Account: billing + shipping; Contact: mailing + other; Lead: single address. JSON structure preserves address-type labels (e.g. billing vs shipping) while keeping a single property slot. Searchable for geo keyword discovery; not queryable in Phase 1 — validate coverage via evaluation sets.
Merged from Acct BillingAddress+ShippingAddress, Contact MailingAddress+OtherAddress, Lead Address into Common. Stored as JSON to preserve billing/shipping/mailing/other distinction. (2026-04-10)
Computed: JSON object per object — Acct: {"billing":{street,city,state,postalCode,country}, "shipping":{street,city,state,postalCode,country}}; Contact: {"mailing":{street,city,state,postalCode,country}, "other":{street,city,state,postalCode,country}}; Lead: {"address":{street,city,state,postalCode,country}}; Opp: null; Case: null
Combined address — searchable for geo discovery, not queryable in Phase 1 per Yogesh review
22 Common Status String
Lifecycle status of the record (e.g. 'Open', 'Closed Won', 'Qualified'). For Opportunity this is StageName (also duplicated to Opp-specific Stage). Null for Account and Contact.
Opp StageName duplicated to Opp-specific Stage; Acct & Contact have no native status
Acct: null; Opp: StageName; Lead: Status; Contact: null; Case: Status
Lifecycle stage — "open cases", "closed-won opps"
23 Common IsClosed Boolean
Boolean indicating the record has reached a terminal state (closed case, closed opp, converted lead). For Lead, maps from IsConverted. Null for Account and Contact.
Lead IsConverted ≠ IsClosed semantically
Acct: null; Opp: IsClosed; Lead: IsConverted; Contact: null; Case: IsClosed
Terminal-state flag
24 Common LastActivityDate DateTime
Date of the most recent logged activity (call, email, task) on the record. Useful for detecting stale records (e.g. 'accounts with no activity in 90 days'). Null for Case.
Null for Case
Acct: LastActivityDate; Contact: ...; Lead: ...; Opp: ...; Case: null
Date of last logged activity (call, email, task)
25 Common Industry String
Industry classification picklist (e.g. 'Technology', 'Healthcare', 'Finance'). Only populated for Account and Lead. Enables queries like 'show tech industry accounts'.
Picklist; only populated for Account & Lead
Acct: Industry; Lead: Industry; Contact: null; Opp: null; Case: null
"Show tech industry records"
26 Common Rating String
Engagement rating picklist (Hot, Warm, Cold). Same picklist on both Account and Lead. Null for Contact, Opportunity, and Case.
Picklist; same values on Account & Lead; null for other objects
Acct: Rating; Lead: Rating; Contact: null; Opp: null; Case: null
Engagement rating (Hot/Warm/Cold)
27 Common Website String
Company website URL. Only populated for Account and Lead. Null for Contact, Opportunity, and Case.
Only populated for Account & Lead; null for other objects
Acct: Website; Lead: Website; Contact: null; Opp: null; Case: null
Company website URL
28 Common AnnualRevenue Int64
Annual revenue of the company, normalized to the org's base currency. Only populated for Account and Lead. Base currency must be specified in the Copilot description during Connector setup.
Normalized to org's base currency; base currency must be specified in Copilot description during Connector setup (2026-04-09 review)
Acct: AnnualRevenue; Lead: AnnualRevenue; Contact: null; Opp: null; Case: null
Revenue-based filtering — "accounts over $1M"
29 Common NumberOfEmployees Int64
Number of employees at the company. Only populated for Account and Lead.
Only Account & Lead
Acct: NumberOfEmployees; Lead: NumberOfEmployees; Contact: null; Opp: null; Case: null
Size-based filtering — "enterprise accounts with 1000+ employees"
30 Common ParentId String
Foreign key to the parent record. Account links to parent Account; Case links to parent Case. The 'parentId' semantic label enables platform hierarchy navigation.
parentId
Account → parent Account; Case → parent Case; null for other objects
Acct: ParentId; Case: ParentId; Lead: null; Contact: null; Opp: null
FK to parent record; enables hierarchy features
31 Common ParentName String
Display name of the parent record. For Account this is the parent account name; for Case it's the parent case number. Denormalized for display without additional lookups.
Account uses parent account name; Case uses parent case number
Acct: Parent.Name; Case: Parent.CaseNumber; others: null
Parent record display name — denormalized
32 Common ParentUrl String
URL deep link to the parent record in Salesforce. Null when no parent relationship exists.
parentURL
Null when ParentId is empty
Computed: {instanceUrl}/{ParentId}
Deep link to parent record
33 Common ClosedDate DateTime
Date the record was closed or converted. For Opportunity this is CloseDate; for Lead it's ConvertedDate; for Case it's ClosedDate. Null for Account and Contact.
Lead duplicates from ConvertedDate; Acct & Contact have no close date
Acct: null; Opp: CloseDate; Lead: ConvertedDate; Contact: null; Case: ClosedDate
Date the record was closed/converted
34 Ownership String
Ownership structure picklist (Public, Private, Subsidiary, Other).
Picklist: Public, Private, Subsidiary, etc.
Ownership
"Show publicly traded accounts"
35 TickerSymbol String
Stock market ticker symbol (e.g. 'MSFT', 'AAPL'). Only relevant for publicly traded companies.
Null for private companies
TickerSymbol
Stock ticker for public companies
36 SicCode String
Standard Industrial Classification (SIC) code for industry categorization. Complements the Industry picklist for more granular classification.
Complements Industry for fine-grained classification
Sic
Standard Industrial Classification code
37 Site String
Location descriptor label for the account (e.g. 'HQ', 'Branch', 'Regional Office'). Not the website URL — purely an organizational location label.
Not the website — this is a location descriptor
Site
Account site/location label (e.g. "HQ", "Branch")
38 Contact JobTitle String
Job title of the contact or lead (e.g. 'VP of Engineering', 'CTO'). Free-text field with inconsistent values — better suited as searchable for keyword discovery rather than queryable. Renamed from Title to JobTitle to avoid confusion with Object Type.
Renamed from Title to JobTitle to avoid confusion; covers both Contact and Lead Title fields. Searchable-only per Yogesh review 2026-04-09
Contact: Title
Job title — searchable for keyword discovery, not queryable due to inconsistent values (CTO vs Chief Technology Officer)
39 Contact Department String
Department the contact belongs to (e.g. 'Engineering', 'Sales', 'Marketing'). Free-text field with inconsistent entries — better suited as searchable rather than queryable.
Searchable-only per Yogesh review 2026-04-09
Department
Department — searchable for keyword discovery, not queryable due to inconsistent values
40 Contact Birthdate DateTime
Contact's date of birth. PII-sensitive — some organizations may choose not to index this field.
PII consideration
Birthdate
Contact's date of birth
41 Contact AssistantName String
Name of the contact's administrative assistant.
AssistantName
Name of contact's assistant
42 Contact ReportsTo String
Name of the contact's manager/supervisor, denormalized from the ReportsTo relationship. Enables hierarchical queries like 'who does X report to'.
Enables "who does X report to" queries
ReportsTo.Name
Manager/supervisor name — denormalized
43 Contact ReportsToId String
Salesforce ID of the contact's manager/supervisor. Enables hierarchy traversal for queries like 'find all contacts reporting to X'. Changed from URL to ID per schema review — IDs are needed for programmatic hierarchy navigation.
Changed from ReportsToUrl to ReportsToId per Yogesh review 2026-04-09: IDs enable hierarchy traversal
ReportsToId
Manager ID — enables hierarchy traversal ("find all contacts reporting to X")
44 Lead ConvertedDate DateTime
Date when the lead was converted to a Contact + Account + Opportunity. Null for unconverted leads.
Null for unconverted leads
ConvertedDate
Date the lead was converted
45 Lead ConvertedOpportunityName String
Name of the Opportunity record created during lead conversion. Denormalized from ConvertedOpportunityId for human-readable display. Null if no Opportunity was created.
Null if no Opp was created during conversion
ConvertedOpportunity.Name
Name of the Opportunity created at conversion
46 Lead ConvertedOpportunityId String
Salesforce ID of the Opportunity record created during lead conversion. Enables relationship traversal to the converted opportunity. Null if no Opportunity was created.
Changed from ConvertedOpportunityUrl to ConvertedOpportunityId per Yogesh review 2026-04-09
ConvertedOpportunityId
ID of Opportunity created at conversion — enables relationship traversal
47 Lead Company String
Company or organization name for the lead. Free-text field populated before conversion. After conversion, the Account name is available via common AccountName.
Free-text field; pre-conversion only
Company
Lead company name — "leads from Acme"
48 Opportunity Stage String
Opportunity pipeline stage (e.g. 'Prospecting', 'Negotiation', 'Closed Won'). Intentionally duplicates common Status because Stage is the primary CRM concept for opportunities.
Duplicates common Status intentionally
StageName
Pipeline stage — "Prospecting", "Closed Won"
49 Opportunity Amount Int64
Deal monetary value. Key pipeline metric for revenue-based queries like 'opportunities over $100K'. Normalized to org's base currency. Base currency must be specified in the Copilot description during Connector setup.
Normalized to org's base currency; base currency must be specified in Copilot description during Connector setup (2026-04-09 review)
Amount
Deal value — "opportunities over $100K"
50 Opportunity Probability Int32
Estimated probability of winning the deal as a percentage (0-100). Often auto-populated based on Stage in many Salesforce orgs.
Normalized to org's base currency; base currency must be specified in Copilot description during Connector setup (2026-04-09 review)
Probability
Win probability percentage
51 Opportunity ExpectedRevenue Int64
Weighted expected revenue calculated as Amount multiplied by Probability. Computed by Salesforce; normalized to org's base currency. Base currency must be specified in the Copilot description during Connector setup.
Normalized to org's base currency; base currency must be specified in Copilot description during Connector setup (2026-04-09 review)
ExpectedRevenue
Weighted revenue (Amount x Probability)
52 Opportunity NextStep String
Free-text field describing the next planned action or milestone for this deal.
NextStep
Free-text next action for the deal
53 Opportunity IsWon Boolean
Boolean flag indicating whether the opportunity was won. Combined with IsClosed distinguishes between 'Closed Won' and 'Closed Lost'.
Complements IsClosed — closed-won vs closed-lost
IsWon
Win/loss flag
54 Opportunity ForecastCategory String
Sales forecast category bucket (Pipeline, Best Case, Commit, Closed). Key field for sales forecasting roll-ups and pipeline reviews.
Key for sales forecasting roll-ups
ForecastCategoryName
Forecast bucket (Pipeline, Best Case, Commit, Closed)
55 Opportunity FiscalQuarter Int32
Fiscal quarter number (1-4) computed by Salesforce based on CloseDate and the org's fiscal year settings.
SF-computed from CloseDate + org fiscal year settings
FiscalQuarter
Fiscal quarter (1-4)
56 Opportunity FiscalYear Int32
Fiscal year number computed by Salesforce based on CloseDate and the org's fiscal year settings.
SF-computed
FiscalYear
Fiscal year
57 Opportunity Fiscal String
Human-readable fiscal period label combining year and quarter (e.g. '2026 Q2'). Convenience property for display.
Combined fiscal quarter + year
Fiscal
Fiscal period label (e.g. "2026 Q2")
58 Case Subject String
Case subject line / headline summarizing the issue. Primary textual identifier beyond the auto-numbered CaseNumber.
Primary text for case identification beyond CaseNumber
Subject
Case headline/summary
59 Case Priority String
Case priority picklist (High, Medium, Low, Critical). Key triage filter for support workflows — 'show high priority cases'. Semantic label 'priority'.
priority
Key triage filter
Priority
Case priority (High/Medium/Low)
60 Case Reason String
Root cause category picklist (e.g. 'Installation', 'Performance', 'User Error').
Picklist; categorizes root cause
Reason
Case reason (e.g. "Installation", "Performance")
61 Case IsEscalated Boolean
Boolean flag indicating the case has been escalated. Useful for identifying and filtering escalated support issues.
Useful for escalation reporting
IsEscalated
Whether the case has been escalated
62 Case InternalComments String
Internal agent-facing comments and case notes. Mapped to CONTENT for semantic search alongside the Description field.
Mapped to CONTENT alongside Description
Comments
Internal comments / case notes
63 Case SuppliedEmail String
Email address submitted through Web-to-Case or Email-to-Case. May differ from the linked Contact's email for unlinked cases.
May differ from Contact email
SuppliedEmail
Email address submitted via Web-to-Case