sensors

SNMP Printer OIDs: Toner, Page Count & Status Reference

The SNMP OIDs for printers — Printer-MIB (RFC 3805) supply/toner levels, page counts and status via prtMarkerSupplies, with the toner-percentage caveat.

By the SNMP Monitoring team · Reviewed July 2026

Printers are one of the friendliest device classes for SNMP, because almost everything you'd want — toner level, page count, tray and status — is standardised in the Printer-MIB (RFC 3805) at 1.3.6.1.2.1.43. That means a fleet of mixed-vendor printers largely answers the same OIDs, so you can build one "toner low / out of paper / page count" dashboard across all of them. This page is the paste-ready reference for the objects that matter, plus the small gotcha in computing a toner percentage.

The device-level how-to is the guide: printer monitoring. Hubs: sensors, all OIDs.

Toner / supply levels

Supplies — toner, ink, drums, waste bottles — live in the prtMarkerSupplies table at 1.3.6.1.2.1.43.11.1.1, one row per consumable:

ObjectOIDMeaning / type
prtMarkerSuppliesDescription1.3.6.1.2.1.43.11.1.1.6Supply name, e.g. "Black Toner" (text)
prtMarkerSuppliesMaxCapacity1.3.6.1.2.1.43.11.1.1.8Full capacity (units)
prtMarkerSuppliesLevel1.3.6.1.2.1.43.11.1.1.9Current level (units)

Match the row you want by prtMarkerSuppliesDescription (a colour laser has several: black, cyan, magenta, yellow, plus a drum and waste). Then the percentage remaining is level against max capacity — with a catch covered below.

Computing % toner

Turning level into a percentage:

  1. Read prtMarkerSuppliesLevel (.9) for the supply row.
  2. Read prtMarkerSuppliesMaxCapacity (.8) for the same row.
  3. Compute % remaining = level ÷ maxCapacity × 100.

The catch is the special negative values the MIB uses instead of a real level:

  • −2 means unknown — the printer can't report a level for this supply.
  • −3 means some remaining — the printer only knows "not empty," not an exact figure.

So before dividing, guard for negatives: a raw −3 is not "−3 units," it's "the printer won't give a number." Treat −2/−3 as their own states rather than feeding them into the percentage formula, or you'll graph nonsense. When both values are positive, level ÷ maxCapacity × 100 gives the honest percentage — e.g. 620 ÷ 2000 × 100 = 31%.

Page counts

Lifetime usage comes from prtMarkerLifeCount at 1.3.6.1.2.1.43.10.2.1.4 — the cumulative count of impressions (pages/sheets marked) over the printer's life. It's a monotonic counter, so for "pages this month" you diff two readings a month apart rather than reading the raw total. It's the number behind usage-based billing, fleet right-sizing ("this printer does 400 pages/month, that one does 40,000"), and predicting when a high-volume unit will need service.

Printer & tray status

Beyond supplies, status objects tell you why a printer stopped:

  • hrDeviceStatus — the HOST-RESOURCES device status (running, warning, down) for the printer as a device.
  • prtInputStatus — per-input-tray status, so you can tell "tray 2 is empty" from "the printer is fine."
  • prtAlertTable — the printer's own alert entries (paper jam, cover open, toner low), each a described condition.

These are what turn "the printer isn't printing" into "tray 2 out of paper" or "front cover open" without walking to the device. The prtAlertTable in particular is the richest source — it enumerates the exact conditions the printer is currently raising.

A practical note on why the standardisation here is such a win. Most device classes on this site — RAID, PDUs, environmental probes — force you into vendor MIBs, where the same concept has a different OID on every brand. Printers are the happy exception: because RFC 3805 is widely and faithfully implemented, an HP, a Brother, a Canon, and a Xerox on the same network largely answer the same prtMarkerSupplies and prtMarkerLifeCount OIDs. That means one polling template covers a heterogeneous fleet, one alert rule ("any supply below 10%") works everywhere, and onboarding a new printer usually needs no per-model OID hunting. The main variation you'll hit is in the supply rows themselves — a mono laser has one toner row, a colour unit has four plus a drum and a waste container, and some vendors expose maintenance kits as extra supply rows. So the portable pattern is: walk prtMarkerSuppliesDescription to discover what supplies a given printer has, then apply the same level-versus-capacity math to each row regardless of make. That's a materially easier life than the vendor-MIB device classes, and it's worth leaning on.

Worked snmpwalk example

Walk the supplies table for descriptions and levels:

snmpwalk -v2c -c <RO_string> <printer> 1.3.6.1.2.1.43.11.1.1
Printer-MIB::prtMarkerSuppliesDescription.1.1 = STRING: "Black Toner Cartridge"
Printer-MIB::prtMarkerSuppliesMaxCapacity.1.1 = INTEGER: 2000
Printer-MIB::prtMarkerSuppliesLevel.1.1 = INTEGER: 620

Black toner at 620 ÷ 2000 × 100 = 31% remaining — comfortable for now, but worth an alert once it drops into single digits. Then the lifetime page count:

snmpget -v2c -c <RO_string> <printer> 1.3.6.1.2.1.43.10.2.1.4.1
Printer-MIB::prtMarkerLifeCount.1 = Counter32: 184551

<RO_string> is a placeholder; keep live communities out of committed scripts.

snmpwalk output of prtMarkerSupplies toner level

Printer device guide

Reference stops here. For deployment specifics — which supply rows to alert on, handling the −2/−3 special values in practice, fleet dashboards — see the device guide: printer monitoring. Related: the standard MIBs overview, the OID catalog, and glossary.

Frequently asked questions

What is the OID for toner level?

prtMarkerSuppliesLevel at 1.3.6.1.2.1.43.11.1.1.9 from the Printer-MIB, one value per supply row. Pair it with prtMarkerSuppliesMaxCapacity (.8) to compute a percentage, and match the right supply by prtMarkerSuppliesDescription (.6). Watch for the −2 (unknown) and −3 (some remaining) special values.

How do I compute the % toner remaining?

Divide the level by the max capacity and multiply by 100: prtMarkerSuppliesLevel ÷ prtMarkerSuppliesMaxCapacity × 100. First guard against the special negatives — a level of −2 means unknown and −3 means "some remaining but not quantified," so those aren't real numbers to divide.

What OID is the printer page count?

prtMarkerLifeCount at 1.3.6.1.2.1.43.10.2.1.4 — the lifetime count of impressions. It's cumulative, so for pages over a period you subtract two readings taken at the start and end of that period rather than reading the raw total.

What MIB do printers use?

The standard Printer-MIB (RFC 3805) at 1.3.6.1.2.1.43, which most network printers implement. It standardises supplies (toner/ink), page counts, tray and alert status, so a mixed-vendor fleet largely answers the same OIDs — a big advantage over vendor-only device classes.

Key takeaways

  • Printers use the standard Printer-MIB (RFC 3805) at 1.3.6.1.2.1.43 — portable across vendors.
  • Toner: prtMarkerSuppliesLevel (…43.11.1.1.9) ÷ prtMarkerSuppliesMaxCapacity (.8) × 100.
  • Guard the special values: −2 = unknown, −3 = some remaining — don't divide them.
  • Page count: prtMarkerLifeCount (1.3.6.1.2.1.43.10.2.1.4) — cumulative; diff for a period.
  • Status via hrDeviceStatus, prtInputStatus, and the rich prtAlertTable.
  • Device guide: printer monitoring; catalog: sensors/all.

Monitor it from outside the network

SNMP only tells you a box is healthy while something is still asking. ostr.io polls your endpoints externally and fires email + SMS alerts the moment a reading crosses your line — or the agent goes silent.