Sync is stuck at 0% or shows zero contacts

Symptom

A sync job reaches Running status but the progress bar stays at 0%, or the job completes with contacts_added: 0, contacts_updated: 0, contacts_removed: 0 even though users clearly exist in your directory.

Possible causes

There are three distinct root causes for this behaviour. Work through them in order.

Cause 1 — Outbound network egress is blocked

RingSync's server-side proxy calls Microsoft Graph on behalf of your directory. If your environment has a firewall, web proxy, or network policy that blocks outbound HTTPS from RingSync's infrastructure, the proxy request to Microsoft Graph times out silently and returns an empty page of users.

How to diagnose: Open the sync job detail in Logs → [job ID]. If you see entries such as:

graph.timeout tenant=<id> page=1 elapsed=60s

or multiple graph.error entries at page 1, the issue is network-level.

Resolution: This is not a configuration error you can fix in RingSync directly. Contact your network team and ensure that outbound HTTPS to graph.microsoft.com is permitted from RingSync's server IP ranges.

If the Microsoft token became invalid between the last successful sync and this one, the Graph proxy returns 0 users rather than an error (depending on when in the token lifecycle the invalidation occurred).

How to diagnose: Check the sync log for:

auth.fail tenant=<id> reason=invalid_grant

Resolution: Follow the full reconnect procedure in Microsoft token expired.

Cause 3 — The sync scope points to an empty group

If your directory is configured with sync scope = groups and the selected Entra group has no members (or all members are guests, disabled accounts, or users without an email address), RingSync correctly reports zero contacts — it is not a bug.

How to diagnose:

  1. Open the Azure portal and navigate to Groups → [your group] → Members.
  2. Confirm the group has active, licensed members with a mail attribute set.
  3. In RingSync Settings, verify the correct group is selected and that no broad exclusion group is inadvertently capturing all members.

Resolution: Add active users to the group in Entra, or adjust the sync scope in Settings → Sync scope. After changing the scope, RingSync automatically resets the delta link and performs a full sync on the next run.

Scope change resets delta

Changing the sync scope (all ↔ groups, or changing which groups are selected) always triggers a full re-sync. This is expected behaviour.

Still stuck?

If none of the three causes above matches your logs, contact support via the contact page and include the job ID from the Logs screen.

Did this article solve your problem?
Tell us what was missing →