Google Sheets Cho Freelancer: Quản Lý Dự Án, Hợp Đồng Và Thu Nhập

Google Sheets Cho Freelancer: Quản Lý Dự Án, Hợp Đồng Và Thu Nhập
Freelancer là "CEO của chính mình" — bạn vừa là nhân viên kinh doanh, vừa là kế toán, vừa là quản lý dự án. Theo khảo sát 2026, 63% freelancer Việt Nam không có hệ thống quản lý tài chính rõ ràng và thường xuyên bỏ sót việc theo dõi payment, không biết tháng này thực sự lời hay lỗ sau khi trừ chi phí.
Bài viết này xây dựng cho bạn một hệ thống quản lý freelance toàn diện bằng Google Sheets: từ quản lý client và dự án, time tracking, tạo invoice, theo dõi payment đến dự báo thu nhập và chuẩn bị thuế TNCN.
1. Tại Sao Google Sheets Là Lựa Chọn Hoàn Hảo Cho Freelancer?
Nhiều freelancer thử các app quản lý chuyên biệt như Toggl, FreshBooks, Wave... nhưng cuối cùng quay lại Sheets vì:
- Miễn phí hoàn toàn: Không tốn 10-30$/tháng cho app subscription
- Tùy chỉnh theo workflow riêng: Mỗi freelancer có cách làm việc khác nhau
- Tất cả trong một file: Client + Project + Invoice + Finance trong 1 spreadsheet
- Chia sẻ dễ dàng: Gửi báo cáo cho kế toán, partner chỉ cần share link
- Tích hợp Google Workspace: Kết nối với Gmail, Calendar, Drive
- Export linh hoạt: Xuất PDF invoice, báo cáo Excel cho khách hàng
So sánh các công cụ quản lý freelance
| Công cụ | Chi phí | Invoice | Time Track | Tax Report | Tùy chỉnh |
|---|---|---|---|---|---|
| Google Sheets | Miễn phí | Có (tự build) | Có (tự build) | Có (tự build) | Tối đa |
| FreshBooks | $17-55/tháng | Chuyên nghiệp | Tốt | Cơ bản | Thấp |
| Wave | Miễn phí cơ bản | Tốt | Không | Cơ bản | Thấp |
| Notion | $16/tháng | Không | Plugin | Không | Cao |
| Toggl + Google Sheets | $9/tháng | Sheets | Chuyên nghiệp | Sheets | Cao |
2. Quản Lý Client & Pipeline
Bảng Client Database
Mọi thứ về khách hàng trong một bảng:
| Cột | Mô tả | Ví dụ |
|---|---|---|
| Client_ID | Mã khách hàng | CL001 |
| Company_Name | Tên công ty | ABC Corp |
| Contact_Name | Người liên hệ | Nguyễn Văn A |
| Email chính | a@abc.com | |
| Phone | Điện thoại | 0901234567 |
| Industry | Ngành | Fintech |
| Source | Nguồn gặp gỡ | Referral / Upwork / LinkedIn |
| Rate_Type | Loại phí | Hourly/Project/Retainer |
| Default_Rate | Mức phí thường dùng | 1500000 VND/giờ |
| Payment_Terms | Điều khoản thanh toán | Net 15 / 50% upfront |
| Status | Trạng thái | Active/Prospect/Churned |
| Total_Billed | Tổng đã billing | Auto từ INVOICES |
| LTV | Lifetime value | Auto |
| Notes | Ghi chú đặc biệt | Thích báo cáo hàng tuần |
Sales Pipeline cho freelancer
'Sheet PIPELINE - theo dõi cơ hội kinh doanh mới:
Stage: Lead → Qualified → Proposal Sent → Negotiating → Won/Lost
'Tính win rate:
=COUNTIF(Stage_Column,"Won") / (COUNTIF(Stage_Column,"Won") + COUNTIF(Stage_Column,"Lost")) * 100
'Doanh thu pipeline dự kiến (weighted):
=SUMPRODUCT((Stage="Proposal Sent")*0.3*Value + (Stage="Negotiating")*0.7*Value)
Công thức tính LTV Client
'Tổng doanh thu từ 1 client:
=SUMIF(INVOICES!$B:$B, Client_ID, INVOICES!$I:$I)
'Số tháng là client:
=DATEDIF(First_Project_Date, TODAY(), "M")
'Monthly LTV:
=Total_Revenue / Months_As_Client
'Projected Annual LTV:
=Monthly_LTV * 12
3. Quản Lý Nhiều Dự Án Cùng Lúc
Bảng Projects Master
| Cột | Dữ liệu |
|---|---|
| Project_ID | PRJ-2026-001 |
| Project_Name | Redesign Website ABC Corp |
| Client_ID | CL001 |
| Start_Date | 2026-11-01 |
| Deadline | 2026-11-30 |
| Project_Type | Fixed/Hourly/Retainer |
| Total_Budget | 15000000 |
| Estimated_Hours | 80 |
| Actual_Hours | Auto từ TIME_LOG |
| Billed_Amount | Auto từ INVOICES |
| Status | Planning/Active/On Hold/Done |
| Priority | High/Medium/Low |
| Profit_Margin | Auto tính |
Gantt Chart đơn giản bằng Conditional Formatting
'Tạo Gantt chart trong Google Sheets:
'Cột A: Project Name
'Cột B: Start Date
'Cột C: End Date
'Cột D onwards: Ngày (1, 2, 3... của tháng)
'Conditional Formatting rule cho từng ô ngày:
'Format cells where custom formula is:
=AND(D$1>=DATEVALUE(TEXT($B2,"yyyy-mm-dd")), D$1<=DATEVALUE(TEXT($C2,"yyyy-mm-dd")))
'Fill color: Blue nếu active, Green nếu done, Red nếu overdue
Dashboard "Workload" hiện tại
'Số dự án đang active:
=COUNTIF(Projects!Status,"Active")
'Tổng giờ cần làm tuần này (estimate):
=SUMIFS(Tasks!Estimated_Hours, Tasks!Project, Active_Projects, Tasks!Due_Date, ">="&Week_Start, Tasks!Due_Date, "<="&Week_End)
'Capacity còn lại (giờ/tuần):
=40 - SUMIF(TIME_LOG!Week, Current_Week, TIME_LOG!Hours) '40h/tuần
'Cảnh báo overload:
=IF(Remaining_Capacity<0, "OVERLOADED", IF(Remaining_Capacity<10, "TIGHT", "OK"))
4. Time Tracking Chính Xác
Bảng TIME_LOG
Nhập giờ làm việc mỗi ngày — thói quen quan trọng nhất của freelancer:
| Date | Project_ID | Task_Description | Start_Time | End_Time | Hours | Rate | Billable | Amount |
|---|---|---|---|---|---|---|---|---|
| 2026-11-15 | PRJ-2026-001 | Thiết kế mockup homepage | 09:00 | 12:30 | 3.5 | 1500000 | Yes | 5250000 |
| 2026-11-15 | PRJ-2026-002 | Review code client feedback | 14:00 | 15:00 | 1 | 1200000 | Yes | 1200000 |
| 2026-11-15 | ADMIN | Gửi email, họp nội bộ | 15:30 | 16:30 | 1 | 0 | No | 0 |
Công thức tính giờ tự động
'Tính số giờ từ Start - End time:
=IF(E2>D2, (E2-D2)*24, (1+E2-D2)*24)
'Kết quả: 3.5 giờ
'Tổng giờ billable trong tháng:
=SUMIFS(TIME_LOG!F:F,
TIME_LOG!H:H, "Yes",
TIME_LOG!A:A, ">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1))
'Tỷ lệ billable vs non-billable:
=SUMIF(TIME_LOG!H:H,"Yes",TIME_LOG!F:F) / SUM(TIME_LOG!F:F) * 100
Weekly Time Summary tự động
'Tổng giờ theo project trong tuần:
=QUERY(TIME_LOG!A:I,
"SELECT B, SUM(F), SUM(I)
WHERE A >= date '"&TEXT(Week_Start,"yyyy-mm-dd")&"'
AND A <= date '"&TEXT(Week_End,"yyyy-mm-dd")&"'
AND H = 'Yes'
GROUP BY B
ORDER BY SUM(I) DESC
LABEL SUM(F) 'Giờ', SUM(I) 'Doanh Thu'")
Phân tích năng suất
'Effective hourly rate thực tế:
=Total_Billable_Revenue / Total_Hours_Worked
'Giờ billable target:
=Working_Days_In_Month * 6 '6h billable/ngày là realistic
'Utilization rate:
=Billable_Hours / Total_Hours_Worked * 100
5. Tạo Invoice Tự Động
Bảng INVOICES
| Cột | Mô tả |
|---|---|
| Invoice_No | INV-2026-001 (tự động tăng) |
| Client_ID | Liên kết đến CLIENTS |
| Project_ID | Liên kết đến PROJECTS |
| Issue_Date | Ngày xuất hóa đơn |
| Due_Date | Hạn thanh toán |
| Subtotal | Tổng trước VAT |
| VAT_Rate | 10% / 0% |
| VAT_Amount | Auto tính |
| Total | Tổng cuối |
| Paid_Amount | Đã thanh toán |
| Balance | Còn lại |
| Status | Draft/Sent/Partial/Paid/Overdue |
| Payment_Date | Ngày nhận tiền |
Sheet INVOICE_TEMPLATE (dùng để in/gửi PDF)
'Tự động điền thông tin từ INVOICES table:
'Sử dụng INDEX/MATCH để lấy thông tin:
=INDEX(CLIENTS!B:B, MATCH(Invoice_No_Input, INVOICES!A:A, 0)) 'Client name
=INDEX(CLIENTS!D:D, MATCH(Invoice_No_Input, INVOICES!A:A, 0)) 'Client email
=INDEX(INVOICES!E:E, MATCH(Invoice_No_Input, INVOICES!A:A, 0)) 'Due date
'Số hóa đơn tự động tăng:
="INV-"&YEAR(TODAY())&"-"&TEXT(COUNTA(INVOICES!A:A),"000")
Tạo invoice line items từ TIME_LOG
'Lấy tất cả giờ billable chưa invoice của project:
=QUERY(TIME_LOG!A:I,
"SELECT A, C, F, G, I
WHERE B = '"&Project_ID&"'
AND H = 'Yes'
AND I_Invoiced = 'No'
ORDER BY A")
Gửi invoice qua Gmail (Google Apps Script)
function sendInvoiceEmail(invoiceNo) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const invoices = ss.getSheetByName('INVOICES');
const template = ss.getSheetByName('INVOICE_TEMPLATE');
// Populate template
template.getRange('B3').setValue(invoiceNo);
SpreadsheetApp.flush();
// Export as PDF
const url = 'https://docs.google.com/spreadsheets/d/' + ss.getId() +
'/export?format=pdf&gid=' + template.getSheetId() + '&range=A1:H40';
const token = ScriptApp.getOAuthToken();
const pdf = UrlFetchApp.fetch(url, {headers: {'Authorization': 'Bearer ' + token}}).getBlob();
// Get client email
const row = findRow(invoices, invoiceNo);
const clientEmail = getClientEmail(invoices.getRange(row, 2).getValue());
// Send email
MailApp.sendEmail({
to: clientEmail,
subject: 'Invoice ' + invoiceNo + ' from [Your Name]',
body: 'Dear Client,\n\nPlease find attached invoice ' + invoiceNo + '.\n\nThank you!',
attachments: [pdf.setName(invoiceNo + '.pdf')]
});
// Mark as Sent
invoices.getRange(row, 12).setValue('Sent');
invoices.getRange(row, 13).setValue(new Date());
}
6. Theo Dõi Payment & Công Nợ
Dashboard công nợ
'Tổng công nợ chưa thu:
=SUMIF(INVOICES!L:L,"<>Paid",INVOICES!J:J)
'Công nợ quá hạn (overdue):
=SUMIFS(INVOICES!J:J, INVOICES!L:L,"<>Paid", INVOICES!E:E,"<"&TODAY())
'Công nợ sắp đến hạn (7 ngày tới):
=SUMIFS(INVOICES!J:J, INVOICES!L:L,"<>Paid",
INVOICES!E:E, ">="&TODAY(),
INVOICES!E:E, "<="&TODAY()+7)
'Số ngày trung bình khách hàng thanh toán (DSO):
=AVERAGEIFS(INVOICES!Payment_Date-INVOICES!Issue_Date, INVOICES!L:L,"Paid")
Aging report công nợ
'Phân loại công nợ theo độ tuổi:
=SUMIFS(INVOICES!Balance, INVOICES!Status,"<>Paid",
TODAY()-INVOICES!Due_Date, ">=0", TODAY()-INVOICES!Due_Date, "<=30") '0-30 ngày
=SUMIFS(INVOICES!Balance, INVOICES!Status,"<>Paid",
TODAY()-INVOICES!Due_Date, ">30", TODAY()-INVOICES!Due_Date, "<=60") '31-60 ngày
=SUMIFS(INVOICES!Balance, INVOICES!Status,"<>Paid",
TODAY()-INVOICES!Due_Date, ">60") '>60 ngày (nguy hiểm)
Nhắc nhở payment tự động
// Google Apps Script: Gửi reminder khi invoice sắp đến hạn
function sendPaymentReminders() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INVOICES');
const data = sheet.getDataRange().getValues();
const today = new Date();
data.forEach((row, i) => {
if (i === 0) return; // Skip header
const dueDate = new Date(row[4]);
const status = row[11];
const daysUntilDue = Math.round((dueDate - today) / (1000*60*60*24));
if (status !== 'Paid' && (daysUntilDue === 7 || daysUntilDue === 3 || daysUntilDue === 0)) {
const clientEmail = getClientEmail(row[1]);
const subject = daysUntilDue === 0 ?
'Payment Due Today - Invoice ' + row[0] :
'Payment Reminder - Invoice ' + row[0] + ' Due in ' + daysUntilDue + ' days';
MailApp.sendEmail(clientEmail, subject, generateReminderBody(row));
}
});
}
7. Dự Báo Thu Nhập & Dòng Tiền
Income Forecasting
'Thu nhập dự kiến tháng này:
=SUMIFS(INVOICES!Total, INVOICES!Status,"<>Cancelled",
INVOICES!Issue_Date, ">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1))
'Thu nhập từ retainer contracts (chắc chắn):
=SUMIF(PROJECTS!Type,"Retainer", PROJECTS!Monthly_Value)
'Thu nhập từ projects đang chạy (ước tính):
=SUMPRODUCT((PROJECTS!Status="Active")*(PROJECTS!Completion_Percent/100)*PROJECTS!Total_Budget)
- SUMPRODUCT((PROJECTS!Status="Active")*PROJECTS!Already_Billed)
'3-month forecast:
Month1_Forecast = Retainer_Income + Pipeline_Won_Projects * 0.8
Month2_Forecast = Retainer_Income + Pipeline_Negotiating * 0.6
Month3_Forecast = Retainer_Income + Pipeline_Proposal * 0.3
Cash Flow Tracker
| Tháng | Dự kiến thu | Thực thu | Chi phí | Net Cash Flow | Tích lũy |
|---|---|---|---|---|---|
| T11/2026 | 45,000,000 | 38,000,000 | 8,500,000 | 29,500,000 | 120,000,000 |
| T12/2026 | 35,000,000 | - | - | - | - |
Chi phí freelancer cần theo dõi
- Công cụ & phần mềm: Adobe CC, Figma, hosting, domains
- Marketing: Website, LinkedIn Premium, portfolio hosting
- Đào tạo: Khóa học online, sách, conference
- Văn phòng: Coworking space, điện, internet
- Bảo hiểm: Bảo hiểm y tế, tai nạn nghề nghiệp
- Buffer: Quỹ dự phòng 3-6 tháng chi phí sinh hoạt
8. Tax Tracking & Báo Cáo Thuế TNCN
Thuế TNCN cho freelancer Việt Nam
Freelancer có thu nhập từ dịch vụ chịu thuế TNCN theo biểu lũy tiến:
| Thu nhập tính thuế/năm | Thuế suất |
|---|---|
| Đến 60 triệu | 5% |
| 60-120 triệu | 10% |
| 120-216 triệu | 15% |
| 216-384 triệu | 20% |
| 384-624 triệu | 25% |
| 624-960 triệu | 30% |
| Trên 960 triệu | 35% |
Công thức tính thuế TNCN tự động
'Giảm trừ gia cảnh bản thân: 11,000,000/tháng = 132,000,000/năm
'Giảm trừ người phụ thuộc: 4,400,000/người/tháng
'Thu nhập tính thuế:
=Annual_Gross_Income - 132000000 - (Dependents * 4400000 * 12) - Social_Insurance
'Thuế TNCN phải đóng (công thức luỹ tiến):
=IF(Taxable<0, 0,
IF(Taxable<=60000000, Taxable*0.05,
IF(Taxable<=120000000, Taxable*0.1-3000000,
IF(Taxable<=216000000, Taxable*0.15-9000000,
IF(Taxable<=384000000, Taxable*0.2-19800000,
IF(Taxable<=624000000, Taxable*0.25-39150000,
IF(Taxable<=960000000, Taxable*0.3-70350000,
Taxable*0.35-118350000)))))))
Quarterly Tax Estimate
'Thu nhập Q1-Q4 theo từng quý:
=SUMIFS(INVOICES!Total, INVOICES!Payment_Date, ">="&DATE(Year,Q_Start_Month,1),
INVOICES!Payment_Date, "<="&EOMONTH(DATE(Year,Q_End_Month,1),0),
INVOICES!Status, "Paid")
'Thuế ước tính cần đặt cọc mỗi quý:
=Annual_Tax_Estimate / 4
'Số dư quỹ thuế:
=Tax_Fund_Balance - Q_Tax_Paid
Danh sách chi phí được khấu trừ thuế
- Chi phí phần mềm, công cụ làm việc trực tiếp liên quan đến thu nhập
- Chi phí đào tạo nâng cao kỹ năng nghề nghiệp
- Chi phí internet, điện thoại (tỷ lệ sử dụng cho công việc)
- Bảo hiểm xã hội tự nguyện (được khấu trừ theo quy định)
9. Template Tổng Hợp Cho Freelancer
Cấu trúc file Google Sheets hoàn chỉnh
| Sheet Tab | Mục đích | Cập nhật |
|---|---|---|
| DASHBOARD | Overview tất cả metrics | Auto |
| CLIENTS | Database khách hàng | Khi có client mới |
| PIPELINE | Cơ hội kinh doanh mới | Hàng tuần |
| PROJECTS | Dự án đang chạy | Khi có thay đổi |
| TIME_LOG | Ghi giờ làm việc | Hàng ngày |
| INVOICES | Danh sách invoice | Khi billing |
| INVOICE_TEMPLATE | Template in invoice | Per invoice |
| EXPENSES | Chi phí freelancer | Hàng tháng |
| FINANCE | P&L, cash flow, tax | Hàng tháng |
| GOALS | Mục tiêu năm, quý | Đầu kỳ |
10 thói quen tài chính freelancer thành công
- Nhập TIME_LOG mỗi ngày — không bao giờ để qua ngày hôm sau
- Gửi invoice ngay khi milestone/project hoàn thành
- Follow up công nợ sau 7 ngày nếu chưa thanh toán
- Tách tài khoản ngân hàng: thu nhập business / chi tiêu cá nhân
- Để dành 20-25% thu nhập cho thuế TNCN mỗi tháng
- Review P&L mỗi tháng — biết mình thực sự lời bao nhiêu
- Duy trì quỹ khẩn cấp 3-6 tháng chi phí sinh hoạt
- Tăng rate 10-15% mỗi năm theo mức tăng kỹ năng và inflation
- Đa dạng hóa client — không để 1 client chiếm >40% thu nhập
- Track effective hourly rate — đây là KPI quan trọng nhất
Kết Luận
Một freelancer thành công không chỉ giỏi kỹ năng chuyên môn mà còn phải thành thạo quản lý tài chính. Google Sheets cung cấp nền tảng đủ mạnh để xây dựng hệ thống tài chính freelance chuyên nghiệp mà không tốn chi phí.
Hãy bắt đầu với 3 sheet cơ bản nhất: CLIENTS, TIME_LOG, INVOICES — thiết lập trong 2 giờ và bắt đầu dùng ngay hôm nay. Phần còn lại sẽ tự mở rộng theo nhu cầu thực tế.
Khám phá thêm các template và phần mềm quản lý freelance tại SheetStore.
Tài Nguyên Bổ Sung
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.