What I've built, and why it's built that way
Config-driven RPA: one engine, 70+ portals
94% success · 70+ portalsOne Playwright engine, a JSON config per portal, people for OTPs and uploads. 3,000+ submissions at 94% success across 70+ application portals.
Read the case studyEdvoyIntake WatcherToken sort matching: reconciling websites with a database
~60% less manual reconciliationHome-built token sort matching with strictest-key-first fallback. Every listing comes out new, deleted, matched or modified. About 60% less manual work.
Read the case studyEdvoyPlatformMarkdown Extractor: every website, one format an AI can read
An agent writes a Playwright scraper per website. Every scraper outputs Markdown with a source header. A second agent answers plain-language questions from the files.
Read the case studyEdvoyAI-assisted QCSubject Validator: AI reads the page, a person signs off
60-70% less manual QC*Pick a model, run a shared versioned prompt, edit the AI's table against the highlighted source. Exact matches publish; everything else goes to a person.
Read the case studyEdvoyAI-assisted QCFees Validator: find the fee, check it once, apply it everywhere
60-70% less manual QC*An AI summariser highlights fees, dates and words like "may". A reviewer verifies once and applies the fee to all related intakes, with a name and time on record.
Read the case studyS&P Global2017-2021Crawlers and RPA at S&P Global
168 FTE of capacityA social handle crawler across 3.4M+ websites (160 FTE, $1.1M), a filings crawler across 40+ U.S. state portals, ESG scraping, and Blue Prism and Appian RPA.
Read the case studySmaller things I've shipped
Workflow automation
~35% faster turnaroundRules that move tasks along on their own and ping the right people on Slack, so nobody has to chase updates.
Travel document validation
Finds and reads the machine-readable lines on a scanned passport, runs the ICAO 9303 check digits and crops out the photo.
Intake Scheduler
Runs each source's scrape on its own timetable, then hands the fresh data to the token-sort reconciliation. Slack hears about every run.