Quay lại blog

Báo cáo Chiến dịch TikTok với Các chỉ số Bài đăng Công khai

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

02-Sep-2026

TL;DR:

  • Báo cáo chiến dịch TikTok bắt đầu với danh sách do người dùng xác định. Liệt kê các tài khoản chiến dịch và ID bài đăng trước khi khớp bất kỳ bản ghi nào đã thu thập.
  • Một bài đăng trong chiến dịch phải tồn tại trong mẫu đã thu thập. Giữ các mục danh sách chưa khớp hiển thị thay vì chuyển đổi các bài đăng bị thiếu thành hiệu suất bằng không.
  • Ảnh chụp có dấu thời gian chuyển đổi các bộ đếm tích lũy thành delta. Trừ giá trị được quan sát trước đó của một bài đăng từ giá trị được quan sát sau đó chỉ khi cả hai bản ghi đều chia sẻ cùng một ID bài đăng và chỉ số.
  • Tương tác công khai không phải là phân bổ. Số lần chơi, thích, bình luận, chia sẻ, thu thập và đăng lại không chứng minh được phạm vi độc đáo, doanh số hoặc ROI.
  • Phân phối cho thấy hình dạng chiến dịch. Báo cáo trung vị, phạm vi và tỷ lệ bài đăng hàng đầu cùng với tổng số.
  • Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm tín dụng miễn phí; tạo tài khoản trong Bảng điều khiển Scrapeless.

Giới thiệu: thành viên chiến dịch phải rõ ràng

Các chỉ số bài đăng công khai trả lời một câu hỏi hẹp: các bộ đếm nào đã được hiển thị cho một bài đăng đã biết tại một thời điểm được ghi lại? Chúng không xác định ai đã xem bài đăng, ai đã mua sản phẩm, hoặc tương tác nào đã gây ra một chuyển đổi.

Hướng dẫn này xây dựng báo cáo chiến dịch TikTok xung quanh ranh giới đó. Một người dùng cung cấp các tài khoản tham gia và ID bài đăng, pipeline khớp các ID đó với các mẫu bài đăng công khai đã thu thập, và các ảnh chụp lặp lại tạo ra các delta chỉ số. Báo cáo cuối cùng phân tách các bài đăng đã khớp, các mục danh sách chưa khớp, các giá trị tích lũy và những thay đổi theo khoảng thời gian.

Đối với bước xác định tài khoản mà precedes việc thu thập bài đăng, xem hướng dẫn trình thu thập hồ sơ TikTok.

Pipeline tổng quan

Một báo cáo chiến dịch bài đăng công khai có sáu giai đoạn:

  1. Định nghĩa danh sách chiến dịch và các ranh giới báo cáo.
  2. Giải quyết mỗi tài khoản công khai được liệt kê thành sec_uid.
  3. Thu thập một mẫu bài đăng có giới hạn cho mỗi tài khoản.
  4. Khớp các mục đã thu thập với các ID bài đăng chiến dịch đã cung cấp.
  5. Lưu trữ các ảnh chụp chỉ số có dấu thời gian và tính toán các delta có thể so sánh.
  6. Tóm tắt phạm vi đã khớp, phân phối và các bài đăng đáng chú ý.

Danh sách xác định sự tham gia phân bổ cho báo cáo này. Trình thu thập không phát hiện ra bài đăng nào thuộc về chiến dịch, và chỉ một đề cập hoặc hashtag không nên thêm một bài đăng trừ khi các quy tắc báo cáo nói như vậy.

Các yêu cầu

  • Một tài khoản Scrapeless và mã thông báo API từ Bảng điều khiển Scrapeless
  • Một danh sách chiến dịch chứa tên người dùng tài khoản và ID bài đăng chính xác
  • Một chính sách thu thập cố định và ít nhất hai quan sát có dấu thời gian cho các delta
  • Một mã thông báo trực tiếp được xuất ra dưới dạng SCRAPELESS_API_KEY cho mã bên dưới

Ví dụ này có một khoảng cách yêu cầu vì nó phụ thuộc vào thông tin đăng nhập API của người đọc, danh sách chiến dịch và các bài đăng công khai đang hoạt động. Không có đầu ra mẫu nào được trình bày như một kết quả chiến dịch thực tế.

Giai đoạn 1: Xây dựng danh sách chiến dịch

