Lấy dữ liệu Facebook Ads tự động vào Google Sheets có ba hướng chính: (1) đặt lịch gửi báo cáo từ Meta Ads Reporting rồi nhập vào Sheets, (2) dùng add-on hoặc trình kết nối của bên thứ ba, (3) tự viết Google Apps Script gọi Meta Marketing API (Insights API). Mức độ tự động, độ linh hoạt và công sức bảo trì khác nhau, nên cách tốt nhất tùy vào số tài khoản quảng cáo, tần suất cập nhật và người có thể bảo trì hệ thống. Bài này so sánh ba cách, hướng dẫn từng bước cách tự làm bằng Apps Script và liệt kê lỗi thường gặp, theo ngôn ngữ dành cho marketer.

Giao diện Meta, Google Sheets và phiên bản API thay đổi theo thời gian, nên các bước dưới đây có thể khác đôi chút với màn hình bạn thấy; hãy đối chiếu với tài liệu chính thức ở cuối bài. Bài không có ảnh chụp màn hình và không dùng số liệu thật của khách hàng nào.
Mục lục
- Chọn cách nào: bảng so sánh 3 hướng
- Chuẩn bị: quyền truy cập và chỉ số cần lấy
- Cách 1: báo cáo định kỳ từ Meta Ads Reporting
- Cách 2: add-on và trình kết nối bên thứ ba
- Cách 3: Apps Script gọi Marketing API từng bước
- Thiết kế bảng dữ liệu để báo cáo không vỡ
- Bảo mật token và quyền dữ liệu
- Bảng xử lý lỗi thường gặp
- Khi nào nên và không nên tự làm
- Câu hỏi thường gặp
- Nguồn tham khảo

Chọn cách nào: bảng so sánh 3 hướng
| Tiêu chí | 1. Báo cáo định kỳ Meta | 2. Add-on / trình kết nối | 3. Apps Script + API |
|---|---|---|---|
| Mức tự động | Meta gửi file theo lịch, bạn vẫn phải nhập vào Sheets | Cao: tự làm mới theo lịch của công cụ | Cao: tự chạy theo trình kích hoạt thời gian |
| Cần lập trình | Không | Không hoặc rất ít | Có, mức JavaScript cơ bản |
| Chi phí | Miễn phí | Thường có gói trả phí hoặc giới hạn miễn phí; xem bảng giá của từng nhà cung cấp | Miễn phí công cụ, tốn công xây và bảo trì |
| Độ linh hoạt trường dữ liệu | Theo cột của báo cáo tùy chỉnh | Theo danh sách trường nhà cung cấp hỗ trợ | Cao: chọn trường, mức (level), phân tách theo API cho phép |
| Rủi ro | Phụ thuộc người nhận email, dễ bỏ sót | Phụ thuộc bên thứ ba, cần cấp quyền cho họ | Token hết hạn, thay đổi API, giới hạn quota |
| Phù hợp | 1-3 tài khoản, báo cáo tuần/tháng | Agency nhiều tài khoản, cần dựng nhanh | Cần tùy biến cao, có người bảo trì |
Nếu bạn chỉ cần xem số liệu chứ chưa cần đưa vào bảng tính, bài báo cáo quảng cáo Facebook hướng dẫn xem và xuất trực tiếp trong Ads Manager. Nếu mục tiêu cuối là bảng điều khiển trực quan, xem thêm Google Looker Studio, vì Sheets thường chỉ là lớp trung gian chứa dữ liệu.
Chuẩn bị: quyền truy cập và chỉ số cần lấy
Quyền truy cập
- Bạn cần quyền hợp lệ trên tài khoản quảng cáo. Theo Meta, tính năng báo cáo định kỳ qua email dành cho báo cáo một tài khoản và yêu cầu quyền quản trị viên, nhà quảng cáo hoặc nhà phân tích trên tài khoản quảng cáo đó.
- Với API, theo tài liệu của Meta, quyền
ads_readdùng cho báo cáo và phân tích, cònads_managementdùng khi cần quản lý quảng cáo; ứng dụng mặc định ở mức Limited Access (bị giới hạn tốc độ nặng, dùng để phát triển) và cần đạt Full Access qua App Review để giới hạn nhẹ hơn. - Chỉ truy cập các tài khoản quảng cáo của chính bạn hoặc của khách hàng đã ủy quyền rõ ràng; không dùng token lấy từ nguồn không rõ.
Chọn chỉ số trước khi kéo dữ liệu
| Nhóm | Chỉ số/trường gợi ý | Dùng để |
|---|---|---|
| Định danh | Ngày, tên chiến dịch, nhóm quảng cáo, quảng cáo | Lọc và nhóm dữ liệu |
| Chi phí và phân phối | Số tiền đã chi (spend), lượt hiển thị (impressions), lượt nhấp (clicks) | Theo dõi ngân sách, CPM, CPC |
| Chất lượng tương tác | CTR, CPC | Đánh giá mẫu quảng cáo |
| Kết quả | Hành động chuyển đổi (actions) như mua hàng, khách tiềm năng | Tính chi phí mỗi kết quả, ROAS khi có giá trị |
Chỉ lấy những trường bạn thực sự dùng trong báo cáo. Tài liệu best practices của Meta khuyến nghị thu hẹp phạm vi ngày và tách truy vấn lớn thành truy vấn nhỏ để giảm tải; lấy ít trường cũng giúp Sheets nhẹ và nhanh hơn.

