> ## 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 records and reports

> What the Juno integration looks like inside Salesforce — records, reports, and the dashboard.

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"]} />

This page shows the Salesforce side of the integration: where learning activity appears, the reports and dashboard that ship with the Juno app, and who in your org sees what. For how data gets there, see [Salesforce activity sync](/integrations/salesforce-activity-sync).

<img src="https://mintcdn.com/juno-76d1c392/cuNdHH5yo9qSzwW5/images/integrations/salesforce-contact-activity.png?fit=max&auto=format&n=cuNdHH5yo9qSzwW5&q=85&s=b06dc1aa99be8238f0e112ab30d99a9b" alt="A Salesforce Contact showing the Juno Learning Activities related list with a completed course" width="1020" height="390" data-path="images/integrations/salesforce-contact-activity.png" />

## The Juno Learning Activity record

Every learner+Unit pair gets **one record** that fills in as the learner progresses — assigned, started, completed, with the latest quiz attempt alongside. Records live on the learners your team already works with:

* **Customer learners** — records link to the **Contact** (and its **Account**), so reps see training history right on the customer record.
* **Staff learners** — records link to the Salesforce **User**.

Records are permanent Salesforce data in your org: they're yours to report on, automate on, and keep — including after a disconnect.

## Shipped reports

The app installs a **Juno Learning Reports** folder with four reports, each built to answer one question:

| Report                          | The question it answers                                                                                                                                                       |
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Assigned But Never Started**  | Who's sitting on an assignment? Assigned At set, Started At blank — with a **Deep Link** to send the learner straight in. Learners drop off the report as soon as they start. |
| **Most Trained Accounts**       | Which customer Accounts consume the most training? Completions grouped by Account, ranked.                                                                                    |
| **Quiz Pass Rates**             | How are quizzes landing? Pass vs fail split per Unit, with average Grade showing how close the failures were.                                                                 |
| **Recently Completed Learners** | Who just finished? Completions from the last 30 days, most recent first — follow up while the win is warm.                                                                    |

<img src="https://mintcdn.com/juno-76d1c392/cuNdHH5yo9qSzwW5/images/integrations/salesforce-assigned-not-started-report.png?fit=max&auto=format&n=cuNdHH5yo9qSzwW5&q=85&s=c12cd44a83ffc48e0e1a01c7969df62c" alt="The Assigned But Never Started report, grouped by Account, showing learners with an assignment they have not opened" width="1523" height="290" data-path="images/integrations/salesforce-assigned-not-started-report.png" />

## The dashboard

**Juno Learning Overview** puts the headline numbers on one page — completions, assignments awaiting a start, and quiz outcomes. Add it to your team's dashboard rotation like any Salesforce dashboard.

<img src="https://mintcdn.com/juno-76d1c392/cuNdHH5yo9qSzwW5/images/integrations/salesforce-dashboard.png?fit=max&auto=format&n=cuNdHH5yo9qSzwW5&q=85&s=bc69f22846547afbea88e8278cff3e3e" alt="The Juno Learning Overview dashboard with four components: most trained accounts, recently completed learners, quiz pass rates and assigned but never started" width="1523" height="535" data-path="images/integrations/salesforce-dashboard.png" />

## Who sees what

Two permission sets ship with the app:

| Permission set                | Who gets it                                            | What it grants                                                        |
| ----------------------------- | ------------------------------------------------------ | --------------------------------------------------------------------- |
| **Juno Learning Integration** | The one integration user who authorizes the connection | Write access — activity records are created as this user              |
| **Juno Sales User**           | Reps, RevOps, anyone who consumes the reports          | Read-only access to learning activity — see everything, write nothing |

<Tip>
  Assign **Juno Sales User** broadly — the value of the integration is reps seeing training context on their accounts. Nobody but the integration user ever needs write access.
</Tip>

## Building your own reports

Everything is standard Salesforce reporting on the Juno Learning Activity object — group, filter, cross-join with your own fields. Three rules keep numbers honest:

* **Report on the timestamp fields, not Event Type.** Event Type is just the latest synced event; Assigned At / Started At / Completed At are the lifecycle truth.
* **A quiz attempt is not a completion.** Quiz Result / Quiz At / Grade carry the latest attempt; Completed At only counts real Unit or Journey completion.
* **Expires At is reserved and stays blank.** It ships on the object for certification expiry, which isn't live yet — don't build filters or formulas on it.

<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" },
]}
/>
