Quản lý Ads Manager từ CLI

Adapty CLI có thể quản lý tài khoản Ads Manager của bạn từ terminal, thông qua chủ đề adapty asa. CLI hỗ trợ quản lý chiến dịch, nhóm quảng cáo, từ khóa, quảng cáo, trang sản phẩm, quy tắc tự động, chỉ số và nghiên cứu đối thủ cạnh tranh.

Dùng nó cho những việc mà trình duyệt xử lý chậm: cấp cho AI agent quyền truy cập trực tiếp vào hiệu suất quảng cáo, thêm vài trăm từ khóa từ một file, và chạy cùng một thiết lập trên nhiều chiến dịch. Với mọi thứ còn lại, dashboard vẫn nhanh hơn.

Warning

CLI không thể xóa bất cứ thứ gì. Các chiến dịch, quảng cáo và quy tắc tự động có thể được tạo, cập nhật và tạm dừng từ terminal, nhưng việc xóa chúng chỉ có thể thực hiện trên dashboard.

Trước khi bắt đầu

Các lệnh Ads Manager sử dụng cùng cài đặt và đăng nhập với phần còn lại của CLI. Nếu bạn chưa thiết lập, hãy làm theo bước 1 và 2 của hướng dẫn quickstart.

Điều kiện tiên quyết

Hai điều kiện sau áp dụng cho mọi lệnh adapty asa:

  • Tài khoản Apple Ads đã kết nối: Kết nối bằng adapty asa connect, hoặc trên dashboard như mô tả trong Bắt đầu với Adapty Ads Manager.
  • Gói đăng ký Ads Manager đang hoạt động: Nếu không có, mọi lệnh sẽ thất bại với lỗi 402 ads_manager_subscription_required.

Một lệnh duy nhất báo cáo cả hai:

adapty asa whoami

Điểm khác biệt so với phần còn lại của CLI

  • Không có flag --app: Phạm vi là công ty mà token của bạn thuộc về. --app chỉ tồn tại trên một số lệnh list với vai trò bộ lọc.
  • Thao tác ghi tác động trực tiếp đến Apple: Mỗi lệnh thay đổi tài khoản của bạn sẽ in ra nội dung request và yêu cầu xác nhận trước khi gửi. Không có bước staging.
  • Đọc thì rẻ, ghi thì không: Chạy lệnh list--dry-run thoải mái. Còn lại hãy xem như không thể hoàn tác.

Để bỏ qua lời nhắc xác nhận trong một script, hãy truyền --yes. Khi dùng --json hoặc trong một pipe, lệnh ghi sẽ từ chối thay vì chờ câu trả lời không bao giờ đến, vì vậy --yes là bắt buộc trong trường hợp đó.

Tìm các ID bạn cần

Mỗi lệnh đều yêu cầu UUID, và mọi UUID đều lấy từ lệnh list. Làm theo thứ tự phân cấp sau:

adapty asa orgs list
adapty asa campaigns list --campaign-group <campaign-group-id>
adapty asa ad-groups list --campaign <campaign-id>

Hãy giới hạn phạm vi mỗi lần đọc bằng bộ lọc. Bộ lọc thu hẹp truy vấn thay vì chỉ lọc kết quả hiển thị, nên đọc có phạm vi sẽ nhẹ hơn nhiều so với đọc không có phạm vi vì phải duyệt qua toàn bộ tài khoản. adapty asa keywords list không có --ad-group là lệnh đọc rộng nhất trong phần này.

Các danh sách này chỉ trả về metadata. Số liệu hiệu suất đến từ asa metrics.

Thêm từ khóa hàng loạt

Thêm từng từ khóa một là lý do chính để rời khỏi dashboard. Đặt mỗi từ khóa trên một dòng trong tệp văn bản:

adapty asa keywords add --ad-group <ad-group-id> --from-file keywords.txt --bid 1.20 --match-type EXACT

Từ khóa được áp dụng theo từng lô tối đa 100 từ mỗi lần gọi. Hãy chia danh sách lớn hơn thành nhiều lần gọi.

Có hai loại lỗi có thể xảy ra, và chúng hoạt động khác nhau. Một ID không hợp lệ sẽ làm hỏng toàn bộ batch trước khi Apple được gọi, nên không có gì được áp dụng. Apple cũng có thể từ chối từng keyword riêng lẻ — các keyword còn lại vẫn được thêm vào, và mỗi lần từ chối được báo cáo kèm theo lý do. Hãy kiểm tra dòng tóm tắt thay vì chỉ dựa vào mã thoát.

Bắt đầu với một vài keyword và kiểm tra kết quả trước khi gửi cả file.

Tạo chiến dịch Max Conversions

Một chiến dịch đặt giá thầu với MAX_CONVERSIONS chỉ hoạt động khi có một nhóm quảng cáo tự động, vì vậy hãy tạo cả hai cùng lúc:

