C
Docs

Salesforce

Sync opportunities and leads with Salesforce CRM

Updated 2026-03-3028 min read

Salesforce Integration

Connect Cothon with Salesforce to automatically sync government procurement opportunities, track your public sector pipeline, and maintain a unified view across commercial and government sales. Bidirectional synchronization ensures your sales team always has the latest opportunity data, while custom field mapping preserves your existing Salesforce processes.

This integration is ideal for organizations already using Salesforce for commercial sales who want to add government procurement opportunities to their pipeline without managing separate systems. Cothon becomes your government opportunity intelligence layer, automatically enriching Salesforce with procurement data, compliance scores, and bid analysis insights.

What Syncs

Cothon → Salesforce

Cothon ObjectSalesforce ObjectFields
OpportunityOpportunityName, Value, Close Date, Stage, Description
AnalysisCustom ObjectRequirements, Status, Compliance Score
ProposalAttachment/CustomDocument link, Status, Sections

Salesforce → Cothon

Salesforce ObjectCothon Usage
AccountCompany matching, relationship tracking
ContactTeam member association
Custom FieldsExtended opportunity data

Setting Up

Note

You need Salesforce admin permissions or approval to install connected apps.

Configuration Options

Sync Direction

Choose how data flows:

  • Bidirectional - Changes sync both ways
  • Cothon → Salesforce - Push only
  • Salesforce → Cothon - Pull only

Field Mapping

Map Cothon fields to Salesforce:

Cothon FieldDefault SF FieldCustomizable
TitleOpportunity NameNo
ValueAmountNo
Closing DateClose DateNo
DepartmentCustom FieldYes
CategoryTypeYes
StatusStageYes

Stage Mapping

Map opportunity statuses to Salesforce stages:

Cothon StatusSalesforce Stage
IdentifiedProspecting
AnalyzingQualification
PursuingProposal
SubmittedNegotiation
WonClosed Won
LostClosed Lost

Tip

Customize stage mappings to match your existing Salesforce sales process.

Automatic Sync

Triggers

Sync occurs when:

  • New opportunity saved in Cothon
  • Opportunity status changes
  • Analysis completed
  • Proposal generated
  • Manual sync requested

Sync Frequency

  • Real-time: Status changes and new records
  • Batch sync: Every 15 minutes (configurable)
  • Full sync: Daily reconciliation

Manual Sync

Force sync for specific records:

  1. Open the opportunity in Cothon
  2. Click Sync in the toolbar
  3. View sync status and any errors

Or bulk sync:

  1. Go to Settings > Integrations > Salesforce
  2. Click Sync Now
  3. Choose full or incremental sync

Viewing Synced Data

In Cothon

Synced opportunities show:

  • Salesforce icon indicator
  • Link to Salesforce record
  • Last sync timestamp
  • Sync status

In Salesforce

Cothon-synced records show:

  • Cothon Source field
  • Link back to Cothon
  • Compliance score (if configured)
  • Analysis status

Troubleshooting

Sync Errors

Common issues and solutions:

ErrorCauseSolution
Authentication failedToken expiredReconnect integration
Record not foundDeleted in SFRe-link or skip record
Field validationRequired field missingCheck field mappings
Permission deniedInsufficient SF permissionsContact SF admin

Viewing Logs

  1. Go to Settings > Integrations > Salesforce
  2. Click View Logs
  3. Filter by date, status, or record
  4. Export logs if needed

Warning

If sync errors persist, check your Salesforce org's API limits and connected app permissions.

Advanced Configuration

Custom Objects

Sync to custom Salesforce objects:

  1. Create custom object in Salesforce
  2. Configure field mappings in Cothon
  3. Set up record type associations
  4. Test sync with sample data

Workflow Integration

Trigger Salesforce workflows from Cothon:

  • Process Builder actions
  • Flow triggers
  • Approval processes
  • Email alerts

Disconnecting

To remove the Salesforce integration:

  1. Go to Settings > Integrations > Salesforce
  2. Click Disconnect
  3. Confirm removal

Note

Disconnecting doesn't delete synced data from either system. Records remain but stop syncing.