Cách 1: báo cáo định kỳ từ Meta Ads Reporting
- Mở Ads Reporting trong Meta Ads Manager (mục “Analyse and report” hoặc từ nút Export, chọn tạo báo cáo tùy chỉnh).
- Tạo báo cáo tùy chỉnh: chọn khoảng thời gian, cấp độ (chiến dịch/nhóm/quảng cáo), cột và phân tách bạn cần.
- Bật gửi email theo lịch trong cài đặt báo cáo, thêm địa chỉ nhận, áp dụng và lưu. Theo Meta, chỉ người có quyền trên tài khoản quảng cáo mới truy cập được báo cáo; nếu cần chia sẻ cho người không có quyền, hãy xuất file và gửi.
- Nhập vào Google Sheets: mở file đính kèm và dán vào trang “Raw”, hoặc dùng tính năng nhập file của Sheets. Giữ nguyên tên cột để công thức không vỡ.
Ưu điểm là đơn giản và nằm trong hệ sinh thái chính thức của Meta. Nhược điểm: bước nhập vào Sheets vẫn thủ công (trừ khi bạn tự thêm công cụ khác để đọc email), và báo cáo theo lịch không áp dụng cho báo cáo nhiều tài khoản. Cách này phù hợp để bắt đầu hoặc báo cáo tuần/tháng cho vài tài khoản.

