Walk into any lawn care, cleaning, or home services company and you'll find the same stack: a scheduling app ($79/month), a CRM ($99/month), a separate invoicing tool ($49/month), maybe a route optimizer ($149/month), and a field service mobile app ($99/month per user). Before a single dollar of labor is paid, they're already writing software checks that total anywhere from $600 to over $2,400 a year, and that's on the conservative end. Stack it up for a real operation, including field service software, route optimizer, invoicing, and a proper answering service, and a small service business is looking at $5,000 to $7,000 a year before a single employee is paid.
We built the same thing, for roughly $100 a year. Here's how.
The Starting Point: Organized Chaos
When we started working with Yardigans, a youth-run lawn care and pet services company, their "system" was what most small service operators run on: text messages, a mental map of who needs what, notes scattered across phones, and a lot of hoping nothing fell through the cracks. They were spending more energy managing the business than running it.
The goal wasn't just to organize that chaos. It was to eliminate it, to build a system where normal operations run themselves, and the humans focus entirely on doing the work.
Google Sheets as the Operational Brain
The entire backend is a single Google Sheet. Not as a workaround, not as a placeholder until something "real" gets built, but as a deliberate, architected decision.
The sheet holds 11 normalized tables: service requests, customers, jobs, billing events, invoices, routes, pricing reference, service area lookups, and more. It's a proper relational data model, each table has stable ID-based foreign keys, clean separation of concerns, and a clear lifecycle for every record.
The clean, normalized data model means jobs can be routed easily. Billing events are created from completed jobs and assembled into Stripe invoices, all while each record in each table maintains its own state.
The reason this works is Google Apps Script, essentially a full JavaScript runtime that lives inside Google Workspace and can call any API in the world. The entire business logic layer runs here: intake validation, confirmation emails, reply parsing, job creation, Stripe invoice generation, and the recurring job engine that keeps subscription customers rolling forward week after week.
The Pipeline That Runs the Business
Every five minutes, a single orchestrator function fires. It runs through seven stages in order:
- Apply any pending manual review decisions from staff
- Validate new service requests (ZIP code, yard size, route capacity)
- Send confirmation emails to accepted customers
- Parse Gmail replies to detect confirmations, declines, or edge cases
- Convert confirmed customers into operational jobs
- Convert completed jobs into billing events
- Group billing events into Stripe invoices and send to customers
That pipeline is the business. A customer fills out a form on the website. Within five minutes their request is validated, priced against a lookup table, checked against available route capacity, and a confirmation email is on its way. They confirm, jobs get created. The crew completes a job, the billing event fires. By end of week, Stripe sends an invoice. The customer pays. The next subscription job is already on the calendar.
Nobody at Yardigans scheduled that. Nobody invoiced it. Nobody followed up. The system did.
A Website and Mobile App Powered by the Same Sheet
The public website submits directly to a Google Apps Script web app endpoint. Origin validation, honeypot spam protection, on-page feedback. It's a production-grade form, not a hobby project.
The iOS crew app, built in SwiftUI, hits the same Apps Script layer through a clean internal API. Crew members see their day's jobs, pull customer details and addresses, and mark jobs complete with actual hours. They can also add notes, add one-time work, update subscription services, and more for existing customers. The app never touches the sheet directly, it talks to the API, the API handles the sheet.
One infrastructure layer. Two client surfaces. Zero servers.
AI Where It Counts
Route optimization and job scheduling don't have to be manual. The architecture already supports direct AI API calls from Apps Script, the same way it calls Stripe. Pass the day's jobs and addresses to an AI API, get back an optimized job sequence, update the jobs table and the crew gets the sequence on their view of the app. No routing software subscription required.
What It Actually Costs
Here's the full annual cost breakdown:
- Domain name: ~$15/year
- Google Workspace (Sheets, Apps Script, Gmail): free personal tier or ~$72/year for Business Starter
- Website hosting: $0 (compiled to static HTML served from any CDN)
- Stripe: Transaction fees only, no monthly seat cost
- AI API calls (routing, scheduling): usage-based, pennies per interaction
Total fixed cost before transaction volume: under $100/year. Compare that to $7,000/year for off-the-shelf service business software that often does less, integrates worse, and forces you to adapt your business to its workflows instead of the other way around.
The Real Unlock
The technology isn't the point. The point is what the technology frees up.
Yardigans went from a founder carrying the whole operation in their head, fielding texts, manually scheduling, chasing down payments, to a system where the business runs itself through every normal case. Intake, confirmation, scheduling, billing, recurring jobs: automated. The humans show up, do the work, mark it done, and go home. The system handles the rest.
That's not a small thing. That's the difference between a job and a business, and it runs on a Google Sheet.
Businesses competing with these kids, beware. If they pursue this after school is over, they will have a tremendous advantage. What you pay thousands a year for is comparable to what they paid once.