Understanding Salesforce Objects

Cothon creates and maps to these Salesforce objects:

Standard Objects Used

Opportunity (Standard):

  • Primary object for government opportunities
  • Automatically created when you save an opportunity in Cothon
  • Contains value, close date, stage, and description
  • Links to Account (government department)

Account (Standard):

  • Represents government departments and agencies
  • Created automatically if doesn't exist
  • Maps to Cothon's department taxonomy
  • Example: "Department of National Defence", "Shared Services Canada"

Contact (Standard):

  • Government procurement officers (if you track them)
  • Team members assigned to opportunities
  • Optional - configure in field mappings

Task (Standard):

  • Analysis activities logged as tasks
  • Proposal submissions as completed tasks
  • Deadline reminders as open tasks

Custom Objects (Optional)

Cothon_Analysis__c (Custom):

  • Detailed bid analysis results
  • Compliance score and requirement breakdown
  • Risk and opportunity assessment
  • Linked to parent Opportunity via lookup

Cothon_Requirement__c (Custom):

  • Individual RFP requirements
  • Mandatory vs. rated classification
  • Capability match status
  • Linked to Cothon_Analysis__c via master-detail

Note

Custom objects are optional but recommended for full functionality. They allow you to store detailed Cothon analysis data in Salesforce for reporting.

Installing Custom Objects

Field Mapping Details

Opportunity Field Mappings

Cothon FieldSalesforce FieldTypeNotes
Core Fields
TitleNameText(255)Opportunity title
Reference NumberCothon_Ref__cText(50)Custom field, unique identifier
Value (Min)AmountCurrencyUses midpoint if range
Value (Max)Cothon_Max_Value__cCurrencyCustom field for range
Closing DateCloseDateDateSubmission deadline
DepartmentAccount.NameLookupAuto-creates account
StatusStageNamePicklistCustom mapping required
Metadata Fields
CategoryTypePicklist"New Business", "Services", etc.
Procurement MethodCothon_Method__cPicklistRFP, RFQ, Standing Offer
LocationCothon_Location__cText(100)Province/Territory
UNSPSC CodeCothon_UNSPSC__cText(20)Commodity classification
Analysis Fields
Compliance ScoreCothon_Compliance__cPercent0-100% match score
Pursuit DecisionCothon_Pursuit__cPicklistPursue, Pass, Review
Win ProbabilityProbabilityPercentStandard field
Process Fields
Analysis StatusCothon_Analysis_Status__cPicklistNot Started, In Progress, Complete
Assigned ToOwnerIdLookupTeam member
Last AnalyzedCothon_Last_Analysis__cDateTimeTimestamp

Creating Required Custom Fields

If not using the metadata package, create custom fields manually:

Cothon_Ref__c (Text, 50):

  • API Name: Cothon_Ref__c
  • Label: "Cothon Reference"
  • External ID: Yes (checked)
  • Unique: Yes (checked)
  • Required: No

Cothon_Compliance__c (Percent):

  • API Name: Cothon_Compliance__c
  • Label: "Compliance Score"
  • Formula: Not a formula field
  • Decimal Places: 0

Cothon_Max_Value__c (Currency):

  • API Name: Cothon_Max_Value__c
  • Label: "Maximum Value"
  • Decimal Places: 2

Cothon_Pursuit__c (Picklist):

  • API Name: Cothon_Pursuit__c
  • Label: "Pursuit Decision"
  • Values: Pursue, Pass, Review Needed

Stage Mapping Configuration

Map Cothon statuses to your Salesforce opportunity stages:

Warning

Stage mappings must be 1:1 (one Cothon status → one Salesforce stage). If you need more complex logic, use Salesforce Process Builder or Flow to adjust stages after sync.

Custom Picklist Mappings

For picklist fields with different values between systems:

Procurement Method → Type:

Cothon ValueSalesforce Value
Request for Proposal (RFP)New Business
Request for Quotation (RFQ)New Business
Standing OfferExisting Business
Supply ArrangementExisting Business
Task AuthorizationExisting Business

