Reference tables¶
All identifiers below are stable: they never change between calls or days.
Apps and accounts¶
One account per game on each platform. The app id in the store (package name / Apple id) is the key that ties the three platforms together.
| Code | Game | OS | Store app id | Meta ad account | TikTok advertiser_id | Google customer id |
|---|---|---|---|---|---|---|
| DMS | Dragon Merge Saga | Android | com.novaplay.dragonmerge |
act_199454714457591 |
7643153585721644371 |
5423891542 |
| IME | Idle Mining Empire | Android | com.novaplay.idlemining |
act_195371095837700 |
7548458757843580535 |
8340496580 |
| ZSD | Zombie Siege Defense | Android | com.novaplay.zombiesiege |
act_121809552335695 |
7990946724050865085 |
2375371730 |
| PBM | Puzzle Blast Mania | iOS | id1600000011 |
act_125122534005354 |
7561433009497335594 |
1163385796 |
| CML | Castle Match Legends | iOS | id1600000012 |
act_150990802394697 |
7755758027591177377 |
3250885192 |
| CPM | Car Park Master 3D | Android | com.novaplay.carpark3d |
act_193125515079317 |
7436278374244249510 |
6919164314 |
| SST | Sushi Shop Tycoon | iOS | id1600000013 |
act_156105482446855 |
7630439642943145867 |
2405781364 |
| HTD | Hero Tower Defense | Android | com.novaplay.herotd |
act_105449962451954 |
7527443712373077953 |
8230886562 |
| WGS | Word Garden Story | iOS | id1600000014 |
act_180249870419075 |
7191695088502038359 |
2325394968 |
| PSV | Pixel Survivors | Android | com.novaplay.pixelsurvivors |
act_163968967411649 |
7066703854022184882 |
9516973558 |
Platform-specific app identifiers¶
Meta and TikTok identify the promoted app with their own numeric id; the store id is exposed next to it (promoted_object.object_store_url on Meta ad sets, /app/list/ on TikTok). Google uses the store id directly in campaign.app_campaign_setting.app_id.
| Code | Store app id | Meta application_id |
TikTok app_id |
|---|---|---|---|
| DMS | com.novaplay.dragonmerge |
5040209235711335 |
7642218708447580001 |
| IME | com.novaplay.idlemining |
3618013404088238 |
7970129895774674591 |
| ZSD | com.novaplay.zombiesiege |
2800467750407175 |
7493466606564928387 |
| PBM | id1600000011 |
9511670931287115 |
7331171115470878399 |
| CML | id1600000012 |
9844452140496718 |
7003566176656367015 |
| CPM | com.novaplay.carpark3d |
2992234656456411 |
7184689876091656839 |
| SST | id1600000013 |
3082560951534317 |
7661879353576592135 |
| HTD | com.novaplay.herotd |
5833270088712585 |
7454727515100367961 |
| WGS | id1600000014 |
6678185000846070 |
7882618419633421969 |
| PSV | com.novaplay.pixelsurvivors |
2563914950372658 |
7812436136803764303 |
Countries¶
| Code | Country | Geo group | Google geo_target_constant.id |
TikTok location_id |
|---|---|---|---|---|
| US | United States | T1 | 2840 |
6252001 |
| GB | United Kingdom | T1 | 2826 |
2635167 |
| CA | Canada | T1 | 2124 |
6251999 |
| AU | Australia | T1 | 2036 |
2077456 |
| DE | Germany | T1 | 2276 |
2921044 |
| VN | Vietnam | SEA | 2704 |
1562822 |
| ID | Indonesia | SEA | 2360 |
1643084 |
| PH | Philippines | SEA | 2608 |
1694008 |
| TH | Thailand | SEA | 2764 |
1605651 |
| BR | Brazil | LATAM | 2076 |
3469034 |
| MX | Mexico | LATAM | 2484 |
3996063 |
| JP | Japan | EA | 2392 |
1861060 |
| KR | South Korea | EA | 2410 |
1835841 |
| TW | Taiwan | EA | 2158 |
1668284 |
Google reports the country as segments.geo_target_country = "geoTargetConstants/<id>"; TikTok reports country_code (ISO-2) in reports but location_ids (numeric) on ad groups; Meta uses ISO-2 everywhere.
Naming conventions¶
| Level | Pattern | Example |
|---|---|---|
| Campaign | {GAME}_{PLATFORM}_{OS}_{GEO}_{OBJECTIVE}_{YYYYMM} |
DMS_FB_AND_T1_VALUE_202607 |
| Ad set / ad group | {GEO}_{Audience}_{countries} |
SEA_Lookalike_Payers_ID-PH-VN |
| Ad | {VID|PLAY|IMG}_{Concept}_v{n} |
PLAY_Tutorial_v1 |
PLATFORM codes: FB Meta, TT TikTok, GG Google. OS codes: AND, IOS. OBJECTIVE: INSTALL, VALUE.
Platform comparison¶
| Meta | TikTok | Google Ads | |
|---|---|---|---|
| Base URL | https://graph.huydata.com/v21.0 |
https://business-api.huydata.com/open_api/v1.3 |
https://googleads.huydata.com/v18 |
| Credential | access_token query param |
Access-Token header |
Authorization: Bearer + developer-token headers |
| Request style | GET, fields= list |
GET, JSON-encoded list params, trailing slash | POST JSON body with a GAQL query |
| Paging | cursor: paging.cursors.after, paging.next |
page / page_size, page_info.total_page |
searchStream batches; search with pageToken |
| Numbers | strings | strings | int64 as strings, doubles as numbers, cost in micros |
| Date in reports | date_start / date_stop (YYYY-MM-DD) |
stat_time_day (YYYY-MM-DD 00:00:00) |
segments.date (YYYY-MM-DD) |
| Country in reports | country (ISO-2) with breakdowns=country |
country_code (ISO-2) dimension |
segments.geo_target_country (geoTargetConstants/<id>) |
| Error signalling | HTTP 400 + error.code |
HTTP 200 + code != 0 |
HTTP 4xx + error.status |
| Rate limit response | HTTP 400, error.code = 17 |
HTTP 200, code = 40100 |
HTTP 429 + Retry-After |