> ## 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

> Connect your Salesforce org so learning activity syncs to Salesforce records.

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>)}
    </>;
};

export const Prerequisites = ({items = []}) => {
  return <Note title="Before you start">
      {items.length > 0 && <ul>
          {items.map((item, index) => <li key={index}>{item}</li>)}
        </ul>}
    </Note>;
};

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

Connect Juno to your Salesforce org so learner activity — assignments, starts, progress, quiz results, completions — lands in Salesforce as activity records your team can report on. Once connected you can also [provision customer learners straight from your Contacts](/integrations/salesforce-provisioning). This guide covers the one-time setup. For what syncs and how, see [Salesforce activity sync](/integrations/salesforce-activity-sync).

<img src="https://mintcdn.com/juno-76d1c392/cuNdHH5yo9qSzwW5/images/integrations/salesforce-connection-card.png?fit=max&auto=format&n=cuNdHH5yo9qSzwW5&q=85&s=bad7f06315f4d593c6ec000b30b809cb" alt="The Salesforce card in Admin → Settings → Integrations, showing a connected org" width="470" height="205" data-path="images/integrations/salesforce-connection-card.png" />

<Prerequisites
  items={[
"Salesforce System Administrator access to your org",
"The Juno package installed in your Salesforce org",
"A Salesforce user to authorize the connection — activity records are written as this user",
]}
/>

## Set up the Salesforce side

The Juno package ships everything the connection needs, including the app that handles OAuth. There is nothing to configure and no credentials to exchange — you only choose who connects.

<Steps>
  <Step title="Assign the integration permission set">
    In Salesforce **Setup** > **Permission Sets**, assign **Juno Learning Integration** to the user who will authorize the connection. Activity records are created as this user, so pick a durable account rather than an individual who might leave.
  </Step>

  <Step title="Assign read access to everyone else">
    Assign **Juno Sales User** to reps, RevOps, and anyone who should see learning activity and the shipped reports. It grants read-only access — see [who sees what](/integrations/salesforce-records-and-reports#who-sees-what).
  </Step>

  <Step title="Add the related list to your Contact layout">
    Go to **Setup** > **Object Manager** > **Contact** > **Page Layouts**, open the layout your reps use, and drag **Juno Learning Activities** from Related Lists onto the page. Useful columns: Event Type, Unit Name, Assigned At, Started At, Completed At, Quiz Result, Grade.

    Do the same on the **User** layout if you sync staff learners.
  </Step>
</Steps>

<Warning>
  **This step is easy to miss and looks like a broken integration.** Activity records are created and linked to the Contact from the first sync, but Salesforce does not show a related list until it is on the layout — so the Contact looks empty even when everything is working. A package cannot add a related list to a standard object's layout for you.
</Warning>

<Note>
  Earlier pilot orgs required enabling OAuth on the app and sending Juno a consumer key and secret. The packaged app carries its own credentials, so neither step applies — if a runbook still tells you to do this, it predates the package.
</Note>

## Connect from Juno

<Steps>
  <Step title="Open the Salesforce card">
    Go to **Admin** > **Integrations** > **Salesforce**.
  </Step>

  <Step title="Choose the environment">
    **Production** signs in at your live org; **Sandbox** signs in at a test org.
  </Step>

  <Step title="Select Connect and sign in">
    Sign in as the integration user holding the permission set. After approval you're returned to Juno and the card shows the connected org.
  </Step>
</Steps>

## Choose what syncs

Connecting your org turns activity sync on with all seven event types enabled, so records start appearing straight away. Two settings then control what flows:

* **Which events sync** — tick or clear them under **Activity events written to Salesforce**. See [choosing which events sync](/integrations/salesforce-activity-sync#choosing-which-events-sync).
* **Which learners are covered** — staff, customers, or both, on the [provisioning settings](/integrations/salesforce-provisioning).

Both live on the same **Admin → Settings → Integrations** page as the connection card.

## Disconnecting and reconnecting

Disconnecting stops the sync. Activity that happens while you're disconnected is **not** recorded — new events are dropped rather than held, so reconnecting does not backfill the gap. Anything already queued when you disconnected is kept and drains automatically once you reconnect from the same card.

Reconnecting re-enables activity sync and keeps the event selection you had before — only a first-time connection turns all seven on.

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