Ad Set¶
An ad set groups ads that share the same targeting, optimisation goal and promoted app. Each Nova Play campaign has 2 or 3 ad sets. An ad set targets a subset of the countries of the campaign's region group and one audience type.
Naming convention¶
{GEO}_{AUDIENCE}_{COUNTRIES}
| Part | Values | Meaning |
|---|---|---|
GEO |
T1, SEA, LATAM, EA |
Region group, same as the campaign. |
AUDIENCE |
Broad, Lookalike_Payers, Interest_Gaming |
Audience strategy. Reflected in targeting.custom_audiences (lookalike) and targeting.flexible_spec (interest). |
COUNTRIES |
ISO codes joined by -, e.g. AU-CA-DE-GB-US |
Sorted list of targeted countries. Also available as targeting.geo_locations.countries. |
Example: T1_Lookalike_Payers_CA-DE-US.
Fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Ad set id (17 digits). Always returned. |
name |
string | See naming convention. |
campaign_id |
string | Parent campaign id. |
account_id |
string | Numeric ad account id, without act_. |
status |
string | ACTIVE, or ARCHIVED when the campaign has ended. |
effective_status |
string | ACTIVE, CAMPAIGN_PAUSED (the parent campaign is paused) or ARCHIVED. |
optimization_goal |
string | APP_INSTALLS for INSTALL campaigns, VALUE for VALUE campaigns. |
billing_event |
string | Always IMPRESSIONS. |
bid_strategy |
string | Always LOWEST_COST_WITHOUT_CAP. |
targeting |
object | Targeting spec, see below. |
promoted_object |
object | The app being promoted, see below. |
start_time |
datetime | Campaign start. |
end_time |
datetime | Day after the campaign's last day. Omitted when there is no end date. |
created_time |
datetime | Creation timestamp. |
updated_time |
datetime | Last update timestamp. |
is_dynamic_creative |
bool | Always false. |
Default fields when fields is omitted: id,name.
targeting¶
{
"geo_locations": {
"countries": ["AU", "CA", "DE", "GB", "US"],
"location_types": ["home", "recent"]
},
"age_min": 18,
"age_max": 65,
"user_os": ["Android"],
"publisher_platforms": ["facebook", "instagram", "audience_network"],
"custom_audiences": [],
"flexible_spec": []
}
| Key | Description |
|---|---|
geo_locations.countries |
ISO 3166-1 alpha-2 codes. This is the authoritative list of countries an ad set delivers to; insights with breakdowns=country only ever return these countries. |
user_os |
["Android"] or ["iOS"], following the game. |
custom_audiences |
[{ "id", "name": "LAL 1% payers" }] for Lookalike_Payers ad sets, otherwise []. |
flexible_spec |
[{ "interests": [{ "id", "name": "Mobile games" }] }] for Interest_Gaming ad sets, otherwise []. |
promoted_object¶
{
"application_id": "5040209235711335",
"object_store_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
"custom_event_type": "MOBILE_APP_INSTALL"
}
| Key | Description |
|---|---|
application_id |
Numeric app id on the ad platform. Stable per game. Also appears in the ad's tracking_specs. |
object_store_url |
Store listing URL. The store app id is embedded here: for Google Play it is the id= query parameter (com.novaplay.dragonmerge), for the App Store it is the last path segment (id1600000011). Use this to map an ad set to a game. |
custom_event_type |
MOBILE_APP_INSTALL for INSTALL campaigns, PURCHASE for VALUE campaigns. |
Edges¶
| Edge | Description |
|---|---|
/<adset_id>/ads |
Ads in the ad set. |
/<adset_id>/insights |
Performance for this ad set. Default level=adset. |
List ad sets of an account: GET /act_<account_id>/adsets¶
Returns every ad set in the account, across all campaigns (typically 6 to 12).
| Parameter | Type | Required | Description |
|---|---|---|---|
access_token |
string | yes | Personal token (or Authorization: Bearer). |
fields |
string | no | Comma-separated list of ad set fields. Default id,name. |
limit |
int | no | Page size, default 25, maximum 500. |
after |
string | no | Cursor from a previous page. See Paging. |
curl -G "https://graph.huydata.com/v21.0/act_199454714457591/adsets" \
-d "access_token=$META_ACCESS_TOKEN" \
-d "fields=id,name,campaign_id,status,effective_status,optimization_goal,promoted_object" \
-d "limit=3"
{
"data": [
{
"id": "12029269518058219",
"name": "T1_Broad_AU-CA-DE-GB-US",
"campaign_id": "12020064400866904",
"status": "ACTIVE",
"effective_status": "ACTIVE",
"optimization_goal": "APP_INSTALLS",
"promoted_object": {
"application_id": "5040209235711335",
"object_store_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
"custom_event_type": "MOBILE_APP_INSTALL"
}
},
{
"id": "12027707773097920",
"name": "T1_Lookalike_Payers_CA-DE-US",
"campaign_id": "12020064400866904",
"status": "ACTIVE",
"effective_status": "ACTIVE",
"optimization_goal": "APP_INSTALLS",
"promoted_object": {
"application_id": "5040209235711335",
"object_store_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
"custom_event_type": "MOBILE_APP_INSTALL"
}
},
{
"id": "12024481725776212",
"name": "T1_Interest_Gaming_AU-CA-DE",
"campaign_id": "12020064400866904",
"status": "ACTIVE",
"effective_status": "ACTIVE",
"optimization_goal": "APP_INSTALLS",
"promoted_object": {
"application_id": "5040209235711335",
"object_store_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
"custom_event_type": "MOBILE_APP_INSTALL"
}
}
],
"paging": {
"cursors": {
"before": "b2Zmc2V0OjA",
"after": "b2Zmc2V0OjM"
},
"next": "https://graph.huydata.com/v21.0/act_199454714457591/adsets?fields=id%2Cname%2Ccampaign_id%2Cstatus%2Ceffective_status%2Coptimization_goal%2Cpromoted_object&limit=3&access_token=...&after=b2Zmc2V0OjM"
}
}
Because limit=3 was smaller than the number of ad sets, paging.next is present.
Request it to get the next 3.
List ad sets of a campaign: GET /<campaign_id>/adsets¶
Same parameters and response shape as above, restricted to one campaign. Calling this
edge on an ad set or ad id returns error 100
(Tried accessing nonexisting field (adsets) on node type (AdSet)).
curl -G "https://graph.huydata.com/v21.0/12020064400866904/adsets" \
-d "access_token=$META_ACCESS_TOKEN" \
-d "fields=id,name,targeting,start_time,end_time"
Read one ad set: GET /<adset_id>¶
| Parameter | Type | Required | Description |
|---|---|---|---|
access_token |
string | yes | Personal token. |
fields |
string | no | Comma-separated list of ad set fields. Default id,name. |
curl -G "https://graph.huydata.com/v21.0/12029269518058219" \
-d "access_token=$META_ACCESS_TOKEN" \
-d "fields=id,name,campaign_id,account_id,status,effective_status,optimization_goal,billing_event,targeting,promoted_object,start_time,end_time,created_time,updated_time"
{
"id": "12029269518058219",
"name": "T1_Broad_AU-CA-DE-GB-US",
"campaign_id": "12020064400866904",
"account_id": "199454714457591",
"status": "ACTIVE",
"effective_status": "ACTIVE",
"optimization_goal": "APP_INSTALLS",
"billing_event": "IMPRESSIONS",
"targeting": {
"geo_locations": {
"countries": ["AU", "CA", "DE", "GB", "US"],
"location_types": ["home", "recent"]
},
"age_min": 18,
"age_max": 65,
"user_os": ["Android"],
"publisher_platforms": ["facebook", "instagram", "audience_network"],
"custom_audiences": [],
"flexible_spec": []
},
"promoted_object": {
"application_id": "5040209235711335",
"object_store_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
"custom_event_type": "MOBILE_APP_INSTALL"
},
"start_time": "2026-04-18T00:00:00+0000",
"created_time": "2026-04-17T04:00:00+0000",
"updated_time": "2026-04-17T04:00:00+0000"
}
end_time is absent because the campaign has no end date.
Nested selection works on object-valued fields, e.g.
fields=id,name,promoted_object{object_store_url} returns only that key (plus id if
the object has one) inside promoted_object.