ESET

Stack Monitors

Monitor ESET PROTECT with Crowswatch

Watch device coverage, endpoint state and protection versions across your ESET PROTECT estate from Crowswatch, alongside every other product you buy. Crowswatch only ever reads from ESET: every request is a GET and there is no code path that can change anything in your estate.

What This Integration Provides

The ESET console tells you what your estate looks like right now. Crowswatch tells you what changed since yesterday, which is the part the console cannot do.

  • Coverage: devices that have stopped checking in, and devices that have gone quiet but not yet gone dark
  • Endpoint state: devices ESET reports as requiring attention
  • Protection versions: devices running a version behind the norm for their own platform
  • Estate shape: the managed device count falling against its own recent baseline, which usually means agents were removed
  • Credential health: warning before the API user password expires, rather than after the connection has already broken

Everything is grouped. Ten devices going quiet at once is one alert about your estate, not ten alerts about ten laptops.

Requirements

RequirementDetail
ESET PROTECTCloud only. On-Prem uses a separate API and is not supported
Dedicated API userCreated in ESET Business Account, ESET MSP Administrator 2 or ESET PROTECT Hub
A Root or SuperuserNeeded once, to create the API user. They cannot use their own account for this, see Step 1
RegionEurope, Germany, United States, Canada or Japan. ESET hosts each tenant in one region
Estimated setup time~10 minutes, plus however long it takes to reach someone with Root access

Password Expiry: Plan For It Now

ESET expires API user passwords and provides no way to switch that off. The maximum is 365 days and the default for a newly created user is 90 days. When it lapses the credential stops working and Crowswatch stops seeing your estate.

This is normal ESET behaviour rather than a fault, so it is worth setting up deliberately instead of discovering it in a year.

  • When you create the API user, set its password expiry to 365 days, the maximum ESET allows
  • Tell Crowswatch the same window on the connect form, so it knows when to warn you
  • Crowswatch warns at 14 days and again at 3 days before expiry, through your alert channels and on the integration page

To renew, before or after it lapses:

  1. Reset the API user password in ESET Business Account, setting the expiry to 365 days again
  2. Open Crowswatch → Integrations → ESET PROTECT
  3. Enter the new password and confirm the expiry window

Nothing else changes. Your device register, history and thresholds survive a password renewal, and syncing resumes on the next run.

Put the renewal in a calendar for a week before the date you chose. Crowswatch will warn you, but a reminder you own is better than one that depends on the thing that is about to break.

Step 1: Create a Dedicated API User

ESET requires a separate user account for API access. You cannot use your own login, and the account that creates it cannot be the account that uses it.

  1. Sign in to ESET Business Account, ESET MSP Administrator 2 or ESET PROTECT Hub as a Root or Superuser
  2. Create a new user for Crowswatch, for example crowswatch-api@yourdomain.com
  3. Set its password expiry to 365 days, as covered above
ESET refuses API access to the Business Account Superuser, the MSP Administrator 2 Root user and the PROTECT Hub Superuser. Only those accounts can create an API user, and none of them can be one. If the person setting up Crowswatch is not the person holding Root, you will need them for this step.

ESET documents the process at help.eset.com.

Step 2: Enable Integrations and Grant Read Access

Two settings on the new user. Both are required, and missing either produces a connection that signs in successfully and then shows you nothing.

  1. Under Access Rights, switch on the Integrations toggle. Without it the credential authenticates against the portal and every API call is refused
  2. Set Company access to Read
  3. Set ESET PROTECT access to Read, covering all device groups rather than a single static group

Read is all Crowswatch needs and all it will ever use. Granting more does not enable anything.

Step 3: Add Credentials to Crowswatch

Go to Crowswatch → Integrations → ESET PROTECT.

FieldValue
RegionThe region your ESET console runs in. Crowswatch will not try the others
API user nameThe user created in Step 1
API user passwordIts password. Stored encrypted, never shown again
Password expiry windowWhat you set on the user in ESET. 365 days if you followed Step 1

Crowswatch checks the credential with ESET before saving it, so a wrong password or a missing Integrations toggle fails here with the specific thing to fix rather than silently later.

