Case study
Business Systems, Lifestyle Home Products
Status: In productionData platform built across two co-op terms at a family-owned retail company: a centralized OAuth broker, ten Apps Script pipelines, and a set of interactive dashboards built with Claude, feeding Salesforce reporting and daily operations.
- Role
- Data Analyst
- Timeline
- Second consecutive co-op term
Stack
- Salesforce
- Google Apps Script
- Google Sheets
- SOQL
- Google Workspace Admin APIs
- Claude
Problem
At Lifestyle Home Products, I built a centralized Salesforce authentication service and ten Apps Script pipelines pulling from Salesforce, Google Workspace, and a handful of outside vendor and recruiting APIs into Google Sheets warehouses. Those warehouses feed the company's day-to-day reporting: a native Salesforce dashboard, an executive scorecard, and a set of interactive dashboards I built with Claude. The token broker and the dashboard pipeline were built with another co-op; everything else, individually. I also spent part of the term documenting accounting processes that had never been written down.
LHP's operational data was scattered across Salesforce, Google Workspace, and a handful of point tools (Rilla, Regal, JazzHR, Xero) that never talked to each other. Worse, the ten-plus Apps Script pipelines that did the talking each managed their own Salesforce login independently, which broke silently under scheduled triggers and put the company's Salesforce credentials at risk if enough failed at once. Reporting had the same problem from a different angle: Tableau, which the company depended on, had been fully deprecated with nothing built to replace it. Separately, a handful of critical accounting processes existed only as tribal knowledge in one person's head, with no documentation and no plan for what happens if they're ever unavailable.
Systems built
Salesforce Token Broker
Co-built10+ Apps Script pipelines each managed their own Salesforce OAuth connection, which broke silently under scheduled triggers and risked Salesforce rate-limiting the org when several failed at once. I built a single Apps Script web app that owns the OAuth grant instead: every pipeline calls it for a cached token (25-minute TTL), with locking against concurrent callers, retry with backoff, and fast failure on a dead refresh token rather than burning through retries.
Reduced OAuth grant volume from 25+ per incident to 1 per cache window across 10+ pipelines, turning OAuth from a per-pipeline maintenance burden into one testable, monitorable service.
User & License Warehouse
4 of 4 platforms liveLHP's identity data was scattered across four systems with no reconciliation: Salesforce, Google Workspace, Rilla, and Regal, each needing a different auth pattern (Regal has no API at all, so its sync parses a monthly CSV export from Gmail). I built a daily pipeline, authenticating through the token broker, that unifies all four into one warehouse, with each source isolated so one failure doesn't block the others.
Replaced four disconnected sources of user and license truth with one daily-refreshed warehouse, used for license reconciliation, role auditing, and cross-checking agent activity. All four platforms are fully live.
Operations Dashboard Pipeline
Co-built, in productionWhen Tableau was deprecated at LHP, operational reporting needed a new home. I helped build the pipeline that populates the replacement: a native Salesforce i360 dashboard fed by twelve daily reports across all product lines, with automatic file rotation as the Google Sheets warehouse approaches its cell limit and idempotent monthly snapshots so re-running mid-month doesn't duplicate data.
Directly replaced Tableau as the reporting backbone for backlog, balance-due, and install-projection metrics, now feeding the dashboard used as the company's source of truth.
Cycle Time Warehouse
In productionLHP tracks cycle time across roughly 25 project milestones, each a sparse field on the underlying Salesforce object. I built a standalone pipeline that restructures this into a long, normalized warehouse, one row per populated field, directly pivotable by milestone, product line, and region.
A confirmed live run processed 147,723 activity records. The pipeline is idempotent (safe to re-run, backfill, or rotate without manual deduplication) and backfilled historical data back to 2022.
Additional warehouses
Costco Lead Source & Appointment Tracker
SalesforceTracks how Costco-sourced leads convert into set and completed demo appointments, broken out by taker, market, and region, separate from the main ops reports.
Deleted Records Audit Log
Salesforce (queryAll, including soft-deleted)Daily audit trail of what's deleted across the org and by whom, spanning 9 objects, since Salesforce's Recycle Bin only holds records for 15 days.
Executive Scorecard (v2)
Salesforce, 39 aggregate queriesLeadership-level scorecard across 10 metrics including backlog, retention, and cash. v2 exists because v1 ran all 39 queries serially and blew Apps Script's 30-minute execution cap; the rewrite fetches in parallel waves with a watchdog trigger that re-runs a failed pull automatically.
JazzHR Applicant Warehouse
JazzHR recruiting APICentralizes recruiting pipeline data for reporting alongside Salesforce location and business-unit data, which JazzHR's own interface can't cross-reference.
Marketing Dashboard: Lead Source Performance
SalesforceFull-funnel view from lead intake through appointment outcome through actual sale economics, broken out by market segment and region.
Xero Bank Transactions Export
Xero APIDaily flattened export of bank transactions. Xero's interface has no CSV journal-entry import, so this gives a queryable, spreadsheet-native copy for downstream reconciliation.
AI-built interactive dashboards
Alongside the pipelines, I used Claude to build a set of interactive dashboards, one per warehouse, each with year, month, product, and region filters, sortable charts, stat tiles, and target-vs-actual coloring. Two are live today: a Cycle Time dashboard and a Software Usage & License Audit dashboard, both driven entirely by Apps Script and Claude.
Institutionalizing accounting knowledge
Ran in parallel with the technical work: converted one accounting controller's undocumented process knowledge into a structured set of SOPs, written docs plus recorded video walkthroughs, built against a consistent seven-part template covering trigger, systems required, steps, exceptions, common errors, output, and escalation contact.
Documented 10+ processes end to end, including bank reconciliation, payroll, government remittances, and vendor payment cycles. While mapping three unrelated processes, I noticed they all hit the same root cause: the accounting platform can't import journal entries from a CSV. I flagged it as one consolidated recommendation instead of three separate ones.
Reduced key-person risk for finance operations that previously depended on one person's memory, and produced a reusable template that generalizes beyond accounting.
Limitations
- These are internal systems built for a private company, so there is no public demo or repository to link to.
- No automated test suite exists across the pipelines, beyond the Token Broker's cache-behavior test.
Results
This work was directed and reviewed at the leadership level (C-suite and various VPs) before rolling out to the teams that depend on it daily.
Ten production pipelines, a centralized OAuth service, and a set of Claude-built interactive dashboards now run LHP's operational reporting. Separately, the accounting documentation initiative reduced key-person risk across 10+ previously undocumented financial processes.