How data flows
Authentication
CommissionKit uses OAuth 2.0 via External Client App. Just Client ID + Client Secret.External Client App Setup
- In Salesforce Setup, go to Apps > App Manager
- Click New Connected App → select External Client App
- Fill in:
- External Client App Name: CommissionKit
- Contact Email: your email
- Under Scopes, add:
Manage user data via APIs (api)— click the arrow to move it to Selected Scopes
- Click Save
- After saving, click on your new app name in App Manager
- Find the OAuth Policies section → OAuth Flows and External Client App Enhancements
- Check Enable Client Credentials Flow
- In the Run As field that appears, enter your admin username (e.g.
[email protected]) - Click Save
- Go back to the app → click Manage Consumer Details → copy the Consumer Key and Consumer Secret
- In CommissionKit, go to Integrations → select Salesforce CRM
- Enter:
- Instance URL:
https://yourdomain.my.salesforce.com(NOTsalesforce-setup.comorlightning.force.com) - Client ID: your Consumer Key
- Client Secret: your Consumer Secret
- Instance URL:
- Click Connect
Your Instance URL is your Salesforce My Domain — find it under Setup → My Domain. It looks like
https://yourname.my.salesforce.com. Do NOT use salesforce-setup.com or lightning.force.com — those are UI-only domains.Stage behavior
Salesforce stages are auto-discovered via the OpportunityStage metadata object:
Which opportunities get synced: by default, all opportunities are synced regardless of stage. Use the ⋮ menu → Stage Filter to select specific stages to import. Use Stage Mapping to customize how Salesforce stages map to CKit stages.
Required scopes
What syncs
Prerequisites
- Salesforce Sales Cloud (Professional, Enterprise, or Unlimited edition)
- API access enabled (included in Enterprise and above; available as add-on for Professional)
- A Connected App with API scope, or a Security Token
Connector features
The ⋮ dropdown on the connected card provides:Sync schedule
Payment status
CRMs don’t track payments, so CommissionKit assigns a default status to closed-won opportunities on import. You can change it from the ⋮ menu → Payment Defaults:
Deals in non-closed-won stages always import as
unpaid regardless of this setting.
Troubleshooting
”request not supported on this domain”
You’re using the wrong Instance URL. Use your Salesforce My Domain URL (e.g.https://yourname.my.salesforce.com), NOT salesforce-setup.com or lightning.force.com.
”no client credentials user enabled”
Your External Client App needs a Run As user. Go to the app → OAuth Policies → OAuth Flows and External Client App Enhancements → check Enable Client Credentials Flow → enter your admin username in the Run As field → Save.”Connection test fails”
- Instance URL: make sure you’re using
https://yourname.my.salesforce.com, notsalesforce-setup.com - External Client App: Client ID and Client Secret are the Consumer Key and Consumer Secret from Manage Consumer Details
- API access: ensure the Run As user has API access (Setup → Users → Profile → Administrative Permissions → API Enabled)
“0 reps found”
- Check that users have
IsActive = truein Salesforce - The authenticating user must have read access to the User object
”0 deals found”
- Make sure opportunities are marked as Closed Won (
IsWon = true) - Opportunities without an Owner are skipped — assign an owner in Salesforce
- Sync Reps first, then Deals