Cách 2: add-on và trình kết nối bên thứ ba
Có nhiều công cụ kết nối Meta Ads với Google Sheets hoặc Looker Studio. Họ thường cho bạn chọn tài khoản, trường dữ liệu, khoảng thời gian và lịch làm mới mà không cần viết mã. Trước khi dùng, hãy kiểm tra:
| Câu hỏi kiểm tra | Vì sao quan trọng |
|---|---|
| Công cụ xin những quyền nào trên tài khoản Meta và Google? | Cấp quyền rộng hơn cần thiết làm tăng rủi ro bảo mật |
| Dữ liệu đi qua máy chủ của họ không, lưu bao lâu? | Ảnh hưởng đến cam kết bảo mật với khách hàng của bạn |
| Tần suất làm mới tối thiểu và giới hạn số dòng/tài khoản? | Gói miễn phí thường bị giới hạn |
| Có hỗ trợ trường và phân tách bạn cần (ví dụ chuyển đổi theo sự kiện)? | Một số trường tùy chỉnh có thể thiếu |
| Chi phí thực tế khi có nhiều tài khoản? | Xem bảng giá trên trang chính thức của nhà cung cấp, không dựa vào bài giới thiệu |
| Khi ngừng đăng ký, dữ liệu đã lưu trong Sheets còn không? | Tránh mất báo cáo lịch sử |
Cách này tiết kiệm thời gian dựng ban đầu, nhưng bạn phụ thuộc vào nhà cung cấp. Nếu nhà cung cấp thay đổi chính sách hoặc giá, bạn có thể phải chuyển đổi cách làm.
Cách 3: Apps Script gọi Marketing API từng bước
Đây là cách linh hoạt nhất và hoàn toàn miễn phí về công cụ, nhưng cần có người hiểu cơ bản về JavaScript và bảo trì. Theo tài liệu của Meta, Insights API có thể truy vấn ở bốn cấp: tài khoản quảng cáo, chiến dịch, nhóm quảng cáo và quảng cáo (dạng /{id}/insights), cho phép chọn các trường như clicks, impressions, spend, và mặc định trả về các chỉ số cơ bản trong khoảng 30 ngày gần nhất.
Bước 1: tạo ứng dụng và lấy token hợp lệ
- Tạo ứng dụng trong Meta for Developers và liên kết với Business của bạn. Cấp quyền
ads_readcho nhu cầu chỉ đọc báo cáo. - Tạo access token phù hợp với tài khoản quảng cáo. Cách ổn định cho tự động hóa lâu dài thường là token của system user trong Business Manager; loại token, thời hạn và cách gia hạn thay đổi theo thời gian nên hãy làm theo hướng dẫn mới nhất trong tài liệu Meta.
- Ghi lại ID tài khoản quảng cáo dạng
act_xxxxxxxxxx.
Bước 2: lưu token an toàn trong Apps Script
Mở Google Sheets, chọn Tiện ích mở rộng, Apps Script. Trong Cài đặt dự án, thêm Thuộc tính tập lệnh (Script properties): FB_TOKEN và FB_AD_ACCOUNT. Không dán token vào ô trong bảng tính hay vào mã nguồn.
Bước 3: dán mã mẫu
Đoạn mã dưới đây minh họa luồng cơ bản: gọi Insights ở cấp chiến dịch, theo ngày, 28 ngày gần nhất, xử lý phân trang rồi ghi vào trang “Raw”. Hãy thay API_VERSION bằng phiên bản đang được hỗ trợ trong tài liệu Meta (không đoán), và kiểm thử trên tài khoản nhỏ trước.
const API_VERSION = 'vXX.X'; // thay bằng phiên bản hiện hành theo tài liệu Meta
function importFacebookAds() {
const props = PropertiesService.getScriptProperties();
const token = props.getProperty('FB_TOKEN');
const account = props.getProperty('FB_AD_ACCOUNT'); // dạng act_123456789
const fields = 'date_start,campaign_name,spend,impressions,clicks,ctr,cpc';
let url = 'https://graph.facebook.com/' + API_VERSION + '/' + account +
'/insights?level=campaign&time_increment=1&date_preset=last_28d' +
'&limit=500&fields=' + fields;
const rows = [['Ngay','Chien_dich','Chi_tieu','Hien_thi','Nhap','CTR','CPC']];
while (url) {
const res = UrlFetchApp.fetch(url, {
headers: { Authorization: 'Bearer ' + token },
muteHttpExceptions: true
});
const body = JSON.parse(res.getContentText());
if (res.getResponseCode() !== 200) {
throw new Error('Meta API loi: ' + res.getContentText());
}
(body.data || []).forEach(function (r) {
rows.push([r.date_start, r.campaign_name, Number(r.spend),
Number(r.impressions), Number(r.clicks),
Number(r.ctr), Number(r.cpc)]);
});
url = body.paging && body.paging.next ? body.paging.next : null;
}
const sheet = SpreadsheetApp.getActive().getSheetByName('Raw');
sheet.clearContents();
sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
Lưu ý: mã mẫu chỉ ghi đè toàn bộ trang “Raw” bằng 28 ngày gần nhất để đơn giản. Meta nêu rằng số liệu Insights làm mới mỗi 15 phút và không thay đổi sau 28 ngày báo cáo, nên cửa sổ 28 ngày là điểm hợp lý để làm mới lại số liệu gần đây. Muốn giữ lịch sử dài hơn, hãy lưu dữ liệu cũ sang trang khác trước khi ghi đè hoặc ghi nối theo khóa (ngày + chiến dịch). Nếu header Authorization không hoạt động ở môi trường của bạn, xem hướng dẫn trong tài liệu Meta về cách truyền token.
Bước 4: chạy thử và cấp quyền
Chạy hàm importFacebookAds, đồng ý các quyền Apps Script yêu cầu (gồm quyền gọi dịch vụ bên ngoài, scope script.external_request theo tài liệu của Google). Kiểm tra số dòng và so tổng chi tiêu với Ads Manager trong cùng khoảng ngày và múi giờ.
Bước 5: đặt lịch chạy tự động
Trong Apps Script, vào Triggers, chọn Add Trigger, chọn hàm importFacebookAds, nguồn sự kiện là Time-driven và chọn tần suất (ví dụ mỗi 6 giờ hoặc mỗi ngày lúc sáng). Theo tài liệu Google, trigger theo thời gian hoạt động giống cron; thời điểm chạy có thể bị ngẫu nhiên hóa trong khoảng một giờ, nên đừng đặt báo cáo phụ thuộc vào giờ phút chính xác.
Giới hạn Apps Script cần biết
| Giới hạn (theo trang quota của Google, có thể thay đổi) | Tài khoản cá nhân | Google Workspace |
|---|---|---|
| Thời gian chạy tối đa mỗi lần | 6 phút | 6 phút |
| Tổng thời gian chạy trigger mỗi ngày | 90 phút | 6 giờ |
| Số lần gọi URL Fetch mỗi ngày | 20.000 | 100.000 |
| Số trigger mỗi người dùng trên mỗi script | 20 | 20 |
Với vài tài khoản quảng cáo và dữ liệu theo ngày, các giới hạn này thường đủ. Với nhiều tài khoản hoặc cấp quảng cáo chi tiết, hãy tách thành nhiều lần chạy hoặc chuyển sang giải pháp khác. Với dữ liệu rất lớn, Meta khuyến nghị dùng yêu cầu bất đồng bộ (async job): gửi yêu cầu POST, nhận mã báo cáo, rồi kiểm tra trạng thái cho đến khi hoàn tất.
Thiết kế bảng dữ liệu để báo cáo không vỡ
- Tách trang dữ liệu thô và trang báo cáo: “Raw” chỉ chứa dữ liệu kéo về; “Bao_cao” dùng công thức (SUMIFS, QUERY, Pivot) đọc từ “Raw”. Khi script ghi đè “Raw”, trang báo cáo vẫn nguyên.
- Cố định tên cột và thứ tự: thêm hoặc đổi cột sẽ làm công thức tham chiếu lệch.
- Chuẩn hóa kiểu dữ liệu: API trả chuỗi; dùng
Number()để cộng trừ được. Ngày nên ở định dạng ISO (yyyy-mm-dd). - Ghi chú nguồn và thời điểm cập nhật: một ô ghi “Cập nhật lúc” bằng thời gian chạy script, kèm múi giờ tài khoản quảng cáo.
- Đối chiếu với Ads Manager: tổng chi tiêu theo ngày giữa hai nơi phải khớp; chênh lệch thường do múi giờ, tiền tệ hoặc cửa sổ ghi nhận chuyển đổi (attribution).
- Chỉ số tính từ chỉ số gốc: CTR = nhấp / hiển thị; CPC = chi tiêu / nhấp; CPM = chi tiêu / hiển thị x 1.000. Tính ở trang báo cáo để tổng hợp đúng thay vì lấy trung bình các tỷ lệ.
Về lưu ý ghi nhận chuyển đổi: Meta thông báo từ 10/6/2025 API bỏ qua các tham số use_unified_attribution_setting và action_report_time, tức dữ liệu theo mô hình ghi nhận mặc định của Ads Manager. Nếu số liệu chuyển đổi trong Sheets khác Ads Manager, hãy kiểm tra cài đặt ghi nhận và khoảng thời gian. Khi đã có dữ liệu sạch, bạn có thể dựng bảng điều khiển trong Looker Studio bằng trình kết nối Google Sheets; xem Looker Studio for SEO để hiểu cách tổ chức dashboard.
Bảo mật token và quyền dữ liệu
- Lưu token trong Script properties, không ghi trong ô Sheets, không gửi qua chat, không đưa vào kho mã công khai.
- Chỉ chia sẻ file Sheets cho người cần xem; dữ liệu quảng cáo có thể chứa chi tiêu và chiến lược của khách hàng.
- Dùng quyền tối thiểu (
ads_readcho báo cáo chỉ đọc). - Khi nhân sự rời đi, thu hồi quyền truy cập và tạo lại token nếu cần.
- Với khách hàng agency, hãy có thỏa thuận về quyền truy cập và lưu trữ dữ liệu; kiểm tra điều khoản nền tảng của Meta và quy định bảo vệ dữ liệu hiện hành.
Bảng xử lý lỗi thường gặp
| Triệu chứng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Lỗi quyền (permission) hoặc token hết hạn | Token hết hạn, thiếu quyền, tài khoản chưa được gán cho người dùng hệ thống | Tạo lại token theo hướng dẫn hiện hành, kiểm tra quyền ads_read và việc gán tài khoản quảng cáo |
| Phản hồi mã lỗi liên quan giới hạn tốc độ (rate limit) | Gọi quá nhiều, truy vấn nặng, ứng dụng ở mức Limited Access | Giảm tần suất, thu hẹp trường và khoảng ngày, dùng async job, theo dõi header throttle của Meta |
| Script báo “Exceeded maximum execution time” | Dữ liệu quá lớn trong một lần chạy (giới hạn 6 phút) | Chia nhỏ theo tài khoản/khoảng ngày, hoặc dùng async |
| Tổng chi tiêu khác Ads Manager | Khác múi giờ, tiền tệ, bộ lọc, hoặc đang xem khoảng ngày khác | Đối chiếu từng ngày, kiểm tra tiền tệ và múi giờ tài khoản |
| Số chuyển đổi khác Ads Manager | Cửa sổ ghi nhận, chuyển đổi cập nhật muộn | Làm mới cửa sổ 28 ngày gần nhất, ghi rõ định nghĩa ghi nhận |
| Thiếu dòng so với kỳ vọng | Phân trang chưa xử lý hoặc chiến dịch không có lượt hiển thị trong ngày | Xử lý trường paging.next; chấp nhận không có dòng cho ngày không chạy |
| Công thức báo cáo hiện #REF! hoặc lệch cột | Đổi thứ tự hoặc số cột ở trang Raw | Cố định cấu trúc cột, dùng tên trường nhất quán |
| Trigger không chạy đúng giờ | Trigger theo thời gian có thể lệch trong khoảng một giờ, hoặc hết quota ngày | Chấp nhận độ lệch, giảm tần suất, kiểm tra trang thực thi (Executions) |
Khi nào nên và không nên tự làm
| Nên tự làm (Apps Script / báo cáo định kỳ) khi | Nên chọn công cụ có sẵn hoặc nhờ chuyên gia khi |
|---|---|
| Có 1-5 tài khoản quảng cáo, nhu cầu báo cáo ổn định | Quản lý hàng chục tài khoản với nhiều khách hàng |
| Có người bảo trì và hiểu cơ bản về dữ liệu | Không ai theo dõi khi token hết hạn hoặc API đổi |
| Cần tùy biến cột, công thức riêng | Cần gom nhiều nguồn (Meta, Google Ads, TikTok) vào một bảng điều khiển ổn định |
| Ngân sách công cụ hạn chế | Yêu cầu báo cáo tuân thủ nghiêm ngặt cho khách doanh nghiệp |
Một báo cáo tự động chỉ có giá trị khi người nhận hiểu và hành động dựa trên nó. Hãy kết nối với kỷ luật tối ưu hằng tuần; bài chạy quảng cáo Facebook và dịch vụ Facebook của Vidco mô tả cách tiếp cận vận hành quảng cáo.

Câu hỏi thường gặp
Làm sao lấy dữ liệu Facebook Ads tự động vào Google Sheets?
Có ba cách: đặt lịch gửi báo cáo từ Meta Ads Reporting rồi nhập vào Sheets, dùng add-on hoặc trình kết nối của bên thứ ba, hoặc tự viết Google Apps Script gọi Insights API của Meta và đặt trigger theo thời gian. Chọn theo số tài khoản, tần suất cập nhật và người bảo trì.
Có cách nào hoàn toàn miễn phí không?
Có. Báo cáo định kỳ của Meta miễn phí, và Apps Script cũng miễn phí trong giới hạn quota. Chi phí thực tế nằm ở thời gian xây dựng và bảo trì. Với add-on bên thứ ba, hãy xem bảng giá chính thức vì thường có giới hạn ở gói miễn phí.
Cần quyền gì để đọc dữ liệu quảng cáo qua API?
Theo tài liệu Meta, quyền ads_read dùng cho báo cáo và phân tích, kèm một ứng dụng đã được cấu hình. Ứng dụng mặc định ở mức Limited Access, giới hạn tốc độ nặng và dành cho phát triển; mức Full Access cần App Review. Hãy đọc tài liệu hiện hành để biết điều kiện chi tiết.
Dữ liệu trong Sheets được cập nhật bao lâu một lần?
Tùy trigger bạn đặt hoặc lịch của công cụ. Theo Meta, Insights làm mới mỗi 15 phút, nhưng với báo cáo hằng ngày thì làm mới vài giờ một lần hoặc một lần mỗi ngày thường là đủ. Trigger theo thời gian của Apps Script có thể lệch trong khoảng một giờ.
Vì sao số liệu trong Sheets khác Ads Manager?
Nguyên nhân hay gặp là khác múi giờ, tiền tệ, bộ lọc, cửa sổ ghi nhận chuyển đổi hoặc dữ liệu gần đây chưa ổn định. Đối chiếu từng ngày và từng chiến dịch, đồng thời làm mới lại cửa sổ 28 ngày gần nhất vì Meta nêu số liệu không còn thay đổi sau 28 ngày báo cáo.
Token hết hạn thì làm sao?
Tạo lại hoặc gia hạn token theo hướng dẫn mới nhất của Meta, và cập nhật vào Script properties. Hãy thiết lập cảnh báo, ví dụ gửi email cho bạn khi script gặp lỗi, để không bị gián đoạn báo cáo mà không biết.
Có nên dùng Sheets làm nơi lưu dữ liệu lâu dài không?
Phù hợp với quy mô nhỏ và vừa. Sheets có giới hạn kích thước và tốc độ khi dữ liệu rất lớn; khi đó cân nhắc cơ sở dữ liệu hoặc kho dữ liệu. Với nhu cầu hiển thị, hãy dùng Sheets làm nguồn rồi trực quan hóa trong Looker Studio.
Lấy dữ liệu quảng cáo của khách hàng có cần xin phép không?
Có. Chỉ truy cập tài khoản quảng cáo của bạn hoặc tài khoản khách hàng đã ủy quyền, tuân thủ điều khoản nền tảng Meta và quy định bảo vệ dữ liệu hiện hành. Nên ghi rõ phạm vi quyền truy cập và nơi lưu trữ dữ liệu trong thỏa thuận làm việc.
Kết luận và bước tiếp theo
Nếu mới bắt đầu, hãy thử báo cáo định kỳ của Meta cho 1-2 tài khoản để xác định cột nào bạn thật sự dùng. Khi nhu cầu ổn định và bạn có người bảo trì, chuyển sang Apps Script với cửa sổ làm mới 28 ngày, tách trang Raw và trang báo cáo, đối chiếu với Ads Manager hằng tuần. Nếu quản lý nhiều tài khoản và nhiều nền tảng, cân nhắc công cụ chuyên dụng sau khi kiểm tra kỹ quyền truy cập, chi phí và chính sách dữ liệu.
Vidco Group có thể hỗ trợ: nếu bạn cần thiết lập đo lường, báo cáo quảng cáo hoặc vận hành chiến dịch Facebook, hãy xem dịch vụ Facebook hoặc dịch vụ marketing online của Vidco Group; phạm vi và chi phí được trao đổi theo nhu cầu thực tế.

Nguồn tham khảo
- Meta for Developers: Ads Insights API
- Meta for Developers: Insights API best practices
- Meta for Developers: Marketing API authorization
- Meta Business Help Center: Run a recurring report in Ads Reporting
- Google Apps Script: Installable triggers
- Google Apps Script: Quotas and limitations
Cập nhật: tháng 10/2026