Skip to main content
When a learner does something meaningful — gets an assignment, completes a Unit, passes a quiz — Juno writes it onto that learner’s Juno Learning Activity record for the Unit. There is one record per learner per Unit, and its fields fill in as the learner progresses: assigned, then started, then completed, with the latest quiz attempt alongside. This page explains the flow, what each record contains, and what happens when something can’t sync. For setup, see Salesforce.

How the sync works

  1. A learner action fires an event. Only the event types you selected sync; everything else is skipped — see Choosing which events sync.
  2. The event is queued in Juno. The queue is durable — Salesforce being briefly unreachable never loses activity.
  3. A scheduled sync run drains the queue and upserts records into Salesforce in batches. Runs are hourly, so activity appears in Salesforce within the hour rather than instantly.
  4. Each learner+Unit pair has one activity key — every event updates that same record, so retries and duplicates can’t create double records.

Event types

Report on the timestamp fields, not Event Type. Event Type shows the latest synced event; the lifecycle truth is the timestamps. “Assigned but never started” = Assigned At is set and Started At is blank. “Completions” = Completed At is set.
A quiz attempt is not a completion. Passed or failed, the latest attempt lands in Quiz Result / Quiz At / Grade. Completed At is set only when the learner completes the Unit or Journey itself — a completions report never counts failed attempts.
Timestamps are learning times. Assigned At, Started At, Completed At and Quiz At record when the learner acted — not when Juno synced the event. Retaken quizzes keep the latest attempt.

Choosing which events sync

Go to Admin → Settings → Integrations. Under Activity events written to Salesforce, tick the events you want. Connecting your org switches all seven on, so activity flows from day one — clear any you don’t want in Salesforce, then Save.
Clearing every event stops the sync. With nothing ticked, Juno writes nothing to Salesforce — existing records stay as they are, but they stop updating. The page warns you when no events are selected.
Changes apply to events fired from that point on. Turning an event back on does not backfill the period it was off.

What’s on a record

How learners are matched

Juno matches learners to Salesforce by email — the learner’s primary email in Juno against:
  • Staff learners → an active Salesforce User with that email.
  • Customer learners → a Contact with that email (the Contact’s Account is linked too).
If a staff learner has no matching active User, the event retries — a User provisioned later still syncs. If a customer learner has no Contact, the event is parked and won’t retry on its own; create the Contact and re-enqueue via support.

When something fails

  • Failed sends retry automatically with increasing delays (up to an hour apart). After 8 attempts a row is marked dead and kept for inspection.
  • A lost session (expired or revoked Salesforce access) shows a reconnect banner on the integration card. Activity keeps queueing and drains after you reconnect — nothing is lost, and the wait burns no retry attempts. This is not the same as disconnecting deliberately, which drops new activity instead of holding it.
  • Synced rows are pruned from Juno’s queue after 30 days (failed entries are kept 90 days for diagnosis, then pruned); the Salesforce records are permanent.
Last modified on August 9, 2026