adapty asa campaigns create --org <campaign-group-id> --name "Max Conv" --adam-id 123456 --country US --daily-budget 50 --bidding-strategy MAX_CONVERSIONS
adapty asa ad-groups create --campaign <campaign-id> --name "Automated Max Conv" --automated

Cho đến khi nhóm quảng cáo đó tồn tại, chiến dịch báo cáo serving_status: NOT_RUNNING với AUTOMATED_KEYWORDS_REQUIRED_AD_GROUP_MISSING trong serving_state_reasons, và campaigns create sẽ in ra cả lý do lẫn lệnh để giải quyết vấn đề đó.

--automated là thứ đáp ứng yêu cầu — một nhóm quảng cáo thông thường với --automated-keywords thì không đủ. Apple tự lên lịch và chạy nhóm quảng cáo tự động, vì vậy nó không cần --start-time, --default-bid là tùy chọn, và nó luôn ở trạng thái bật: để dừng chi tiêu, hãy tạm dừng chiến dịch.

Trên chiến dịch, hãy giữ --target-cpa thấp hơn --daily-budget.

Đặt tùy chọn lập hóa đơn cho hạn mức tín dụng

Apple yêu cầu Invoicing Options trên mọi chiến dịch trong một tổ chức thanh toán theo hạn mức tín dụng. adapty asa orgs list báo cáo payment_model của từng tổ chức — LOC có nghĩa là năm cờ --invoice-* sẽ được áp dụng:

adapty asa campaigns create --org <campaign-group-id> --name "LOC push" --adam-id 123456 --country US --daily-budget 50 --invoice-advertiser "Acme Inc" --invoice-order-number PO-42 --invoice-contact-name "Jane Doe" --invoice-contact-email jane@acme.com --invoice-billing-email billing@acme.com

Pass all five in one call — a partial set is rejected before the request reaches Apple. Without them, the campaign is created but reports serving_status: NOT_RUNNING with MISSING_BO_OR_INVOICING_FIELDS.

Truyền đủ cả năm tham số trong một lần gọi — nếu thiếu bất kỳ tham số nào, yêu cầu sẽ bị từ chối trước khi đến Apple. Nếu không có chúng, campaign được tạo nhưng sẽ báo serving_status: NOT_RUNNING với lỗi MISSING_BO_OR_INVOICING_FIELDS.

Năm flag tương tự trên lệnh adapty asa campaigns update sẽ đặt Invoicing Options cho một campaign đã tồn tại. Chúng thay thế toàn bộ tập hợp đã lưu, vì vậy hãy truyền đủ cả năm kể cả khi chỉ muốn thay đổi một trong số đó.

Tạo cấu trúc campaign trong một thao tác

campaigns bulk-create thay thế cho script lặp qua campaigns createad-groups create. Lệnh này gửi toàn bộ cấu trúc campaign — bao gồm các campaign cùng ad group, từ khóa, từ khóa phủ định và quảng cáo — trong một thao tác duy nhất:

adapty asa campaigns bulk-create --file structure.json

Đầu vào là mô tả JSON của cấu trúc — xem định dạng cấu trúc để biết các trường. JSON là lựa chọn tự nhiên cho AI agent: nó tạo ra cấu trúc và truyền vào:

cat structure.json | adapty asa campaigns bulk-create --file -

Một mẫu bulk của Apple Ads gốc cũng được chấp nhận làm đầu vào — server sẽ chuyển đổi Campaign_And_Adgroup_Template.xlsx hoặc keywords .csv thành một cấu trúc. --org-id nhận giá trị số org_id từ adapty asa orgs list. Để xem trước kết quả chuyển đổi trước khi tạo bất cứ thứ gì, thêm --preview:

adapty asa campaigns bulk-create --from-file Campaign_And_Adgroup_Template.xlsx --org-id 1234567 --preview

Các vấn đề chuyển đổi sẽ được báo cáo kèm theo sheet, hàng và cột tương ứng. Khi cấu trúc hiển thị trông đúng, hãy bỏ --preview để gửi.

Kết quả --preview cũng là cách nhanh nhất để lấy file cấu trúc ban đầu: lưu lại, chỉnh sửa và gửi bằng --file — tương tự như cách automations get cung cấp template cho rule.

Toàn bộ cấu trúc được xác thực trước khi tạo bất cứ thứ gì, và nếu bị từ chối, danh sách sẽ liệt kê mọi node không hợp lệ. Sau khi được chấp nhận, các đối tượng sẽ được tạo trên server trong khi lệnh báo cáo tiến trình. Kết quả cuối cùng là success, partial, hoặc failed — kết quả partial liệt kê từng đối tượng chưa được tạo, kèm theo lỗi từ Apple.

Đối với cấu trúc lớn, truyền --no-wait để nhận ngay operation ID và xem tiến trình sau:

adapty asa campaigns bulk-status <operation-id>

Truy vấn chỉ số từ agent và script

asa metrics báo cáo ở bất kỳ cấp độ nào của tài khoản trong một khoảng thời gian. Thêm --json để AI agent hoặc script có thể đọc kết quả trực tiếp:

