Skip to content
Current/ Help Center

Reading the sync health dashboard (and fixing a stale sync)

7 min read · Updated Jul 29, 2026

Sync health is the single pane for everything moving between Current and your PSA — ConnectWise, Autotask, or HaloPSA: whether the connection is alive, when data last landed, what's waiting in the queue, and what failed. The page reads the same whichever PSA you run; where this article says "your PSA," the page itself names your provider. When someone says "the numbers look wrong" or "my tasks aren't showing up," this is the page that answers it in under a minute.

Where to find it

Sync health: per-entity status, last run, and anything that failed.
  1. 1
    Open Integrations
    Integrations in the left sidebar. It's a Tenant Admin area — sync health reads admin-only data, so anyone else lands on an "admin-only" notice.
  2. 2
    Find your PSA's card (ConnectWise PSA or Autotask)
    The card shows the connection state, when it last synced, and whether there are open conflicts.
  3. 3
    Click Sync details
    That opens the full sync health page. You can also jump straight there with the ⌘K command palette — type "Sync health."

The four numbers at the top

TileWhat it tells you
ConnectionConnected, Disconnected, or Connection error. On an error, the last error message from your PSA is printed right underneath — read it before doing anything else.
Last successful syncHow long ago PSA data actually landed. Current polls for changes every 5 minutes, so anything older than a couple of poll cycles deserves a look.
Queue depthJobs queued or running among the 25 most recent (the same set the Recent jobs table shows); it tops out at 25.
Failed / dead-letterFailed or dead-lettered jobs in that same recent set.

Job states

StateMeaning
QueuedWaiting for the next drain cycle (every 5 minutes). A job whose last attempt errored also sits here, with a later scheduled time — retries back off about 2, 4, then 8 minutes, capped at 60 (up to 120 when a PSA rate limit was the cause).
RunningIn flight now
SyncedDone; the record's last-synced time updates
PartialNot an error. The run either ran out of its wall-clock time or paused because the PSA was throttling (on Autotask, the hourly request budget was nearly spent). It synced what it could and picks up where it stopped on the next run. A partial background queue job whose record type supports resuming re-queues itself automatically and continues within a couple of minutes — you don't need to press anything. On the per-entity rows, a short note under the status says exactly why the run paused — for example, which record failed to save — instead of a generic budget message. Pressing Sync now also no longer clears the history of previously failed jobs: they stay listed with their Retry buttons until they succeed.
FailedA queue job whose run appeared stuck (still Running after 30 minutes) and was reset by Current's sync watchdog, or an entity whose pull errored (on the per-entity rows). Failed queue jobs carry a Retry button.
Dead letterA queue job that used up all 5 attempts. Current's watchdog automatically retries a dead-lettered job once every 24 hours and alerts tenant admins, but a job that keeps landing here needs a human: read its last error and press Retry.
Note
Partial is amber on purpose
On a large workspace the first full pull genuinely can't finish in one run — tasks alone can be thousands of rows. Partial means "more to come," not "broken." Press Sync now again and it continues; every write is idempotent, so re-running never duplicates a record.
Note
Reliability guardrails
Several guardrails keep a sync cycle from being wasted. Every request Current makes to your PSA carries a hard network timeout, so one stalled call can never eat the whole run. CRM records — companies, contacts, opportunities, notes, charges, and tickets — get a reserved slice of every cycle, so a heavy project pull can't starve them. Within that slice, the two heaviest refreshes (the full company and contact re-walks) only repeat once their last clean pass is 30 minutes old, and long-running backfills like company notes get their own guaranteed sub-slice of every cycle, with batch sizes that shrink to fit the time actually left — so a backfill always moves its bookmark forward, even in a busy cycle. Scheduling is stalest-first: whichever workspace and record type have waited longest sync next, so everything takes its turn. And a sync watchdog checks every few minutes that the background schedules themselves are firing, that each record type is staying fresh, and that long-running syncs are actually making progress (not just retrying the same batch) — if a schedule dies, an entity stops updating, or a sync gets stuck, workspace admins get an in-app alert and an email, and a red or amber banner appears at the top of this page until the problem clears.

