A reference for the Microsoft Intune Enterprise Application Management (EAM) app catalog. If you work with Intune EAM and have ever wanted a quick, browsable overview of what's actually in the catalog, what apps are available, which publishers are represented, what changed recently, here it is.
The raw data comes from the Microsoft Graph API. Exports are dropped into this repo and a GitHub Actions workflow takes care of building the tables, stats, and change history automatically.
🌐 Live Catalog Searchable, filterable website with the full package list — the stat cards double as filters. Follows your system light/dark preference, with a toggle in the header.
🔗 App Pages A static, linkable page for every product in the catalog: an at-a-glance summary panel, a table of every branch, version, architecture and locale, that product's own dated change history, the steps to deploy it from Intune, and links to the publisher's other apps — rewritten only when something about the product actually changes.
📦 App Catalog Every available package, sorted by publisher and app name.
📊 Statistics Total counts, top publishers, architecture breakdown, and available locales.
🔄 Changes What was added, removed, or updated between the two most recent exports.
📅 Daily Changes Changes compared to the nearest export from at least 24 hours ago.
📆 Weekly Changes Changes compared to the nearest export from at least 7 days ago.
🗓️ Monthly Changes Changes compared to the nearest export from at least 30 days ago.
📡 RSS Feed Subscribe to catalog changes in any RSS reader.
Raw exports: catalog/ for the current file, archive/ for the full history.
Stay up to date without checking the site manually. Every time a new catalog export is processed, a new entry is published to the feed.
Feed URL:
https://eam.drung.dev/feed.xml
Each feed item contains:
- How many packages were added, removed, and updated
- A full list of added and removed packages with publisher, name, and version
- A list of updated packages showing the previous and new version
- The timestamp of the catalog export it is based on
The feed keeps the last 50 entries. Compatible with any RSS reader — Feedly, Outlook, Thunderbird, Apple Mail, or any other client that supports RSS 2.0.
| Metric | Value |
|---|---|
| Total Packages | 1,590 |
| Unique Products | 932 |
| Publishers | 498 |
| Auto-Update Capable | 365 (23.0%) |
| Available Locales | 65 |
| Last Export | 2026-09-15 16:43:56 |
Each entry reflects what the Graph API returns:
| Field | Description |
|---|---|
productDisplayName |
Application name |
publisherDisplayName |
Publisher / vendor |
versionDisplayName |
Version string |
branchDisplayName |
Package branch (e.g. WireGuard (x64)) |
applicableArchitectures |
Supported CPU architectures (x64, x86, ...) |
packageAutoUpdateCapable |
Whether the package supports Intune auto-update |
locales |
Supported locale codes |
productId |
Stable product GUID |
branchId |
Stable branch GUID |
id |
Unique package instance ID |
One product can ship as multiple packages, for example separate x64 and x86 branches each get their own entry. The statistics page accounts for this by tracking both raw package count and unique product count.
The changes pages match packages between exports by branchId and surface three things: packages that are new, packages that have been removed, and packages where a tracked field changed. Tracked fields are the version, app name, branch name, publisher, architecture, auto-update capability and locales — so renames and capability changes show up alongside ordinary version bumps, with the changed fields named in each row. The volatile id field is ignored.
The period-based changelogs (daily, weekly, monthly) use the timestamp embedded in each filename to find the right comparison point automatically. The period is a minimum, not a fixed window: each one compares against the newest export that is at least that old, which after a gap in exports can be considerably older than the name suggests. Every changelog states the actual span between the two exports it compared.
The pages are static and there are around nine hundred of them, so the pipeline is careful about claiming that any of them changed.
docs/.pagestate.json holds a content fingerprint and a last-changed date for every URL.
A page is rewritten only when its content differs from the fingerprint, which keeps a
no-op export from churning the whole tree through git, and docs/sitemap.xml takes each
<lastmod> from that date rather than from the export timestamp. The distinction matters:
stamping every URL with the export date told crawlers that all nine hundred pages changed
daily when the only difference was a printed timestamp, and a crawler that samples a few of
those and finds them identical stops trusting the dates — and stops crawling. The export
timestamp is therefore no longer printed on product pages at all; what each page shows
instead is the date that product itself last moved in the catalog.
Change history is accumulated in the same file. Each run folds its own export-to-export
diff into a per-product log, capped at the most recent entries, so a product page has
something of its own to say beyond a name and a version. On first run, with nothing to
carry forward, the log is seeded from the exports already in archive/; set HISTORY_SEED
to bound that backfill to the newest N exports.
After the push, the workflow submits the URLs that actually changed — and only those —
to IndexNow, which Bing and several other engines accept as a
change notification. The key file is published at the site root; set an INDEXNOW_KEY
repository secret to pin or rotate the key, otherwise one is minted on the first run and
kept in the state file.
This project is not affiliated with, endorsed by, or in any way officially connected to Microsoft Corporation. All product names, trademarks, and registered trademarks are property of their respective owners.
The data displayed here is sourced from the Microsoft Graph API and is provided for informational purposes only. Accuracy and completeness depend on the timing of catalog exports and may not reflect the current state of the Intune EAM catalog at any given moment. No warranty, express or implied, is given regarding the accuracy, reliability, or fitness of this data for any particular purpose. Use at your own discretion.