Cademy can send customer and training data to Salesforce. This lets your team see contacts, organisations, course dates and registrations alongside the information already held in your customer relationship management (CRM) system.
This guide explains what the integration does and takes you through the full setup, one step at a time.
A module is one group of records you can sync, such as Contacts, Organisations or Course Dates. The full setup includes Salesforce field and object setup, the Cademy connection and testing. You can start with Contacts and add other modules later.
Before you start
You will need:
A Cademy account where Cademy has enabled Salesforce. It is currently shown as an Enterprise beta feature, but an Enterprise plan alone does not guarantee access. If you cannot see or install it, ask a System Admin for your account or Cademy Support to confirm whether Salesforce is enabled for your account.
System Admin access in Cademy.
A Salesforce administrator who can create an External Client App, users, permission sets, fields and custom objects.
A Salesforce user for the integration to run as. A separate integration user is strongly recommended.
Your Salesforce My Domain URL.
The Apps menu is shown only to System Admins. If you are a System Admin and cannot see Apps, it has been hidden from your menu: look under More.
If you cannot see Salesforce under Apps in Cademy, contact Cademy Support before continuing.
Important: existing records are not sent automatically
Cademy starts sending records when they are created or changed after you connect Salesforce and enable the relevant module. It does not send all your existing Cademy records when you first connect.
For example:
A new contact created after setup will be sent to Salesforce.
An existing contact will be sent when their record is changed after setup.
An existing contact that has not changed can still be sent when a record being synced needs it, for example when that contact has a new registration. In the same way, a contact can bring its organisation with it, and a registration its course date, when those modules are on.
There is currently no button to send all existing records. The Retry button in Sync Activity is offered only on a row that says Failed.
Do not try to force a full sync by making bulk changes to your Cademy records. This can change important dates, trigger other integrations and send too much data to Salesforce at once. If you need historic data moved into Salesforce, contact Cademy Support before connecting.
Important: check for existing Salesforce records
Cademy uses its own unique ID fields in Salesforce to recognise records it has synced before. An existing Salesforce Contact or Account will normally have an empty Cademy ID field.
This means Cademy may create a new Salesforce record even if a similar Contact or Account already exists. If Salesforce already contains many of the same people or organisations as Cademy, contact Cademy Support before enabling the sync. Agreeing how those records will be matched first helps you avoid duplicates.
How the integration works
The sync is one-way:
Cademy → Salesforce
Changes made in Cademy can be sent to Salesforce. Changes made in Salesforce are not sent back to Cademy.
Cademy never deletes a record from Salesforce. Turning off a module or disconnecting Salesforce stops future updates, but it does not remove information that has already been sent.
What can be sent
In Cademy | In Salesforce | Default setting |
Contacts | Contact | On |
Organisations | Account | Off |
Course Dates |
| Off |
Registrations |
| Off |
Contacts are turned on when you connect. The other modules are off so that you can create their Salesforce fields and check their mappings before any data is sent.
Course Date and Registration are custom Salesforce objects. You create them by following the recipes in this guide.
How records are matched
Salesforce data | Matching field | Value written by Cademy |
Contact |
| Cademy contact ID |
Account |
| Cademy organisation ID |
Course Date |
| Cademy course-date ID |
Registration |
| Cademy registration ID |
Cademy uses the Cademy ID field in Salesforce to find the same record on later syncs. It does not match records by name or email address. This is why the fields must be created before the connection and why similar Salesforce records with an empty Cademy ID field can become duplicates.
If you connect more than one Salesforce org, Cademy sends new changes to every connection marked Ready. The Default label identifies your main connection, but it does not stop your other Ready connections from syncing.
Step 1: choose the Salesforce integration user
The Client Credentials flow lets Cademy connect to Salesforce without a person signing in each time. It always works as one named Salesforce user, called the execution user for an External Client App. In a Connected App, this setting is labelled Run As. This guide assumes that Salesforce user already exists. If it does not, ask your Salesforce administrator to create a user whose license supports API access.
Use a dedicated integration user if your Salesforce plan allows it. This makes the integration easier to audit and prevents it from stopping when a staff member leaves.
The user needs:
API Enabled system permission.
Read, Create and Edit access to every Salesforce object you enable.
Read and edit access to the fields Cademy uses.
Access to see the Salesforce records that Cademy may need to update.
Do not give this user Delete access just for Cademy. The integration never deletes Salesforce records.
You can give the access through a profile or a permission set. A permission set is usually easier to review later.
To create a permission set:
In Salesforce, select the gear icon, then select Setup.
In Quick Find, enter
Permission Sets, then select Permission Sets.Select New.
Enter a label such as
Cademy Integrationand save it.Open System Permissions, select Edit, enable API Enabled, then save.
Return to the permission set and open Object Settings.
Add the object and field permissions listed in Step 5 after you have created the fields.
Open Manage Assignments, select Add Assignments, select the integration user, then select Assign. Check that Salesforce confirms the assignment. Some user types, including integration users, do not appear in this list. Salesforce says to manage those assignments through the PermissionSetAssignment API object; see “Manage permission set assignments” in the Salesforce help links below.
Keep the integration user's username nearby. Salesforce may use a username that looks like an email address, but it is not always the same as the user's contact email.
Step 2: find your My Domain URL
In Salesforce Setup, enter
My Domainin Quick Find.Select My Domain.
Find Current My Domain URL.
Copy the full address, including
https://.
A production URL normally looks like:
https://yourcompany.my.salesforce.com
A sandbox or Developer Edition URL may look like:
https://yourcompany.sandbox.my.salesforce.comhttps://yourcompany.develop.my.salesforce.com
Use the My Domain URL, not a Lightning page address ending in .lightning.force.com, and do not add /services/oauth2/token to it.
Step 3: create the Cademy ID fields
Create these fields before you add the Salesforce connection in Cademy. The integration checks for them while it creates the starting mappings.
Create the Contact ID field
In Salesforce Setup, open Object Manager.
Select Contact.
Select Fields & Relationships.
Select New.
Choose Text, then select Next.
Enter these values:
Field Label:
Cademy Contact IDLength:
255Field Name:
Cademy_Contact_ID
Enable Unique.
Keep the value case-sensitive if Salesforce asks how to compare text.
Enable External ID.
Select Next.
Make the field visible to the integration user or its profile.
Continue through the page layout step and select Save.
Check that the final API name is exactly:
Cademy_Contact_ID__c
Create the Account ID field
If you plan to sync Organisations now or later, repeat the same process under Object Manager, then Account, then Fields & Relationships, with these values:
Field Label:
Cademy Organisation IDType: Text
Length:
255Unique: On
External ID: On
API name:
Cademy_Organisation_ID__c
Create this field before connecting even if you plan to leave Organisations off at first. Adding it after the connection is created does not automatically add it to that connection's saved setup.
These fields are managed by Cademy. Your Salesforce users should not type into or change them.
Step 4: create the optional training objects
You can skip this step if you only want to sync Contacts and Organisations.
Complete the Course Date recipe before the Registration recipe because each Registration links to a Course Date.
Create the Course Date object
In Salesforce Setup, open Object Manager.
Select Create, then select Custom Object.
Enter these values:
Label:
Course DatePlural Label:
Course DatesObject Name:
Course_DateRecord Name:
Course Date NameRecord Name Data Type: Text
Enable Allow Reports.
Select Save.
The object's API name must be:
Course_Date__c
Add the Course Date fields
Open Fields & Relationships on the new Course Date object and create each field below.
Field | Type | Settings | API name |
Cademy Course Date ID | Text | Length |
|
Start | Date/Time | No extra settings |
|
End | Date/Time | No extra settings |
|
Status | Picklist | Values: |
|
For the Cademy Course Date ID field:
Select New and choose Text.
Set the label to
Cademy Course Date IDand the length to255.Enable Unique and External ID.
Give the integration user field access.
Save and check the API name is
Cademy_Course_Date_ID__c.
For Status, choose the option to enter one picklist value per line, then enter:
Scheduled
Cancelled
Completed
Cademy currently sends Scheduled for an active course date and Cancelled when a synced course date is deleted. Keep Completed in the picklist so the object is ready for reporting or future use.
Make Course Dates easy to find
A tab is optional for the sync, but useful for Salesforce users:
In Setup, enter
Tabsin Quick Find and select Tabs.Under Custom Object Tabs, select New.
Choose Course Date and any tab style.
Select Next, then Next, then Save.
Create the Registration object
Return to Object Manager.
Select Create, then select Custom Object.
Enter these values:
Label:
RegistrationPlural Label:
RegistrationsObject Name:
RegistrationRecord Name:
Registration NameRecord Name Data Type: Text
Enable Allow Reports.
Select Save.
The object's API name must be:
Registration__c
Add the Registration fields
Open Fields & Relationships on the new Registration object and create each field below.
Field | Type | Settings | API name |
Cademy Registration ID | Text | Length |
|
Contact | Lookup Relationship | Related to Contact |
|
Course Date | Lookup Relationship | Related to Course Date |
|
Status | Picklist | Values: |
|
Attendance Status | Picklist | Values: |
|
For each lookup field:
Select New and choose Lookup Relationship.
For Contact, choose Contact under Related To. For Course Date, choose Course Date.
Keep the field labels exactly as shown in the table.
Accept the normal field security and page layout steps, making sure the integration user can edit the field.
Save and check the API name.
Add a Registration tab in the same way as the Course Date tab if you want users to find these records from the App Launcher.
Step 5: finish the integration user's permissions
Return to the profile or permission set used by the integration user.
Give it these object permissions for every module you plan to enable:
Salesforce object | Object permissions |
Contact | Read, Create and Edit |
Account | Read, Create and Edit |
Course Date | Read, Create and Edit |
Registration | Read, Create and Edit |
Also give the user read and edit access to:
The standard fields used in your Cademy mappings.
Every Cademy ID field used by the modules you enable.
Course_Date__c.Name,Start__c,End__candStatus__c.Registration__c.Name,Contact__c,Course_Date__c,Status__candAttendance_Status__c.
You only need to grant access to the optional objects if you plan to use those modules.
If your Salesforce sharing rules restrict which Contacts or Accounts the integration user can see, make sure it can see the records Cademy may need to update. Ask your Salesforce administrator to use the smallest access that still covers the records you want to sync.
Step 6: create an External Client App in Salesforce
An External Client App gives Cademy permission to call the Salesforce API. It does not give Cademy the integration user's password.
Treat its Consumer Secret like a password. Do not put it in an email, ticket or shared document. After you save the connection, Cademy stores the credentials in encrypted form.
Salesforce recommends External Client Apps for new integrations. Since Spring ’26, Salesforce restricts creating new Connected Apps. Existing Connected Apps can continue to work. For a new connection, use the External Client App route. Use the Connected App route below only if you are configuring an existing app or Salesforce Support confirms your org can create one. Salesforce menus can differ by edition and release.
Recommended route: External Client App
In Salesforce Setup, enter
App Managerin Quick Find.Select App Manager.
Select New External Client App.
Enter a name such as
Cademy Syncand a contact email your Salesforce team monitors.For the distribution state, select Local.
In the API or OAuth section, enable OAuth.
Enter this Callback URL:
https://login.salesforce.com/services/oauth2/callback
Salesforce requires a callback value, but Cademy's Client Credentials connection does not use it to redirect a person.
Add this OAuth scope:
Manage user data via APIs (api)
Under Flow Enablement, enable Client Credentials Flow.
Accept Salesforce's security warning if one appears.
Save or create the app.
In Salesforce Setup, enter External Client Apps Manager in Quick Find, then open the app's actions menu and select Edit Policies.
Select Enable Client Credentials Flow.
Enter the Salesforce username for the integration user as the execution user.
Save the policies.
The execution user must be set to the exact Salesforce username shown under Setup, then Users, then Users. In a Connected App this setting is called Run As. Do not assume the username is the same as the person's contact email address.
Copy the Consumer Key and Consumer Secret
In External Client Apps Manager, open the app's action menu and select Edit Settings.
Expand OAuth Settings.
Select Consumer Key and Secret.
Complete Salesforce's identity check. Salesforce may email you a verification code.
Copy the Consumer Key and Consumer Secret to a secure password manager until you finish the Cademy setup.
Do not paste either value into this guide or send it to Cademy Support.
Older route: Connected App
Use this route only for an existing Connected App, or after Salesforce Support confirms that your org can create a new one:
In Setup, open App Manager.
Select New Connected App.
Enter
Cademy Syncas the name and add your contact email.Enable OAuth Settings.
Use
https://login.salesforce.com/services/oauth2/callbackas the Callback URL.Add Manage user data via APIs (api) to the selected OAuth scopes.
Enable Client Credentials Flow and accept the warning.
Save the app and select Continue.
Open Manage, then Edit Policies.
Under Client Credentials Flow, choose the integration user in Run As and save.
In App Manager, open the app's action menu and choose View.
Under API (Enable OAuth Settings), select Manage Consumer Details.
Complete the identity check, then copy the Consumer Key and Consumer Secret.
Salesforce restricts creating new Connected Apps. Use the External Client App route for a new integration. If you need a Connected App, ask Salesforce Support whether your org can create one.
Salesforce says OAuth changes can take a few minutes to become active. If the connection test fails immediately after setup, wait a few minutes and try again before changing the settings.
Step 7: install the Salesforce app in Cademy
Sign in to the Cademy admin dashboard as a System Admin.
Go to Apps.
Select Salesforce.
Read the summary, then select Install. The app page mentions a Connected App and lists field mappings and sync activity as later phases. Follow this guide instead: it uses an External Client App, and it covers the Mappings and Sync Activity pages you see after connecting.
Cademy installs the app and opens the Salesforce connections page. Installing the app does not send any data. You still need to add a connection.
Step 8: connect your Salesforce org
On the Salesforce connections page, select Connect Your First Salesforce Org. If another org is already connected, select + Add Connection instead.
In Connection Name, enter a name that will help your team recognise the org, such as
Production Salesforce.Paste your full My Domain URL.
Paste the Consumer Key.
Paste the Consumer Secret.
Leave API Version blank unless Cademy Support has told you to use a specific version. Cademy currently uses version
67.0by default.Select Test & Continue.
Wait for Cademy to confirm that the connection succeeded.
Check Connected as. It should show the integration user's Salesforce username.
Check the Organization ID. Make sure this is the Salesforce org you meant to connect.
Select Save Connection.
Select Finish.
Your first connection becomes the default connection automatically. Saving the connection creates the starting mappings but does not send all your existing records.
Step 9: choose what you want to sync
Go to Apps, then Salesforce, and select the connection you have just added. The Mappings page shows one card for each module.
Open each module, check its settings and select Save after making a change. Switching a module on does not send old records by itself. From that point, records in that module are sent when they are created or changed, or when another record being synced needs them.
Contacts
Contacts sync to the standard Salesforce Contact object. This module is on by default.
Cademy starts with these field mappings:
Cademy field | Salesforce field |
First Name | First Name |
Last Name | Last Name |
Phone | Business Phone |
Cademy uses Cademy_Contact_ID__c to create or update the same Contact each time.
If the Cademy contact belongs to an organisation and Organisations sync is on, Cademy makes sure the Salesforce Account exists first, then fills the Contact's Account link. If the Account cannot be synced, Cademy can still sync the Contact without that link.
Deleting a contact in Cademy does not delete the Contact in Salesforce.
Salesforce normally requires a Last Name when a Contact is created. If your Cademy contacts do not always have one, test the setup carefully and agree a suitable data rule with your Salesforce administrator.
Organisations
Organisations sync to the standard Salesforce Account object. This module is off by default.
Cademy starts with this field mapping:
Cademy field | Salesforce field |
Name | Account Name |
Cademy uses Cademy_Organisation_ID__c to create or update the same Account each time.
To turn it on:
Open Organisations on the Mappings page.
Check that Map to Salesforce account shows Account.
Turn on Organisations Sync.
Review the field mappings.
Select Save.
Deleting an organisation in Cademy does not delete the Account in Salesforce. Sync Activity keeps a readable message explaining that the Salesforce record was left in place.
Course Dates
Course Dates sync to the custom Salesforce Course Date object. This module is off by default.
Complete the Course Date recipe in Step 4 before turning it on.
Cademy starts with these field mappings:
Cademy field | Salesforce field |
Course Name with Date | Course Date Name |
Starts at | Start |
Ends at | End |
Status | Status |
Cademy uses Cademy_Course_Date_ID__c to create or update the same Course Date each time.
To turn it on:
Open Course Dates on the Mappings page.
Check that Map to Salesforce course date shows Course Date (
Course_Date__c).Turn on Course Dates Sync.
Review the field mappings.
Select Save.
When an active course date is sent, its Status is Scheduled. If a course date that previously synced is deleted in Cademy, Cademy changes its Salesforce Status to Cancelled. It does not delete the Salesforce record.
A block groups several sessions into one booking. Each session in a block syncs as its own Course Date. The record for the block as a whole is not synced.
Registrations
Registrations sync to the custom Salesforce Registration object. This module is off by default.
Complete the Registration recipe in Step 4 first. Contacts should be on, and Course Dates must be on if you want the Registration linked to its Course Date.
Cademy starts with these field mappings:
Cademy field | Salesforce field |
Registration Code ( | Registration Name |
Status | Status |
Attendance Status | Attendance Status |
Cademy uses Cademy_Registration_ID__c to create or update the same Registration each time.
The Contact and Course Date lookups are filled automatically, so they do not appear as normal editable mappings. Before writing a Registration, Cademy tries to sync the Contact and Course Date first. If an existing parent record fails to sync to Salesforce, Cademy can still create or update the Registration without that lookup. The parent's own Sync Activity row shows the error. A registration with no Contact or no usable Course Date fails with a readable reason instead.
To turn it on:
Turn on and save Contacts and Course Dates first.
Return to the Mappings list and open Registrations.
Check that Map to Salesforce registration shows Registration (
Registration__c).Turn on Registrations Sync.
Review the field mappings.
Select Save.
Registration values work as follows:
A new booking uses Status
Registered.A cancelled booking keeps its Salesforce record and changes Status to
Cancelled.Moving a booking uses Status
Movedfor the move update and changes the Course Date link. A later update, such as attendance, returns the status toRegisteredon the new Course Date.Attendance Status is empty until attendance is marked, then becomes
AttendedorAbsent.
Registrations for on-demand or e-learning courses have no Course Date, so they are not synced. The reason appears in Sync Activity.
A registration for a whole block has no single Course Date to link to, so it is not synced. The individual sessions can still sync through Course Dates.
Step 10: change the field mappings, if needed
The starting mappings will be enough for many accounts. You can add your own Cademy fields and map them to suitable Salesforce fields.
To add a mapping:
Go to Apps, then Salesforce, and select your connection.
Open Mappings and choose the module you want to change.
Select Add Mapping.
Choose the Cademy Module.
Choose the Cademy Field.
Choose the Salesforce field on the right.
If both fields are dropdown lists, use Map values when the values in Cademy and Salesforce do not match exactly. Before you change choices there: for a custom Cademy dropdown or radio field, selecting Save changes in the Map values window immediately updates that field's choices in Cademy, not only this mapping.
Complete or remove every unfinished row.
Select Save at the top of the page.
You can also remove a mapping using the remove button at the end of its row.
If the Cademy field you need does not exist yet, choose Create new field… from the Cademy Field list where that option is available. Create the field, then continue setting up the mapping.
Keep these rules in mind:
Map fields that hold the same kind of information. For example, map a date to a date field and a number to a number field.
Required Salesforce fields and validation rules still apply to the integration user.
Do not map two Cademy fields to the same Salesforce field. Only one value can be kept.
Removing a mapping stops future updates to that Salesforce field. It does not clear the old value already stored in Salesforce.
Mapping changes are not applied to old records automatically. They are used the next time each Cademy record changes.
Cademy ID fields and automatic relationship links are managed by the integration. Do not add them as ordinary field mappings.
Changing the Salesforce object for a module clears that module's field mappings, external-ID matching rule and automatic relationship links after you confirm the warning. Rebuild the ordinary field mappings before enabling the module. A custom target then uses the Salesforce Record ID stored after its first successful create; it does not automatically regain the Cademy-ID upsert or parent links from the default target. Keep the default objects if you need the matching and relationships described in this guide.
Unsupported complex Salesforce fields appear unavailable in the field picker.
Step 11: test the setup
Use new test records rather than changing a large number of real records.
Test one module at a time:
Create a test contact in Cademy with a recognisable email address, first name and last name.
Wait a short time, then search for the Contact in Salesforce.
Open the Contact and confirm
Cademy_Contact_ID__chas a value.In Cademy, go to Apps, then Salesforce, select the connection, then open Sync Activity.
Confirm that the contact shows as Synced.
If you enabled Organisations, create or update a test organisation and check its Account.
Link the test contact to that organisation and confirm the Contact's Account link is filled.
If you enabled Course Dates, create or update a test course date and check the Course Date record, times and Status.
If you enabled Registrations, register the test contact and check both lookup fields on the Salesforce Registration.
Mark attendance, move the registration or cancel it, then check the values update as described above.
If a test fails, check Sync Activity before changing your setup. Salesforce's error message will often name the missing permission, required field or validation rule.
Check Sync Activity
Go to Apps, then Salesforce, select a connection, then select Sync Activity.
This page shows up to 100 sync records for that connection, the most recently updated first. Each row is the latest result for one record, not a history.
The filter starts on All Statuses, which also shows Not attempted rows. The other filters are:
Synced
Failed
Needs reconnect
Each row shows the Cademy record, the Salesforce record ID when available, the last attempt and the latest error.
If a row says Failed:
Read the full error message.
Fix the cause in Cademy or Salesforce.
Select Retry on that row.
Retry sends that one record again. For a contact, it can also send the contact's organisation. For a registration, it can also send the contact and the course date. This happens only when that module is on and the related record has not synced yet. Only a Failed row has a Retry button.
A row that says Needs reconnect has no Retry button, before or after you reconnect. Replace the credentials as explained below. Replacing them does not send that record again and does not change the row. Cademy tries the record again the next time it changes in Cademy, or when another record being synced needs it.
While a connection needs reconnecting, changes made in Cademy are not sent to it, and reconnecting does not send them afterwards. Selecting Retry on a Failed row during that time changes the row to Needs reconnect. If a record still needs sending after you reconnect, contact Cademy Support with the record and its status.
An on-demand registration or a registration for a whole block appears as Failed with a readable reason. The record for the block as a whole is skipped before a sync attempt, so it does not appear in Sync Activity. The sessions in the block can still sync.
Replace or rotate Salesforce credentials
Salesforce recommends changing OAuth secrets regularly and immediately if a secret may have been exposed.
When Salesforce gives you a new Consumer Key or Consumer Secret:
In Cademy, go to Apps, then Salesforce.
Open the action menu on the affected connection.
Select Edit Connection.
Check the pre-filled My Domain URL.
Enter the Consumer Key and Consumer Secret again. Cademy does not show the saved secret.
Select Test & Continue.
Check the username and Organization ID carefully.
Select Update Connection, then Finish.
Updating credentials does not remove your mappings.
Use Edit Connection for replacement credentials from the same Salesforce org. If you want to connect a different org, use + Add Connection so each org keeps separate mappings and Sync Activity.
Disconnect a Salesforce org
Go to Apps, then Salesforce.
Open the action menu on the connection.
Select Disconnect.
Confirm Disconnect.
Syncing to that org stops. Existing Contacts, Accounts, Course Dates and Registrations stay in Salesforce.
You can reconnect later by choosing Edit Connection and entering valid credentials.
Getting help
If you still need help, contact Cademy Support and include:
The name of the Cademy Salesforce connection.
The Cademy record that did not sync.
The Salesforce object involved.
The status and full error shown in Sync Activity.
The time you last tried the sync.
Do not send your Consumer Key or Consumer Secret. Cademy Support does not need the secret value to investigate a sync problem.
Salesforce help links
Frequently asked questions
I cannot see the Salesforce app in Cademy
The Salesforce feature may not be enabled for your account, or you may not have the System Admin role. Ask a System Admin for your account, or contact Cademy Support.
I cannot create an External Client App
Your Salesforce user may not have permission to create External Client Apps. Ask a Salesforce administrator to create it.
Salesforce restricts new Connected App creation. Contact Salesforce Support to request access. For a new integration, use the External Client App route if it is available.
The connection says invalid client credentials or invalid_grant
Check all of these:
Salesforce has had a few minutes to apply the app or OAuth changes.
Client Credentials Flow is enabled.
An execution user is set. Salesforce labels this Run As in Connected Apps.
The execution user is set to the user's Salesforce username, not only their contact email. In a Connected App, this setting is called Run As.
The Consumer Key and Consumer Secret were copied from the same app.
There are no spaces before or after either value.
The My Domain URL belongs to the same Salesforce org.
Then return to Cademy and run Test & Continue again.
The connection works, but records fail with an access error
The connection test proves that Salesforce can issue a token. It does not prove the integration user can edit every object and field.
Check that the Run As user has:
API Enabled.
Read, Create and Edit on the affected object.
Read and edit access to every mapped field and Cademy ID field.
Access through your Salesforce sharing rules to the affected record.
After changing permissions, retry the failed row in Sync Activity.
Salesforce says an object or field does not exist
Check the API names, including capitals and underscores. They must exactly match the names in this guide:
Cademy_Contact_ID__cCademy_Organisation_ID__cCourse_Date__cCademy_Course_Date_ID__cStart__cEnd__cStatus__cRegistration__cCademy_Registration_ID__cContact__cCourse_Date__cAttendance_Status__c
Also check the integration user's field-level access.
I created a Cademy ID field after connecting
Create the field exactly as shown, then contact Cademy Support before enabling the module. The starting connection setup checks for standard-object ID fields only when the connection is first saved, so adding a field later may not update the saved matching rule automatically.
Salesforce rejects a record because a required field is missing
Your Salesforce org may have extra required fields or validation rules that are not part of the starting Cademy mappings.
Open the module under Mappings and map a suitable Cademy value to the required Salesforce field. If no suitable value exists, ask your Salesforce administrator whether the rule should have an exception for the integration user. Do not weaken an important business rule without reviewing the effect first.
A dropdown value is not accepted
Open the affected mapping and select Map values. Match each Cademy value to an allowed Salesforce picklist value, then save and retry the record.
A Contact did not link to an Account
Check that:
Organisations sync is enabled and saved.
Cademy_Organisation_ID__cexists on Account and is marked Unique and External ID.The integration user can create and edit Accounts and the Contact's Account field.
The Cademy contact belongs to an organisation.
Look at both the Organisation and Contact rows in Sync Activity. Cademy can leave the Contact unlinked when the Account cannot be synced.
A Registration did not link to its Contact or Course Date
Check that Contacts, Course Dates and Registrations are all enabled and saved. Also check:
The Registration object has
Contact__candCourse_Date__clookup fields.All three Cademy ID fields exist and are marked Unique and External ID.
The integration user can edit both lookup fields.
The registration belongs to a scheduled course date rather than an on-demand course.
The registration is not for a whole block.
Then read the Registration row's error in Sync Activity and retry it after fixing the cause.
A course date was cancelled but Salesforce still says Scheduled
Cademy sends Cancelled when a previously synced course date is deleted in Cademy. Check that the Status mapping still points to Status__c. If you removed that mapping, Cademy cannot update the Salesforce status on deletion.
I connected Salesforce, but no old records appeared
This is expected. Cademy does not perform a full historic sync when you connect. Records are sent when they are created or changed after setup.
Everything now says Needs reconnect
The Consumer Secret may have been changed or deleted, or the Run As user may have been deactivated. Create or copy valid credentials, check the Run As user, then use Edit Connection in Cademy to replace the credentials. Rows that already say Needs reconnect keep that status and have no Retry button. Each one is tried again the next time its Cademy record changes.
I changed a field mapping, but old Salesforce records did not change
Mapping changes are used on future syncs. They do not update all old records. The new mapping is used when each Cademy record changes again.


