FAZ Reporter downloads your FortiAnalyzer bandwidth reports for you. You tell it which routers you want and for which dates; it signs in, fills in the report form, runs each one and saves the PDFs. Nothing to install and no command line.
Get it
Latest release v1.8.1
Failed reports get one automatic retry, every run ends with a readable summary, and a one-click support bundle collects the log and redacted settings.
Not yet publishedTwo forms of the same app. The installer is the easy one — run it and it makes your shortcuts. The portable zip is for locked-down machines where you can't run an installer: unzip it and open FAZ Reporter.exe inside the folder.
The first time you open it, Windows may show a blue “Windows protected your PC” box because the app isn't code-signed. Choose More info → Run anyway.
Your first report, start to finish
Steps 1 and 2 are once-only. After that a run is just step 5.
1Sign in to FortiAnalyzer
Open the Connection tab. The address is already filled in. Click Browser sign-in (one-time SSO) — a browser window opens, and you sign in exactly as you normally would, MFA included. It closes itself once it reaches the dashboard.
A green ✓ means the session is saved. You won't be asked again until it expires.
Screenshot: Connection tab with a saved sign-in
2Point it at your reports folder
On the Reports tab, type your folder name exactly as it appears in FortiAnalyzer under Reports → Report Definitions, then click Fetch reports in this folder and pick the report file the app should drive.
It only ever reads that one folder. Capital letters and spacing have to match — if it can't find the folder it stops and lists the ones it can see, rather than guessing at a similar name.
Screenshot: Reports tab, folder name and the fetched report list
3Build your device list
On the Devices tab, click Fetch devices from FortiAnalyzer. That pulls the full router list once so you can search it by site instead of typing MSUIDs by hand. Select the ones you want and Add selected to Reports.
This only reads the list — nothing on FortiAnalyzer is changed.
Screenshot: Devices tab with the fetched inventory
4Set the dates and queue the reports
Set Start and End dates (YYYY-MM-DD), or use a Quick fill button — 7 days, last month, and so on. Leave both empty to use the rolling last-N-days window instead.
Then add a row per report: a Name and the MSUID(s) it covers. Got a whole request in an email? Click Bulk add… and paste it in — it picks the MSUIDs out of each line and uses the rest as the report name.
- Two possible IDs for one site? Join them with a
/— it uses whichever exists and tells you which it used. - Mistyped an ID? It warns you and suggests the one you probably meant.
Screenshot: Bulk add dialog with a pasted request
5Generate
The bar at the bottom tells you whether you're ready or what is still missing. Click Generate report and watch the Run tab — it works through the queue and saves each PDF into a dated folder.
You can leave it running. If a report has no data or fails, it is noted and the rest of the queue carries on.
Screenshot: Run tab during a report run
Reading the results
Every run gets its own folder named for the date and time, holding that run's PDFs. If anything didn't go perfectly you also get a device notes.txt explaining it in plain words — worth a look whenever you get fewer PDFs than you expected.
- “NO DATA” — FortiAnalyzer had nothing to report for that router and date range, so the report was skipped. Usually it means the device sent no logs for those dates. Check the range and try that one again later.
- “MISSING DEVICE” — the MSUID isn't on FortiAnalyzer at all. Check it for a typo, or that the router is still reporting.
- “used A (not available: B)” — you gave an
A/Bpair and this is which one it found. Nothing wrong.
Optional extras
Email. Prepares an Outlook message with the reports attached and your usual signature intact. It opens as a draft so you read it before it goes anywhere.
Daily schedule. Pick a time and the app runs the whole queue in the background each day. Remove schedule turns it off again.
If something goes wrong
- Windows blocks it, or nothing happens on double-click. The zip wasn't unblocked before extracting — see the warning above. Also check the
_internalfolder is still sitting next to the .exe; the app can't start without it. - It can't find your folder. The name has to match FortiAnalyzer exactly, including capitals and spacing. The Run tab lists the folders it could see — copy the name from there.
- Sign-in keeps being asked for. Your saved session expired. Click Browser sign-in again.
- A report is missing from the folder. Open
device notes.txtin that run's folder — it says which reports were skipped and why. - Still stuck? Send the text from the Run tab along with the version number shown at the bottom of the window. Between them they usually explain it.
About the project
A Windows desktop app that replays the manual FortiAnalyzer report procedure for you — signing in through your normal SSO, filling in the report form, running each one and downloading the result. It keeps a searchable device inventory, gives every run its own dated folder, and ends with a plain-language summary of what succeeded, what was skipped and why.
- Platform Windows
- Stack Python, Tkinter, Playwright
- Packaging PyInstaller + Inno Setup, built by GitHub Actions
- Updates In-app check, with roll-back to any listed version
Updating from inside the app
You usually don't need this page. Open the Run tab → Updates… and the app lists every published version, marks the one you're running, and downloads any of them for you — newer to update, older to roll back. Each download's checksum is verified, and nothing installs on its own. Point the app at this manifest in config.yaml:
update:
manifest_url: https://ioscu.com/faz/latest.jsonWith no manifest URL set the app makes no network call at all for updates — deliberate, for locked-down networks where unexpected egress matters.
All versions
Every build stays up — running an older installer over a newer one rolls back in place and leaves your settings alone.
Failed reports get one automatic retry, every run ends with a readable summary, and a one-click support bundle collects the log and redacted settings.
- A report that errors on a timeout or navigation blip is retried once after the rest of the queue finishes — a second try usually lands.
- Reports whose devices simply aren't on FortiAnalyzer are skips, not errors, and are never retried.
- Each run ends with a report card: OK (noting "succeeded on retry"), SKIPPED (with the missing MSUIDs), or FAILED (with the reason).
- The Support bundle button saves a zip with the run log, a secrets-redacted copy of your settings, and version/system info.
Custom naming convention (renamed rows always win), Reports folder required, duplicate-MSUID warning, smoother scrolling; installer now built by GitHub CI.
- A Naming… button lets you customize the default report-title template ({name}, {msuids}, {date}…) with a live example, or turn it off entirely.
- Double-click a report to rename it — a hand-edited name shows in blue with an "(edited)" marker and is never touched by the convention.
- Generate refuses to run until your Reports folder is set — the safety anchor on a shared FortiAnalyzer.
- If the same device appears in more than one queued report, a popup lists them before the run.
- An empty or fully visible list under the pointer now passes the wheel through to the page.
New app icon — a large blue F A Z that stands out on the Desktop and taskbar, with just the A at small sizes so it stays readable.
- The old icon looked like a generic document and blended in with every other file.
- Letters overlap and run off the edges, each outlined in white so they read where they cross.
- Taskbar and Alt-Tab sizes show only the A — three letters that small would be a smudge.
Your Outlook signature is preserved, and 'send automatically' is gone from the Email tab — reports always open as a draft you can read over.
- The app writes its message above Outlook's signature instead of replacing the body, so images, fonts and formatting come through as normal.
- A tick-box on the Email tab turns the signature behaviour off if you'd rather not have it.
- Unattended overnight sending is still possible, but only by deliberately setting it in config.yaml.
Smoother scrolling, dropdowns no longer change when you scroll past them, and '(leave unchanged)' is spelled out.
- Every wheel notch now moves the same distance (about three lines) regardless of window size.
- Rolling the wheel over Time zone, Time period or a number box no longer quietly changes the setting.
- The blank first entry is labelled '(leave unchanged)' — distinct from FortiAnalyzer's own 'Default' option.
Bulk add reads the request exactly as written — paste the list straight from the email, with a preview before anything is queued.
- MSUIDs are picked out of each line automatically; the site address stays in the report title.
- Two MSUIDs joined by a / mean 'whichever exists' — a missing one is dropped from the title rather than advertised.
- Unrecognised MSUIDs are outlined amber as a heads-up, not a block.
- SHOUTED addresses become readable while SD-WAN, province codes and MSUIDs stay capitalised.
Pick reports from a folder tree instead of typing names, sharp text on scaled displays, and a far more readable dark mode.
- Fetch folders & reports once and select from an indented tree — it only reads the list, nothing is run or changed.
- Each report keeps its own editable name and is tracked by internal id, so FortiAnalyzer's renaming can't move the target.
- The app draws at your screen's real resolution, so text is crisp at 125–175% scaling.
- Dark mode is now neutral graphite at ~14:1 contrast, and switching theme repaints everything.
- The window always opens on-screen, even if it was last closed on a monitor you've unplugged.
Devices tab with encrypted local device list, per-run dated folders, resilient runs that skip missing devices, and the Updates window with roll-back.
- Search your routers by site, MSUID or address instead of typing MSUIDs; the list is stored encrypted on your PC.
- One bad device no longer sinks a whole run — it's skipped and written up in the run's notes.
- Each run gets its own 'SD-WAN Report <date> <time>' folder.
- Optional FortiManager details add model, serial and OS version per router.
- The Updates window lists every published version so you can update or roll back in-app.
First real installer — per-user, no admin rights, upgrades in place and keeps your settings. Added in-app 'Check for updates'.
- Installs to the Start Menu (and optionally the Desktop) with no admin rights required.
- A newer Setup updates your existing copy in place; settings and saved sign-in are kept.
- The version now shows in the title bar.