Configure in Settings > Integrations > Salesforce > Field Mappings > Picklist Mappings.

Sync Behavior and Logic

When Sync Occurs

Automatic Triggers (Real-time or Near Real-time):

Cothon EventSalesforce ActionTiming
Save new opportunityCreate Opportunity< 1 minute
Change opportunity statusUpdate Stage< 30 seconds
Complete analysisCreate Task, Update custom fields< 1 minute
Generate proposalCreate Task, attach document< 2 minutes
Add commentAdd Note to Opportunity< 1 minute
Assign team memberUpdate Owner or add Team member< 30 seconds

Periodic Sync (Configurable):

  • Every 15 minutes (default): Incremental sync of changes
  • Every hour: Full reconciliation for missed updates
  • Daily: Complete data validation and cleanup

Manual Sync:

  • Individual record: Click "Sync" button on opportunity
  • Bulk sync: Settings > Integrations > Salesforce > Sync Now

Conflict Resolution

When the same field changes in both systems, Cothon applies these rules:

Default: Last Write Wins

  • Compares timestamps
  • Most recent change takes precedence
  • Overwrite occurs without warning

Custom Rules (Configurable):

FieldRuleReason
Amount/ValueCothon winsGovernment data is source of truth
CloseDateCothon winsDeadlines set by government
StageLast write winsSales team may adjust manually
OwnerSalesforce winsSales manager assigns territory
Custom fieldsCothon winsAnalysis data from Cothon

Configure in Settings > Integrations > Salesforce > Conflict Resolution.

Manual Review Option:

  • Enable "Flag Conflicts for Review"
  • Conflicts appear in Settings > Integrations > Salesforce > Conflicts
  • Review and choose which value to keep

Deduplication Logic

Cothon prevents duplicate opportunities using:

Primary Key: Reference Number

  • Each government opportunity has unique reference (e.g., "W6369-225123/A")
  • Cothon checks Salesforce for existing Opportunity with matching Cothon_Ref__c
  • If found, updates existing; if not, creates new

Fallback: Title + CloseDate

  • If reference number not available (rare for government RFPs)
  • Matches on exact title and close date
  • Creates duplicate if neither match

Handling Legacy Data:

  • Existing Salesforce opportunities without Cothon_Ref__c won't match
  • One-time migration: Settings > Integrations > Salesforce > Match Legacy Records
  • Manual review and linking of probable matches

Sync Direction Options

Configure how data flows between systems:

Bidirectional (Default):

Cothon ←→ Salesforce
  • Changes in either system sync to the other
  • Most flexible but requires conflict resolution
  • Best for: Teams actively using both systems

Cothon → Salesforce (Push Only):

Cothon → Salesforce
  • Cothon is master, Salesforce is replica
  • Changes in Salesforce don't affect Cothon
  • Best for: Teams using Salesforce for reporting only

Salesforce → Cothon (Pull Only):

Cothon ← Salesforce
  • Salesforce is master, Cothon enriches
  • Changes in Cothon don't push to Salesforce
  • Best for: Read-only Cothon usage (rare)

Hybrid:

Certain fields: Cothon → Salesforce
Other fields: Salesforce → Cothon
  • Field-level sync direction control
  • Example: Cothon controls Amount, Salesforce controls Owner
  • Best for: Complex workflows

Configure in Settings > Integrations > Salesforce > Sync Direction > Advanced.

Activity Tracking

Cothon logs activities to Salesforce as Tasks:

Activity Types Logged

Analysis Activities:

Subject: "Cothon: Bid Analysis Completed"
Status: Completed
Due Date: Analysis completion date
Description:
"Compliance Score: 85%
Status: Pursuing
Key Findings:
- Strong fit for technical requirements
- Concerns about pricing competitiveness
- Team recommendation: Pursue with cost review"

Proposal Generation:

Subject: "Cothon: Proposal Generated"
Status: Completed
Due Date: Generation date
Description:
"Proposal generated for [RFP Title]
Sections: Executive Summary, Technical Approach, Team, Pricing
Status: Ready for Review
Link: [URL to proposal in Cothon]"

