ads_managementads_read| Goal | Use Audience Controls | Use Value Rules | Use Audience Suggestions |
|---|---|---|---|
Must comply with regulations | YES | NO | NO |
Willing to pay more for higher value audiences | NO | YES | NO |
Guide Meta to reach audiences that are more likely to convert | NO | NO | YES |
POST request to the /act_{ad-account-id}/value_rule_set endpoint. The request body for creating a value rule set should include the following parameters:| Name | Description |
|---|---|
name
string
| Required.
A string that represents the name of the value rule set. |
rules
list<object>
| Required.
An array of rules where each rule specifies a set of criteria (such as age or gender) and their corresponding bid adjustments. One rule set supports up to 10 rules. |
rules parameter| Name | Description |
|---|---|
name
string
| Required.
A string that represents the name of the rule. |
adjust_sign
string
| Required.
indicates if the adjustment is intended to increase or decrease the bid. Values: INCREASE, DECREASE |
adjust_value
integer
| Required.
A number to inform the percentage of the adjustment for the bid. Values:
|
criteria
list<object>
| Required.
An array of objects representing the audience criteria and its associated bid adjustment. |
criteria parameter| Name | Description |
|---|---|
criteria_type
string
| Required.
Dimension intended for bid adjustment. Values: AGE, GENDER, OS_TYPE, DEVICE_PLATFORM, LOCATION, PLACEMENT |
operator
string
| Required.
Operator used when evaluating the criteria. Currently, the only supported operator is CONTAINS.Value: CONTAINS |
criteria_values
list<string>
| Required.
An array of strings that specifies the criteria value for the given criteria_type. |
criteria_value_types
list<string>
| Required.
An array of strings that specifies the level of detail for the types of criteria being used. This allows for more precise targeting by defining the scope of the criteria. |
criteria_values and criteria_value_types fieldscriteria_values and criteria_value_types arrays work together to define the values for a specific criteria_type or dimension used in the bid adjustment. Each value in the criteria_values array must have a corresponding type specified in the criteria_value_types array, with types listed in the same order as their respective values.| criteria_type | criteria_values | criteria_value_types |
|---|---|---|
AGE | 1. Predefined age range
“18-24”, “25-34”, “35-44”, “45-55”, “55-64”, “65+” 2. Custom age range
Age ranges can be arbitrary (e.g., “18-26”) or open-ended (e.g., “45+”). For example: [“18-26”, “31-37”, “48+”]. Important: Using “65” as the upper limit of a range is not allowed; use “18+” instead of “18-65”. Note: Rule sets using custom age ranges will not be editable (read only) in the Ads Manager UI, editing rule set is possible only via API. | NONE |
GENDER | MALE, FEMALE | NONE |
OS_TYPE | ANDROID, IOS | NONE |
DEVICE_PLATFORM | MOBILE, DESKTOP | NONE |
LOCATION | Multiple, dependent on criteria_value_types.Note: Starting June 22 2026, LOCATION_DMA are being replaced with LOCATION_COMSCORE_MARKET. Rules with DMAs won’t be active after this date. You can use equivalent Comscore markets in your audiences and rules. | LOCATION_COUNTRY, LOCATION_REGION, LOCATION_CITY, LOCATION_DMA, LOCATION_COMSCORE_MARKET |
PLACEMENT | FB_FEED,
FB_STORIES,
FB_REELS,
FB_MARKETPLACE,
FB_SEARCH,
FB_VIDEO,
IG_FEED,
IG_STORIES,
IG_REELS,
IG_EXPLORE,
AUDIENCE_NETWORKNote: Rule sets using any of FB_MARKETPLACE, FB_SEARCH, FB_VIDEO, IG_EXPLORE placements will not be editable (read only) in the Ads Manager UI,
editing rule set is possible only via API. | NONE |
OMNI_CHANNEL | APP,
INSTANT_FORM,
PHONE_CALL,
WEBSITE | NONE |
45-55 and 55-64, here is what the criteria object would look like:{ "criteria_type": "AGE", "operator": "CONTAINS", "criteria_values": [ "45-55", "55-64" ], "criteria_value_types": [ "NONE", "NONE" ] }
{ "criteria_type": "LOCATION", "operator": "CONTAINS", "criteria_values": [ "BR", "527" ], "criteria_value_types": [ "LOCATION_COUNTRY", "LOCATION_REGION" ] }
curl -X POST \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/value_rule_set \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "My Value Rule Set",
"rules": [
{
"name": "High age and gender",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"criterias": [
{
"criteria_type": "AGE",
"operator": "CONTAINS",
"criteria_values": [
"18-24"
],
"criteria_value_types": [
"NONE"
]
},
{
"criteria_type": "GENDER",
"operator": "CONTAINS",
"criteria_values": [
"MALE"
],
"criteria_value_types": [
"NONE"
]
}
]
},
{
"name": "High bid for OS",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"criterias": [
{
"criteria_type": "OS_TYPE",
"operator": "CONTAINS",
"criteria_values": [
"ANDROID"
],
"criteria_value_types": [
"NONE"
]
}
]
},
{
"name": "High bid for location country",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"criterias": [
{
"criteria_type": "LOCATION",
"operator": "CONTAINS",
"criteria_values": [
"GB"
],
"criteria_value_types": [
"LOCATION_COUNTRY"
]
}
]
},
{
"name": "High bid for location region",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"criterias": [
{
"criteria_type": "LOCATION",
"operator": "CONTAINS",
"criteria_values": [
"3847"
],
"criteria_value_types": [
"LOCATION_REGION"
]
}
]
}
]
}'
GET request to the /act_{ad-account-id}/value_rule_set endpoint and list any existing value rule set in this ad account. Alternatively, you can make a GET request to the /{value-rule-set-id} endpoint.curl -X GET \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/value_rule_set?fields=name,rules{name,adjust_sign,adjust_value,status,criterias}&access_token=<ACCESS_TOKEN>
{ "data": [ { "id": "1110000000003", "name": "My Value Rule Set", "rules": { "data": [ { "name": "High age and gender", "adjust_sign": "INCREASE", "adjust_value": 20, "criterias": { "data": [ { "criteria_type": "AGE", "operator": "CONTAINS", "criteria_values": [ "18-24" ], "criteria_value_types": [ "NONE" ], "id": "1110000000000" }, { "criteria_type": "GENDER", "operator": "CONTAINS", "criteria_values": [ "male" ], "criteria_value_types": [ "NONE" ], "id": "1110000000001" } ] }, "id": "1110000000002" }, ] } } ] }
POST request to the /{value-rule-set-id} endpoint. The request body should include the ID of all existing objects you intend to update and added fields for the value rule set.GET request, update the fields accordingly, and make a POST request with the updated payload.GET request to get all of the fields and IDs from the value rule set.curl -X GET \
https://graph.facebook.com/v25.0/<VALUE_RULE_SET_ID>?fields=name,rules{name,adjust_sign,adjust_value,status,criterias}&access_token=<ACCESS_TOKEN>
{ "name": "Value Rule Set", "rules": { "data": [ { "name": "High age", "adjust_sign": "INCREASE", "adjust_value": 20, "status": "ACTIVE", "criterias": { "data": [ { "criteria_type": "AGE", "operator": "CONTAINS", "criteria_values": [ "18-24" ], "criteria_value_types": [ "NONE" ], "id": "1000000000000089" } ] }, "id": "1000000000000099" } ] }, "id": "1000000000000056", }
65+ in the existing criteria and add a gender criteria for FEMALE, the POST request for updating this value rule set should look like this:curl -X POST \
https://graph.facebook.com/v25.0/<VALUE_RULE_SET_ID> \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Value Rule Set",
"rules": [
{
"name": "High age",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"status": "ACTIVE",
"criterias": [
{
"criteria_type": "AGE",
"operator": "CONTAINS",
"criteria_values": [
"18-24",
"65+"
],
"criteria_value_types": [
"NONE",
"NONE"
],
"id": "1000000000000089"
},
{
"criteria_type": "GENDER",
"operator": "CONTAINS",
"criteria_values": [
"FEMALE"
],
"criteria_value_types": [
"NONE"
]
}
],
"id": "1000000000000099"
}
],
"id": "1000000000000056"
}'
POST request for updating this value rule set should look like this:curl -X POST \
https://graph.facebook.com/v25.0/<VALUE_RULE_SET_ID> \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Value Rule Set",
"rules": [
{
"name": "High age",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"status": "ACTIVE",
"criterias": [
{
"criteria_type": "GENDER",
"operator": "CONTAINS",
"criteria_values": [
"FEMALE"
],
"criteria_value_types": [
"NONE"
]
}
],
"id": "1000000000000099"
}
],
"id": "1000000000000056"
}'
POST request for updating this value rule set should look like this:curl -X POST \
https://graph.facebook.com/v25.0/<VALUE_RULE_SET_ID> \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Value Rule Set Updated Name",
"rules": [
{
"name": "High age",
"adjust_sign": "INCREASE",
"adjust_value": 20,
"status": "ACTIVE",
"criterias": [
{
"criteria_type": "GENDER",
"operator": "CONTAINS",
"criteria_values": [
"FEMALE"
],
"criteria_value_types": [
"NONE"
]
}
],
"id": "1000000000000099"
}
],
"id": "1000000000000056"
}'
POST request to the /{value-rule-set-id}/delete_rule_set endpoint with an empty request body.curl -X POST \
https://graph.facebook.com/v25.0/<VALUE_RULE_SET_ID>/delete_rule_set \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
VALUE_RULE_SET_ID is a valid ID{ "success": true }
VALUE_RULE_SET_ID is an invalid ID{ "error": { "message": "Unsupported post request. Object with ID 'redacted' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at /docs/graph-api", "type": "GraphMethodException", "code": 100, "error_subcode": 33, "fbtrace_id": "fbtrace_id" } }
value_rule_set_id to the ad set creation request. To learn more about other ad set fields, see Ad Set.curl -X POST \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adsets \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "My Ad Set",
"campaign_id": "<CAMPAIGN_ID>",
"value_rule_set_id": "<VALUE_RULE_SET_ID>",
"value_rules_applied": true
... // other ad set fields
}'
POST request to the /{ad_set_id} endpoint. Within the request body, set value_rules_applied to true and the value_rule_set_id to the ID of an existing value rule set.curl -X POST \
https://graph.facebook.com/v25.0/<AD_SET_ID> \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"value_rule_set_id": "<VALUE_RULE_SET_ID>",
"value_rules_applied": true
}'
value_rules_applied set to true is optional when adding a value rule set to ad sets.POST request to the /{ad_set_id} endpoint, setting the value_rules_applied field to false and omitting the value_rule_set_id field from the request body.curl -X POST \
https://graph.facebook.com/v25.0/<AD_SET_ID> \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"value_rules_applied": false
}'
value_rule_set_id field in the POST request, even with value_rules_applied set to false, the specified rule set will be attached to the campaign. To detach a value rule set, only include the value_rules_applied field set to false.POST request to the /{ad_set_id} endpoint and provide the new value_rule_set_id in the request body. This will overwrite the previous value rule set associated with the ad set.curl -X POST \
https://graph.facebook.com/v25.0/<AD_SET_ID> \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"value_rule_set_id": "<NEW_VALUE_RULE_SET_ID>",
"value_rules_applied": true
}'
value_rules_applied set to true is optional when adding a value rule set to the Ad Set.LOWEST_COST_WITHOUT_CAP (also known as auto-bid) and COST_CAP bid strategy, with the exception of following configurations:OUTCOME_SALES with web and in-store conversion locations{ "optimization_goal": "OFFSITE_CONVERSIONS", "promoted_object": { "omnichannel_object": { "offline": [ { "custom_event_type": "PURCHASE", "offline_conversion_data_set_id": "offline_conversion_data_set_id" } ], "pixel": [ { "custom_event_type": "PURCHASE", "pixel_id": "pixel_id" } ] } } }
OUTCOME_LEADS with web and call conversion locations{ "optimization_goal": "OFFSITE_CONVERSIONS", "optimization_sub_event": "NONE", "promoted_object": { "pixel_id": "pixel_id", "custom_event_type": "LEAD" } }