Danh sách là bảng điều khiển cho báo cáo. Mỗi hàng nên chứa một ID chiến dịch, tên người dùng công khai, ID bài đăng, URL bài đăng dự kiến khi được biết, ngày xuất bản dự kiến nếu được nhóm chiến dịch cung cấp, và một nhãn dễ đọc cho con người.

campaign_id username post_id asset_label
autumn_launch creator_a 1234567890123456789 Giới thiệu sản phẩm
autumn_launch creator_b 2345678901234567890 Hướng dẫn

Giữ ID bài đăng dưới dạng chuỗi. Các định danh lớn có thể mất độ chính xác khi các công cụ bảng tính hoặc phân tích ép chúng thành số.

Danh sách cũng nên phân biệt giữa các bài đăng bắt buộc và tùy chọn. Một bài đăng bắt buộc không xuất hiện trong mẫu đã thu thập cần một trạng thái unmatched và một ghi chú xem xét; các chỉ số của nó chưa được biết, không phải bằng không.

Giai đoạn 2: Thu thập bài đăng công khai cho các tài khoản được liệt kê

Đường thu thập sử dụng scraper.tiktok.user.detail để giải quyết unique_id thành sec_uid, sau đó là scraper.tiktok.user.work để yêu cầu các bài đăng công khai. Yêu cầu bài đăng hỗ trợ cursorcount, và phản hồi của nó chứa một mảng items.

Sử dụng cùng số lượng yêu cầu cho các tài khoản có thể so sánh, nhưng báo cáo số lượng trả lại cho mỗi tài khoản. Tài liệu có sẵn xác nhận đầu vào con trỏ mà không thiết lập một vòng lặp lịch sử hoàn chỉnh toàn cầu. Nếu một bài đăng trong chiến dịch nằm ngoài mẫu đã thu thập, hãy đánh dấu nó là chưa khớp và mở rộng thu thập chỉ thông qua một quy tắc tiếp tục được xác minh trong phản hồi và tài liệu hiện tại.

Mỗi lần chạy thu thập cần có dấu thời gian UTC riêng của nó. Lưu trữ phản hồi của diễn viên thô dưới lần chạy đó để các chỉ số cấp bài đăng có thể được tái cấu trúc nếu logic báo cáo thay đổi.

Bắt đầu thu thập với Scrapeless

Nâng cao quy trình thu thập và tự động hóa web của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phíkhông yêu cầu thẻ tín dụng.
Nhận tín dụng miễn phí của bạn ngay bây giờ trong Bảng điều khiển Scrapeless.

Giai đoạn 3: Khớp Bài Đăng Mà Không Ẩn Khoảng Trống

Khớp theo chuỗi ID bài đăng chính xác bất cứ khi nào có thể. Các URL có thể giúp người đánh giá, nhưng việc phân tích URL không nên thay thế một định danh ổn định khi cả hai đều có sẵn.

Bảng khớp nên bảo toàn mọi hàng trong danh sách:

trạng thái ý nghĩa xử lý báo cáo
matched ID bài đăng chính xác xuất hiện trong các mục đã thu thập Lưu một ảnh chụp thời gian
unmatched ID bài đăng có trong danh sách nhưng không có trong mẫu Hiển thị là thiếu sót trong phạm vi, không phải bằng không
unexpected Một bài đăng đã thu thập không có trong danh sách chiến dịch Giữ bên ngoài tổng chiến dịch
duplicate ID bài đăng giống nhau xuất hiện nhiều hơn một lần trong đầu vào hoặc lưu trữ Giải quyết trước khi tổng hợp

Bước hòa giải này là dấu vết kiểm toán giữa các hoạt động chiến dịch và thu thập dữ liệu công khai. Nó ngăn chặn một bảng điều khiển không âm thầm loại bỏ một bài đăng cần thiết hoặc thêm một bài không liên quan vì đã sử dụng một hashtag tương tự.

Giai đoạn 4: Lưu Ảnh Chụp Thời Gian Đo Lường

Một hàng ảnh chụp nên bao gồm ID chiến dịch, ID bài đăng, tài khoản, URL bài đăng, thời gian thu thập, thời gian tạo, và mỗi bộ đếm công khai có mặt trong phản hồi. Lưu các trường thiếu dưới dạng null thay vì bằng không.

