{"id":"f353e8a6-6dda-4419-9adc-c04cf67b0a13","shortId":"XP6gfX","kind":"skill","title":"tiktok-ads","tagline":"Plan and create TikTok advertising campaigns end-to-end via the Hyper MCP, with strict parameter validation for objective-specific requirements. Use when the user wants to launch TikTok ads, set up TikTok traffic or reach campaigns, configure conversions or app-promotion campaign","description":"# TikTok Ads\n\nStrategic guide for managing TikTok advertising campaigns. Research deeply, validate parameters carefully, and guide users through the platform's strict objective-specific requirements.\n\nThis skill is for **paid TikTok ads** (the TikTok Marketing API surface). For organic TikTok video posting, see the future `tiktok-posting` sibling skill.\n\n## Requirements\n\n- **Hyper MCP installed and connected.** [https://app.hyperfx.ai/mcp](https://app.hyperfx.ai/mcp)\n- **TikTok Marketing integration connected** (TikTok Ads Manager / Business Center) at [https://app.hyperfx.ai/integrations](https://app.hyperfx.ai/integrations).\n\nIf `tiktok_get_advertiser_accounts` is not in the tool list, stop and tell the user to enable Hyper MCP and connect TikTok Marketing.\n\n## Tool surface\n\n| Tool | Purpose |\n| --- | --- |\n| `tiktok_get_advertiser_accounts` | Discovery: list advertiser IDs available to the connected user. |\n| `tiktok_get_campaigns`, `tiktok_create_campaign`, `tiktok_update_campaign`, `tiktok_update_campaign_status` | Campaign lifecycle. |\n| `tiktok_get_adgroups`, `tiktok_create_adgroup`, `tiktok_update_adgroup`, `tiktok_update_adgroup_status` | Ad group lifecycle. |\n| `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. |\n| `tiktok_ad_video_upload`, `tiktok_ad_video_info`, `tiktok_ad_video_search` | Video creative upload + lookup. |\n| `tiktok_report_integrated_get` | Performance reporting. |\n| `tiktok_create_custom_audience`, `tiktok_list_custom_audiences`, `tiktok_create_lookalike_audience` | Audience management (optional). |\n\n## Phase 1: Account Discovery\n\n### Initial Setup\n- Use `tiktok_get_advertiser_accounts()` to get advertiser IDs.\n- If multiple accounts: ask the user to select one.\n- If single account: inform the user and proceed.\n\n### Bid Benchmarks (optional but recommended)\n\nBefore 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.\n\n```python\ntiktok_ad_benchmarks(\n    advertiser_id=\"123456789\",\n    dimensions=[\"industry\"],\n    filtering={\"industry\": \"292801\"}  # industry code from tiktok_get_advertiser_accounts\n)\n```\n\n### Available Campaign Objectives\n\n| Objective | Best For | Key Requirements |\n| --- | --- | --- |\n| `TRAFFIC` | Drive website visits | `promotion_type=\"WEBSITE\"`, CPC billing |\n| `CONVERSIONS` | Drive purchases / leads | Pixel ID, conversion event tracking |\n| `REACH` | Brand awareness | Manual placement only, CPM billing, frequency cap |\n| `APP_PROMOTION` | App installs | App ID, app store URL |\n| `VIDEO_VIEW` | Video engagement | Video creative assets |\n\n## Phase 2: Campaign Creation\n\n### Step 1: Create Campaign\n\n**Budget Requirements:**\n- **MINIMUM $50** for campaign-level budgets (TikTok requirement).\n- `budget_mode`: `BUDGET_MODE_INFINITE` (CBO), `BUDGET_MODE_DAY`, or `BUDGET_MODE_TOTAL`.\n\n```python\ntiktok_create_campaign(\n    advertiser_id=\"123456789\",\n    campaign_name=\"Summer Sale 2026\",\n    objective_type=\"TRAFFIC\",\n    budget_mode=\"BUDGET_MODE_DAY\",\n    budget=50.0,  # MINIMUM $50/day\n    operation_status=\"ENABLE\"\n)\n```\n\n### Step 2: Create Ad Group\n\n**ALWAYS REQUIRED Parameters:**\n- `advertiser_id`, `campaign_id`, `adgroup_name`.\n- `location_ids` (e.g., `[\"6252001\"]` for US).\n- `schedule_type` and `schedule_start_time` (MUST be a future date).\n- `billing_event` (`CPC`, `CPM`, `OCPM`).\n- `budget_mode` (REQUIRED for ad groups).\n\n**For TRAFFIC Campaigns:**\n```python\ntiktok_create_adgroup(\n    advertiser_id=\"123456789\",\n    campaign_id=\"1234567890123456\",\n    adgroup_name=\"Website Traffic - Summer Sale\",\n    location_ids=[\"6252001\"],  # US\n    schedule_type=\"SCHEDULE_FROM_NOW\",\n    schedule_start_time=\"2026-06-01 00:00:00\",  # FUTURE DATE\n    billing_event=\"CPC\",\n    budget_mode=\"BUDGET_MODE_DAY\",\n    budget=30.0,\n    promotion_type=\"WEBSITE\",        # REQUIRED for TRAFFIC\n    optimization_goal=\"CLICK\",       # REQUIRED (correct spelling)\n    bid_price=0.50,\n    placement_type=\"PLACEMENT_TYPE_AUTOMATIC\",\n    operation_status=\"ENABLE\"\n)\n```\n\n**For REACH Campaigns:**\n```python\ntiktok_create_adgroup(\n    advertiser_id=\"123456789\",\n    campaign_id=\"1234567890123456\",\n    adgroup_name=\"Brand Awareness US\",\n    location_ids=[\"6252001\"],\n    schedule_type=\"SCHEDULE_FROM_NOW\",\n    schedule_start_time=\"2026-06-01 00:00:00\",\n    billing_event=\"CPM\",                       # REQUIRED for REACH\n    budget_mode=\"BUDGET_MODE_DAY\",\n    budget=30.0,\n    optimization_goal=\"REACH\",\n    placement_type=\"PLACEMENT_TYPE_NORMAL\",    # REQUIRED — automatic NOT supported\n    placements=[\"PLACEMENT_TIKTOK\"],           # REQUIRED\n    bid_price=2.0,                             # REQUIRED\n    frequency=3,                               # REQUIRED\n    frequency_schedule=7,                      # REQUIRED\n    operation_status=\"ENABLE\"\n)\n```\n\n### Step 3: Upload Creative Assets\n\nUpload one video per creative variant. Capture the returned `video_id` — you'll need it in Step 4.\n\n```python\nvideo_response = tiktok_ad_video_upload(\n    advertiser_id=\"123456789\",\n    video_file=video_data,\n    upload_type=\"UPLOAD_BY_FILE\"\n)\nvideo_id = video_response[\"data\"][\"video_id\"]\n```\n\n> Already-uploaded videos can be reused. Use `tiktok_ad_video_search` to find existing videos by name or `tiktok_ad_video_info` to fetch metadata for a known video ID.\n\n### Step 4: Create the Ad\n\n```python\ntiktok_create_ad(\n    advertiser_id=\"123456789\",\n    adgroup_id=\"1234567890123456\",\n    ad_name=\"Summer Sale - Hero Video\",\n    identity_type=\"CUSTOMIZED_USER\",   # or \"AUTH_CODE\" for TikTok Account spark ads\n    identity_id=\"<advertiser_identity_id>\",\n    ad_format=\"SINGLE_VIDEO\",\n    video_id=video_id,\n    ad_text=\"Limited-time summer drop. Shop now.\",\n    landing_page_url=\"https://example.com/summer\",\n    call_to_action=\"SHOP_NOW\",\n    operation_status=\"DISABLE\"        # create paused, enable after review\n)\n```\n\nAlways create ads paused (`operation_status=\"DISABLE\"`) and only flip them to `ENABLE` once the user has reviewed.\n\n## Critical Parameter Rules\n\n### Common Errors & Solutions\n\n| Error | Solution |\n| --- | --- |\n| Budget must be at least $50 | TikTok enforces a MINIMUM $50 for campaign budgets. |\n| Start time in past | Use a future date in `schedule_start_time` and the **current** year. |\n| 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. |\n| Only supports manual placement | REACH requires `placement_type=\"PLACEMENT_TYPE_NORMAL\"`. |\n| Bid needs to be greater than $0 | Set `bid_price` > 0. |\n| Please set frequency cap | REACH requires both `frequency` and `frequency_schedule`. |\n\n### Parameter Dependencies\n\n**TRAFFIC objective requires:**\n- `promotion_type=\"WEBSITE\"`.\n- `optimization_goal=\"CLICK\"`.\n- `billing_event=\"CPC\"`.\n- `bid_price` > 0.\n\n**REACH objective requires:**\n- `optimization_goal=\"REACH\"`.\n- `billing_event=\"CPM\"`.\n- `placement_type=\"PLACEMENT_TYPE_NORMAL\"`.\n- `placements` array (e.g., `[\"PLACEMENT_TIKTOK\"]`).\n- `bid_price` > 0.\n- `frequency` and `frequency_schedule`.\n\n**CONVERSIONS objective requires:**\n- A connected TikTok Pixel and a configured conversion event.\n- `optimization_goal=\"CONVERT\"` (or `VALUE` for value-based).\n- `billing_event=\"OCPM\"`.\n- `pixel_id` and `external_action` set on the ad group.\n\n## Reporting\n\n```python\ntiktok_report_integrated_get(\n    advertiser_id=\"123456789\",\n    report_type=\"BASIC\",\n    data_level=\"AUCTION_AD\",\n    dimensions=[\"ad_id\"],   # ID-based only — NOT names\n    start_date=\"2026-04-01\",\n    end_date=\"2026-04-30\",\n    metrics=[\"impressions\", \"clicks\", \"ctr\", \"spend\", \"cpc\", \"cpm\"],\n    page_size=20\n)\n```\n\n**Reporting Rules:**\n- With the `stat_time_day` dimension: maximum 30-day range per call.\n- Use ID-based dimensions only (`ad_id`, `campaign_id`, `adgroup_id` — not names).\n- Conversion metrics (`conversion`, `cost_per_conversion`, `conversion_rate`, etc.) require a connected pixel and a configured conversion event.\n- `data_level` must match the dimension granularity: `AUCTION_AD` with `ad_id`, `AUCTION_ADGROUP` with `adgroup_id`, `AUCTION_CAMPAIGN` with `campaign_id`.\n\n## Safety Rules\n\n**Never:**\n- Set ad group budgets below $20/day without warning the user.\n- Schedule a campaign with a past `schedule_start_time` (TikTok rejects this with a confusing error).\n- Mix REACH ad groups with `PLACEMENT_TYPE_AUTOMATIC` — it will silently fail validation.\n- Create ads with `operation_status=\"ENABLE\"` before the user has reviewed creative + targeting.\n- Run reports with name-based dimensions — TikTok only accepts ID dimensions.","tags":["tiktok","ads","marketing","skills","hyperfx-ai","agent-skills","ai-agent","claude","claude-code","claude-skills","codex","cursor"],"capabilities":["skill","source-hyperfx-ai","skill-tiktok-ads","topic-agent-skills","topic-ai-agent","topic-claude","topic-claude-code","topic-claude-skills","topic-codex","topic-cursor","topic-google-ads","topic-hermes","topic-marketing","topic-mcp","topic-meta-ads"],"categories":["marketing-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/hyperfx-ai/marketing-skills/tiktok-ads","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add hyperfx-ai/marketing-skills","source_repo":"https://github.com/hyperfx-ai/marketing-skills","install_from":"skills.sh"}},"qualityScore":"0.462","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 24 github stars · SKILL.md body (8,947 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:05:17.474Z","embedding":null,"createdAt":"2026-05-07T13:06:44.348Z","updatedAt":"2026-05-18T19:05:17.474Z","lastSeenAt":"2026-05-18T19:05:17.474Z","tsv":"'-01':554,624,1049 '-04':1048,1053 '-06':553,623 '-30':1054 '/integrations](https://app.hyperfx.ai/integrations).':122 '/mcp](https://app.hyperfx.ai/mcp)':109 '/summer':808 '0':927,931,959,981 '0.50':584 '00':555,556,557,625,626,627 '1':277,425 '123456789':355,458,530,602,703,762,1028 '1234567890123456':533,605,765 '2':421,480 '2.0':659 '20':1064 '20/day':1141 '2026':463,552,622,1047,1052 '292801':360 '3':662,672 '30':1074 '30.0':569,640 '4':693,752 '50':431,853,858 '50.0':473 '50/day':475 '6252001':496,542,613 '7':666 'accept':1197 'account':127,154,278,286,293,302,367,781 'action':811,1014 'ad':3,35,51,82,115,192,197,200,203,205,210,217,226,240,244,248,319,351,482,519,698,729,740,755,759,766,783,786,794,824,1018,1035,1037,1085,1119,1121,1137,1164,1176 'adgroup':181,184,187,190,491,527,534,599,606,763,1089,1124,1126 'advertis':8,57,126,153,157,285,289,353,366,456,487,528,600,701,760,1026 'alreadi':721 'already-upload':720 'alway':484,822 'api':86,879 'app':47,404,406,408,410 'app-promot':46 'app.hyperfx.ai':108,121 'app.hyperfx.ai/integrations](https://app.hyperfx.ai/integrations).':120 'app.hyperfx.ai/mcp](https://app.hyperfx.ai/mcp)':107 'array':975 'ask':294 'asset':419,675 'auction':340,1034,1118,1123,1128 'audienc':264,268,272,273 'auth':777 'automat':589,650,1169 'avail':159,236,368 'awar':396,609 'base':1006,1041,1082,1193 'basic':1031 'benchmark':309,320,327,352 'best':372 'bid':308,315,582,657,921,929,957,979 'bill':384,401,510,560,628,954,966,1007 'brand':395,608 'budget':348,428,436,439,441,445,449,467,469,472,515,563,565,568,634,636,639,848,861,1139 'busi':117 'call':317,809,1078 'campaign':9,42,49,58,166,169,172,175,177,369,422,427,434,455,459,489,523,531,595,603,860,1087,1129,1131,1148 'campaign-level':433 'cap':403,935 'captur':682 'care':63 'cbo':444 'center':118 'chang':231 'click':578,953,1057 'code':362,778 'common':843 'configur':43,995,1108 'confus':1160 'connect':106,113,144,162,990,1104 'content':218 'context':885 'convers':44,385,391,986,996,1093,1095,1098,1099,1109 'convert':1000 'copi':221 'correct':580 'cost':1096 'cpc':383,512,562,956,1060 'cpm':400,513,630,968,1061 'cpm/cpc':326 'creat':6,168,183,199,262,270,426,454,481,526,598,753,758,817,823,1175 'creation':423 'creativ':220,252,418,674,680,1186 'critic':840 'ctr':1058 'current':876 'custom':263,267,774 'data':707,717,1032,1111 'date':509,559,869,1046,1051 'day':447,471,567,638,1071,1075 'deepli':60 'delet':234 'depend':944 'dimens':356,1036,1072,1083,1116,1194,1199 'disabl':816,828 'discoveri':155,279 'drive':377,386 'drop':800 'e.g':495,976 'edit':219 'enabl':140,232,478,592,670,819,834,1180 'end':11,13,1050 'end-to-end':10 'enforc':855 'engag':416 'error':844,846,1161 'etc':1101 'event':392,511,561,629,955,967,997,1008,1110 'example.com':807 'example.com/summer':806 'exist':213,734,892 'extern':1013 'fail':1173 'fetch':744 'field':903 'file':705,712 'filter':358 'find':733 'flip':831 'format':787 'frequenc':402,661,664,934,939,941,982,984 'futur':95,508,558,868 'get':125,152,165,180,196,258,284,288,365,1025 'goal':577,642,882,888,891,899,952,964,999 'granular':1117 'greater':925 'group':193,483,520,1019,1138,1165 'guid':53,65 'hero':770 'high':343 'hyper':16,102,141 'id':158,290,354,390,409,457,488,490,494,529,532,541,601,604,612,686,702,714,719,750,761,764,785,791,793,1011,1027,1038,1040,1081,1086,1088,1090,1122,1127,1132,1198 'id-bas':1039,1080 'ident':772,784 'impress':1056 'industri':324,357,359,361 'industry-specif':323 'infinit':443 'info':246,742 'inform':303 'initi':280 'instal':104,407 'integr':112,257,1024 'key':374 'known':748 'land':803 'launch':33 'lead':388 'least':852 'level':435,1033,1112 'lifecycl':178,194,206 'limit':797 'limited-tim':796 'list':133,156,266 'll':688 'locat':493,540,611 'lookalik':271 'lookup':254 'low':337 'manag':55,116,227,274 'manual':397,912 'market':85,111,146 'match':1114 'maximum':1073 'may':334 'mcp':17,103,142,216,238 'metadata':745 'metric':1055,1094 'minimum':430,474,857 'mix':1162 'mode':440,442,446,450,468,470,516,564,566,635,637 'multipl':292 'must':505,849,1113 'name':460,492,535,607,737,767,1044,1092,1192 'name-bas':1191 'need':689,922 'never':1135 'normal':648,920,973 'note':207 'object':24,73,370,371,464,908,946,961,987 'objective-specif':23,72 'ocpm':514,1009 'one':299,677 'oper':476,590,668,814,826,1178 'optim':576,641,881,887,890,898,951,963,998 'option':275,310 'organ':89 'page':804,1062 'paid':80 'paramet':20,62,486,841,943 'past':865,1151 'paus':233,818,825 'per':679,1077,1097 'perform':259 'phase':276,420 'pixel':389,992,1010,1105 'placehold':331 'placement':398,585,587,644,646,653,654,913,916,918,969,971,974,977,1167 'plan':4 'platform':69 'pleas':932 'post':92,98 'prefer':897 'prevent':329 'price':316,583,658,930,958,980 'proceed':307 'promot':48,380,405,570,948 'purchas':387 'purpos':150 'python':349,452,524,596,694,756,1021 'rang':1076 'rate':1100 'reach':41,394,594,633,643,914,936,960,965,1163 'recommend':312 'reject':880,1156 'report':256,260,1020,1023,1029,1065,1189 'requir':26,75,101,223,375,429,438,485,517,573,579,631,649,656,660,663,667,915,937,947,962,988,1102 'research':59 'respons':696,716 'retriev':322 'return':684 'reus':726 'review':821,839,1185 'rule':842,1066,1134 'run':1188 'safeti':1133 'sale':462,539,769 'schedul':499,502,544,546,549,614,616,619,665,871,942,985,1146,1152 'schema':895 'search':250,731 'see':93 'select':298 'set':36,314,928,933,1015,1136 'setup':281 'shop':801,812 'sibl':99 'silent':1172 'singl':301,788 'size':1063 'skill':77,100 'skill-tiktok-ads' 'solut':845,847 'source-hyperfx-ai' 'spark':782 'specif':25,74,325 'spell':581 'spend':1059 'start':503,550,620,862,872,1045,1153 'stat':1069 'status':176,191,204,230,477,591,669,815,827,1179 'step':424,479,671,692,751 'stop':134 'store':411 'strateg':52 'strict':19,71 'summer':461,538,768,799 'support':652,911 'surfac':87,148 'target':1187 'tell':136 'text':795 'tiktok':2,7,34,38,50,56,81,84,90,97,110,114,124,145,151,164,167,170,173,179,182,185,188,195,198,201,208,225,239,243,247,255,261,265,269,283,318,350,364,437,453,525,597,655,697,728,739,757,780,854,878,904,978,991,1022,1155,1195 'tiktok-ad':1 'tiktok-post':96 'time':504,551,621,798,863,873,1070,1154 'tool':132,147,149 'topic-agent-skills' 'topic-ai-agent' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'topic-cursor' 'topic-google-ads' 'topic-hermes' 'topic-marketing' 'topic-mcp' 'topic-meta-ads' 'total':451 'track':393 'traffic':39,376,466,522,537,575,945 'type':381,465,500,545,571,586,588,615,645,647,709,773,909,917,919,949,970,972,1030,1168 'ui':228 'updat':171,174,186,189,202,209 'upload':242,253,673,676,700,708,710,722 'url':222,412,805 'us':498,543,610 'use':27,282,330,727,866,1079 'user':30,66,138,163,296,305,346,775,837,1145,1183 'valid':21,61,905,1174 'valu':332,1002,1005 'value-bas':1004 'variant':681 'via':14,237 'video':91,241,245,249,251,413,415,417,678,685,695,699,704,706,713,715,718,723,730,735,741,749,771,789,790,792 'view':414 'visit':379 'want':31 'warn':1143 'websit':378,382,536,572,950 'win':339 'without':1142 'year':877","prices":[{"id":"a32b681c-4906-4d27-a485-04a04426d5cf","listingId":"f353e8a6-6dda-4419-9adc-c04cf67b0a13","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"hyperfx-ai","category":"marketing-skills","install_from":"skills.sh"},"createdAt":"2026-05-07T13:06:44.348Z"}],"sources":[{"listingId":"f353e8a6-6dda-4419-9adc-c04cf67b0a13","source":"github","sourceId":"hyperfx-ai/marketing-skills/tiktok-ads","sourceUrl":"https://github.com/hyperfx-ai/marketing-skills/tree/main/skills/tiktok-ads","isPrimary":false,"firstSeenAt":"2026-05-07T13:06:44.348Z","lastSeenAt":"2026-05-18T19:05:17.474Z"}],"details":{"listingId":"f353e8a6-6dda-4419-9adc-c04cf67b0a13","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"hyperfx-ai","slug":"tiktok-ads","github":{"repo":"hyperfx-ai/marketing-skills","stars":24,"topics":["agent-skills","ai-agent","claude","claude-code","claude-skills","codex","cursor","google-ads","hermes","marketing","mcp","meta-ads","openclaw","seo"],"license":"mit","html_url":"https://github.com/hyperfx-ai/marketing-skills","pushed_at":"2026-05-09T22:58:46Z","description":"Marketing skills for AI agents — paid ads, social media, SEO, competitor research, creative generation, email, analytics, and more. Powered by Hyper MCP.","skill_md_sha":"4f6cbf573302618c1f5d6c8c0990aa91f866f219","skill_md_path":"skills/tiktok-ads/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/hyperfx-ai/marketing-skills/tree/main/skills/tiktok-ads"},"layout":"multi","source":"github","category":"marketing-skills","frontmatter":{"name":"tiktok-ads","description":"Plan and create TikTok advertising campaigns end-to-end via the Hyper MCP, with strict parameter validation for objective-specific requirements. Use when the user wants to launch TikTok ads, set up TikTok traffic or reach campaigns, configure conversions or app-promotion campaigns, upload TikTok video creatives, or analyze TikTok ad performance. Also triggers on tiktok marketing, tiktok campaign, tiktok ppc, or tiktok ads manager."},"skills_sh_url":"https://skills.sh/hyperfx-ai/marketing-skills/tiktok-ads"},"updatedAt":"2026-05-18T19:05:17.474Z"}}