> ## Documentation Index
> Fetch the complete documentation index at: https://docs.junojourney.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforce sync troubleshooting

> Diagnose missing records, stalled syncs, and provisioning surprises.

export const SupportContact = () => {
  return <Info title="Still need help?">
      Contact us at <a href="mailto:support@junojourney.com">support@junojourney.com</a> or use the support widget in Juno.
    </Info>;
};

export const RelatedPages = ({pages = []}) => {
  if (pages.length === 0) return null;
  return <>
      <br />
      <strong>Related articles</strong>
      <CardGroup cols={2}>
        {pages.map(page => <Card title={page.title} href={page.href} key={page.href} />)}
      </CardGroup>
    </>;
};

export const RoleBadge = ({roles = []}) => {
  const colorMap = {
    Admin: "yellow",
    Manager: "blue",
    Learner: "green",
    "Co-editor": "purple"
  };
  return <>
      {roles.map(role => <span key={role}><Badge color={colorMap[role] || "gray"} size="sm" shape="pill">{role}</Badge>{" "}</span>)}
    </>;
};

<RoleBadge roles={["Admin"]} />

Work top to bottom: most "nothing is syncing" reports are one of the first three rows. Activity is queued durably — fixing the cause syncs the backlog; nothing is lost while you diagnose.

## No records appear at all

<Note>
  **Give it an hour first.** The sync runs hourly, so activity from a few minutes ago will not be in Salesforce yet. Only start troubleshooting once a scheduled run has been and gone.
</Note>

| Check                                              | Where                                                                      | Fix                                                                                                                                                          |
| -------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Is the related list on the layout?                 | Salesforce **Setup** > **Object Manager** > **Contact** > **Page Layouts** | Add **Juno Learning Activities**. Records sync from day one but stay invisible until the list is on the layout — the most common "nothing is working" report |
| Is the org connected?                              | **Admin** > **Integrations** > **Salesforce** card                         | Connect (or reconnect) as the integration user                                                                                                               |
| Are any events selected?                           | **Activity events written to Salesforce** on the Integrations page         | Tick the events you want, then **Save**. With none ticked, nothing is written                                                                                |
| Does the sync audience include the learner?        | **Sync audience** on the provisioning card — Staff / Customers / Both      | Widen the audience                                                                                                                                           |
| Does the integration user hold the permission set? | Salesforce **Setup** > **Permission Sets** > **Juno Learning Integration** | Assign it, then activity drains on the next run                                                                                                              |

## Records stopped appearing

* **Reconnect banner on the card** — the Salesforce session was revoked or expired beyond refresh (password reset, admin revoke, key rotation). Reconnect from the card; queued activity drains automatically after.
* **No banner, still nothing** — check the learner's action is one of the ticked events under **Activity events written to Salesforce**, and that the learner matches (next row).
* **Records stopped the moment someone edited settings** — clearing every event under **Activity events written to Salesforce** stops all write-back. Existing records stay, but nothing updates.

## One learner's activity is missing

| Learner kind | Matching rule                                                                  | If there's no match                                                |
| ------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
| Staff        | Active Salesforce **User** with the learner's primary email                    | Event retries automatically — a User created later still syncs     |
| Customer     | **Contact** with the learner's primary email (or the Contact Juno provisioned) | Event is parked — create the Contact, then ask support to re-queue |

## The numbers look wrong

* **"Completions" higher than expected** — you're counting Event Type instead of Completed At. Report on the timestamp fields ([why](/integrations/salesforce-records-and-reports#building-your-own-reports)).
* **A passed quiz shows as failed (or vice versa)** — quiz fields carry the **latest attempt** by design. A retake overwrites the previous outcome on the record.
* **Deep Link / Expires At columns are blank** — expected; those fields activate with upcoming features.

## Provisioning surprises

* **Run refused, "unusually large" warning** — the run would deactivate more than a safe share of your provisioned learners. Usually a criteria edit; **Dry-run** the new criteria and check the deactivate count before running again.
* **Nobody was deactivated after tightening criteria** — if the run matched zero Contacts or Salesforce returned a partial read (record cap), deactivation is skipped on purpose for that run.
* **One person stayed active when everyone else was deactivated** — provisioning only auto-deactivates plain learners. Anyone promoted above Learner is left alone deliberately; deactivate them by hand if that's what you want.
* **A customer can't sign in** — in order of likelihood: they were deactivated (Contact stopped matching), their email differs from the Contact's, or your organization signs in through SSO/SAML (magic-link sign-in doesn't apply).

## What Juno keeps, and for how long

Synced queue entries are pruned 30 days after sending; failed entries are kept 90 days for diagnosis, then pruned. The Salesforce records themselves are permanent data in your org and are never deleted by Juno.

<RelatedPages
  pages={[
{ href: "/integrations/salesforce", title: "Salesforce — connect your org" },
{ href: "/integrations/salesforce-activity-sync", title: "Salesforce activity sync — what syncs and how" },
{ href: "/integrations/salesforce-provisioning", title: "Provision customer learners from Salesforce" },
{ href: "/integrations/salesforce-records-and-reports", title: "Salesforce records and reports" },
]}
/>

<SupportContact />