Deadline Reminders:

Subject: "Cothon: Submission Deadline Approaching"
Status: Not Started
Due Date: Submission deadline
Priority: High
Description:
"[RFP Title] closes in 3 days
Current Status: Proposal Draft
Assigned To: [Team Member]
Action Required: Complete proposal and submit"

Customizing Activity Logging

Preventing Excessive Tasks

To avoid cluttering Salesforce with too many tasks:

Batch Updates:

  • Multiple status changes within 1 hour → single task
  • Configurable batch window

Threshold Filters:

  • Only log activities for opportunities > $X value
  • Only log for specific stages
  • Only log for specific opportunity types

Rollup to Notes:

  • Option to use Notes instead of Tasks
  • Less invasive for high-activity opportunities

Reporting and Dashboards

Salesforce Reports Using Cothon Data

Government Pipeline Report:

Report Type: Opportunities
Filters:
- Cothon_Ref__c NOT NULL
- Stage NOT EQUAL TO Closed Lost, Closed Won
Columns:
- Opportunity Name
- Account (Department)
- Amount
- Close Date
- Cothon Compliance Score
- Cothon Pursuit Decision
Grouping: Stage

Compliance Analysis Report:

Report Type: Opportunities with Custom Object (Cothon_Analysis__c)
Filters:
- Cothon Compliance__c LESS THAN 70
Columns:
- Opportunity Name
- Cothon Compliance__c
- Cothon Pursuit__c
- Key Risks (from Analysis)
Grouping: Cothon Pursuit Decision

Win Rate by Department:

Report Type: Opportunities
Filters:
- Cothon_Ref__c NOT NULL
- Stage EQUALS Closed Won, Closed Lost
Columns:
- Account Name (Department)
- Count of Opportunities
- Sum of Amount
Grouping: Account Name, Stage

Sample Dashboard

Government Sales Dashboard:

Components:

  1. Government Pipeline Funnel (Funnel Chart)

    • Opportunities by Stage
    • Filtered to Cothon opportunities
  2. Compliance Score Distribution (Bar Chart)

    • X-axis: Score ranges (0-50%, 51-70%, 71-85%, 86-100%)
    • Y-axis: Count of opportunities
  3. Top Departments (Horizontal Bar Chart)

    • Top 10 departments by total opportunity value
    • Sorted descending
  4. Closing This Quarter (Table)

    • Opportunities closing in current quarter
    • Sorted by close date
  5. Average Compliance Score (Gauge)

    • Average across all active opportunities
    • Red < 60%, Yellow 60-80%, Green > 80%
  6. Win Rate Metric (Metric Component)

    • % of closed opportunities marked Won
    • Filtered to last 12 months

Creating Custom Dashboards

Tip

Create multiple dashboards for different audiences: executive (high-level metrics), bid manager (detailed pipeline), analyst (compliance and risk).

Advanced Configuration

Process Builder Integration

Trigger Salesforce automation when Cothon syncs data:

Example: Email Alert on High-Value Opportunity

Example: Create Follow-Up Task on Lost Opportunity

When a government opportunity is marked "Closed Lost", create a task to review lessons learned:

  • Criteria: Stage = Closed Lost AND Cothon_Ref__c IS NOT NULL
  • Action: Create Task
    • Subject: "Review Lost Opportunity - "
    • Assigned To: Opportunity Owner
    • Due Date: 7 days from now
    • Description: "Review why we lost this opportunity and update our capability library"

Flow Integration

Use Salesforce Flow for more complex automation:

Example: Multi-Step Approval for High-Value Pursuits

When Cothon sets Pursuit Decision = "Pursue" on opportunities > $5M:

  1. Create approval request
  2. Assign to Bid Review Committee
  3. If approved → Update Stage to "Pursuing"
  4. If rejected → Update Pursuit Decision to "Pass", notify team

Salesforce Einstein Integration

Leverage Einstein with Cothon data:

Einstein Opportunity Scoring:

  • Train Einstein on historical government wins
  • Include Cothon_Compliance__c as input feature
  • Get predictive win probability
  • Compare to Cothon's compliance score

