Our research has shown that people demonstrate a preference for ads with less text, which is why we've had a policy limiting excessive text on images in ads for years. We are rolling out a new solution globally, which will allow these ads that were previously disapproved due to our text policy to run, but with less or no delivery.
When you create or update an ad, you can specify execution_options=['include_recommendations', 'validate_only']
, then the response to your call will include the ad review result from Facebook, if we detect too much text overlay. No matter what the review says, you can still create the ad but its delivery may be impacted.
use FacebookAds\Object\Ad;
use FacebookAds\Object\Fields\AdFields;
$data = array(
AdFields::NAME => 'My Ad',
AdFields::ADSET_ID => <AD_SET_ID>,
AdFields::CREATIVE => array(
'creative_id' => <CREATIVE_ID>,
),
);
$ad = new Ad(null, 'act_<AD_ACCOUNT_ID>');
$ad->setData($data);
$ad->create(array(
Ad::STATUS_PARAM_NAME => Ad::STATUS_PAUSED,
'execution_options' =>
array('include_recommendations', 'validate_only'),
));
from facebookads.adobjects.ad import Ad
ad = Ad(parent_id='act_<AD_ACCOUNT_ID>')
ad[Ad.Field.name] = 'My Ad'
ad[Ad.Field.adset_id] = <AD_SET_ID>
ad[Ad.Field.creative] = {
'creative_id': <CREATIVE_ID>,
}
ad.remote_create(params={
'status': Ad.Status.paused,
Ad.Field.execution_options: [
'validate_only',
'include_recommendations',
],
})
Ad ad = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAd()
.setName("My Ad")
.setAdsetId(<AD_SET_ID>)
.setCreative(
new AdCreative()
.setFieldId(<CREATIVE_ID>)
)
.setStatus(Ad.EnumStatus.VALUE_PAUSED)
.setExecutionOptions("[\"include_recommendations\",\"validate_only\"]")
.execute();
curl \
-F 'name=My Ad' \
-F 'adset_id=<AD_SET_ID>' \
-F 'creative={"creative_id":"<CREATIVE_ID>"}' \
-F 'status=PAUSED' \
-F 'execution_options=["include_recommendations","validate_only"]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/ads
Sample response:
{ "success": true, "recommendations": [ { "title": "Ad image contains too much text", "message": "Your ad uses an image that has a lot of text within it. Because of this, your ad may not reach as many people as possible or may not be delivered at all. Try reducing the amount of text in your ad's image.", "code": 1942015, "importance": "HIGH", "confidence": "HIGH", "blame_field": "creative", }, ] }
After the ad is active and Facebook delivers it, if the ad has an image with too much text, Facebook reviews it and assigns a delivery reduction level.
You can read the delivery reduction level by checking the recommendations
of an ad.
use FacebookAds\Object\Ad;
use FacebookAds\Object\Fields\AdFields;
$ad = new Ad($ad_id);
$ad->read(array(
AdFields::RECOMMENDATIONS,
));
// Output recommendations
echo $ad->{AdFields::RECOMMENDATIONS}.PHP_EOL;
Sample response: (The title
field contains the level as "High" in this example)
{ "recommendations": [ { "title": "Text Overlay Penalty Level High", "message": "Your ad's image contains an excessive amount of text. A penalty is restricting your ad from running. Reduce image text to make sure your ad reaches its audience.", "code": 1942019, "importance": "HIGH", "confidence": "HIGH", "blame_field": "creative" } ], "id": "<AD_ID>" }
If your ad has no image text issues, you will not see this recommendation. Otherwise, you may see the penalty level as Low, Medium, or High.
Level | Code | Delivery Impact |
---|---|---|
Low | 1942017 | The delivery would be slightly impacted. |
Medium | 1942018 | The delivery would be impacted. |
High | 1942019 | The delivery would be stopped. |