SQLite hoạt động tốt cho một lịch sử cục bộ gọn gàng vì một khóa hợp nhất có thể ngăn chặn việc quan sát trùng lặp. Tài liệu SQLite CREATE TABLE documentation mô tả các ràng buộc khóa chính và bảng có thể thực thi một hàng cho mỗi bài đăng và thời gian thu thập.

sql Copy
CREATE TABLE IF NOT EXISTS campaign_post_snapshots (
    campaign_id TEXT NOT NULL,
    post_id TEXT NOT NULL,
    collected_at TEXT NOT NULL,
    account TEXT NOT NULL,
    post_url TEXT,
    play_count INTEGER,
    like_count INTEGER,
    comment_count INTEGER,
    share_count INTEGER,
    collect_count INTEGER,
    repost_count INTEGER,
    PRIMARY KEY (campaign_id, post_id, collected_at)
);

Sơ đồ cục bộ này không có yêu cầu bên ngoài và có thể được thử nghiệm trước khi một thông tin xác thực API có sẵn. Mã thu thập bên dưới tạo cùng một bảng và chèn các bản ghi đã khớp.

Giai đoạn 5: Tính Toán Delta và Phân Phối Hiệu Suất

Một delta đo lường là giá trị quan sát sau trừ đi giá trị quan sát trước đó cho cùng một bài đăng và trường. Tính toán chỉ khi cả hai giá trị đều có mặt. Nếu một sự điều chỉnh nền tảng hoặc đặt lại trường tạo ra một kết quả âm, giữ lại nó để xem xét thay vì viết lại thành không.

Sử dụng một cặp thời gian ảnh chụp chung khi so sánh các bài đăng. Một bài đăng được quan sát trong 72 giờ không nên được xếp hạng trực tiếp so với một bài được quan sát trong 6 giờ mà không có nhãn tuổi hoặc khoảng thời gian rõ ràng.

Tóm tắt chiến dịch được hưởng lợi từ vài góc nhìn:

  • Bài đăng đã khớp chia cho các bài đăng trong danh sách
  • Tổng số liệu tích lũy mới nhất
  • Delta từng bài đăng qua một khoảng thời gian ảnh chụp chung
  • Trung vị và khoảng cho mỗi số liệu
  • Phần bài đăng hàng đầu của tổng số lần chơi hoặc tương tác đã quan sát
  • Số lượng số liệu null và các mục trong danh sách không khớp

Tài liệu module statistics của Python định nghĩa các tính toán trung vị. Một góc nhìn phân phối giúp thể hiện liệu hiệu suất có rộng rãi hay tập trung, nhưng nó vẫn là một mô tả về các bộ đếm công khai.

Quản lý Quảng cáo TikTok cung cấp một môi trường bên thứ nhất riêng biệt cho báo cáo chiến dịch trả phí. Hướng dẫn hướng dẫn hiệu suất chiến dịch không nên được hòa trộn với quy trình bài đăng công khai này: các nguồn dữ liệu, quyền truy cập, và các số liệu có sẵn khác nhau.

Giai đoạn 6: Lắp Ráp Pipeline Báo Cáo Trong Python

Kịch bản sau đây đọc một tệp CSV danh sách, thu thập một mẫu ban đầu có giới hạn cho mỗi tài khoản được liệt kê, hòa giải các ID bài đăng chính xác, chèn các ảnh chụp đã khớp vào SQLite, và viết một tệp phạm vi để xem xét.

Lưu ý: Mã bên dưới yêu cầu một mã thông báo API Scrapeless trực tiếp trong SCRAPELESS_API_KEY, một campaign-roster.csv do người đọc cung cấp, và các bài đăng chiến dịch công khai xuất hiện trong các mẫu đã thu thập.

python Copy
import csv
import json
import os
import sqlite3
from datetime import datetime, timezone
from urllib.request import Request, urlopen

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
TOKEN = os.environ["SCRAPELESS_API_KEY"]
REQUESTED_COUNT = 35


def run_actor(actor, actor_input):
    data = json.dumps({"actor": actor, "input": actor_input}).encode()
    request = Request(
        ENDPOINT,
        data=data,
        headers={"x-api-token": TOKEN, "content-type": "application/json"},
        method="POST",
    )
    with urlopen(request, timeout=60) as response:
        return json.load(response)


