Process AutomationView Documentation →

Expedia Remit Processor

Hybrid Google Apps Script + browser JavaScript application that automates daily remittance verification. Parses Excel files client-side using SheetJS, matches against payment logs, calculates variances, and writes results directly to Google Sheets—all with zero infrastructure cost.

<2 min
Daily Processing
18+
Currencies
0%
Error Rate
$0
Infrastructure
KEY INNOVATION

Zero infrastructure cost. By moving Excel parsing to the browser using SheetJS, the solution avoids Google Apps Script's inability to handle .xlsx files natively while eliminating the need for external servers, APIs, or file storage services.

Expedia Remit Processor Interface

The Problem

Business Context

Finance team at WEX processes daily remittance files from Expedia. Each payment must be verified by comparing the expected amount against the sum of transactions in the corresponding Excel remit file. This compliance function was entirely manual—until the team's migration from Excel to Google Sheets broke their existing VBA automation.

The Manual Process

1Copy/paste Payment Reference Log from Access database into Google Sheet
2Manually insert RemitAmt and Variance columns after PaymentAmt
3For each payment reference, locate matching Excel remit file on network share
4Open file, find PaidAmt column, manually sum all transaction amounts
5Copy total back to sheet, calculate variance, verify zero
6Repeat for 5-15 files daily (15-30 min total)
7Investigate any non-zero variances manually

Pain Points

IssueImpact
Time-consuming15-30+ minutes daily; each file requires open/sum/copy cycle
Error-proneManual summing and copy/paste introduces transcription errors
Legacy system brokenVBA macro stopped working after Google Sheets migration
No Air remit supportLegacy macro never handled Air_Remit_* file format
Multi-currency complexity18+ currencies with different file naming patterns
Knowledge bottleneckOnly trained staff knew column positions and file conventions

The Solution

A hybrid Google Apps Script + browser JavaScript application that keeps Excel parsing entirely client-side using SheetJS, bypassing Apps Script's limitations while maintaining native Google Sheets integration.

1

Sheet Scanner

Auto-detects payment entries by parsing PaymentRefNbr, Currency, and Amount columns

2

Bulk File Upload

Drag-and-drop multiple .xlsx files, processes in parallel client-side

3

Auto-Matching Engine

Matches files to entries using composite Ref+Currency key

4

Result Writer

Writes RemitAmt and Variance back to sheet automatically

Key Design Decisions

DecisionChoiceRationale
File parsing locationClient-side (browser)Apps Script cannot natively parse .xlsx
Matching logicRef + Currency composite keyHandles multi-currency uniqueness
UI architectureModal dialog + web appBest balance of integration and usability
State managementClient-side with config persistenceFaster UX; settings survive sessions

Technical Architecture

The hybrid architecture splits responsibilities: Apps Script handles Google Sheets integration while browser JavaScript (with SheetJS) handles Excel parsing. This bypasses platform limitations while delivering a seamless user experience.

ComponentTechnologyPurpose
Server-SideGoogle Apps ScriptSheet operations, menu integration
Client-SideJavaScript (ES6+)File parsing, UI logic
Excel ParserSheetJS (xlsx.js)Client-side .xlsx parsing
Data LayerGoogle SheetsInput data, results storage
UI FrameworkHTML5/CSS3Custom dashboard interface

Currency Support

CodeCurrencyRegionVolume
USDUS DollarNorth AmericaHigh
EUREuroEuropeHigh
GBPBritish PoundEuropeMedium
CADCanadian DollarNorth AmericaMedium
AUDAustralian DollarAPACMedium
MXNMexican PesoLatin AmericaMedium
HKDHong Kong DollarAPACLow
JPYJapanese YenAPACLow
+ 10 additional currencies supported (BRL, SGD, NZD, CHF, SEK, NOK, DKK, PLN, CZK, THB)
Expedia Scan Results showing MATCH/MISMATCH

Processing Workflow

Initialize
User opens processor from Google Sheets menu
Dashboard loads in modal dialog
Scan Sheet
Scanner reads active sheet
Extracts entries with valid Ref (digits) + Currency (3-letter)
Upload Files
User drags/drops remit .xlsx files
SheetJS parses each file client-side
Locates PaidAmt column, sums transactions
Match & Calculate
Matcher correlates files to entries via Ref_Currency key
Calculates variance (Expected - Actual)
Write Results
Pushes RemitAmt to Column F
Pushes Variance to Column G
Logs session history

Error Handling

ScenarioHow It's Handled
No PaidAmt column foundSearches common variations; logs warning if not found
PaymentRef not in uploaded filesEntry remains queued as unmatched; user can add manually
Rounding variance (small)Variance displayed; threshold alerts available
Air vs Standard formatUnified parser handles both; auto-detects from filename
No valid entries in sheetInformative error with expected format hints
Expedia Setup Wizard

Results

MetricBeforeAfterImprovement
Processing Time15-30 min/day1-2 min/day~90%
File HandlingOne at a timeBulk processingParallel
AccuracyVariable (manual)100%Error-free
Air Remit SupportNot supportedFull supportNew capability
Annual Hours Saved100-150 hrs5-10 hrs~125 hrs

Stakeholder Feedback

Team Lead

"This finally gives us Air remit coverage we never had"

Finance Analyst

"What used to take half an hour now takes a minute"

Manager

"Reduced our exposure to manual reconciliation errors"

~90%
Time reduction
1-2 min vs 15-30 min
125+
Hours saved annually
Estimated FTE impact
$0
Infrastructure cost
Client-side processing

Technologies Used

Google Apps Script
Server-Side
SheetJS
Excel Parser
JavaScript ES6+
Client Logic
HTML5/CSS3
Dashboard UI
Google Sheets
Data Layer