Live telemetry

Two readouts sit under the KPI row. PSA API usage shows the calls Current itself has made this hour. On Autotask, that's read against Autotask's shared hourly ceiling of roughly 10,000 requests — the bar turns amber past about 7,000, meaning Current may start pacing its own syncs. ConnectWise publishes no fixed hourly quota (it throttles bursts as they happen), so there the readout is a plain call counter and the pacing happens automatically through backoff. Background jobs shows a heartbeat for each scheduled worker (the PSA sync, notifications, and the won-quote poller): Healthy if it ran within the last 15 minutes, Behind between 15 and 30, Stalled beyond that.

A Stalled PSA sync heartbeat is the loudest signal on the page. It means the scheduled worker itself isn't running — nothing else on the page will be fresh either. See "PSA rate limits and dead-letter jobs" for what Current does when throttling is the culprit.

The rest of the page, top to bottom

  • Outbox — what Current still owes your PSA: time entries that failed to submit (with one-click retry), drafts sitting more than three days, undelivered pushes, and failed jobs. This is where unbilled hours hide.
  • CRM pushes — companies, contacts, and deals whose last push to your PSA failed, each with a plain-language reason and a one-click Retry. Failures your PSA can plausibly recover from retry themselves in the background; anything still listed here is waiting on a person. When everything has landed it reads All synced with the last sync time.
  • In Current now — approximate row counts of what's stored in Current (fast estimates, not exact to the row) — enough to prove a sync landed: projects, phases, tasks, tickets, and partners. If projects are above zero but tasks are zero, the page tells you so — tasks pull per project, so press Sync now.
  • Ticket sync diagnostic — a read-only probe of your PSA that answers "why are there no tickets?" It reports the PSA's total tickets, how many are attached to a project, how many of those projects Current tracks, and what's stored. The usual answer: your tickets are service-desk only and none are linked to a project, so there are no project tickets to sync.
  • Per-entity sync — one row per syncable entity with its direction, last success, stored count, and status. This includes rows for Company notes, Project charges, and Company tickets — CRM mirrors that were always synced but previously had no row here, so staleness on them was invisible. When a row is Partial, the note under its status says exactly why.
  • Recent jobs — the last 25 jobs, newest first, each with its attempt count (n/5) and last error (hover for the full text). Rows in Failed or Dead letter carry a Retry button, which re-queues the job immediately and resets its attempt counter. A job that is Queued with a future scheduled time is already waiting on its own backoff — there is nothing to press.
  • Conflicts — open conflicts and recently auto-resolved ones. See "Fix a sync conflict between Current and your PSA."
  • Removed in your PSA / Blocked from re-import — records whose PSA counterpart is gone, and records you deleted in Current on purpose that the pull is deliberately not re-importing. A task deleted in your PSA that has no logged time is now archived automatically — it disappears from every board, list, timeline, calendar, and My Day, so it never sits here waiting. Only tasks that carry logged time are held for your review (their billing history is never removed silently), each with Archive (hide it, keep the time entries), Delete in Current, or Keep. Deleted projects still appear here for Review & delete.

Last sync run

Last sync run shows the most recent run's record-by-record ledger — for each record type, how many were fetched, how many were newly applied, how many were already up to date, and how many are waiting on a parent company. It's the receipt for the run that just finished.

Something looks stale — check these first

  1. 1
    Look at the last successful pull time
    If it's older than two poll cycles, the connector is likely failing — the Connection tile prints the last error. An authentication message means the credentials or the API user's permissions changed in your PSA; fix that first, because no amount of retrying will help.
  2. 2
    Scan the retrying and dead-letter jobs
    Recent jobs lists the last 25 jobs, each with its attempt count (n/5) and its last error (hover for the full text). A job that keeps erroring shows as Queued with a future scheduled time — it is already waiting on its own backoff, so there is nothing to press — until it hits 5 attempts and lands in Dead letter. Expired credentials and PSA permission changes are the usual suspects. Rows in Failed or Dead letter carry a Retry button, which re-queues the job immediately and resets its attempt counter.
  3. 3
    Check per-project health
    Each synced project carries its own sync badge on the project page. One project stale while everything else flows usually means a deleted or re-permissioned record on the PSA side — the "Removed in your PSA" panel will often already be showing it.

