There's a myth that small teams need enterprise software to operate professionally. That a 5-person startup needs Salesforce, Tableau, and Monday.com to compete with companies 10x their size.
It's the opposite. The companies that scale fastest with small teams are the ones that build lean, integrated systems, not ones that stack software. And the fastest way to build those systems? Google Sheets and Apps Script.
We've built operational systems for hundreds of small teams. The pattern is always the same: 5 core systems, all in Sheets, all connected. Here's the playbook.
The 5 Systems Every Small Team Needs
CRM: Every Lead, Deal, and Conversation in One Place
Track leads from first touch to closed deal. QUERY-powered views filter by stage, owner, or date. No per-seat licensing.
Your CRM doesn't need 200 features. It needs 4 views: all leads, my leads, pipeline by stage, and closed this month. QUERY formulas create each view from one master dataset.
=QUERY(Deals!A:J,
"SELECT D, COUNT(A), SUM(F)
WHERE D IS NOT NULL
GROUP BY D
ORDER BY SUM(F) DESC
LABEL COUNT(A) 'Count',
SUM(F) 'Value'", 1)
Dashboard: Live KPIs Without a BI Tool
Revenue, pipeline, conversion rates, cash position. All auto-calculated from your data. No Tableau subscription needed.
A dashboard is just formulas that pull from your other systems. Monthly revenue is a SUMIFS. Pipeline value is a QUERY. Conversion rate is a division. SPARKLINE adds trend charts directly in cells.
// Monthly revenue
=SUMIFS(Revenue!D:D,
Revenue!B:B, ">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),
Revenue!B:B, "<"&EDATE(DATE(YEAR(TODAY()),MONTH(TODAY()),1),1))
// Conversion rate
=COUNTIFS(Deals!D:D,"Closed")/COUNTIF(Deals!D:D,"<>")
// Revenue trend sparkline
=SPARKLINE(QUERY(Revenue!A:D,
"SELECT SUM(D) GROUP BY MONTH(B)+YEAR(B)*12
ORDER BY MONTH(B)+YEAR(B)*12"), {"charttype","column";"color","#0F9D58"})
Invoice System: Generate, Send, Track
Create invoices from a template, auto-send via Gmail, track payment status. No QuickBooks needed for most businesses.
A template tab formats the invoice. Apps Script populates it with client data, exports as PDF, and emails it. A tracker tab shows outstanding, paid, and overdue invoices.
function generateInvoice(row) {
const ss = SpreadsheetApp.getActive();
const template = ss.getSheetByName('Invoice Template');
const data = ss.getSheetByName('Invoices')
.getRange(row, 1, 1, 10).getValues()[0];
// Populate template
template.getRange('B4').setValue(data[1]); // Client
template.getRange('B5').setValue(data[2]); // Email
template.getRange('D4').setValue(data[0]); // Invoice #
template.getRange('D5').setValue(new Date()); // Date
template.getRange('B10').setValue(data[4]); // Description
template.getRange('D10').setValue(data[5]); // Amount
// Export as PDF
const pdf = ss.getUrl().replace(/edit.*/, '')
+ 'export?format=pdf&gid=' + template.getSheetId();
GmailApp.sendEmail(data[2],
`Invoice ${data[0]} from Your Company`,
`Hi ${data[1]},\n\nPlease find your invoice attached.`,
{ attachments: [UrlFetchApp.fetch(pdf, {
headers: { Authorization: 'Bearer '
+ ScriptApp.getOAuthToken() }
}).getBlob()] }
);
}
Project Tracker: Tasks, Deadlines, Workload
Assign tasks, track status, see who's overloaded. Conditional formatting turns it visual. No Monday.com needed.
Columns: Task | Owner | Status | Priority | Due Date | Notes. Data validation on Status (To Do / In Progress / Done / Blocked). Conditional formatting: red for overdue, yellow for due this week.
Automated Reporting: Reports That Write Themselves
Weekly and monthly reports compiled from your data and emailed to stakeholders automatically. Zero manual effort after setup.
function sendWeeklyReport() {
const ss = SpreadsheetApp.getActive();
const dash = ss.getSheetByName('Dashboard');
const revenue = dash.getRange('B3').getValue();
const pipeline = dash.getRange('B4').getValue();
const newDeals = dash.getRange('B5').getValue();
const closedDeals = dash.getRange('B6').getValue();
const body = `Weekly Report\n\n`
+ `Revenue MTD: $${revenue.toLocaleString()}\n`
+ `Pipeline Value: $${pipeline.toLocaleString()}\n`
+ `New Deals: ${newDeals}\n`
+ `Closed This Week: ${closedDeals}\n\n`
+ `View dashboard: ${ss.getUrl()}`;
GmailApp.sendEmail(
'team@yourcompany.com',
'Weekly Report | ' + new Date().toLocaleDateString(),
body
);
}
The SaaS Cost Comparison
Here's what these 5 systems typically cost in SaaS tools vs. Google Sheets:
- CRM (HubSpot Starter): $20/user/month × 5 = $1,200/year
- Dashboard (Tableau): $70/user/month × 2 = $1,680/year
- Invoicing (QuickBooks): $30/month = $360/year
- Project Management (Monday): $12/user/month × 5 = $720/year
- Reporting (Databox): $72/month = $864/year
Total SaaS: ~$4,824/year. And that's the starter tiers.
Google Sheets: $0/year + one-time build cost of $4,000–10,000. Breakeven in 10–24 months, then pure savings.
The Compound Effect
The real power isn't any single system. It's that they're all connected.
Your CRM feeds your dashboard. Your invoice data feeds your revenue metrics. Your project tracker shows workload tied to active deals. When a deal closes in the CRM, the invoice system knows. When a payment clears, the dashboard updates.
In a SaaS stack, this connectivity requires Zapier ($20–200/month), custom integrations, or manual copying. In Google Sheets, it's a formula: =Dashboard!B3 or =IMPORTRANGE(). Native. Free. Instant.
Scale isn't about headcount. It's about systems. The right 5 systems in Google Sheets let a team of 5 operate with the precision and visibility of a team of 50.