Skip to main content
This is an always-on, read-only tool — every agent has it on both the native tool surface and inside the code sandbox (from neo.client import get_synced_device_counts). There is nothing to enable.

What It Does

Returns authoritative device counts for the current tenant from client_rmm_devices — the RMM inventory Neo already syncs and maps to PSA companies. Because the RMM↔PSA company mapping and the workstation/server classification are resolved at sync time, the numbers are stable and repeatable across runs. In a single call the agent gets, scoped to the tenant:
  • Per-company counts: workstations, servers, unknown, and total, with the PSA company name resolved.
  • Tenant-wide totals across all companies.
  • The mapped-vs-unmapped split (how many devices Neo could match to a PSA company) — a coverage signal.
  • data_as_of — the timestamp of the latest device sync.

Why It Exists

Recurring reporting and reconciliation agents (billing reconciliation, license/seat true-ups, asset audits) used to re-pull the live RMM and re-match hundreds of company names by hand on every run. That re-derivation is fragile: the same monthly report could swing between runs purely because the hand-rolled joins landed differently. This tool removes that work — the agent reads the already-resolved, already-mapped inventory instead.

How to Use

Prefer this tool over a live *_rmm_request pull whenever you need device counts (not live per-device state):
  • Omit psa_company_id to get every company; pass it to narrow to one company.
  • include_unmapped (default true) adds the “Unmapped” bucket as its own row; the mapped/unmapped totals are always returned regardless.
  • Always state data_as_of in the report so readers know how current the figures are, and treat a large unmapped_devices count or a non-zero unknown bucket as a coverage caveat rather than a silent omission.
The sandbox helper (neo.client.get_synced_device_counts) returns the same data with the same arguments — use it when you are already assembling the report in Python.

Notes

  • Read-only and tenant-scoped — it only reads data Neo has already synced; it never touches the RMM or PSA live.
  • Device type is normalized to workstation / server / unknown from each RMM’s metadata; devices with no clear type signal fall into unknown rather than inflating the workstation total.
  • This is the first of a family of authoritative reads over Neo’s synced internal data; the same pattern will extend to other synced tables.