Multi-company time-records integration
One headless login replays a single query and pulls every employee's shifts across every property's payroll company.
Payroll is a separate Gusto company for every property. To watch labor across the whole portfolio, I'd otherwise log into each company and export shifts by hand. What I actually wanted was the raw, shift-level punch data for everyone, everywhere, in one automated pull.
How it works
A read-only Python puller logs into a single payroll admin account and replays a GraphQL query that exports every employee's shifts across all the hotel payroll companies at once. The MFA is seeded and the TOTP comes from 1Password, so it runs fully unattended with no SMS re-seed. It fires nightly on the always-on mini as a launchd job.
- Read-only by design. It never writes back to payroll.
- Unattended TOTP from 1Password, a replayed GraphQL query, plain Python.
- Feeds the labor exception views and the housekeeping utilization math.
It shipped and runs every morning. The output is the substrate for the staffing-overlap reports and the paid-but-no-work exception flags.
This is the whole stack in one line. Instead of me reconciling timecards across ten companies, the exceptions surface themselves. One owner plus agents, with the manual reconciliation falling away.