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

Tuân HoangTuân Hoang
23 tháng 11, 2026
13 phút đọc
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íInvoiceTime TrackTax ReportTùy chỉnh
Google SheetsMiễn phíCó (tự build)Có (tự build)Có (tự build)Tối đa
FreshBooks$17-55/thángChuyên nghiệpTốtCơ bảnThấp
WaveMiễn phí cơ bảnTốtKhôngCơ bảnThấp
Notion$16/thángKhôngPluginKhôngCao
Toggl + Google Sheets$9/thángSheetsChuyên nghiệpSheetsCao

2. Quản Lý Client & Pipeline

Bảng Client Database

Mọi thứ về khách hàng trong một bảng:

CộtMô tảVí dụ
Client_IDMã khách hàngCL001
Company_NameTên công tyABC Corp
Contact_NameNgười liên hệNguyễn Văn A
EmailEmail chínha@abc.com
PhoneĐiện thoại0901234567
IndustryNgànhFintech
SourceNguồn gặp gỡReferral / Upwork / LinkedIn
Rate_TypeLoại phíHourly/Project/Retainer
Default_RateMức phí thường dùng1500000 VND/giờ
Payment_TermsĐiều khoản thanh toánNet 15 / 50% upfront
StatusTrạng tháiActive/Prospect/Churned
Total_BilledTổng đã billingAuto từ INVOICES
LTVLifetime valueAuto
NotesGhi chú đặc biệtThí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ộtDữ liệu
Project_IDPRJ-2026-001
Project_NameRedesign Website ABC Corp
Client_IDCL001
Start_Date2026-11-01
Deadline2026-11-30
Project_TypeFixed/Hourly/Retainer
Total_Budget15000000
Estimated_Hours80
Actual_HoursAuto từ TIME_LOG
Billed_AmountAuto từ INVOICES
StatusPlanning/Active/On Hold/Done
PriorityHigh/Medium/Low
Profit_MarginAuto 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:

DateProject_IDTask_DescriptionStart_TimeEnd_TimeHoursRateBillableAmount
2026-11-15PRJ-2026-001Thiết kế mockup homepage09:0012:303.51500000Yes5250000
2026-11-15PRJ-2026-002Review code client feedback14:0015:0011200000Yes1200000
2026-11-15ADMINGửi email, họp nội bộ15:3016:3010No0

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ộtMô tả
Invoice_NoINV-2026-001 (tự động tăng)
Client_IDLiên kết đến CLIENTS
Project_IDLiên kết đến PROJECTS
Issue_DateNgày xuất hóa đơn
Due_DateHạn thanh toán
SubtotalTổng trước VAT
VAT_Rate10% / 0%
VAT_AmountAuto tính
TotalTổng cuối
Paid_AmountĐã thanh toán
BalanceCòn lại
StatusDraft/Sent/Partial/Paid/Overdue
Payment_DateNgà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ángDự kiến thuThực thuChi phíNet Cash FlowTích lũy
T11/202645,000,00038,000,0008,500,00029,500,000120,000,000
T12/202635,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ămThuế suất
Đến 60 triệu5%
60-120 triệu10%
120-216 triệu15%
216-384 triệu20%
384-624 triệu25%
624-960 triệu30%
Trên 960 triệu35%

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 TabMục đíchCập nhật
DASHBOARDOverview tất cả metricsAuto
CLIENTSDatabase khách hàngKhi có client mới
PIPELINECơ hội kinh doanh mớiHàng tuần
PROJECTSDự án đang chạyKhi có thay đổi
TIME_LOGGhi giờ làm việcHàng ngày
INVOICESDanh sách invoiceKhi billing
INVOICE_TEMPLATETemplate in invoicePer invoice
EXPENSESChi phí freelancerHàng tháng
FINANCEP&L, cash flow, taxHàng tháng
GOALSMục tiêu năm, quýĐầu kỳ

10 thói quen tài chính freelancer thành công

  1. Nhập TIME_LOG mỗi ngày — không bao giờ để qua ngày hôm sau
  2. Gửi invoice ngay khi milestone/project hoàn thành
  3. Follow up công nợ sau 7 ngày nếu chưa thanh toán
  4. Tách tài khoản ngân hàng: thu nhập business / chi tiêu cá nhân
  5. Để dành 20-25% thu nhập cho thuế TNCN mỗi tháng
  6. Review P&L mỗi tháng — biết mình thực sự lời bao nhiêu
  7. Duy trì quỹ khẩn cấp 3-6 tháng chi phí sinh hoạt
  8. Tăng rate 10-15% mỗi năm theo mức tăng kỹ năng và inflation
  9. Đa dạng hóa client — không để 1 client chiếm >40% thu nhập
  10. 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

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.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận