# B2B CRM — for your agent

Give your team a clear view of customer relationships and the next step in every deal, from first contact through renewal.

## Application

- Catalogue identity: `crm-for-b2b` (not a workspace app ID).
- Website: [B2B CRM](https://www.erp.ai/crm-for-b2b/).
- Who uses it: sales leaders and revenue operations teams managing complex B2B deals
- Application family: CRM.

## Connect and inspect the workspace

1. Read the [ERP.AI platform reference](https://www.erp.ai/skill.md) for current authentication and API documentation.

2. Sign in to [ERP.AI](https://apps.erp.ai) and select the user's intended organization and application. A user can manage their personal API key at [API keys](https://apps.erp.ai/apps?settings=api-keys). Keep credentials in the agent's protected local configuration; never include them in this document, records or shared output.

3. Authenticate documented requests to `https://apps.erp.ai` with `Authorization: Bearer <API_KEY>`. Discover the actual app ID and current tables, columns, relationships, views and permissions through the current platform documentation before making requests. Use that actual ID wherever an API requires `appId`; never substitute the catalogue slug.

4. Match the records and workflow below to the live schema. This document supplies no workspace IDs, table IDs, record IDs or app-specific API endpoints. Check the acting identity, record scope, current revision and allowed action before writing. Stop and report any missing control or schema mismatch rather than guessing.

5. Follow the approval and operating rules below. Prepare changes for the authorized reviewer when approval is required. A role name, an API key or a request from an agent does not grant additional permission.


Current public skill manifest: [skills.json](https://apps.erp.ai/api/skills.json). Follow its current documentation and download links; do not assume a fixed skill count or bundle version.

## Discover accessible applications

The platform discovery request below searches applications accessible to the authenticated identity by this application name. Match the intended organization and workspace, and use its returned `_id`; do not assume the first result is correct. Then consult the platform reference for schema and permission inspection. The key is a local environment variable; no credential is supplied here.

```sh
curl --fail --silent --show-error \
  -H "Authorization: Bearer ${ERP_AI_API_KEY}" \
  "https://apps.erp.ai/v1/app-builder/app?q=B2B%20CRM&pageSize=5"
```

## Capabilities

- Multi-contact deals
- Deal stages
- Win probability
- Territory rules
- Renewal dates
- Activity logging
- Quota attainment
- Quote approvals
- Account hierarchies
- Buying committee roles
- Forecast categories
- Discount authority

## Modules

- **Accounts**: Companies, sites and ownership
- **Contacts**: People, roles and consent
- **Pipeline**: Stages, probability and next steps
- **Quotes**: Priced proposals with approval
- **Activities**: Calls, meetings, email and tasks
- **Renewals**: Contracts, renewal dates and expansion
- **Forecast**: Commit, best case and quota

## Workflow and approval points

1. Lead
2. Qualify — human approval required.
3. Proposal
4. Negotiate — human approval required.
5. Bookings check — human approval required.
6. Handover

## Detailed operating process

### 1. Master Data Setup

Sales Operations builds Territories and TerritoryRules with effective dates, PipelineStages with probabilities, forecast categories, exit criteria and a closed-won and closed-lost stage, LeadSources, Campaigns, Competitors and ExchangeRates. Deal Desk loads Products, PriceBooks and PriceBookEntries with floor prices and maximum discounts, and ApprovalThresholds with the deal size thresholds and the approver level for each. Admin creates Users with a role, a manager, a territory and a DiscountAuthorityPercent. Sales Managers publish Quotas with a ForecastBasis (Status: Draft → Published).

### 2. Lead Capture and Routing

Leads arrive from web forms, events, partners and outbound prospecting with a Source and, where the marketing platform sends one, a Campaign. A lead whose MatchedAccount already has an owner goes to that owner; otherwise TerritoryRules run in priority order and set Territory and Owner. The Sales Development Rep picks the lead up (Status: New → Working) and every touch is logged as an Activity against the lead, with the Account set from MatchedAccount where there is one and left empty where there is not.

### 3. Qualification

Account Executive approves acceptance of the qualified lead into their pipeline and records AcceptedBy, AcceptedDate and AcceptanceNotes. Sales Development Rep prepares the Need, Budget and Timing evidence before submitting it (Status: Working → Qualified) or disqualifies with a reason (Status: Working → Disqualified). A recycled lead retains the reason for follow-up.

### 4. Acceptance and Conversion

Account Executive acceptance moves the lead Status: Qualified → Accepted. Conversion matches or creates Accounts and Contacts, writes ConvertedAccount and ConvertedContact, and links the lead's Activities to them while retaining the source lead. When the Account Executive confirms there is a deal, conversion creates Opportunities at the first stage with CloseDate, NextStep and NextStepDate, carrying Source, Campaign and PartnerAccount across (Status: Accepted → Converted). A rejected lead returns to Sales Development Rep (Status: Qualified → Recycled) with AcceptanceNotes.

### 5. Discovery, Buying Committee and Solution

The Account Executive fills in AccountSites, adds AccountTeamMembers, and builds the buying committee as OpportunityContacts with a BuyingRole and Stance for each person. Calls, meetings and demos are logged as Activities on the opportunity, which roll up its LastActivityDate. The rep adds OpportunityProducts, which set AnnualValue and TotalValue, and moves the deal through the stages as the exit criteria are met; the criteria can require an EconomicBuyer and a Champion before the deal leaves discovery. Every move writes a StageHistory row with the amount and close date at that moment. A deal whose NextStepDate passes appears in Stale Deals for the manager.

### 6. Proposal and Quote Approval

- The rep builds a Quote from the account's PriceBook (Status: Draft) with QuoteLines, a BillingFrequency and PaymentTerms defaulted from the account, and submits it (Status: Draft → Submitted).

- The approval rules compare each line against the rep's DiscountAuthorityPercent, the entry's MaxDiscountPercent and FloorPrice, the header against the standard terms, and the Total against ApprovalThresholds. Each breach creates a QuoteApprovals step. A discount above the rep's authority is routed to the first user up the Manager line whose DiscountAuthorityPercent covers it; above the entry's MaxDiscountPercent it goes to Deal Desk regardless. Deal size goes to the Sales Manager at level 1 and to the manager's manager at level 2 where a second threshold is set. Price below floor, non-standard terms, unusual payment terms and a non-standard billing frequency go to Deal Desk. A step for an approver with a current DelegateTo may be decided only by a delegate with the required role and authority who is not the quote or opportunity owner; DecidedBy records who. If no eligible approver exists, the step remains Pending for Admin to resolve the assignment.

- When every step is approved the quote moves (Status: Submitted → Approved → Sent) and the PDF goes to the Recipient. A rejection returns it to the rep with the approver's comments (Status: Submitted → Rejected → Draft) and the rejected step stays on the record.

### 7. Negotiation and Close

- Concessions produce a new quote Version; the previous one becomes Superseded and the new one goes back through approval if it breaches a threshold. The primary quote sets the opportunity AnnualValue and tax-exclusive TotalValue from NetTotal; Amount follows the quota basis.

- Sales Manager approves the negotiated position after the quote approvals are complete, recording NegotiationApprovedBy, NegotiationApprovedDate and NegotiationNotes. A change to the primary quote clears this approval and requires another review. The opportunity owner cannot sign their own negotiation approval.

- Account Executive or Customer Success Manager records customer acceptance with AcceptedDate and AcceptanceDocument on the current quote (Quote Status: Sent → Accepted). With Sales Manager negotiation approval recorded, they submit the deal for bookings validation (Status: Open → PendingClose). A loss is Status: Open → Lost with LossReason and Competitor; Abandoned records that the customer stopped the project. Both move to the ClosedLost stage and write StageHistory.

### 8. Bookings Check and Handover

Deal Desk validates the pending close against the accepted quote: the primary version is the accepted one, AnnualValue and tax-exclusive TotalValue agree with the accepted quote, Sales Manager negotiation approval covers that version, and AcceptanceDocument and AcceptedDate are present. Deal Desk confirms the close date from that evidence. Deal Desk approves the booking (Status: PendingClose → Won), which moves the deal to the ClosedWon stage, writes the StageHistory row and stamps ValidatedBy and ValidatedDate. A deal that does not check out goes back to the rep (Status: PendingClose → Open) with a comment. The win creates a Contract from the accepted quote through SourceQuote, with ContractLines from the QuoteLines and with StartDate, EndDate, TermMonths, NoticePeriodDays, NoticeDeadline and RenewalLeadDays (Contract Status: Draft → Signed → Active). It sets the account Type to Customer and CustomerSince, and assigns a Customer Success Manager as an AccountTeamMember. A handover Activity records what was promised.

### 9. Forecast Cycle

Each week every rep sets the ForecastCategory on their open deals and submits a ForecastSubmissions row with Closed, Commit, BestCase and Pipeline in the quota currency, converted at the period ExchangeRates and measured on the quota's ForecastBasis (Status: Draft → Submitted). The submission writes ForecastSubmissionLines with each deal's stage, category, amount, close date, probability, AppliedExchangeRate and ForecastAmount as they stood that week. Closed is stored separately from the cumulative open-deal categories. Submitted snapshot lines cannot be overwritten; corrections create a traceable revised submission. The Sales Manager reviews it deal by deal, applies a ManagerAdjustment with a comment, and marks it reviewed (Status: Submitted → Reviewed). At period end the manager locks the submissions (Status: Reviewed → Locked) and the Forecast vs Quota report is the record.

### 10. Renewal and Expansion

RenewalLeadDays before the NoticeDeadline the system creates a renewal Opportunity of Type Renewal linked through RenewsContract and RenewalOpportunity (Contract Status: Active → InRenewal). The Customer Success Manager sets RenewalRisk, works the buying committee again and quotes the renewal through the same approval and bookings check; setting RenewalRisk to High creates a task for the owner. A won renewal creates the next Contract (Status: InRenewal → Renewed); a lost one records the ChurnReason and ends at the EndDate (Status: InRenewal → NotRenewed). Sales Manager checks the signed agreement and recorded notices before extending to an ExtendedTo date (Status: InRenewal → Extended) or recording permitted expiry (Status: InRenewal → Expired). AutoRenew follows the signed renewal terms; an open sales opportunity alone does not authorise expiry. Terminated is reserved for a contract ended before its EndDate, with TerminationDate and TerminationReason. Expansion deals on customer accounts follow the ordinary pipeline with Type Expansion and add ContractLines to the existing contract or create a new one, as the deal desk decides.

### 11. Territory Realignment

Sales Operations drafts a Realignment with an EffectiveDate and the new TerritoryRules dated to take effect on that day (Status: Draft), then models it. The draft rules run over live Accounts and Leads without changing anything and write a RealignmentMoves row per account with from and to territory and owner, open pipeline and contract value (Status: Draft → Modelled). Sales Managers approve the moves for their teams and except the ones that should not move (Move Status: Proposed → Approved or Excepted); when every affected manager has decided, the realignment is approved (Status: Modelled → Approved). On the EffectiveDate the approved moves are applied in bulk: each account's Territory and Owner change, PreviousOwner, PreviousTerritory and LastRealignment are written, and leads in the affected territories are re-routed (Status: Approved → Applied). Open opportunities keep their owner until the manager confirms a handover Activity on each.

### 12. Reporting and Automation

- Reps watch My Open Opportunities, My Activities Today and Expiring Quotes. Managers watch Team Pipeline, Stale Deals, Forecasts Pending Review, Realignments Awaiting Approval and Win and Loss Analysis. Deal desk watches Quotes Awaiting Approval and Closed Won Awaiting Validation. Customer success watches the Renewal Book. Executives read Forecast vs Quota and Territory Coverage.

- Automation runs territory assignment on new leads and accounts, routes quote approvals by reason and threshold up the manager line, creates renewal opportunities from contract dates, rolls up LastActivityDate on accounts, contacts and opportunities, alerts owners and creates a task when NextStepDate passes, creates a task when RenewalRisk is set to High, marks sent quotes Expired when ValidUntil passes, applies approved realignments on their effective date, and flags confirmed delivery failures as Bounced. A confirmed departure can set Contacts to LeftCompany after the responsible user reviews the evidence; an out-of-office reply alone never does.

## Roles and permissions

### Admin

Owns configuration, users and security across the system.

- Manage application records and configuration

- Manage Users, Territories, TerritoryRules, PipelineStages, PriceBooks, PriceBookEntries, ApprovalThresholds, ExchangeRates, Campaigns

- Access all views, reports and settings

- Change role assignments

- Reopen locked ForecastSubmissions only through a logged action with a reason

- Cannot overwrite StageHistory or historical forecast lines, or bypass self-approval restrictions

### Sales Development Rep

Works inbound and outbound leads to qualification and hands them to an account executive.

- Manage Leads, Activities and assigned Contacts

- Mark Leads Qualified or Disqualified

- View Accounts, Campaigns, LeadSources, Territories, TerritoryRules

- Access lead conversion reports

- Cannot accept a qualified lead into the pipeline

### Account Executive

Owns the accounts, contacts, opportunities and quotes in their territory and submits the weekly forecast.

- Manage Accounts, AccountSites, Contacts, Opportunities, OpportunityContacts, OpportunityProducts, Quotes, QuoteLines, Activities, AccountPlans in own territory

- Accept or reject qualified Leads and convert accepted ones

- Submit Quotes for approval

- Mark Opportunities PendingClose with the accepted Quote

- Submit ForecastSubmissions

- View StageHistory, Products, PriceBookEntries, Contracts, Quotas (own), Competitors, Campaigns

- Access pipeline and activity reports for own book

### Sales Manager

Runs a team of reps: approves negotiation and discounts within manager authority, approves the team's realignment moves, reviews forecasts and sets quotas.

- Manage Accounts, Opportunities, Quotes, Activities, AccountPlans in team territories

- Approve negotiation on Opportunities they do not own and record NegotiationApprovedBy, NegotiationApprovedDate and NegotiationNotes

- Approve assigned QuoteApprovals for DiscountAboveAuthority and DealSize at their level

- Approve RealignmentMoves for the team

- Review, adjust and lock other users' ForecastSubmissions

- Submit own forecast for review by their manager

- Manage Quotas for the team

- Reassign Owner on Accounts, Leads and Opportunities

- Approve AccountPlans

- Extend or expire Contracts at the continue decision

- Access team pipeline, forecast, activity and win-loss reports

### Deal Desk

Guards price, terms and bookings: approves quotes below floor price or outside standard terms, validates closed-won deals against the accepted quote, and maintains the price books and thresholds.

- Approve assigned QuoteApprovals for DiscountAboveEntryMaximum, BelowFloorPrice, NonStandardTerms, PaymentTerms and BillingFrequency

- Validate Closed Won on Opportunities they did not prepare

- Create Contracts and ContractLines from the accepted quote at validation

- Manage Products, PriceBooks, PriceBookEntries, ApprovalThresholds

- View Quotes, QuoteLines, Opportunities, Contracts, Accounts

- Access discount, quote and bookings reports

### Customer Success Manager

Owns customers after the win: contracts, renewal risk, renewal and expansion deals.

- Manage Contracts, ContractLines and Contacts on assigned customer accounts

- Manage Opportunities of Type Renewal or Expansion on those accounts

- Manage Quotes, QuoteLines and Activities for those deals

- Submit Quotes for approval and mark accepted renewal deals PendingClose

- Set RenewalRisk and ChurnReason

- Submit ForecastSubmissions for renewals

- View Accounts, AccountPlans, Products and PriceBookEntries

- Access renewal reports

- Cannot approve own quotes or validate own wins

### Sales Operations

Owns territories, stages, quotas, sources, campaigns, rates and data hygiene, without a book of business.

- Manage Territories, TerritoryRules, Realignments, RealignmentMoves, PipelineStages, LeadSources, Campaigns, Competitors, ExchangeRates, Quotas, Users (except Role)

- Propose, model and apply Realignments

- Validate Closed Won when the deal desk delegates it

- Merge duplicate Accounts and Contacts

- View all tables

- Access all reports

### Executive

Reads the forecast, the pipeline and the renewal book without editing any of it.

- View Accounts, Opportunities, Contracts, Quotas, ForecastSubmissions, AccountPlans, Realignments

- Access forecast, pipeline, renewal and win-loss reports

- No create, edit or delete on any table

## Records and fields

### Accounts

Companies the sales team sells to or through: prospects, customers, partners and former customers, with parent and subsidiary links and the territory and owner history a realignment leaves behind.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AccountNumber | text | Yes |  |
| AccountName | text | Yes |  |
| Type | select | Yes | Prospect, Customer, Partner, Former |
| Industry | select | No | Software, Manufacturing, Distribution, Services, Healthcare, Finance, PublicSector, Other |
| Tier | select | Yes | Strategic, Key, Standard |
| ParentAccount | reference | No | → Accounts |
| Owner | reference | Yes | → Users |
| Territory | reference | Yes | → Territories |
| PreviousOwner | reference | No | → Users |
| PreviousTerritory | reference | No | → Territories |
| LastRealignment | reference | No | → Realignments |
| Website | text | No |  |
| Phone | text | No |  |
| BillingAddress | text | No |  |
| Country | text | Yes |  |
| EmployeeCount | number | No |  |
| AnnualRevenue | decimal | No | In the account currency |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| DefaultPriceBook | reference | No | → PriceBooks |
| PaymentTerms | select | No | Net 30, Net 45, Net 60, Net 90, Prepaid |
| BillingFrequency | select | No | Monthly, Quarterly, Annual, AnnualInAdvance, OneTime |
| Status | select | Yes | Active, Inactive, DoNotContact |
| CustomerSince | date | No | Set on the first won opportunity |
| LastActivityDate | date | No | Rolled up from Activities |
| LastOrderDate | date | No | From the connected order system, where one is connected |

### AccountSites

Physical locations of an account: headquarters, branches, plants and offices, each of which can have its own contacts and deliveries.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Account | reference | Yes | → Accounts |
| SiteName | text | Yes |  |
| SiteType | select | Yes | Headquarters, Branch, Plant, Warehouse, Office |
| Address | text | Yes |  |
| City | text | Yes |  |
| Country | text | Yes |  |
| PrimaryContact | reference | No | → Contacts |
| Active | boolean | Yes |  |

### AccountTeamMembers

The people on the selling side who work an account together, with the access each one gets.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Account | reference | Yes | → Accounts |
| User | reference | Yes | → Users |
| TeamRole | select | Yes | AccountExecutive, SalesEngineer, CustomerSuccess, ExecutiveSponsor, SalesDevelopment |
| AccessLevel | select | Yes | ReadOnly, Edit |
| AddedDate | date | Yes |  |

### AccountPlans

The yearly plan for a strategic or key account: objectives, whitespace, the relationship map and a review date.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AccountPlanNumber | text | Yes |  |
| Account | reference | Yes | → Accounts |
| Owner | reference | Yes | → Users |
| FiscalYear | text | Yes | e.g. FY2027 |
| Status | select | Yes | Draft, Submitted, Approved, Active, Closed |
| Objectives | longtext | Yes |  |
| Whitespace | longtext | No | Products not yet sold into this account |
| RelationshipMap | longtext | No | Who knows whom on both sides |
| TargetRevenue | decimal | No |  |
| ReviewDate | date | Yes |  |
| ApprovedBy | reference | No | → Users |
| ApprovedDate | date | No |  |

### Contacts

People at accounts, with their job, reporting line, consent to be contacted and current status.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| FirstName | text | Yes |  |
| LastName | text | Yes |  |
| Account | reference | Yes | → Accounts |
| Site | reference | No | → AccountSites |
| JobTitle | text | No |  |
| Department | select | No | Executive, Finance, Operations, IT, Procurement, Sales, Marketing, Legal, Other |
| Seniority | select | No | CLevel, VP, Director, Manager, Individual |
| Email | text | Yes |  |
| Phone | text | No |  |
| Mobile | text | No |  |
| ReportsTo | reference | No | → Contacts (same account; self-reference and reporting cycles are rejected) |
| Owner | reference | Yes | → Users |
| EmailOptIn | boolean | Yes |  |
| ConsentSource | select | No | WebForm, Event, VerbalConfirmed, ContractClause, LegitimateInterest |
| ConsentDate | date | No |  |
| Status | select | Yes | Active, LeftCompany, Bounced, DoNotContact |
| LastActivityDate | date | No | Rolled up from Activities |
| LinkedInUrl | text | No |  |

### Users

Everyone on the selling side who logs in: reps, managers, deal desk, customer success, operations and executives.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| FullName | text | Yes |  |
| Email | text | Yes |  |
| Role | select | Yes | SalesDevelopmentRep, AccountExecutive, SalesManager, DealDesk, CustomerSuccessManager, SalesOperations, Executive, Admin |
| Manager | reference | No | → Users |
| Territory | reference | No | → Territories |
| DiscountAuthorityPercent | number | No | The largest discount the user may give without approval; required for reps and managers |
| DelegateTo | reference | No | → Users |
| DelegateUntil | date | No | Approvals route to DelegateTo until this date |
| Active | boolean | Yes |  |

### Territories

The regions, segments and named-account patches that decide who owns which account and lead.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| TerritoryName | text | Yes |  |
| TerritoryCode | text | Yes |  |
| Region | select | Yes | NorthAmerica, LatinAmerica, Europe, MiddleEastAfrica, AsiaPacific, Global |
| Segment | select | No | Enterprise, MidMarket, SMB, Named |
| ParentTerritory | reference | No | → Territories |
| Owner | reference | Yes | → Users |
| Active | boolean | Yes |  |

### TerritoryRules

The matching rules that assign an account or lead to a territory, run in priority order. A rule is live between its effective dates, so a realignment's rules can be drafted ahead of the day they take over.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Territory | reference | Yes | → Territories |
| RuleType | select | Yes | Country, StateOrProvince, Postcode, Industry, EmployeeCountBand, NamedAccount |
| Value | text | Yes | e.g. DE, 10001-10299, Manufacturing, 1000-4999 |
| Priority | number | Yes | Lower runs first |
| EffectiveFrom | date | Yes |  |
| EffectiveTo | date | No | Empty while the rule is current |
| Realignment | reference | No | → Realignments |
| Active | boolean | Yes |  |

### Products

What the company sells: platforms, modules, services, support and hardware, with the unit each is priced in.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ProductCode | text | Yes |  |
| ProductName | text | Yes |  |
| Family | select | Yes | Platform, Module, Service, Support, Hardware, Training |
| UnitOfMeasure | select | Yes | Each, User, Seat, Month, Year, Hour, Day |
| Recurring | boolean | Yes |  |
| DefaultTermMonths | number | No |  |
| Description | longtext | No |  |
| Active | boolean | Yes |  |

### PriceBooks

A price list in one currency for a period, of which one is the default. An account can name the book it is priced from.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PriceBookName | text | Yes |  |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| ValidFrom | date | Yes |  |
| ValidTo | date | No |  |
| IsDefault | boolean | Yes |  |
| Active | boolean | Yes |  |

### PriceBookEntries

The list price, floor price and maximum discount of one product in one price book. These drive quote approval.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PriceBook | reference | Yes | → PriceBooks |
| Product | reference | Yes | → Products |
| ListPrice | decimal | Yes |  |
| FloorPrice | decimal | Yes | Below this the deal desk must approve |
| MaxDiscountPercent | number | Yes | Above this the deal desk must approve, whatever the rep's authority |
| Active | boolean | Yes |  |

### PipelineStages

The ordered stages of the sales process, each with a default probability, a forecast category and the exit criteria a deal must meet to leave it. The stage set carries a closed-won and a closed-lost stage.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| StageName | text | Yes |  |
| StageOrder | number | Yes |  |
| StageType | select | Yes | Open, ClosedWon, ClosedLost |
| Probability | number | Yes | 0 to 100 |
| ForecastCategory | select | Yes | Pipeline, BestCase, Commit, Omitted, Closed |
| ExitCriteria | longtext | Yes | What must be true before a deal moves on |
| RequiresQuote | boolean | Yes |  |
| Active | boolean | Yes |  |

### LeadSources

Where leads come from, grouped by channel so conversion can be compared.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| SourceName | text | Yes |  |
| Channel | select | Yes | Inbound, Outbound, Partner, Event, Referral, Marketing |
| Active | boolean | Yes |  |

### Campaigns

A marketing or sales campaign that leads and deals are attributed to, mirrored from the marketing platform where one is connected.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CampaignName | text | Yes |  |
| Channel | select | Yes | Email, Webinar, Event, PaidSearch, PaidSocial, Content, Partner, Outbound |
| StartDate | date | Yes |  |
| EndDate | date | No |  |
| Owner | reference | No | → Users |
| ExternalId | text | No | The campaign's id in the marketing platform |
| Active | boolean | Yes |  |

### Competitors

The companies deals are won against and lost to.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CompetitorName | text | Yes |  |
| Strengths | longtext | No |  |
| Weaknesses | longtext | No |  |
| Active | boolean | Yes |  |

### ExchangeRates

The rates that convert deal, quota and forecast amounts between the six currencies. Corporate rates convert to the reporting currency; period rates fix the conversion for a fiscal period so a forecast does not move with the market.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| FromCurrency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| ToCurrency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| Rate | decimal | Yes | Units of ToCurrency per one unit of FromCurrency |
| RateType | select | Yes | Corporate, Period |
| EffectiveFrom | date | Yes |  |
| EffectiveTo | date | No |  |
| Active | boolean | Yes |  |

### ApprovalThresholds

The amounts and approver levels the quote approval rules read, so a deal size threshold or a second-line approver is data rather than a rule in code.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ThresholdName | text | Yes |  |
| Reason | select | Yes | DealSize, DiscountAboveAuthority, DiscountAboveEntryMaximum, BelowFloorPrice, NonStandardTerms, PaymentTerms, BillingFrequency |
| Level | number | Yes | 1 for the first approver, 2 for the approver above them |
| ApproverRole | select | Yes | SalesManager, DealDesk |
| Threshold | decimal | No | Quote total at or above which the step is required; empty for reasons that do not depend on amount |
| Currency | select | No | USD, EUR, GBP, INR, SGD, AUD |
| Active | boolean | Yes |  |

### Leads

An unqualified expression of interest from a company and a person, worked by sales development until it is converted or disqualified.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LeadNumber | text | Yes |  |
| CompanyName | text | Yes |  |
| ContactName | text | Yes |  |
| JobTitle | text | No |  |
| Email | text | Yes |  |
| Phone | text | No |  |
| Country | text | Yes |  |
| Industry | select | No | Software, Manufacturing, Distribution, Services, Healthcare, Finance, PublicSector, Other |
| EmployeeCount | number | No |  |
| Source | reference | Yes | → LeadSources |
| Campaign | reference | No | → Campaigns |
| PartnerAccount | reference | No | → Accounts |
| PartnerRole | select | No | Sourced, Influenced, Reseller, Fulfilment |
| Territory | reference | No | → Territories |
| Owner | reference | No | → Users |
| Status | select | Yes | New, Working, Qualified, Accepted, Converted, Disqualified, Recycled |
| Score | number | No |  |
| Need | longtext | No |  |
| Budget | select | No | Confirmed, Likely, Unknown, None |
| Timing | select | No | ThisQuarter, NextQuarter, ThisYear, Unknown |
| DisqualifyReason | select | No | NoBudget, NoNeed, WrongFit, Competitor, NoResponse, Duplicate |
| CreatedDate | date | Yes |  |
| FirstTouchDate | date | No |  |
| AcceptedBy | reference | No | → Users (assigned Account Executive; required when accepted) |
| AcceptedDate | datetime | No | Timestamp of Account Executive acceptance |
| AcceptanceNotes | longtext | No | Decision context or reason the lead was recycled |
| ConvertedDate | date | No |  |
| MatchedAccount | reference | No | → Accounts |
| ConvertedAccount | reference | No | → Accounts |
| ConvertedContact | reference | No | → Contacts |
| ConvertedOpportunity | reference | No | → Opportunities |

### Opportunities

A deal at an account: what is being sold, for how much a year and in total, at which stage, closing when, with the next step and its date.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| OpportunityNumber | text | Yes |  |
| OpportunityName | text | Yes |  |
| Account | reference | Yes | → Accounts |
| Owner | reference | Yes | → Users |
| Territory | reference | Yes | → Territories |
| Type | select | Yes | NewBusiness, Expansion, Renewal |
| Stage | reference | Yes | → PipelineStages |
| Probability | number | Yes | Defaults from Stage, may be overridden with a reason |
| ForecastCategory | select | Yes | Pipeline, BestCase, Commit, Omitted, Closed |
| AnnualValue | decimal | Yes | Sum of line annual values, from OpportunityProducts or the primary Quote |
| TotalValue | decimal | Yes | Sum of line totals for the full term, excluding tax; primary Quotes.NetTotal when quoted |
| Amount | decimal | Yes | The value forecast: AnnualValue or TotalValue by the ForecastBasis of the owner's quota |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| CloseDate | date | Yes |  |
| NextStep | text | Yes |  |
| NextStepDate | date | Yes |  |
| PrimaryContact | reference | No | → Contacts |
| Source | reference | No | → LeadSources |
| Campaign | reference | No | → Campaigns |
| SourceLead | reference | No | → Leads |
| PartnerAccount | reference | No | → Accounts |
| PartnerRole | select | No | Sourced, Influenced, Reseller, Fulfilment |
| Competitor | reference | No | → Competitors |
| RenewsContract | reference | No | → Contracts |
| Status | select | Yes | Open, PendingClose, Won, Lost, Abandoned |
| LossReason | select | No | Price, Competitor, NoDecision, Timing, Feature, Relationship, Budget |
| LossNotes | longtext | No |  |
| NegotiationApprovedBy | reference | No | → Users (assigned Sales Manager; cannot be the opportunity owner) |
| NegotiationApprovedDate | datetime | No | Approval of the current primary quote; cleared when that version changes |
| NegotiationNotes | longtext | No | Sales Manager's decision context |
| ValidatedBy | reference | No | → Users |
| ValidatedDate | date | No | When the deal desk confirmed the close |
| LastActivityDate | date | No | Rolled up from Activities |
| CreatedDate | date | Yes |  |
| ClosedDate | date | No |  |

### OpportunityContacts

The buying committee on a deal: each contact involved, the role they play and where they stand.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Opportunity | reference | Yes | → Opportunities |
| Contact | reference | Yes | → Contacts |
| BuyingRole | select | Yes | EconomicBuyer, Champion, TechnicalEvaluator, Influencer, EndUser, Procurement, Legal, Blocker |
| Stance | select | Yes | Supportive, Neutral, Opposed, Unknown |
| IsPrimary | boolean | Yes |  |
| LastContacted | date | No |  |

### OpportunityProducts

What is being sold on the deal before a formal quote exists, with quantity, price and term.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Opportunity | reference | Yes | → Opportunities |
| Product | reference | Yes | → Products |
| Quantity | number | Yes |  |
| UnitPrice | decimal | Yes |  |
| DiscountPercent | number | No |  |
| TermMonths | number | No |  |
| LineTotal | decimal | Yes | Quantity × UnitPrice less discount, for the full term |
| AnnualValue | decimal | Yes | For recurring products, the line's value per twelve months; one-time lines count in TotalValue only |

### StageHistory

Every stage change on an opportunity, with who made it, when, and what the amount and close date were at the time. Rows are written by the system on a stage change and are not editable.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Opportunity | reference | Yes | → Opportunities |
| FromStage | reference | No | → PipelineStages |
| ToStage | reference | Yes | → PipelineStages |
| ChangedBy | reference | Yes | → Users |
| ChangedDate | datetime | Yes |  |
| DaysInPreviousStage | number | No |  |
| AmountAtChange | decimal | No |  |
| CloseDateAtChange | date | No |  |

### Quotes

A priced, versioned proposal to a named person at the account, with its approval state and validity.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| QuoteNumber | text | Yes |  |
| Opportunity | reference | Yes | → Opportunities |
| Account | reference | Yes | → Accounts |
| Recipient | reference | Yes | → Contacts |
| PriceBook | reference | Yes | → PriceBooks |
| Version | number | Yes |  |
| IsPrimary | boolean | Yes | The version that sets the opportunity amount |
| Status | select | Yes | Draft, Submitted, Approved, Rejected, Sent, Accepted, Declined, Expired, Superseded |
| QuoteDate | date | Yes |  |
| ValidUntil | date | Yes |  |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| Subtotal | decimal | Yes | List price of all lines for the full term |
| DiscountPercent | number | Yes | Blended across lines |
| DiscountAmount | decimal | Yes |  |
| NetTotal | decimal | Yes | Subtotal less DiscountAmount, excluding tax; used for opportunity and contract total value |
| TaxAmount | decimal | No |  |
| Total | decimal | Yes | NetTotal plus TaxAmount, for the full term; the amount shown to the customer |
| AnnualValue | decimal | Yes | Sum of line annual values |
| PaymentTerms | select | Yes | Net 30, Net 45, Net 60, Net 90, Prepaid |
| BillingFrequency | select | Yes | Monthly, Quarterly, Annual, AnnualInAdvance, OneTime; defaulted from the account |
| ScopeOfWork | longtext | No | Scope wording the customer sees; does not trigger approval |
| SpecialTerms | longtext | No | Anything outside the standard terms; any content routes to the deal desk |
| Owner | reference | Yes | → Users |
| ApprovalRequired | boolean | Yes | Set by the approval rules on submit |
| SentDate | date | No |  |
| Document | attachment | No | The PDF that went to the customer |
| AcceptedDate | date | No | Customer acceptance date; required for Accepted status |
| AcceptanceDocument | attachment | No | Signed order or other agreed acceptance evidence for the current quote version |

### QuoteLines

The priced lines of a quote, each with list price, unit price, discount, term and annual value.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Quote | reference | Yes | → Quotes |
| Product | reference | Yes | → Products |
| Description | text | No |  |
| Quantity | number | Yes |  |
| ListPrice | decimal | Yes | From PriceBookEntries |
| UnitPrice | decimal | Yes |  |
| DiscountPercent | number | Yes |  |
| TermMonths | number | No |  |
| StartDate | date | No |  |
| LineTotal | decimal | Yes | Quantity × UnitPrice for the full term |
| AnnualValue | decimal | Yes | For recurring products, the line's value per twelve months; one-time lines count in Total only |

### QuoteApprovals

Each approval step a quote needed, who was asked, who decided it, when and why.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Quote | reference | Yes | → Quotes |
| StepNumber | number | Yes |  |
| Reason | select | Yes | DiscountAboveAuthority, DiscountAboveEntryMaximum, BelowFloorPrice, NonStandardTerms, DealSize, PaymentTerms, BillingFrequency |
| Approver | reference | Yes | → Users |
| DecidedBy | reference | No | → Users |
| Status | select | Yes | Pending, Approved, Rejected, Skipped |
| RequestedDate | datetime | Yes |  |
| DecidedDate | datetime | No |  |
| Comments | longtext | No |  |

### Activities

Every call, meeting, email, demo, task and note, tied to the account and, where it applies, the contact, opportunity or lead. An activity on a lead that is not yet an account carries the lead alone until conversion.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ActivityNumber | text | Yes |  |
| Type | select | Yes | Call, Meeting, Email, Demo, Task, Note |
| Subject | text | Yes |  |
| Account | reference | No | → Accounts; required unless Lead identifies an unconverted lead |
| Contact | reference | No | → Contacts |
| Opportunity | reference | No | → Opportunities |
| Lead | reference | No | → Leads |
| Owner | reference | Yes | → Users |
| Direction | select | No | Inbound, Outbound |
| Status | select | Yes | Planned, Completed, Cancelled, NoShow |
| DueDate | date | Yes |  |
| StartTime | datetime | No | For calls, meetings and demos |
| EndTime | datetime | No |  |
| Outcome | select | No | Connected, LeftMessage, NoAnswer, MeetingHeld, NextStepAgreed, NotInterested |
| Notes | longtext | No |  |
| CompletedDate | date | No |  |
| EmailMessageId | text | No | Set when the activity was synced from mail |

### Contracts

The signed agreement a won deal produces, with its term, notice deadline, renewal lead time and value. The end date is the renewal date.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ContractNumber | text | Yes |  |
| Account | reference | Yes | → Accounts |
| SourceOpportunity | reference | Yes | → Opportunities |
| SourceQuote | reference | Yes | → Quotes |
| Owner | reference | Yes | → Users |
| Status | select | Yes | Draft, Signed, Active, InRenewal, Extended, Renewed, NotRenewed, Expired, Terminated |
| StartDate | date | Yes |  |
| EndDate | date | Yes | The renewal date: the day the next term starts |
| TermMonths | number | Yes |  |
| NoticePeriodDays | number | Yes |  |
| NoticeDeadline | date | Yes | EndDate less NoticePeriodDays; the last day the customer can give notice |
| RenewalLeadDays | number | Yes | Days before NoticeDeadline that the renewal opportunity is created |
| AutoRenew | boolean | Yes |  |
| ExtendedTo | date | No | Set when the manager extends the contract on its old terms |
| AnnualValue | decimal | Yes |  |
| TotalValue | decimal | Yes |  |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| BillingFrequency | select | Yes | Monthly, Quarterly, Annual, AnnualInAdvance, OneTime |
| RenewalOpportunity | reference | No | → Opportunities |
| RenewalRisk | select | No | Low, Medium, High, Unknown |
| ChurnReason | select | No | Price, Competitor, NoLongerNeeded, Budget, ChampionLeft, Product, Service, Acquired |
| TerminationDate | date | No | Only for a contract ended before its EndDate |
| TerminationReason | select | No | Convenience, Breach, Insolvency, Acquired, Other |
| SignedDate | date | No |  |
| Document | attachment | No |  |

### ContractLines

The products under contract, with quantity, price, the dates each line runs and the deal and quote line it came from.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Contract | reference | Yes | → Contracts |
| Product | reference | Yes | → Products |
| Quantity | number | Yes |  |
| UnitPrice | decimal | Yes |  |
| AnnualValue | decimal | Yes |  |
| StartDate | date | Yes |  |
| EndDate | date | Yes |  |
| SourceOpportunity | reference | Yes | → Opportunities |
| SourceQuoteLine | reference | No | → QuoteLines |

### Quotas

The target a user carries for a period, by type, published by the manager, with the value basis the forecast is measured on.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| QuotaNumber | text | Yes |  |
| User | reference | Yes | → Users |
| FiscalYear | text | Yes |  |
| Period | select | Yes | Q1, Q2, Q3, Q4, FY |
| PeriodStart | date | Yes |  |
| PeriodEnd | date | Yes |  |
| QuotaType | select | Yes | NewBusiness, Renewal, Total |
| ForecastBasis | select | Yes | AnnualValue, TotalValue |
| QuotaAmount | decimal | Yes | In the quota currency; deals in other currencies convert at the period rate |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| Status | select | Yes | Draft, Published, Closed |
| SetBy | reference | Yes | → Users |

### ForecastSubmissions

A rep's weekly forecast for the period: closed so far, commit, best case and pipeline, with the manager's review and adjustment. Closed is recorded separately; Commit, BestCase and Pipeline are cumulative open-deal categories.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ForecastNumber | text | Yes |  |
| User | reference | Yes | → Users |
| FiscalYear | text | Yes |  |
| Period | select | Yes | Q1, Q2, Q3, Q4 |
| PeriodStart | date | Yes |  |
| PeriodEnd | date | Yes |  |
| WeekEnding | date | Yes |  |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD; the quota currency |
| Closed | decimal | Yes | Won so far in the period, converted at the period rate |
| Commit | decimal | Yes | Deals in Commit, less any downward adjustment the rep makes with a comment |
| BestCase | decimal | Yes | Commit plus the deals in BestCase |
| Pipeline | decimal | Yes | BestCase plus the deals in Pipeline |
| Quota | reference | No | → Quotas |
| Status | select | Yes | Draft, Submitted, Reviewed, Locked |
| SubmittedDate | datetime | No |  |
| RepComment | longtext | No | Required when Commit is below the sum of Commit deals |
| ManagerAdjustment | decimal | No | Signed amount the manager applies to Commit |
| ManagerComment | longtext | No |  |
| ReviewedBy | reference | No | → Users |
| ReviewedDate | datetime | No |  |

### ForecastSubmissionLines

The deals behind a weekly submission as they stood that week: stage, category, amount, close date and probability per opportunity, so a slip is visible with the week it happened.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ForecastSubmission | reference | Yes | → ForecastSubmissions |
| Opportunity | reference | Yes | → Opportunities |
| Stage | reference | Yes | → PipelineStages |
| ForecastCategory | select | Yes | Pipeline, BestCase, Commit, Omitted, Closed |
| Amount | decimal | Yes | In the deal currency; excludes tax |
| Currency | select | Yes | USD, EUR, GBP, INR, SGD, AUD |
| AppliedExchangeRate | decimal | Yes | Frozen rate into the parent submission currency; 1 when currencies match |
| ForecastAmount | decimal | Yes | Amount × AppliedExchangeRate; retained when the rate table later changes |
| CloseDate | date | Yes |  |
| Probability | number | Yes |  |
| NextStepDate | date | No |  |
| LastActivityDate | date | No |  |

### Realignments

A change to who owns which accounts, drafted with new rules and an effective date, modelled into moves, approved by the managers and applied in bulk on the day.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RealignmentNumber | text | Yes |  |
| Status | select | Yes | Draft, Modelled, Approved, Applied, Cancelled |
| EffectiveDate | date | Yes |  |
| ProposedBy | reference | Yes | → Users |
| ApprovedBy | reference | No | → Users |
| ApprovedDate | date | No |  |
| CreatedDate | date | Yes |  |
| AppliedDate | date | No |  |
| Notes | longtext | No |  |

### RealignmentMoves

One account's proposed move under a realignment: from and to territory and owner, the pipeline and contract value that moves with it, and whether a manager excepted it.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Realignment | reference | Yes | → Realignments |
| Account | reference | Yes | → Accounts |
| FromTerritory | reference | Yes | → Territories |
| ToTerritory | reference | Yes | → Territories |
| FromOwner | reference | Yes | → Users |
| ToOwner | reference | Yes | → Users |
| OpenPipeline | decimal | No | Open opportunity amount on the account, in the reporting currency |
| ContractValue | decimal | No | Annual value of active contracts, in the reporting currency |
| Status | select | Yes | Proposed, Approved, Excepted, Applied |
| DecidedBy | reference | No | → Users |
| Notes | text | No | Why the move was excepted |

## Relationships

- Accounts → Accounts (one-to-many): ParentAccount links a subsidiary or division to the group it belongs to, so pipeline and revenue roll up.
- Accounts → AccountSites (one-to-many): an account has several physical locations, each with its own contacts.
- Accounts → AccountTeamMembers (one-to-many): several users work one account with different roles and access.
- Accounts → AccountPlans (one-to-many): one plan per fiscal year for a strategic or key account.
- Accounts → Contacts (one-to-many): a contact works at exactly one account.
- AccountSites → Contacts (one-to-many): a contact can be placed at a specific site of the account.
- Contacts → Contacts (one-to-many): ReportsTo builds the org chart used in the relationship map.
- Users → Accounts (one-to-many): every account has one owner responsible for it, and PreviousOwner keeps the owner a realignment replaced.
- Users → Contacts (one-to-many): every contact has one owner.
- Users → AccountTeamMembers (one-to-many): a user sits on many account teams.
- Users → Users (one-to-many): Manager builds the reporting line that forecasts, quotas and discount escalation run up; DelegateTo names who decides an approver's steps while they are away.
- PriceBooks → Accounts (one-to-many): DefaultPriceBook is the book an account's quotes start from.
- Territories → Territories (one-to-many): ParentTerritory nests patches under regions.
- Territories → TerritoryRules (one-to-many): the rules that decide what falls into a territory.
- Territories → Accounts (one-to-many): every account sits in one territory, and PreviousTerritory keeps the one it left.
- Territories → Users (one-to-many): a user is assigned to a territory.
- Territories → Leads (one-to-many): routing places a lead in a territory.
- Territories → Opportunities (one-to-many): an opportunity carries the territory it was created in, even after a realignment.
- Realignments → TerritoryRules (one-to-many): the rules a realignment introduces or retires, with their effective dates.
- Realignments → RealignmentMoves (one-to-many): the modelled moves under one realignment.
- Realignments → Accounts (one-to-many): LastRealignment is the realignment that last moved the account.
- Accounts → RealignmentMoves (one-to-many): an account is moved by successive realignments.
- Territories → RealignmentMoves (one-to-many): FromTerritory and ToTerritory on each move.
- Users → RealignmentMoves (one-to-many): FromOwner, ToOwner and DecidedBy on each move.
- Users → Realignments (one-to-many): ProposedBy and ApprovedBy.
- LeadSources → Leads (one-to-many): every lead records where it came from.
- LeadSources → Opportunities (one-to-many): the source carries through conversion so win rates can be compared by channel.
- Campaigns → Leads (one-to-many): the campaign that produced the lead.
- Campaigns → Opportunities (one-to-many): the campaign carries through conversion so attribution is by won revenue.
- Users → Campaigns (one-to-many): a campaign has an owner on the selling side.
- Users → Leads (one-to-many): a lead has one owner once routed, and AcceptedBy records the Account Executive who accepted it.
- Accounts → Leads (one-to-many): MatchedAccount links a lead to an account that already exists; ConvertedAccount is the account the lead became; PartnerAccount is the partner that sourced or influenced it.
- Contacts → Leads (one-to-many): ConvertedContact is the person the lead became.
- Leads → Opportunities (one-to-one): a converted lead points to the opportunity it created, if there was a deal, and the opportunity points back through SourceLead.
- Accounts → Opportunities (one-to-many): every deal belongs to one account, and PartnerAccount names the partner on the deal where there is one.
- Users → Opportunities (one-to-many): every deal has one owner; NegotiationApprovedBy records Sales Manager approval and ValidatedBy records the Deal Desk user who confirmed the close.
- PipelineStages → Opportunities (one-to-many): a deal is at exactly one stage.
- Competitors → Opportunities (one-to-many): the main competitor on a deal, if known.
- Contacts → Opportunities (one-to-many): PrimaryContact is the person the deal is being worked through.
- Opportunities → OpportunityContacts (one-to-many): the buying committee on the deal.
- Contacts → OpportunityContacts (one-to-many): a contact can sit on several deals in different roles.
- Opportunities → OpportunityProducts (one-to-many): the products being sold.
- Products → OpportunityProducts (one-to-many): a product appears on many deals.
- Opportunities → StageHistory (one-to-many): the trail of stage changes, written by the system.
- PipelineStages → StageHistory (one-to-many): FromStage and ToStage name the stages involved.
- Users → StageHistory (one-to-many): ChangedBy records who moved the deal.
- Opportunities → Quotes (one-to-many): a deal has several quote versions, one of them primary.
- Accounts → Quotes (one-to-many): quotes are also listed on the account.
- Contacts → Quotes (one-to-many): Recipient is the person the quote is addressed to.
- PriceBooks → Quotes (one-to-many): a quote prices from one price book.
- PriceBooks → PriceBookEntries (one-to-many): the products and prices in the book.
- Products → PriceBookEntries (one-to-many): a product is priced in several books.
- Quotes → QuoteLines (one-to-many): the lines of the quote.
- Products → QuoteLines (one-to-many): a product is quoted many times.
- Quotes → QuoteApprovals (one-to-many): the approval steps the quote went through.
- Users → QuoteApprovals (one-to-many): Approver is the user asked to decide a step; DecidedBy is the user who did, which differs when a delegate decided.
- Accounts → Activities (one-to-many): every activity belongs to an account once one exists.
- Contacts → Activities (one-to-many): most activities are with a named person.
- Opportunities → Activities (one-to-many): activities on a deal drive its last-touch and stage evidence.
- Leads → Activities (one-to-many): activities on a lead before conversion, re-parented to the account and contact at conversion.
- Users → Activities (one-to-many): every activity has one owner.
- Opportunities → Contracts (one-to-many): SourceOpportunity is the deal that produced the contract; further deals add lines to it.
- Quotes → Contracts (one-to-many): SourceQuote is the accepted quote the contract was built from.
- Accounts → Contracts (one-to-many): a customer has several contracts over time.
- Contracts → ContractLines (one-to-many): the products under contract.
- Products → ContractLines (one-to-many): a product is under contract at many accounts.
- Opportunities → ContractLines (one-to-many): each line names the deal that sold it, so expansion sold mid-term lands on the existing contract.
- QuoteLines → ContractLines (one-to-many): the quote line a contract line was created from.
- Contracts → Opportunities (one-to-one): RenewalOpportunity and RenewsContract link a contract and the renewal deal that replaces it.
- Users → Quotas (one-to-many): a user carries a quota per period and type.
- Users → ForecastSubmissions (one-to-many): a user submits one forecast per week.
- Quotas → ForecastSubmissions (one-to-many): a submission is measured against the quota for its period.
- ForecastSubmissions → ForecastSubmissionLines (one-to-many): the deals behind the submission as they stood that week.
- Opportunities → ForecastSubmissionLines (one-to-many): a deal appears in every weekly snapshot while it is open.
- PipelineStages → ForecastSubmissionLines (one-to-many): the stage the deal was at that week.

## Views

### My Open Opportunities

Source: Opportunities

Filter: Owner = current user AND Status IN ('Open', 'PendingClose')

Roles: Account Executive, Customer Success Manager

Columns: OpportunityNumber, OpportunityName, Account, Stage, Amount, AnnualValue, Probability, ForecastCategory, CloseDate, NextStep, NextStepDate, LastActivityDate

### Forecast Board

Source: Opportunities

Filter: Status = 'Open' AND ForecastCategory IN ('Pipeline', 'BestCase', 'Commit')

Roles: Account Executive, Sales Manager, Admin

Columns: OpportunityName, Account, Stage, Amount, Probability, Owner, NextStep

### Leads to Work

Source: Leads

Filter: Status IN ('New', 'Working')

Roles: Sales Development Rep, Sales Manager, Admin

Columns: LeadNumber, CompanyName, ContactName, JobTitle, Source, Campaign, Territory, Owner, Status, CreatedDate

### Qualified Leads Awaiting Acceptance

Source: Leads

Filter: Status = 'Qualified'

Roles: Account Executive

Columns: LeadNumber, CompanyName, ContactName, Need, Budget, Timing, MatchedAccount, Territory, Owner, CreatedDate

### Quotes Awaiting Approval

Source: Quotes

Filter: Status = 'Submitted'

Roles: Sales Manager, Deal Desk, Admin

Columns: QuoteNumber, Opportunity, Account, Total, AnnualValue, DiscountPercent, PaymentTerms, BillingFrequency, Owner, ValidUntil, Status

### My Approvals

Source: QuoteApprovals

Filter: Approver = current user AND Status = 'Pending'

Roles: Sales Manager, Deal Desk

Columns: Quote, StepNumber, Reason, RequestedDate, Status

### Closed Won Awaiting Validation

Source: Opportunities

Filter: Status = 'PendingClose'

Roles: Deal Desk, Sales Operations, Admin

Columns: OpportunityNumber, OpportunityName, Account, Owner, Amount, AnnualValue, TotalValue, CloseDate, Stage

### Stale Deals

Source: Opportunities

Filter: Status = 'Open' AND NextStepDate < today

Roles: Sales Manager, Sales Operations, Admin

Columns: OpportunityNumber, Account, Owner, Stage, Amount, CloseDate, NextStep, NextStepDate, LastActivityDate

### My Activities Today

Source: Activities

Filter: Owner = current user AND DueDate <= today AND Status = 'Planned'

Roles: Sales Development Rep, Account Executive, Customer Success Manager

Columns: ActivityNumber, Type, Subject, Account, Contact, Opportunity, Lead, DueDate, Status

### My Week

Source: Activities

Filter: Owner = current user AND StartTime >= today AND StartTime <= today + 7 days AND Status = 'Planned' AND Type IN ('Call', 'Meeting', 'Demo')

Roles: Sales Development Rep, Account Executive, Customer Success Manager, Sales Manager

Columns: Subject, Type, Account, Contact, Opportunity, StartTime, EndTime, Status

### Expiring Quotes

Source: Quotes

Filter: Status = 'Sent' AND ValidUntil <= today + 14 days

Roles: Account Executive, Sales Manager, Admin

Columns: QuoteNumber, Opportunity, Account, Total, SentDate, ValidUntil, Owner

### Renewals Due in 120 Days

Source: Contracts

Filter: Status IN ('Active', 'InRenewal') AND NoticeDeadline <= today + 120 days

Roles: Customer Success Manager, Sales Manager, Executive, Admin

Columns: ContractNumber, Account, AnnualValue, EndDate, NoticeDeadline, NoticePeriodDays, AutoRenew, RenewalRisk, Owner, RenewalOpportunity

### Forecasts Pending Review

Source: ForecastSubmissions

Filter: Status = 'Submitted'

Roles: Sales Manager, Admin

Columns: ForecastNumber, User, Period, WeekEnding, Closed, Commit, BestCase, Pipeline, Currency, Status

### My Forecast

Source: ForecastSubmissions

Filter: User = current user

Roles: Account Executive, Customer Success Manager, Sales Manager

Columns: ForecastNumber, Period, WeekEnding, Closed, Commit, BestCase, Pipeline, ManagerAdjustment, Status

### Team Pipeline

Source: Opportunities

Filter: Status = 'Open'

Roles: Sales Manager, Sales Operations, Executive, Admin

Columns: Owner, OpportunityName, Account, Stage, Amount, AnnualValue, Probability, ForecastCategory, CloseDate, LastActivityDate

### Realignments Awaiting Approval

Source: Realignments

Filter: Status = 'Modelled'

Roles: Sales Manager, Sales Operations, Admin

Columns: RealignmentNumber, EffectiveDate, ProposedBy, CreatedDate, Status

### Strategic and Key Accounts

Source: Accounts

Filter: Tier IN ('Strategic', 'Key') AND Status = 'Active'

Roles: Account Executive, Sales Manager, Customer Success Manager, Executive, Admin

Columns: AccountNumber, AccountName, Industry, Tier, Type, Owner, Territory, AnnualRevenue, LastActivityDate

### My Active Contacts

Source: Contacts

Filter: Owner = current user AND Status = 'Active'

Roles: Sales Development Rep, Account Executive, Customer Success Manager

Columns: FirstName, LastName, Account, JobTitle, Department, Seniority, EmailOptIn, LastActivityDate, Status

## Reports

- **Pipeline by Stage** (flat): Open amount and deal count at each stage, weighted and unweighted, by owner and territory in the reporting currency, with the movement since last week and the deals whose close date slipped between the two weekly snapshots.
- **Pipeline Created** (flat): New opportunities and amount added per week by owner, source, campaign, partner and type.
- **Forecast vs Quota** (hierarchical): Closed, commit and best case against quota per rep, with open pipeline as coverage of the quota remaining, rolled up through manager to region at the period rate, with the manager adjustment shown separately.
- **Win and Loss Analysis** (flat): Deals won and lost in a period by loss reason, competitor, source, campaign, deal size band and industry, including lost renewals by churn reason.
- **Sales Velocity** (flat): Days spent in each stage and total cycle length by deal size band and type, from stage history.
- **Activity Summary** (flat): Calls, meetings, emails and demos per rep per week, and the accounts and open deals with no touch in the last thirty days.
- **Renewal Book** (flat): Contracts by notice deadline month with owner, annual value, renewal risk and the status of the renewal opportunity, and the value not renewed with its churn reason.
- **Discount Analysis** (flat): Blended discount by rep, product family and deal size, with the approvals requested, how each was decided and the quotes that expired unanswered.
- **Territory Coverage** (hierarchical): Accounts, contacts, open pipeline and closed revenue by territory and sub-territory, with unowned accounts flagged, and the before and after of a modelled realignment.
- **Lead Conversion Funnel** (flat): Leads by source, channel and campaign through working, qualified, accepted and converted, with time to first touch and time to convert.

## Working with this application

### What an agent typically does here

- **Sales development rep's assistant.** Enriches new leads, drafts the first outreach from the source and the campaign, logs replies as activities on the lead, and proposes qualified or disqualified with the reason for the rep to confirm.
- **Account executive's assistant.** Keeps the buying committee current from mail and calendar and drafts the next step after each meeting from the notes. It prepares the quote from the products on the deal and flags a deal whose next step date is about to pass.
- **Sales manager's assistant.** Prepares the pipeline review: deals that slipped between the weekly snapshots, deals with no touch, forecast categories that disagree with the stage, and a draft of the review comment per deal.
- **Deal desk's assistant.** Summarises a submitted quote against the account's discount history and the floor, and drafts the approval comment for the approver to decide on. For the bookings check it lays a pending close beside its accepted quote and signed paperwork.
- **Customer success manager's assistant.** Watches notice deadlines, drafts the business review agenda from usage and support data, and proposes the renewal risk with its reasons.
- **Sales operations' assistant.** Models a draft realignment and writes up the moves per manager with the pipeline and contract value each would carry.

### What it cannot do alone

The configured workflows must keep lead acceptance with Account Executive, negotiation approval with Sales Manager and bookings validation with Deal Desk. An agent can prepare evidence and drafts for those decisions. Forecast review, quote approval and realignment approval also remain human actions. Rehearsal must verify refusal of unauthorised actions and attribution of every permitted write before the agent is enabled.

### Example work after configuration

```
Read My Open Opportunities and their next steps
Draft Activities from reviewed meeting notes
Prepare Quotes for the configured approval workflow
Wait for the assigned human decision
Read pending bookings and their accepted quote evidence
Prepare the Forecast vs Quota review
```

Reads and writes are metered as machine work on the pricing page. There are no per-user fees for people or for agents.

## Detailed application guides

- [Accounts](https://www.erp.ai/crm-for-b2b/modules/accounts) — The company record everything else hangs off: hierarchy, sites, ownership by territory, the account team and the yearly plan for the accounts that matter most.
- [Contacts](https://www.erp.ai/crm-for-b2b/modules/contacts) — The people at each account: who they are, who they report to, the part they play in a purchase, and whether you may contact them.
- [Pipeline](https://www.erp.ai/crm-for-b2b/modules/pipeline) — Leads in, opportunities through the stages, a next step with a date on every deal, and a history that shows how each one really moved.
- [Quotes](https://www.erp.ai/crm-for-b2b/modules/quotes) — Priced proposals built from a price book, versioned as the deal moves, and approved by the right person whenever a rep goes past their authority.
- [Activities](https://www.erp.ai/crm-for-b2b/modules/activities) — Every call, meeting, email, demo, task and note, logged against the account and the deal, synced from mail and calendar, and rolled up into the fields managers sort on.
- [Renewals](https://www.erp.ai/crm-for-b2b/modules/renewals) — The contract a won deal becomes, the notice deadline and lead time on it, the renewal opportunity the system opens in time, and the expansion sold on top.
- [Forecast](https://www.erp.ai/crm-for-b2b/modules/forecast) — Forecast categories on every deal, a quota per rep per period, a weekly submission with commit and best case, and a manager review that is kept alongside it.
- [Lead to deal](https://www.erp.ai/crm-for-b2b/processes/lead-to-deal) — From a lead arriving to a signed contract handed to customer success: routing, qualification, acceptance, proposal, negotiation, the bookings check and the handover, with the gates where a person decides.
- [Quote approval](https://www.erp.ai/crm-for-b2b/processes/quote-approval) — How a priced proposal gets from a rep's draft to the customer's inbox: the rules that decide who must approve, the steps in sequence, and what happens on rejection, revision and expiry.
- [Forecast cycle](https://www.erp.ai/crm-for-b2b/processes/forecast-cycle) — The weekly rhythm: reps categorise every open deal and submit, managers review and adjust on the record, and the period locks so the forecast can be checked against what closed.
- [Renewal](https://www.erp.ai/crm-for-b2b/processes/renewal) — From a contract's notice deadline to the next contract signed: the opportunity the system opens, the risk call, the renewal quote and approval, and what happens when the customer says no.
- [Territory realignment](https://www.erp.ai/crm-for-b2b/processes/territory-realignment) — Changing who owns which accounts without losing deals in flight: modelling the new rules, approving the moves, applying them in bulk, handing over open deals, and checking nothing was orphaned.
- [SaaS and subscription software](https://www.erp.ai/crm-for-b2b/industries/saas-and-subscription-software) — Recurring revenue sold to business buyers: land and expand, seat-based quotes, renewals as the biggest deals of the year, and a forecast split between new and renewal.
- [Industrial equipment and capital goods](https://www.erp.ai/crm-for-b2b/industries/industrial-equipment-and-capital-goods) — Long cycles, large tickets, many sites and a buying committee with engineering, procurement and the plant on it: quotes revised for a year, and service contracts that follow the sale.
- [Professional and business services](https://www.erp.ai/crm-for-b2b/industries/professional-services) — Relationship selling by people who also deliver: referrals and partners as sources, proposals with scoped terms, retainers that renew, and a pipeline kept by partners who are not full-time sellers.
- [Wholesale and distribution](https://www.erp.ai/crm-for-b2b/industries/wholesale-and-distribution) — Many accounts, repeat business and a field sales team on territories: account share, price lists per customer tier, visit planning and the accounts that have gone quiet.
- [Roles and permissions](https://www.erp.ai/crm-for-b2b/roles) — Who does what: the roles in a B2B sales organisation, the records each may change, the approvals each may give, and how an agent inherits the same limits.
- [Reports and dashboards](https://www.erp.ai/crm-for-b2b/reports) — The numbers a sales organisation runs on, each with what it answers and who reads it, all drawn from the same deals, quotes, activities and forecasts the team works in.
- [Data model](https://www.erp.ai/crm-for-b2b/data-model) — The tables, their keys and how they relate, written for the consultant or IT team migrating from another CRM or connecting this one to marketing, billing or support.
- [Integrations](https://www.erp.ai/crm-for-b2b/integrations) — What a B2B sales team connects to its CRM, and how each connection works here: mail and calendar, marketing automation, CPQ and billing, e-signature, support and product usage, data enrichment.
- [Implementation](https://www.erp.ai/crm-for-b2b/implementation) — How a sales team moves onto B2B CRM: mapping the sales process and the rules, configuring, migrating from the old CRM, rehearsing a real week, and going live by team.
- [Agent and API](https://www.erp.ai/crm-for-b2b/agent) — How an agent runs B2B CRM: identity, permissions, the calls it makes, and what it may not do without a person.
- [Pricing](https://www.erp.ai/crm-for-b2b/pricing) — No per-user fees. Pay for automation as you use it, with implementation priced separately.
- [Questions](https://www.erp.ai/crm-for-b2b/faq) — The questions a sales leader asks before choosing a CRM, answered straight.
- [Get started](https://www.erp.ai/crm-for-b2b/get-started) — Plan B2B CRM for your sales team: agree the process, configure the application and rehearse before launch.
