Salesforce
Sync opportunities and leads with Salesforce CRM
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 Object | Salesforce Object | Fields |
|---|---|---|
| Opportunity | Opportunity | Name, Value, Close Date, Stage, Description |
| Analysis | Custom Object | Requirements, Status, Compliance Score |
| Proposal | Attachment/Custom | Document link, Status, Sections |
Salesforce → Cothon
| Salesforce Object | Cothon Usage |
|---|---|
| Account | Company matching, relationship tracking |
| Contact | Team member association |
| Custom Fields | Extended 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 Field | Default SF Field | Customizable |
|---|---|---|
| Title | Opportunity Name | No |
| Value | Amount | No |
| Closing Date | Close Date | No |
| Department | Custom Field | Yes |
| Category | Type | Yes |
| Status | Stage | Yes |
Stage Mapping
Map opportunity statuses to Salesforce stages:
| Cothon Status | Salesforce Stage |
|---|---|
| Identified | Prospecting |
| Analyzing | Qualification |
| Pursuing | Proposal |
| Submitted | Negotiation |
| Won | Closed Won |
| Lost | Closed 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:
- Open the opportunity in Cothon
- Click Sync in the toolbar
- View sync status and any errors
Or bulk sync:
- Go to Settings > Integrations > Salesforce
- Click Sync Now
- 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:
| Error | Cause | Solution |
|---|---|---|
| Authentication failed | Token expired | Reconnect integration |
| Record not found | Deleted in SF | Re-link or skip record |
| Field validation | Required field missing | Check field mappings |
| Permission denied | Insufficient SF permissions | Contact SF admin |
Viewing Logs
- Go to Settings > Integrations > Salesforce
- Click View Logs
- Filter by date, status, or record
- 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:
- Create custom object in Salesforce
- Configure field mappings in Cothon
- Set up record type associations
- 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:
- Go to Settings > Integrations > Salesforce
- Click Disconnect
- 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 Field | Salesforce Field | Type | Notes |
|---|---|---|---|
| Core Fields | |||
| Title | Name | Text(255) | Opportunity title |
| Reference Number | Cothon_Ref__c | Text(50) | Custom field, unique identifier |
| Value (Min) | Amount | Currency | Uses midpoint if range |
| Value (Max) | Cothon_Max_Value__c | Currency | Custom field for range |
| Closing Date | CloseDate | Date | Submission deadline |
| Department | Account.Name | Lookup | Auto-creates account |
| Status | StageName | Picklist | Custom mapping required |
| Metadata Fields | |||
| Category | Type | Picklist | "New Business", "Services", etc. |
| Procurement Method | Cothon_Method__c | Picklist | RFP, RFQ, Standing Offer |
| Location | Cothon_Location__c | Text(100) | Province/Territory |
| UNSPSC Code | Cothon_UNSPSC__c | Text(20) | Commodity classification |
| Analysis Fields | |||
| Compliance Score | Cothon_Compliance__c | Percent | 0-100% match score |
| Pursuit Decision | Cothon_Pursuit__c | Picklist | Pursue, Pass, Review |
| Win Probability | Probability | Percent | Standard field |
| Process Fields | |||
| Analysis Status | Cothon_Analysis_Status__c | Picklist | Not Started, In Progress, Complete |
| Assigned To | OwnerId | Lookup | Team member |
| Last Analyzed | Cothon_Last_Analysis__c | DateTime | Timestamp |
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 Value | Salesforce Value |
|---|---|
| Request for Proposal (RFP) | New Business |
| Request for Quotation (RFQ) | New Business |
| Standing Offer | Existing Business |
| Supply Arrangement | Existing Business |
| Task Authorization | Existing 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 Event | Salesforce Action | Timing |
|---|---|---|
| Save new opportunity | Create Opportunity | < 1 minute |
| Change opportunity status | Update Stage | < 30 seconds |
| Complete analysis | Create Task, Update custom fields | < 1 minute |
| Generate proposal | Create Task, attach document | < 2 minutes |
| Add comment | Add Note to Opportunity | < 1 minute |
| Assign team member | Update 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):
| Field | Rule | Reason |
|---|---|---|
| Amount/Value | Cothon wins | Government data is source of truth |
| CloseDate | Cothon wins | Deadlines set by government |
| Stage | Last write wins | Sales team may adjust manually |
| Owner | Salesforce wins | Sales manager assigns territory |
| Custom fields | Cothon wins | Analysis 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__cwon'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:
-
Government Pipeline Funnel (Funnel Chart)
- Opportunities by Stage
- Filtered to Cothon opportunities
-
Compliance Score Distribution (Bar Chart)
- X-axis: Score ranges (0-50%, 51-70%, 71-85%, 86-100%)
- Y-axis: Count of opportunities
-
Top Departments (Horizontal Bar Chart)
- Top 10 departments by total opportunity value
- Sorted descending
-
Closing This Quarter (Table)
- Opportunities closing in current quarter
- Sorted by close date
-
Average Compliance Score (Gauge)
- Average across all active opportunities
- Red < 60%, Yellow 60-80%, Green > 80%
-
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:
- Create approval request
- Assign to Bid Review Committee
- If approved → Update Stage to "Pursuing"
- 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:
- Click Refresh Connection in Cothon
- Re-enter Salesforce credentials
- Check Salesforce Setup > Connected Apps > Manage Connected Apps > Cothon is "Approved"
- Verify IP allowlist includes Cothon IPs (contact support for IP list)
- 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:
- Verify custom field created in Salesforce with correct API name
- Check field-level security grants access to integration user
- Confirm field mapping in Cothon uses exact API name (case-sensitive)
For Standard Fields:
- Check if field is required in Salesforce but optional in Cothon (creates validation error)
- Review field mappings for data type compatibility
- 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__ccustom 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:
- Verify stage mappings in Settings > Integrations > Salesforce > Stage Mapping
- Check mapped stage exists in Salesforce (Setup > Opportunity > Fields > Stage)
- Confirm integration user has access to all stages
- If using Record Types, ensure stage is available for the opportunity's record type
- 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:
- Sync pauses automatically until limit resets (daily at midnight Pacific)
- Critical updates queued and processed after reset
- Monitor in Settings > Integrations > Salesforce > API Usage
Long-term:
- Reduce Sync Frequency: Change from 15min to 30min or hourly
- Optimize Filters: Only sync opportunities meeting specific criteria
- Batch Updates: Enable batching to combine multiple updates
- Upgrade Salesforce: Higher editions have higher API limits
- Contact Cothon Support: Enterprise customers can get dedicated API infrastructure
API Limit by Salesforce Edition:
| Edition | Daily API Calls | Per User Add-on |
|---|---|---|
| Essentials | 5,000 | Not available |
| Professional | 5,000 | +1,000 per user |
| Enterprise | 10,000 | +1,000 per user |
| Unlimited | 15,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:
- Check if opportunity is "locked" in Salesforce (in approval process)
- Verify bidirectional sync is enabled if expecting updates
- Check sync logs for "Update failed" errors
- 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 Code | Meaning | Common Solution |
|---|---|---|
| REQUIRED_FIELD_MISSING | Required field not provided | Add field mapping or make field optional |
| INVALID_CROSS_REFERENCE_KEY | Referenced record doesn't exist | Ensure parent record (Account) exists first |
| FIELD_CUSTOM_VALIDATION_EXCEPTION | Validation rule failed | Adjust validation rule or provide compliant data |
| UNABLE_TO_LOCK_ROW | Record locked by another process | Retry sync after a few minutes |
| REQUEST_LIMIT_EXCEEDED | API limit reached | Wait for limit reset |
| INSUFFICIENT_ACCESS | User lacks permissions | Grant 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:
- Pipedrive Integration - Alternative CRM option
- Slack Integration - Add team notifications
- Opportunities - Managing opportunities in Cothon
- Settings - Other configuration options
Get Help:
- Email: salesforce-integration@cothon.io
- Chat: In-app support (bottom right)
- Community: community.cothon.io/integrations/salesforce
- Video Tutorials: Salesforce Integration Walkthrough
Related Articles
Was this page helpful?