TikTok Ads
Strategic guide for managing TikTok advertising campaigns. Research deeply, validate parameters carefully, and guide users through the platform's strict objective-specific requirements.
This skill is for paid TikTok ads (the TikTok Marketing API surface). For organic TikTok video posting, see the future tiktok-posting sibling skill.
Requirements
- Hyper MCP installed and connected. https://app.hyperfx.ai/mcp
- TikTok Marketing integration connected (TikTok Ads Manager / Business Center) at https://app.hyperfx.ai/integrations.
If tiktok_get_advertiser_accounts is not in the tool list, stop and tell the user to enable Hyper MCP and connect TikTok Marketing.
Tool surface
| Tool | Purpose |
|---|---|
tiktok_get_advertiser_accounts | Discovery: list advertiser IDs available to the connected user. |
tiktok_get_campaigns, tiktok_create_campaign, tiktok_update_campaign, tiktok_update_campaign_status | Campaign lifecycle. |
tiktok_get_adgroups, tiktok_create_adgroup, tiktok_update_adgroup, tiktok_update_adgroup_status | Ad group lifecycle. |
tiktok_get_ads, tiktok_create_ad, tiktok_update_ad_status | Ad lifecycle. Note: tiktok_update_ad does not exist in the MCP — ad content edits (creative, copy, URL) require the TikTok Ads Manager UI. Only status changes (enable / pause / delete) are available via MCP. |
tiktok_ad_video_upload, tiktok_ad_video_info, tiktok_ad_video_search | Video creative upload + lookup. |
tiktok_report_integrated_get | Performance reporting. |
tiktok_create_custom_audience, tiktok_list_custom_audiences, tiktok_create_lookalike_audience | Audience management (optional). |
Phase 1: Account Discovery
Initial Setup
- Use
tiktok_get_advertiser_accounts()to get advertiser IDs. - If multiple accounts: ask the user to select one.
- If single account: inform the user and proceed.
Bid Benchmarks (optional but recommended)
Before setting bid prices, call tiktok_ad_benchmarks to retrieve industry-specific CPM/CPC benchmarks. This prevents using placeholder values that may be too low to win auctions or too high for the user's budget.
tiktok_ad_benchmarks(
advertiser_id="123456789",
dimensions=["industry"],
filtering={"industry": "292801"} # industry code from tiktok_get_advertiser_accounts
)
Available Campaign Objectives
| Objective | Best For | Key Requirements |
|---|---|---|
TRAFFIC | Drive website visits | promotion_type="WEBSITE", CPC billing |
CONVERSIONS | Drive purchases / leads | Pixel ID, conversion event tracking |
REACH | Brand awareness | Manual placement only, CPM billing, frequency cap |
APP_PROMOTION | App installs | App ID, app store URL |
VIDEO_VIEW | Video engagement | Video creative assets |
Phase 2: Campaign Creation
Step 1: Create Campaign
Budget Requirements:
- MINIMUM $50 for campaign-level budgets (TikTok requirement).
budget_mode:BUDGET_MODE_INFINITE(CBO),BUDGET_MODE_DAY, orBUDGET_MODE_TOTAL.
tiktok_create_campaign(
advertiser_id="123456789",
campaign_name="Summer Sale 2026",
objective_type="TRAFFIC",
budget_mode="BUDGET_MODE_DAY",
budget=50.0, # MINIMUM $50/day
operation_status="ENABLE"
)
Step 2: Create Ad Group
ALWAYS REQUIRED Parameters:
advertiser_id,campaign_id,adgroup_name.location_ids(e.g.,["6252001"]for US).schedule_typeandschedule_start_time(MUST be a future date).billing_event(CPC,CPM,OCPM).budget_mode(REQUIRED for ad groups).
For TRAFFIC Campaigns:
tiktok_create_adgroup(
advertiser_id="123456789",
campaign_id="1234567890123456",
adgroup_name="Website Traffic - Summer Sale",
location_ids=["6252001"], # US
schedule_type="SCHEDULE_FROM_NOW",
schedule_start_time="2026-06-01 00:00:00", # FUTURE DATE
billing_event="CPC",
budget_mode="BUDGET_MODE_DAY",
budget=30.0,
promotion_type="WEBSITE", # REQUIRED for TRAFFIC
optimization_goal="CLICK", # REQUIRED (correct spelling)
bid_price=0.50,
placement_type="PLACEMENT_TYPE_AUTOMATIC",
operation_status="ENABLE"
)
For REACH Campaigns:
tiktok_create_adgroup(
advertiser_id="123456789",
campaign_id="1234567890123456",
adgroup_name="Brand Awareness US",
location_ids=["6252001"],
schedule_type="SCHEDULE_FROM_NOW",
schedule_start_time="2026-06-01 00:00:00",
billing_event="CPM", # REQUIRED for REACH
budget_mode="BUDGET_MODE_DAY",
budget=30.0,
optimization_goal="REACH",
placement_type="PLACEMENT_TYPE_NORMAL", # REQUIRED — automatic NOT supported
placements=["PLACEMENT_TIKTOK"], # REQUIRED
bid_price=2.0, # REQUIRED
frequency=3, # REQUIRED
frequency_schedule=7, # REQUIRED
operation_status="ENABLE"
)
Step 3: Upload Creative Assets
Upload one video per creative variant. Capture the returned video_id — you'll need it in Step 4.
video_response = tiktok_ad_video_upload(
advertiser_id="123456789",
video_file=video_data,
upload_type="UPLOAD_BY_FILE"
)
video_id = video_response["data"]["video_id"]
Already-uploaded videos can be reused. Use
tiktok_ad_video_searchto find existing videos by name ortiktok_ad_video_infoto fetch metadata for a known video ID.
Step 4: Create the Ad
tiktok_create_ad(
advertiser_id="123456789",
adgroup_id="1234567890123456",
ad_name="Summer Sale - Hero Video",
identity_type="CUSTOMIZED_USER", # or "AUTH_CODE" for TikTok Account spark ads
identity_id="<advertiser_identity_id>",
ad_format="SINGLE_VIDEO",
video_id=video_id,
ad_text="Limited-time summer drop. Shop now.",
landing_page_url="https://example.com/summer",
call_to_action="SHOP_NOW",
operation_status="DISABLE" # create paused, enable after review
)
Always create ads paused (operation_status="DISABLE") and only flip them to ENABLE once the user has reviewed.
Critical Parameter Rules
Common Errors & Solutions
| Error | Solution |
|---|---|
| Budget must be at least $50 | TikTok enforces a MINIMUM $50 for campaign budgets. |
| Start time in past | Use a future date in schedule_start_time and the current year. |
TikTok API rejects optimize_goal in some contexts | Both optimize_goal and optimization_goal exist in the schema, but prefer optimization_goal — it is the field TikTok validates in most objective types. |
| Only supports manual placement | REACH requires placement_type="PLACEMENT_TYPE_NORMAL". |
| Bid needs to be greater than $0 | Set bid_price > 0. |
| Please set frequency cap | REACH requires both frequency and frequency_schedule. |
Parameter Dependencies
TRAFFIC objective requires:
promotion_type="WEBSITE".optimization_goal="CLICK".billing_event="CPC".bid_price> 0.
REACH objective requires:
optimization_goal="REACH".billing_event="CPM".placement_type="PLACEMENT_TYPE_NORMAL".placementsarray (e.g.,["PLACEMENT_TIKTOK"]).bid_price> 0.frequencyandfrequency_schedule.
CONVERSIONS objective requires:
- A connected TikTok Pixel and a configured conversion event.
optimization_goal="CONVERT"(orVALUEfor value-based).billing_event="OCPM".pixel_idandexternal_actionset on the ad group.
Reporting
tiktok_report_integrated_get(
advertiser_id="123456789",
report_type="BASIC",
data_level="AUCTION_AD",
dimensions=["ad_id"], # ID-based only — NOT names
start_date="2026-04-01",
end_date="2026-04-30",
metrics=["impressions", "clicks", "ctr", "spend", "cpc", "cpm"],
page_