Einstein Next Best Action:

  • Recommend actions based on opportunity characteristics
  • Example: "Schedule capability review" when compliance < 70%
  • Example: "Engage partner" when specific requirements flagged

Multi-Org and Sandbox Support

Connecting Multiple Salesforce Orgs

Scenarios:

  • Production + Sandbox environments
  • Multiple regional Salesforce instances
  • Separate orgs for different business units

Configuration:

Sandbox Testing

Before rolling changes to production:

Warning

Sandboxes refresh periodically in Salesforce. After a refresh, you'll need to reconnect the Cothon integration.

Troubleshooting

Common Issues and Solutions

"Failed to Authenticate" Error

Symptoms:

  • Can't connect to Salesforce
  • Error message: "OAuth authentication failed"
  • Connection status shows "Error"

Causes:

  • Password changed recently
  • Connected app not approved by admin
  • IP restrictions in Salesforce
  • Session expired

Solutions:

  1. Click Refresh Connection in Cothon
  2. Re-enter Salesforce credentials
  3. Check Salesforce Setup > Connected Apps > Manage Connected Apps > Cothon is "Approved"
  4. Verify IP allowlist includes Cothon IPs (contact support for IP list)
  5. Check Salesforce session settings allow API access

Opportunities Not Syncing

Symptoms:

  • Save opportunity in Cothon but it doesn't appear in Salesforce
  • No sync errors in logs
  • Last sync time not updating

Diagnosis:

Field Data Missing in Salesforce

Symptoms:

  • Opportunity created but some fields blank
  • Custom fields not populating
  • Amount or Close Date missing

Solutions:

For Custom Fields:

  1. Verify custom field created in Salesforce with correct API name
  2. Check field-level security grants access to integration user
  3. Confirm field mapping in Cothon uses exact API name (case-sensitive)

For Standard Fields:

  1. Check if field is required in Salesforce but optional in Cothon (creates validation error)
  2. Review field mappings for data type compatibility
  3. Check if picklist values match between systems

For Amount:

  • Cothon may have value range (min/max) but Salesforce Amount is single number
  • Verify value conversion setting (midpoint/min/max)

Sync Creating Duplicate Opportunities

Symptoms:

  • Same government RFP appearing multiple times in Salesforce
  • Similar opportunities with slight title differences

Causes:

  • Deduplication field not configured
  • Cothon_Ref__c custom field missing
  • Reference number format changed

Solutions:

Stage Mapping Errors

Symptoms:

  • Error: "Invalid stage value"
  • Opportunity syncs but stage is incorrect
  • Stage doesn't update when status changes in Cothon

Solutions:

  1. Verify stage mappings in Settings > Integrations > Salesforce > Stage Mapping
  2. Check mapped stage exists in Salesforce (Setup > Opportunity > Fields > Stage)
  3. Confirm integration user has access to all stages
  4. If using Record Types, ensure stage is available for the opportunity's record type
  5. Test stage change manually on an opportunity

API Limit Exceeded

Symptoms:

  • Error: "EXCEEDED_ID_LIMIT" or "REQUEST_LIMIT_EXCEEDED"
  • Sync stops working midday
  • Integration status shows "Warning"

Solutions:

Immediate:

  1. Sync pauses automatically until limit resets (daily at midnight Pacific)
  2. Critical updates queued and processed after reset
  3. Monitor in Settings > Integrations > Salesforce > API Usage

Long-term:

  1. Reduce Sync Frequency: Change from 15min to 30min or hourly
  2. Optimize Filters: Only sync opportunities meeting specific criteria
  3. Batch Updates: Enable batching to combine multiple updates
  4. Upgrade Salesforce: Higher editions have higher API limits
  5. Contact Cothon Support: Enterprise customers can get dedicated API infrastructure

API Limit by Salesforce Edition:

EditionDaily API CallsPer User Add-on
Essentials5,000Not available
Professional5,000+1,000 per user
Enterprise10,000+1,000 per user
Unlimited15,000+1,000 per user

Data Not Updating in Salesforce

