Mac GUI app for bulk-editing Stampli invoice pay dates
Find a file
2026-08-24 11:11:22 -04:00
.github fix(ci): enqueue merge queue as seahaven-bot 2026-08-24 11:11:22 -04:00
.gitignore Add dependency-review caller workflow (#6) 2026-06-05 12:34:12 -04:00
AGENTS.md ci: add org PR policy caller (#17) 2026-08-04 11:56:46 -04:00
app_icon.icns Initial commit — Stampli Bulk Editor v1.0.0 2026-04-22 15:07:17 -04:00
app_icon.png Initial commit — Stampli Bulk Editor v1.0.0 2026-04-22 15:07:17 -04:00
edit_pay_dates.py Add CI workflow and apply ruff formatting 2026-05-08 15:44:35 -04:00
generate_icon.py Add CI workflow and apply ruff formatting 2026-05-08 15:44:35 -04:00
README.md Repo hygiene: PR labeler + README badges + dependabot (INFRA-56/57/66) (#8) 2026-06-11 14:14:22 -04:00
requirements.txt chore(deps): update pyinstaller requirement from >=6.21.0 to >=6.22.0 (#21) 2026-08-17 18:58:54 +00:00
scan_pending.py Add CI workflow and apply ruff formatting 2026-05-08 15:44:35 -04:00
stampli_core.py Add CI workflow and apply ruff formatting 2026-05-08 15:44:35 -04:00
stampli_gui.py Add CI workflow and apply ruff formatting 2026-05-08 15:44:35 -04:00
stampli_gui.spec Initial commit — Stampli Bulk Editor v1.0.0 2026-04-22 15:07:17 -04:00

Stampli Bulk Editor

Python CI

Mac desktop app for bulk-editing invoice pay dates in Stampli. Uses Playwright to automate the Stampli web UI through a real Chromium browser session.

What It Does

Two operations, available via GUI or CLI:

  • Edit Pay Dates — Scans the "Ready to Pay" grid, calculates the correct pay date for each invoice (5 business days before the due date), and bulk-updates any rows that differ. After editing, optionally filters to error-free rows, selects all, and clicks Pay Invoices.
  • Scan Pending — Reads the "Pending Approval" grid and flags invoices where the pay date doesn't match the expected calculation.

Setup

# Create a virtual environment and install dependencies
uv venv && source venv/bin/activate
uv pip install -r requirements.txt

# Install Chromium for Playwright
playwright install chromium

Usage

python stampli_gui.py

Select an operation, optionally enable Dry Run, and click Run. The app launches a persistent Chromium browser — log in to Stampli on first use and the session is saved for future runs.

CLI

# Preview changes without editing
python edit_pay_dates.py --dry-run

# Edit pay dates
python edit_pay_dates.py

# Only run the filter/select/pay step
python edit_pay_dates.py --filter-only

# Interactive inspect mode (debug)
python edit_pay_dates.py --inspect

# Scan pending approvals for incorrect dates
python scan_pending.py

Building the Mac App

pyinstaller stampli_gui.spec

The bundled .app is written to dist/Stampli Bulk Editor.app. It expects Playwright's Chromium to be installed at ~/Library/Caches/ms-playwright/ (the standard Playwright cache location).

Configuration

Config is stored at ~/Library/Application Support/Stampli Bulk Editor/config.json. Defaults:

Key Default Description
stampli_url Ready to Pay dashboard URL Starting page for edit mode
date_format %m/%d/%Y Date format used in the grid
days_before_due 5 Business days before due date to set pay date

Project Structure

stampli_core.py      # Shared logic: browser management, grid scanning, date calculation, editing
stampli_gui.py       # tkinter GUI
edit_pay_dates.py    # CLI for editing pay dates
scan_pending.py      # CLI for scanning pending approvals
stampli_gui.spec     # PyInstaller build spec (arm64 macOS)