Opportunity score and recommendations enable advertisers to discover and implement best practices that can optimize their ad campaigns with Meta. This guide will help you understand the components of opportunity score and how to integrate them with your application.
Opportunity score is a tool for understanding how well-optimized an ad account is for achieving optimal performance and generates recommendations that could improve performance. It consists of two parts:
Your opportunity score (range: 0–100) — Reflects how optimized your ad account is. A higher score indicates better optimality and a greater likelihood of improved performance over time.
Recommendations — Experimentally-proven best practices that are personalized to each ad account. They may relate to your campaigns, ad sets, or ads, and have been rigorously tested to show they can deliver statistically significant performance improvements.*
* Note: Meta is frequently testing new types of recommendations on the Ads Manager Web UI. Under certain circumstances, there could be fewer recommendations returned by the API versus what is shown in Ads Manager.
By applying performance recommendations from Meta, you agree to the Facebook Terms of Service including your obligation to comply with the Self-serve ad terms, the Commercial terms, and the Facebook Advertising Policies.
To fetch all the recommendations available for your ad account, make a GET request to the /act_<AD_ACCOUNT_ID>/recommendations endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account.
curl -G \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/recommendations
On success, your app receives a list of recommendations that Meta has generated. If this list is empty, Meta has not identified any changes that can be made to increase the ads performance in your ad account.
{
"data": [
{
"recommendations": [
{
"recommendation_signature": "1234567",
"type": "AUTOFLOW_OPT_IN",
"object_ids": ["7656787679008", "2345678765423", ...],
"recommendation_content": {
"lift_estimate": "Up to 3% more Traffic",
"body": "2 of your ad sets have similar objectives and creatives..",
"opportunity_score_lift": "14"
},
"url": "https://adsmanager.facebook.com/adsmanager/...."
}
],
}
]
...
}
| Name | Description |
|---|---|
| Unique identifier for this recommendation. Required to refer to this recommendation in the recommendation application API. For recommendations that cannot be resolved in the API, this value will not be returned. |
| Enum value denoting what type of recommendation this is. Description of what each possible value means and what applying them entails is provided in the Applying recommendations secion below. |
| List of ads objects that pertain to this recommendation. May be a campaign, ad set, or ad. |
| Describes the improvement that could see in accepting a given recommendation. |
| This is a description of the recommendation similar to the descriptions listed in teh Performance recommendation types section below. |
| This is the lift in opportunity score that would be expected from applying this recommendation. |
| This is the URL that links directly to the user flow in Ads Manager to apply the recommendation. |
To apply a recommendation for your ad account, make a POST request to the /act_<AD_ACCOUNT_ID>/recommendations endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account.
The recommendation application API supports the following parameters.
| Name | Description |
|---|---|
string | Required. Signature provided in the recommendation fetching API, which corresponds to a unique recommendation. |
object | Optional. Music recommendation parameters. Specific parameters are listed below. |
object | Optional. Autoflow opt-in recommendation parameters. Specific parameters are listed below. |
object | Optional. Fragmentation recommendation parameters. Specific parameters are listed below. |
music_parameters object| Name | Description |
|---|---|
array of numeric strings | Optional. A list of ad IDs to apply the music recommendation to. List must be a subset of provided IDs in |
autoflow_parameters object| Name | Description |
|---|---|
array of numeric strings | Optional. A list of ad IDs to apply the autoflow opt-in recommendation to. List must be a subset of provided IDs in |
fragmentation_parameters object| Name | Description |
|---|---|
array of numeric strings | Optional. A list of ad set IDs to apply the fragmentation recommendation to. List must be a subset of provided IDs in |
curl -X POST \
-d 'access_token=<ACCESS_TOKEN>' \
-d 'recommendation_signature="1234567"' \
-d 'music_parameters={"object_selection": ["7656787679008"]}' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/recommendations
On success, your app receives a Boolean value denoting whether the recommendation was successfully applied. If it was not successfully applied, your ad objects will remain unchanged.
{
"success": true
}
These are the currently supported performance recommendation types and what happens when the recommendation is succcessfully applied.
| Name | Description |
|---|---|
| Allow Meta to automatically select and add music to your ads, at no cost to you, based on their content. Applying this recommendation will enable this functionality for the selected ads objects. If no selection is provided, it will be enabled for all listed ads objects. Use of music in your ads is subject to the Sound Collection Terms. |
| Enable standard enhancements, which leverages Meta's data to deliver different variations of your ad when likely to improve performance. Applying this recommendation will enable this functionality for the selected ads objects. If no selection is provided, it will be enabled for all listed ads objects. |
| Allow Meta to automatically select additional placements for your ad sets while making the most of your budget. Learn more about Advantage+ Placements. |
| Expand your images to fit more placements. You can use generated images that expand the aspect ratios of your media, which can fit your ad into new placements and show them to more people. Applying this recommendation will enable this functionality for the selected ads objects. If no selection is provided, it will be enabled for all listed ads objects. |
| Some of your ad sets have similar setups and creatives, but different audiences. As a result, they may take longer to exit the learning phase and spend more budget before performance has optimized. To optimize your ads spending, combine your similar ad sets into one ad set. Applying this recommendation will perform the following changes:
|
| Cost per result for this ad set may be higher than ads you ran in the past because its image or ide has been show to parts of your audience too many times. Applying this recommendation requires an ad ID and creative ID, and will create a copy of the provided ad, except with the provided new creative. |
| Cost per result for this ad set may be higher than ads you ran in the past because its image or ide has been show to parts of your audience too many times. Applying this recommendation requires an ad ID and creative ID, and will create a copy of the provided ad, except with the provided new creative. |
| By integrating the Conversions API, you can get more accurate data about the conversions from your Meta ads, which will improve audience targeting and help lower your cost per result. Get started with the Conversions API. Note: This recommendation currently cannot be applied through Marketing API. |
| Your ads performance can benefit from sending additional fields within your existing conversions reporting. Please review your Meta Pixel integration in Events Manager. Note: This recommendation currently cannot be applied through Marketing API. |
| Some ad sets or campaigns have had stable delivery and a lower cost per result compared to ad sets and campaigns with the same optimization goal that you or your peers have run. Increase their budgets to further scale your results. |
| Multiple ad sets in your account use the website conversion location. Help improve your ad performance by selecting |
| Leverage Advantage+ audiences to let Meta automatically identify and target the most relevant audience segments for your ad sets, optimizing your budget for maximum impact. Learn more about Advantage+ Audiences. |
| Create a new awareness campaign with the performance goal "Maximize ad recall lift" to help more people remember your brand. |
| Create a campaign using Advantage+ catalog to deliver personalized ads to new and existing interested shoppers based on their behaviors, interests, and intent. |
| Help your products stand out by using AI-generated backgrounds with eligible product images to show the version thats likely to perform best. |
| Your current budget may be limiting the performance of your campaigns. You could get more results by increasing the budget. |
| Connect your CRM with the Conversions API to help optimize the quality of your leads, which can lead to more conversions. |
| Choose "Maximize number of conversion leads" as your performance goal to help lower the cost of reaching people most likely to convert. |
| Use a "Tailored messages" campaign to simplify campaign creation and help get more messages at the best value. |
| Duplicate your campaign as an "Engagement" campaign with "Maximize number of conversations" as the performance goal to help drive more conversations at a lower cost. |
| None of the ad sets within this campaign are running. Each ad set has at least one error that needs to be resolved. |
| Spend less of your budget on underperforming ad sets and more on ad sets with the best opportunities. You can set limits or scheduling for each ad set. |
| Create a campaign with the performance goal of "Maximize landing page views" to deliver ads to audiences who are most likely to visit your website. |
| Lower your cost per lead and create your campaign in fewer steps using a tailored leads campaign, a preset with built-in best practices to help you get more leads at the best value. |
| Set up your purchase events through WhatsApp or a messaging partner, and then select the "Maximize purchases" optimization through the "Messaging performance" goal to help lower costs. |
| Work with a messaging partner to help manage incoming messages, generate leads, and provide extensive analytics to optimize your conversations and conversions. |
| Use a mix of videos and images in your campaign to reach users in different ways. |
| Select more text options so they can be mixed and matched to create different versions of your ad. The version that may perform best will be shown for each placement. |
| Select the "Maximize number of conversions" performance goal to help drive new customers to your website and lower your cost per result. |
| Select "Reels" placements for ads already using media that works well in Reels placements, so people are more likely to interact with them. |
| Set up "Purchase events" with Meta Pixel, which helps deliver ads to the people most likely to convert and can lower your cost per purchase. |
| Connect your website using Meta Pixel to help improve audience targeting, better understand your conversions, and help reduce your cost per result over time. |
| Update your performance goal to "Maximize number of landing page views", which no longer requires a Meta Pixel integration, to deliver your ads to audiences who are most likely to visit your website. |
| These messaging ad sets and campaigns have had stable delivery and better performance compared to your ad sets and campaigns with the same goals. Consider increasing their budgets to scale the results further. |
| Include a fullscreen vertical video (9:16) with audio in your Reels ads to improve performance. |
| Improve your ad performance by selecting "Website" and "Shop" conversion locations for ad sets currently using the Website conversion location. This lets you automatically send traffic either to your website or shop on Facebook or Instagram. |
| Answer unread customer messages within 5 hours of receipt to help increase their value. |
| Reach people more likely to generate higher value for your business by focusing on key events across the customer journey, like "Add to cart". Use the "Maximize value of conversions" performance goal to get started. |
| Work with a messaging partner to help manage incoming messages, generate leads, and provide extensive analytics to optimize your conversations and conversions. |
When querying for ads using the Marketing API, it is highly recommended to always apply a time range filter to your requests. This best practice ensures that your queries are efficient, performant, and return only the relevant data you need. By specifying a time range, you reduce the amount of data processed and transferred, which helps avoid unnecessary load on the system and improves response times.
For example, when using an API endpoint such as /{ad-account-id}/ads, you should include parameters that define the start and end dates for your query. This not only aligns with the performance recommendations outlined in this guide, but also helps you avoid common pitfalls like timeouts or excessive data retrieval.
curl -G \
-d "access_token=<ACCESS_TOKEN>" \
-d "limit=200" \
-d "effective_status=['ACTIVE','PAUSED']" \
-d "fields=id,name,created_time,updated_time" \
-d "time_range={'since':'2025-12-01','until':'2025-12-15'}" \
-d "summary=true" \
"https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/ads"
In this example, the time_range parameter restricts the results to ads active between December 1, 2025 and December 15, 2025. Always tailor the time range to your specific use case to maximize query performance and relevance.