The first sync walks your whole estate and establishes a baseline. It raises no alerts. Day one state is normal state, and Crowswatch only tells you about what changes after that.

What Crowswatch Watches

Every threshold below is a default you can change. They are set conservatively and quietly on purpose.

SignalDefaultSeverity
Device stopped checking inNo contact for 72 hoursCritical
Device going quietNo contact for 24 hoursDegraded
Device needs attentionESET reports the device as requiring attentionCritical
Protection version behind2 or more versions behind the norm for that platformDegraded
Managed device count fell10% below the recent rolling averageCritical
API user password expiring14 days, then 3 daysDegraded, then Critical

Version comparison is per component per platform, not across your whole estate. A Mac running the macOS build of ESET Endpoint Security is compared against your other Macs, never against your Windows fleet, because those products are on unrelated version lines. A platform with too few devices for a norm to mean anything is skipped rather than guessed at.

Endpoint detections are not available. GET /v2/detections is a Cloud Office Security call rather than a PROTECT one, so it is not reachable with a PROTECT subscription regardless of permissions. Threat activity is covered through incidents instead.

Permission Errors: 401 vs 403

Crowswatch treats the two failure cases separately because they need different things from you.

  • 401 on the token request: the password is wrong, has expired, or the API user has been removed or disabled. This is the check Crowswatch uses to judge whether your credential is alive, because it is the only one that can tell a revoked account from an ESET outage
  • 403 on a data request: the credential is valid and ESET is refusing the data. Almost always the Integrations toggle being off, or ESET PROTECT access not set to Read across all groups
ESET returns a 403 with an empty body, so it does not say which of those it is. If Crowswatch reports a permissions problem, check the Integrations toggle first and the access rights second.

One consequence worth knowing: ESET documents that when an administrator removes an API user, existing tokens keep working until they expire, up to an hour. Crowswatch judges credential health on requesting a fresh token rather than on data calls, so a revocation surfaces within that hour rather than looking healthy until something else breaks.

Rate Limits and Polling

ESET publishes no rate limits, and none were observed at any concurrency during testing: no 429s, no rate-limit headers. The real constraint is throughput rather than quota.

  • Requests are served at roughly 1.6 per second regardless of how many run at once, because ESET serialises rather than rejects
  • A 1,770 device estate takes about 19 seconds to walk, across 10 pages
  • Running requests in parallel does not make it faster

Crowswatch syncs every 30 minutes. Every threshold above is measured in hours and requires a change to persist across consecutive syncs, so a shorter cadence would cost throughput without telling you anything sooner. A large estate that cannot be walked in one run resumes where it left off, and no alert is raised from a partial view.

Security

  • The API user password is a credential, and is treated as one. It is encrypted at rest, decrypted only server-side at the moment of use, never written to logs or error messages, and never returned to your browser after saving
  • Read-only is enforced in code, not by policy. The HTTP client accepts no method other than GET, so no code path can issue a write to an ESET data host
  • Crowswatch reaches only ESET PROTECT device and incident hosts. The automation host, which is where network isolation, shutdown, process kill and agent uninstall live, is not in the allow-list and cannot be reached
  • One ESET credential can reach PROTECT, Cloud Office Security and ESET Inspect. Crowswatch restricts itself to PROTECT
  • Device records are narrowed before storage. IP addresses, device tokens, owner identifiers and hardware profiles are discarded rather than kept
  • You can revoke access at any time by disabling the API user in ESET

Troubleshooting

SymptomCause and fix
Connection is refused when savingThe password is wrong, or the account is not yet an API user. Confirm the Integrations toggle is on, then re-enter the password.
Connected, but no devices are visibleEither nothing is enrolled in this tenant, or the API user cannot see it. Check that ESET PROTECT access is set to Read.
Fewer devices than the ESET console showsThe permission set is probably scoped to a single static group. Widen it to all groups.
"The API user signs in but cannot see your estate"A 403. The Integrations toggle is off, or access rights were narrowed after connecting.
"Could not reach ESET at the last check"An ESET-side problem rather than your credential. Nothing to change, and your stored data is untouched.
Device counts differ slightly from the consoleCrowswatch counts present devices only, so the figure reconciles with the console. Devices that disappear are reported as a count drop rather than silently removed.