adapty asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric spend --metric roas --json

--metric nhận các tên mà Ads Manager theo dõi. Xem Chỉ số để có danh sách đầy đủ.

Các chỉ số cohort hoạt động khác với phần còn lại. Không có chỉ số ltv, vì giá trị vòng đời được đọc theo cửa sổ gia hạn chứ không phải theo ngày. Hãy truyền cửa sổ thay thế:

adapty asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric roas --by-days 7 --by-days 90 --order-by-day 90

Lệnh này trả về danh sách các chiến dịch được xếp hạng theo ROAS ngày 90. Một lần gọi có thể chứa tối đa 16 cửa sổ.

Mỗi hàng là một entity, đã được tổng hợp và sắp xếp sẵn trên server. Câu hỏi “top 5 chiến dịch theo chi tiêu” vì vậy chỉ cần một lần gọi, không cần duyệt qua từng trang:

adapty asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --order-by spend --page-size 5

Metrics và danh sách search terms dùng chung một ngân sách analytics theo công ty: 5 lần gọi mỗi phút, tối đa 2 lần trong mỗi 10 giây. Hãy đặt câu hỏi cụ thể một lần thay vì liên tục polling. Khoảng thời gian báo cáo cũng bị giới hạn tùy theo cách bạn nhóm dữ liệu — 90 ngày theo ngày, 180 ngày theo tuần, 365 ngày theo tháng — vì vậy hãy mở rộng báo cáo bằng cách thưa hơn --group-by, không phải bằng cách tách thành nhiều lần gọi hơn.

Kiểm tra từ khóa của đối thủ cạnh tranh

Một lệnh duy nhất trả về các từ khóa mà các ứng dụng cạnh tranh đang đặt giá thầu, cho tối đa năm ứng dụng App Store cùng một lúc:

adapty asa competitors summary --app-ids 1668337467,6503873027 --json

Khoảng thời gian và quốc gia được cố định trên máy chủ — tháng đầy đủ gần nhất, trên toàn bộ các quốc gia — vì vậy lệnh này không có cờ nào ngoài các app ID. Lần gọi đầu tiên cho một tập hợp ứng dụng có thể mất hàng chục giây.

Sử dụng công cụ này để tự động lấy dữ liệu từ khóa của đối thủ và đưa vào báo cáo theo lịch định kỳ. Để lọc kết quả, so sánh các quốc gia với nhau, hoặc thêm trực tiếp các từ khóa tìm được vào chiến dịch, hãy dùng Market Intelligence trên dashboard.

Chạy automation rules

CLI không tạo automation rules — nó chỉ lưu trữ JSON bạn cung cấp. Cách nhanh nhất để có file rule hợp lệ là tạo một rule trong dashboard, rồi đọc lại:

adapty asa automations get <automation-id> --json > rule.json

Chỉnh sửa file đó và dùng làm mẫu để tạo rule mới:

adapty asa automations create --file rule.json

Khi bạn truyền file vào automations update, hãy xóa trường internal_id trước — lệnh cập nhật sẽ bị từ chối nếu trường này có mặt.

Kiểm tra một quy tắc trước khi để nó thay đổi giá thầu:

adapty asa automations run <automation-id> --dry-run

Dry run sẽ đánh giá các điều kiện và ghi lại những gì quy tắc sẽ thực hiện mà không tác động đến Apple Ads. Các lần chạy được xếp vào hàng đợi thay vì thực hiện ngay lập tức, vì vậy lệnh sẽ in ra một run ID và kết quả sẽ xuất hiện trong adapty asa automations runs.

Chạy lại script an toàn

Mỗi lần ghi đều gửi kèm một idempotency key. CLI tạo một key cho mỗi lần chạy và thử lại một lần nếu xảy ra lỗi mạng, đảm bảo một request bị lỗi giữa chừng sẽ không bao giờ được áp dụng hai lần.

Trong script, hãy tự đặt key để toàn bộ pipeline có thể chạy lại:

adapty asa campaigns create --org <campaign-group-id> --name "Winter push" --adam-id 123456 --country US --daily-budget 50 --idempotency-key winter-push-2026 --yes

Re-running the same command within 24 hours returns the stored result and prints Already applied earlier instead of creating a second campaign. The same key with a different body fails with 422, which catches an edited script that reuses a key by mistake.

Tiếp theo là gì

  • Quản lý Apple Ads bằng công cụ AI — cài plugin Apple Ads để Claude Code, Copilot CLI, Codex hoặc Gemini CLI có thể chạy các lệnh này cho bạn.
  • Lệnh Ads Manager — tất cả các lệnh kèm đối số, flag và giá trị được chấp nhận.
  • Automations — mỗi loại rule hoạt động như thế nào và có thể thực hiện những action gì.
  • Chỉ số — tên các chỉ số được chấp nhận bởi --metric và cách tính từng chỉ số.