Olsen Palmer produces client-facing bank "Institution Profile" decks from an Excel workbook that pulls S&P Global Market Intelligence data (via the SNL/MI Office add-in), linked into PowerPoint by Macabacus. They asked us to explore automating this. We have finished the design, built and validated everything that can be built without OP's licensed environment, and packaged an immediately usable deliverable. The engagement now shifts from building to closing Phase 0 with the client.
OP's entire profile production runs on two third-party add-ins. Understanding what each does — and how dependent the process is on S&P — frames every decision that follows.
| Integration | What it does | What that means for us |
|---|---|---|
| S&P Market Intelligence Office (the "SNL" add-in) | The sole data source. Embeds S&P's bank regulatory & market data directly into Excel as formulas (SNLData, SNLTable, SNLPrice). One refresh re-pulls all 1,600+ data points for the selected bank and period — balance sheet, income statement, deposits/loans, asset quality, stock data, market share, demographics. | Enterprise, entitlement-gated, no trial available. It's OP's license; automation/VM rights are the Phase 0 gating question. Windows-desktop only → forces the Windows runner in Phase 1. |
| Macabacus | The Excel→PowerPoint bridge. Maintains 50 live links between workbook ranges and deck tables/charts. After the workbook refreshes, one Macabacus refresh updates the deck in place, preserving formatting — replacing dozens of error-prone copy-pastes. | Cheap ($360/user/yr), trialable, analyst-familiar. Its link tags are also what make our QC engine possible — each deck value asserts its own source range. Failure modes (silent stale links, metadata leakage) are exactly what op-check catches. Decision: keep it for Phase 1; replace selectively with deterministic generation in Phase 4, evidence-driven. |
Each capability below is proven on OP's actual sample files (the CBAN target-profile workbook + deck), not claimed on synthetic data.
| Capability | Evidence |
|---|---|
| Deck-to-source reconciliation | Every linked number in the deck is checked against its exact source cell in the workbook. 91% traced automatically; zero unexplained discrepancies on the clean sample. |
| Error detection (seeded test) | We planted three realistic errors in a copy of OP's deck — a transposed number (3.09→3.90), a stale period label (2026 Q1→2025Q3), leftover instruction text. The engine caught all three, with slide/shape/cell detail. This satisfies the design's formal QC acceptance criterion. |
| Stale / unapproved source detection | Flags any deck content linked to a workbook not on the approved list (see findings below — this fired on their real deck). |
| Metadata scrub | Produces a client-safe copy: zero external links, zero confidential strings, author metadata gone — verified independently, rendered slides pixel-identical, opens in PowerPoint with no repair prompt. |
| Analyst-ready packaging | Single op-check.exe (22 MB): one command, color-coded PASS/FAIL HTML report, plain-language errors, editable config, non-technical user guide, CI pipeline. No Python, no infrastructure, no S&P/Macabacus license needed. |
Running the tool on the files OP sent us surfaced real, material problems a manual review would not reliably catch:
#VALUE! workbook errors sitting inside ranges that feed deck exhibits.Nothing shipped so far refreshes data or writes to the presentation. Today's tool is a read-only quality gate on the finished pair. Updating the deck when source numbers change — set inputs → trigger S&P refresh in the workbook → trigger Macabacus link refresh in the deck — is Phase 1, and it can only be built and tested in an environment with OP's licensed S&P add-in and Macabacus. That is by design, not a gap: it is the piece gated on the client.
Strategy note worth aligning on: we are not rebuilding OP's deck in code. The design keeps their existing workbook + Macabacus deck as the production engine and automates around it. Native slide generation happens later (Phase 4), and only for objects where link refresh proves unreliable. Lower risk, preserves analyst editability, and avoids re-implementing what Excel/PowerPoint already do.
| Phase | Scope | Exit criterion |
|---|---|---|
| 1 — Refresh automation | POC A (workbook S&P refresh) + POC B (Macabacus link refresh) via COM automation on a hardened Windows runner in the licensed environment. | 20+ consecutive controlled runs with no unexplained manual intervention. |
| 2 — Extraction & QC integration | Wire the already-built extraction/QC/lineage engine into the refresh pipeline. | Intentionally seeded errors detected at agreed rates (already demonstrated standalone). |
| 3 — Web workflow & governance | Azure web app: Entra ID, deal workspaces, role-based access, approval/release workflow, per-run evidence packages. | Full release gate operating with audit evidence. |
| 4 — Selective modernization | Native generation for unreliable linked objects, approved AI narrative, S&P API migration if entitlement/volume justify. | Sized separately after field inventory. |
| Deliverable | Status | Notes |
|---|---|---|
| op-check v0.1.0 (exe + user guide + config) | Ready now | Immediate value: pre-send QC + scrub, no infrastructure. Commercial decision needed: free Phase 0 sweetener vs. first priced deliverable. |
| Findings / Phase 0 proposal deck (in OP's own slide format) | Ready now | QA'd against their template chrome; recommend a 30-second flip-through in real PowerPoint before it goes out. |
| Verified scrubbed sample deck + live demo runbook | Ready now | The meeting is self-demonstrating with these. |
| Design document v5 (internal) | Complete | Internal scoping baseline. A client-facing version can be produced on request. |
| Phase 1 refresh automation | Gated on OP | Starts the day licensing is confirmed; needs their licensed environment. |
| Azure production system (Phases 3–4) | Scoped, not started | Web app + hardened Windows runner pool; tenancy decision required first. |
The data decides it, not the technology. Profile content is deal-context material with possible MNPI. A desktop app scatters that across analyst laptops and makes the controls the whole design rests on — central audit log, human-approval release gate, enforced metadata scrub, consistent add-in versions — effectively unenforceable. A tenant-hosted web app keeps deal data off endpoints behind Entra ID and role-based access, logs every run in one place, and routes any LLM use through a single server-side private endpoint.
The one nuance: the Phase 1 refresh needs Excel + the licensed S&P and Macabacus add-ins, which are Windows-desktop software. So the web app hands that one step to a hardened Windows automation runner inside the same tenant (dedicated identity, one job at a time, watchdogs, quarantine, kill switch). That dependency disappears if/when Phase 4 moves to the S&P API.
And v0 being a local exe is not a contradiction: it is a manual pre-send check that embeds nothing sensitive and never moves files — exactly the right footprint before tenant infrastructure exists.