Sales App Development
Build custom app solutions with Scrums.com's expert development team. With an NPS (Net Promoter Score) of 82, Scrums.com crafts cost-effective, custom applications that drive results.
Companies shipping B2B sales software (CRM platforms, pipeline management systems, configure-price-quote engines, sales engagement tools, and revenue intelligence platforms) face a data-model challenge that scales quickly. Contacts and accounts carry many-to-many relationships, opportunities move through configurable stage state machines with branching logic, activities must be deduplicated across channels, and forecast roll-ups must handle currency conversion, split credit, and probability weighting simultaneously. Scrums.com builds dedicated engineering teams for product companies and SaaS organisations that need to ship sales infrastructure that is commercially differentiated and operationally sound from day one.
CRM Data Model and Pipeline Architecture
The core of any sales platform is the entity graph: Accounts, Contacts, Opportunities, and Activities, with clear ownership, visibility rules, and relationship cardinality defined up front. The Opportunity entity drives the pipeline stage machine: each stage transition should be modelled as an event appended to an immutable transition log rather than a simple field update. This supports audit, attribution, and time-in-stage analytics without data loss.
Pipeline stage definitions are configuration data, not application code. Each stage carries entry criteria, exit criteria, required fields validated on transition rather than on record creation, probability weights for forecast roll-ups, and automation trigger hooks. Stage transitions emit domain events consumed by downstream systems: forecast recalculation, activity assignment, and notification routing.
Contact and account deduplication is a first-class concern in any multi-source CRM. An inbound lead matching pipeline should compare against existing contacts on email, normalised phone number (E.164 format), company domain, and fuzzy name matching. Merge operations must preserve the complete activity history of all matched records: never hard-delete source contacts.
For multi-currency pipelines, store deal values in the deal's native currency with a snapshot exchange rate at record creation. Report in base currency at query time using current or period rates, with the rate choice surfaced explicitly to the report consumer. Converting at write time and discarding the original amount produces irrecoverable reporting errors when exchange rates change.
AI Lead Scoring and Sales Forecasting
Lead scoring models in production sales platforms fall into two categories: rules-based scoring (explicit criteria: job title, company size, industry vertical, product usage signals, engagement events) and ML-based propensity scoring (gradient-boosted trees or logistic regression trained on closed-won and closed-lost historical data). Both should coexist: the rules-based score handles new accounts with no history; the ML score refines predictions for accounts with sufficient signal volume.
Forecast engines aggregate probability-weighted opportunity values into period roll-ups by territory, team, product line, and currency. Three forecast categories are standard: pipeline (weighted by stage probability), commit (rep-indicated high-confidence), and best-case. Waterfall reporting (tracking movement between forecast categories week-over-week) is the key analytical output for sales leadership and requires an append-only forecast snapshot table rather than overwriting current state.
Territory and quota management adds a third layer: rep assignment should be deterministic based on configurable rules (geography, industry vertical, account size tier, named account lists) rather than manual allocation per deal. Quota attainment tracking must handle mid-period adjustments, rep transfers between territories, and split-credit deals without corrupting historical performance data.
For sales intelligence, enrichment pipelines pull firmographic and technographic data from Clearbit, Apollo, or ZoomInfo into Account and Contact records. Enrichment should be asynchronous, versioned (store enrichment snapshots with source and timestamp rather than overwriting existing values), and marked with a data-source provenance field for GDPR data minimisation compliance. Third-party enrichment data must be handled under a documented lawful basis separate from the primary CRM data.
For engineering teams building sales mobile platforms, see our mobile app development services.
Sales Engagement and CPQ Infrastructure
Sales engagement platforms manage multi-touch sequences across email, phone, LinkedIn, and direct mail. The sequence engine models each step as a scheduled task with configurable delays, branch conditions (if email opened, skip call step), and reply detection via inbound email parsing. Hard-bounce and unsubscribe events must pause or terminate sequences and update the contact's email opt-out status atomically: a two-phase write that logs the opt-out and pauses the sequence in the same transaction, preventing sequence resumption before the suppression record is committed.
Meeting scheduling integrations (Google Calendar, Outlook) require OAuth 2.0 token management with refresh handling, conflict detection across calendars, buffer time rules, and round-robin distribution for team booking links. Availability queries should cache calendar free/busy slots with a short TTL (under 60 seconds) to reduce API call volume while maintaining acceptable freshness for the scheduling interface.
Configure-Price-Quote (CPQ) engines price complex product configurations against a rule matrix: base prices, volume discounts, bundle pricing, promotional overrides, and approval workflows for discounts above threshold. Every quote line must carry the pricing rule IDs and parameter values that produced the output price, stored as an immutable pricing snapshot alongside the quote record. CPQ audit trails are a compliance requirement in many enterprise sales contexts and must be designed as append-only records from the outset.
eSignature and quote-to-contract automation (DocuSign or PandaDoc integration) requires idempotent webhook handling for signature events: signature completion webhooks can arrive more than once and must not double-close the opportunity or create duplicate contract records. The idempotency key is the signature provider's event ID, stored in a processed-events table checked before acting on each incoming webhook.
Scrums.com deploys dedicated engineering teams with expertise across CRM architecture, sales engagement infrastructure, and CPQ systems. To discuss your sales platform requirements, start a conversation.
Revenue Attribution and RevOps Integration
Revenue attribution models (first-touch, last-touch, linear, time-decay, and data-driven) must be implemented as separate analytical computations over an immutable touchpoint event log, not as fields on the contact or opportunity record. This allows attribution methodology to change retroactively without data loss and enables multi-model comparison for calibration against actual revenue outcomes.
CRM-to-ERP handoff is the critical integration point in a closed-loop revenue system. When an opportunity closes-won, the CRM emits a contract-created event that triggers downstream provisioning in the ERP or billing system. The integration must be idempotent (safe to replay on failure), carry the canonical opportunity ID as a correlation key, and handle ERP validation failures with a dead-letter queue and alerting rather than silent data loss.
For SaaS companies, product usage signals (login frequency, feature adoption depth, expansion events) should feed back into the CRM as activity records with standardised event schemas. This creates a complete customer health picture for account managers and surfaces upsell signals in the lead scoring model. The integration pipeline (typically Segment or Rudderstack to data warehouse to CRM sync) should be treated as a first-class data product with schema versioning and clear field ownership.
HubSpot and Salesforce APIs both impose rate limits that require request queuing with exponential backoff, bulk API usage for large sync operations, and change-data-capture patterns (webhook subscriptions rather than polling) to minimise API consumption. A bidirectional sync must carry a sync-origin flag on every write to prevent event loops where a record updated by the sync triggers a re-sync back to the source system.
Engineering teams building sales platforms with Scrums.com typically include backend engineers with CRM data-model experience and data engineers for the attribution pipeline. View team composition options or explore the FinTech software context for regulated-industry sales platforms.
Frequently Asked Questions
How do you model the contact-account-opportunity relationship for a multi-product CRM?
Contacts and accounts have a many-to-many relationship: a contact can be affiliated with multiple accounts, and an account can have multiple contacts at different seniority levels. The standard model uses a ContactRole junction entity linking a Contact to an Opportunity with a role attribute (economic buyer, technical evaluator, champion, blocker). Multi-product line items within a single opportunity are modelled as OpportunityLineItem child records linked to a product catalogue, each carrying its own quantity, unit price, discount, and CPQ rule snapshot. Flattening multi-product deals into a single opportunity amount field produces reporting inconsistencies and CPQ audit failures at scale.
What is the correct architecture for a forecast engine that handles multi-currency and split credit?
Store opportunity amounts in native deal currency with a snapshot exchange rate at record creation. For reporting, apply a parameterised rate (current rate or period average) at query time by joining to a currency_rates table. Split credit deals use an OpportunityCredit child table with rep_id, credit_percentage, and a constraint that percentages sum to 100. Forecast roll-ups join through OpportunityCredit, grouping by rep_id and summing credit_percentage multiplied by probability-weighted amount. This prevents double-counting regardless of how credit is split and allows mid-period credit adjustments without corrupting historical attainment data.
How long does it take to build a lead scoring model that works reliably in production?
A rules-based scoring model can be defined and deployed in the first sprint once the entity model is established: it requires only explicit criteria mapped to point weights. An ML propensity model requires 12-18 months of historical closed-won and closed-lost data with sufficient volume (typically 1,000 or more labelled outcomes per model target), a feature engineering pipeline, and a training and serving infrastructure. The correct sequencing is to ship rules-based scoring first, instrument all signals as events from day one, and train the ML model once sufficient labelled history exists. Shipping an ML model on thin data produces a model that is confidently wrong and erodes rep trust in scoring.
How do you handle GDPR compliance for contact data in a CRM built for European customers?
GDPR compliance in a CRM requires: a lawful basis field on each contact record with supporting evidence stored; a right-to-erasure workflow cascading deletion across the contact record, activity history, enrichment snapshots, email logs, and downstream analytics tables with documented retention exceptions for legally required records; a DSAR export pipeline producing a structured export of all data held against a given contact; data minimisation controls on enrichment fields with a documented purpose and auto-expiry; and cross-border transfer documentation for European contact data flowing to US-based services under SCCs or equivalent mechanisms recorded in the ROPA.
Can you integrate a CRM platform you build with an existing Salesforce or HubSpot instance?
Yes: bidirectional CRM sync is a standard integration pattern where a custom platform maintains its own canonical data model and syncs to Salesforce or HubSpot as an integration layer rather than replacing it. The integration carries a sync-origin flag on all writes to prevent event loops. Conflict resolution uses last-write-wins with server-side timestamps, or a field-level merge strategy for high-contention fields. Salesforce Bulk API handles large initial loads; Change Data Capture webhooks and HubSpot webhooks handle ongoing sync with sub-60-second latency. Schema mapping is defined as configuration data with a validation layer that rejects unmapped fields rather than silently dropping data.
Don't Just Take Our Word for It
Hear from some of our amazing customers who are building with Scrums.com Teams.
Find Related App Types
Marketing Attribution app
Payroll Management System App
Retail Management app
Payments app development
Invoicing App
Telecoms app
Good Reads From Our Blog
Stay up-to-date with the latest trends, best practices, and insightful discussions in the world of mobile app development. Explore our blog for articles on everything from platform updates to development strategies.
Essential Guides
Gain a deeper understanding of crucial topics in mobile app development, including platform strategies, user experience best practices, and effective development workflows with expertly crafted guides.













.png)