Symptom → cause

What you seeMost likely causeWhat to do
Connection error with a message about credentialsThe API user's secret, integration code, or key pair changed in your PSA, or the user was disabledRe-enter the credentials on your PSA's card and use Test connection. See "Connect Autotask and choose what syncs" or "Connect ConnectWise PSA and choose what syncs."
Last successful sync hours old, nothing in the failed / dead-letter tileThe scheduled worker is stalled — check the PSA sync heartbeatPress Sync now. If that works but the heartbeat stays stalled, the background scheduler needs attention.
Queue depth stuck, nothing completingJobs claimed but not finishing, or a job repeatedly erroringRead the last error on the stuck jobs. Clear queue drops the queued read jobs so they stop piling up. It leaves outbound pushes, jobs already running, and a queued reconcile alone, so it cannot throw away work you owe your PSA.
Projects synced but zero tasksTasks pull per project, and the first run spent its time budget on projectsPress Sync now again — it resumes where it stopped.
Zero tickets, everything else fineNo PSA ticket is attached to a projectRun the ticket sync diagnostic. If project-linked tickets are zero, attach a ticket to a project in your PSA, then re-sync.
A single project is stale, others are fineThe PSA record was deleted, moved, or re-permissionedCheck "Removed in your PSA," then Reconcile.
Everything is amber / PartialThe workspace is large, or the PSA is throttling (on Autotask, the hourly budget is nearly spent)Nothing is broken — each row's note says why it paused. Let the next cycle run (the most out-of-date entity goes first, and CRM records get a guaranteed slice), or press Sync now to continue immediately.
A project shows nothing at all and has no sync badgeIt's a Current-native project — it was never meant to syncExpected. See "Project modes: PSA-synced or Current-native."

The two buttons that do work

Sync now runs an immediate, ordered pull: projects, phases and tickets first, then people and the lookup lists, then the heavy task pull, and finally time entries (which chase in a follow-up run if the task pull used up the time budget). It reports exactly what it brought back. Reconcile runs in the background: pressing it queues a job you can watch in the queue panel below — it compares Current against your PSA, logs any drift it finds, and corrects it by queueing the same idempotent pull one entity at a time, so it finishes reliably even on a very large workspace. It's the only path that can notice records deleted on the PSA side, since a deleted record simply stops appearing in normal pulls. Reconcile also runs two repair passes: it applies task date changes made in the PSA that an earlier sync recorded but never applied (each correction is listed in the Conflicts panel with a "Restore my value" undo), and it closes out open push failures for tasks whose PSA record was deleted — so one deleted task no longer keeps a project's badge stuck on "Sync error."

Tip
Manual sync is safe to press
Sync now respects the same pacing rules and never duplicates records — every write is an upsert keyed on the record's PSA id. If the run comes back "Partial," press it again; it continues rather than starting over.

Clear queue: what it actually drops

Clear queue only drops queued jobs that read from your PSA. Three kinds of work are never touched: outbound pushes (anything Current still owes your PSA), any job already running, and a queued reconcile. The button shows the number it can drop, so "Clear queue (12)" means 12 queued read jobs, not 12 of everything. It only appears when there is at least one job it may drop, and pressing it asks you to confirm first, naming the count. Choose Keep them to back out. The next sync re-queues the reads it still needs, so nothing is lost by clearing.

Tip
Still worth a look at the Outbox
Clear queue can't strand a push, but the Outbox is where undelivered work shows up for every other reason: a time entry that failed to submit, a push your PSA rejected, a draft sitting for days. Check it whenever you're chasing a jammed queue. See "Logging time and how it reaches your PSA's billing."
Note
How often any of this runs
Your PSA is polled for changes every 5 minutes and the job queue drains on the same cadence — the timing is identical for ConnectWise, Autotask, and HaloPSA. The full timing map for every integration is in "How often does Current sync? Every schedule, in one table."
Was this helpful?