with open("campaign-roster.csv", newline="", encoding="utf-8") as roster_file:
    roster = list(csv.DictReader(roster_file))

for row in roster:
    row["username"] = row["username"].lstrip("@")
    row["post_id"] = str(row["post_id"])

collected_at = datetime.now(timezone.utc).isoformat()
items_by_account = {}

for username in sorted({row["username"] for row in roster}):
    profile = run_actor("scraper.tiktok.user.detail", {"unique_id": username})
    response = run_actor(
        "scraper.tiktok.user.work",
        {"sec_uid": profile["sec_uid"], "cursor": "0", "count": REQUESTED_COUNT},
    )
    with open(f"{username}-{collected_at[:10]}-raw.json", "w", encoding="utf-8") as raw_file:
        json.dump(response, raw_file, ensure_ascii=False, indent=2)
    items_by_account[username] = {
        str(item.get("id") or item.get("post_id") or ""): item
        for item in response.get("items") or []
    }

connection = sqlite3.connect("campaign-reporting.db")
connection.execute("""
CREATE TABLE IF NOT EXISTS campaign_post_snapshots (
    campaign_id TEXT NOT NULL,
    post_id TEXT NOT NULL,
    collected_at TEXT NOT NULL,
    account TEXT NOT NULL,
    post_url TEXT,
    play_count INTEGER,
    like_count INTEGER,
    comment_count INTEGER,
    share_count INTEGER,
    collect_count INTEGER,
    repost_count INTEGER,
    PRIMARY KEY (campaign_id, post_id, collected_at)
)
""")