Symptoms:

  • Opportunity created but subsequent changes don't sync
  • Stale data in Salesforce
  • Status changes in Cothon not reflected

Diagnosis:

  1. Check if opportunity is "locked" in Salesforce (in approval process)
  2. Verify bidirectional sync is enabled if expecting updates
  3. Check sync logs for "Update failed" errors
  4. Confirm "Last Modified Date" is recent in both systems

Solutions:

  • If locked: Complete approval process or remove from process
  • If validation rule failing: Adjust Salesforce validation or ensure Cothon provides required data
  • If field-level security: Grant integration user write access to fields
  • If update failing: Check error details in sync logs

Viewing Detailed Sync Logs

For deep troubleshooting:

Understanding Salesforce Error Codes:

Error CodeMeaningCommon Solution
REQUIRED_FIELD_MISSINGRequired field not providedAdd field mapping or make field optional
INVALID_CROSS_REFERENCE_KEYReferenced record doesn't existEnsure parent record (Account) exists first
FIELD_CUSTOM_VALIDATION_EXCEPTIONValidation rule failedAdjust validation rule or provide compliant data
UNABLE_TO_LOCK_ROWRecord locked by another processRetry sync after a few minutes
REQUEST_LIMIT_EXCEEDEDAPI limit reachedWait for limit reset
INSUFFICIENT_ACCESSUser lacks permissionsGrant permissions to integration user

Performance Optimization

Reducing Sync Load

Sync Selectively:

  • Don't sync every opportunity - use filters
  • Example: Only sync opportunities > $50K
  • Example: Only sync when status = "Pursuing" or later

Batch Timing:

  • Schedule heavy syncs during off-hours
  • Configure daily full sync for 2 AM when Salesforce usage is low
  • Use incremental sync during business hours

Field Optimization:

  • Only sync fields you actually use in Salesforce
  • Disable activity logging if not needed
  • Use notes instead of tasks for less critical updates

Improving Sync Speed

Parallel Processing:

  • Enable parallel sync (Enterprise plan)
  • Syncs multiple opportunities simultaneously
  • Configure in Settings > Integrations > Salesforce > Performance

Bulk API Usage:

  • For large syncs (> 100 records), use Salesforce Bulk API
  • Automatically enabled for bulk syncs
  • Much faster for high volume

Caching:

  • Cothon caches Account lookups to reduce API calls
  • Cache refreshes hourly
  • Clear cache if seeing stale account data

Security Best Practices

Integration User Setup

Create a dedicated Salesforce user for Cothon integration:

Custom Profile with Minimum Permissions

Instead of System Administrator, create a custom profile with only required permissions:

Object Permissions (CRED: Create, Read, Edit, Delete):

  • Opportunity: CRED
  • Account: CRED (or at least Read + Create)
  • Contact: Read (optional, if syncing contacts)
  • Task: CRED (if logging activities)
  • Note: CRED (if logging activities)
  • Cothon_Analysis__c: CRED (if using custom objects)
  • Cothon_Requirement__c: CRED (if using custom objects)

System Permissions:

  • API Enabled: Yes
  • View All Data: No (not required if object permissions set correctly)
  • Modify All Data: No (not required)

Field-Level Security:

  • Grant read/write access to all fields being synced
  • Ensure custom fields are accessible

Monitoring Integration Security

Regular Audits:

  • Review integration user's recent activity (Setup > Users > [user] > Login History)
  • Check for unusual login locations or times
  • Monitor API usage for anomalies

Connected App Management:

  • Setup > Connected Apps > Manage Connected Apps > Cothon
  • Review connected users
  • Revoke access for users no longer needing integration

OAuth Token Rotation:

  • Cothon automatically refreshes OAuth tokens
  • Tokens encrypted at rest
  • Manually revoke and reconnect periodically (quarterly) for maximum security

Frequently Asked Questions

Next Steps

Get Started:

  • Follow the setup steps to connect your Salesforce org
  • Start with default field mappings and adjust as needed
  • Test with a few sample opportunities before full rollout

Learn More:

Get Help:

Was this page helpful?

Salesforce | Cothon Docs | Cothon