News for Developers

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.

Creating or Updating Your Ads

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>');
  'execution_options' =>
    array('include_recommendations', 'validate_only'),
from import Ad

ad = Ad(parent_id='act_<AD_ACCOUNT_ID>')
ad[] = 'My Ad'
ad[Ad.Field.adset_id] = <AD_SET_ID>
ad[Ad.Field.creative] = {
    'creative_id': <CREATIVE_ID>,
    'status': Ad.Status.paused,
    Ad.Field.execution_options: [
Ad ad = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAd()
  .setName("My Ad")
    new AdCreative()
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>' \<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 an Ad is Created

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);

// Output recommendations
echo $ad->{AdFields::RECOMMENDATIONS}.PHP_EOL;
curl \
-d "fields=recommendations" \
-d "access_token=<ACCESS_TOKEN>" \<API_VERSION>/<AD_ID>

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



The delivery would be slightly impacted.



The delivery would be impacted.



The delivery would be stopped.

Handling Delivery Reduction

  • You should check the recommendation before ad creation, and get the "text overlay penalty level" after an ad is created and delivered. You can modify the creative if the reduction level is not acceptable.
  • If you are willing to see reduced delivery of your ad as a result of including important text, you can continue creating your ad. Check the reduction level to understand how much this impedes delivery and whether it is too much for your preference.