coverage = []
for row in roster:
    item = items_by_account.get(row["username"], {}).get(row["post_id"])
    status = "matched" if item else "unmatched"
    coverage.append({**row, "status": status, "collected_at": collected_at})
    if not item:
        continue
    connection.execute(
        """INSERT OR REPLACE INTO campaign_post_snapshots VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
        (
            row["campaign_id"], row["post_id"], collected_at, row["username"],
            item.get("url") or item.get("post_url"), item.get("play_count"),
            item.get("like_count"), item.get("comment_count"), item.get("share_count"),
            item.get("collect_count"), item.get("repost_count"),
        ),
    )

connection.commit()
connection.close()

with open("campaign-coverage.csv", "w", newline="", encoding="utf-8") as output:
    writer = csv.DictWriter(output, fieldnames=coverage[0].keys())
    writer.writeheader()
    writer.writerows(coverage)

Chạy cùng một thu thập tại thời gian quan sát đã lên kế hoạch tiếp theo, sau đó ghép các hàng ảnh chụp liên tiếp theo ID chiến dịch và ID bài đăng. Tính toán mỗi delta chỉ nơi cả hai giá trị số liệu đều không null, và giữ lại hai dấu thời gian thu thập trong kết quả.

Mẫu Báo Cáo Chiến Dịch

Báo cáo nên tách biệt phạm vi khỏi hiệu suất:

Phần Trường yêu cầu Ranh giới diễn giải
Phạm vi danh sách Các bài đăng yêu cầu, bài đăng đã khớp, bài đăng không khớp Đo lường phạm vi thu thập, không phải thành công của chiến dịch
Thời gian ảnh chụp Thời gian thu thập đầu tiên và mới nhất, khoảng thời gian Làm cho các khoảng thời gian delta có thể so sánh
Các số liệu mới nhất Các bộ đếm công khai theo bài đăng Quan sát tích lũy, không phải người duy nhất
Thay đổi số liệu Delta từng bài đăng cho các khoảng thời gian thông thường Thay đổi giữa hai ảnh chụp
Phân phối Trung vị, khoảng, phần bài đăng hàng đầu Thể hiện sự tập trung trong các bài đăng đã khớp
Xếp hàng xem xét Các trường thiếu, delta âm, ID không khớp Cần điều tra con người
Nếu chiến dịch bao gồm phương tiện trả tiền, doanh số liên kết, liên kết được theo dõi hoặc sự kiện chuyển đổi, hãy kết hợp các tập dữ liệu bên thứ nhất đó trong một lớp được ghi nhãn rõ ràng. Đừng thay thế số lượng tương tác công khai bằng những biện pháp đó.

Xử lý Dữ liệu Chiến dịch một cách Có trách nhiệm

Báo cáo chiến dịch có thể kết nối nội dung của người sáng tạo công khai với các hợp đồng, nhãn nội bộ hoặc quyết định thương mại. Hạn chế truy cập vào danh sách và chú thích nội bộ, giảm thiểu dữ liệu cá nhân được giữ lại và xác định ai có thể sửa chữa lỗi ghi nhận.

Đối với các chương trình người ảnh hưởng, hướng dẫn công bố của FTC là một tài liệu tham khảo chính hữu ích cho trách nhiệm công bố ở Hoa Kỳ. Nó không thay thế lời khuyên pháp lý hoặc các quy định áp dụng ở khu vực tài phán khác.

Scrapeless cung cấp hồ sơ và bài đăng cho các diễn viên thông qua Scraping API. Xem lại trang giá hiện tại trước khi chọn số lượng tài khoản và tần suất chụp ảnh.

Kết luận: báo cáo những gì mà các giây phút chứng minh

Báo cáo chiến dịch TikTok cần một danh sách rõ ràng, khớp chính xác ID bài đăng, quan sát có dấu thời gian và các khoảng trống bao phủ rõ ràng. Những kiểm soát đó biến các bộ đếm công khai thành một hồ sơ có thể kiểm toán của các bài đăng khớp và những thay đổi chỉ số trong khi giữ cho phạm vi, doanh số và các tuyên bố ghi nhận trong nguồn dữ liệu thích hợp của chúng.

Sẵn sàng để Xây dựng Báo cáo Chỉ số Chiến dịch?

Tham gia Scrapeless Discord hoặc cộng đồng Telegram để so sánh các mẫu mô hình dữ liệu. Tạo một tài khoản trong Scrapeless Dashboard khi danh sách chiến dịch đã sẵn sàng.

Câu hỏi thường gặp

Q: Báo cáo chiến dịch TikTok với các chỉ số bài đăng công khai là gì?

Báo cáo chiến dịch TikTok với các chỉ số bài đăng công khai theo dõi các bộ đếm có thể thấy cho một tập hợp bài đăng chiến dịch do người dùng định nghĩa vào những thời điểm đã ghi lại. Nó đo lường những quan sát đó và những thay đổi của chúng, không phải phạm vi độc đáo, doanh số hoặc ghi nhận nguyên nhân.

Q: Quy trình làm việc quyết định bài đăng nào thuộc về một chiến dịch như thế nào?

Danh sách do người dùng cung cấp quyết định tư cách thành viên trong chiến dịch. Pipeline khớp chính xác ID bài đăng và giữ các bài đăng bị thiếu hoặc không mong đợi bên ngoài tổng hiệu suất cho đến khi được xem xét lại.

Q: Sự khác biệt giữa một bức tranh chỉ số và một delta là gì?

Một bức tranh là một bộ đếm công khai tích lũy được quan sát tại một thời điểm. Một delta là sự khác biệt giữa hai bức tranh hợp lệ cho cùng một bài đăng, chỉ số, và khoảng thời gian đã được xác định.

Q: Có thể báo cáo số lần phát là phạm vi chiến dịch không?

Số lần phát không nên được báo cáo là phạm vi chiến dịch độc đáo. Nó là một bộ đếm bài đăng công khai và không xác lập được bao nhiêu người khác nhau đã xem nội dung.

Q: Những bài đăng chiến dịch không khớp có nên nhận chỉ số bằng không không?

Những bài đăng chiến dịch không khớp nên nhận một trạng thái unmatched và các chỉ số null. Không có gì sẽ khẳng định một giá trị quan sát mà bộ sưu tầm không tạo ra.

Q: Quy trình làm việc có thay thế TikTok Ads Manager không?

Quy trình bài đăng công khai không thay thế TikTok Ads Manager hoặc các hệ thống chiến dịch bên thứ nhất khác. Nó tạo ra một tập dữ liệu riêng biệt từ các trường bài đăng công khai được hỗ trợ.

Q: Việc thu thập dữ liệu chiến dịch công khai có hợp pháp không?

Tính hợp pháp phụ thuộc vào khu vực tài phán, mục đích, dữ liệu, phương pháp truy cập, hợp đồng và các điều khoản áp dụng. Hạn chế việc thu thập đến các trường công khai cần thiết, bảo vệ dữ liệu danh sách nội bộ và nhận lời khuyên pháp lý cho chương trình cụ thể.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục