Value-Based Lookalikes

Value-based lookalikes are an enhancement of Lookalike Audiences. With it you can include an arbitrary, numeric value for each user set when you create a seed custom audience from CRM data. Facebook uses this to determine which users in an audience are worth the most to you, in a quantifiable way.

To use this product, you must agree with the value-based lookalike terms of services for every ad account using this feature. See Terms of Service.

Create

Step 1: Create a Value-Based Custom Audience

This is a specialized multi-key custom audience, you create with the parameter is_value_based.

curl -X POST \ -F 'name="Value-Based Custom Audience"' \ -F 'subtype="CUSTOM"' \ -F 'is_value_based=1' \ -F 'customer_file_source="PARTNER_PROVIDED_ONLY"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/customaudiences
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const CustomAudience = bizSdk.CustomAudience; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'Value-Based Custom Audience', 'subtype' : 'CUSTOM', 'is_value_based' : '1', 'customer_file_source' : 'PARTNER_PROVIDED_ONLY', }; const customaudiences = (new AdAccount(id)).createCustomAudience( fields, params ); logApiCallResult('customaudiences api call complete.', customaudiences);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\CustomAudience; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Value-Based Custom Audience', 'subtype' => 'CUSTOM', 'is_value_based' => '1', 'customer_file_source' => 'PARTNER_PROVIDED_ONLY', ); echo json_encode((new AdAccount($id))->createCustomAudience( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.customaudience import CustomAudience from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Value-Based Custom Audience', 'subtype': 'CUSTOM', 'is_value_based': '1', 'customer_file_source': 'PARTNER_PROVIDED_ONLY', } print AdAccount(id).create_custom_audience( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createCustomAudience() .setName(\"Value-Based Custom Audience\") .setSubtype(CustomAudience.EnumSubtype.VALUE_CUSTOM) .setIsValueBased(true) .setCustomerFileSource(CustomAudience.EnumCustomerFileSource.VALUE_PARTNER_PROVIDED_ONLY) .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) customaudiences = ad_account.customaudiences.create({ name: 'Value-Based Custom Audience', subtype: 'CUSTOM', is_value_based: '1', customer_file_source: 'PARTNER_PROVIDED_ONLY', })

Step 2: Populate a Seed Audience

You need to populate the new audience with supported identifiers and with the schema key LOOKALIKE_VALUE. You can represent lookalike values by either an integer or float-point arbitrary non-negative number.

curl -X POST \ -F 'payload={ "schema": [ "EMAIL", "LOOKALIKE_VALUE" ], "data": [ [ "9b431636bd164765d63c573c346708846af4f68fe3701a77a3bdd7e7e5166254", 44.5 ], [ "8cc62c145cd0c6dc444168eaeb1b61b351f9b1809a579cc9b4c9e9d7213a39ee", 140 ], [ "4eaf70b1f7a797962b9d2a533f122c8039012b31e0a52b34a426729319cb792a", 0 ], [ "98df8d46f118f8bef552b0ec0a3d729466a912577830212a844b73960777ac56", 0.9 ] ] }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/<CUSTOM_AUDIENCE_ID>/users
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const CustomAudience = bizSdk.CustomAudience; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<CUSTOM_AUDIENCE_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'payload' : {'schema':['EMAIL','LOOKALIKE_VALUE'],'data':[['9b431636bd164765d63c573c346708846af4f68fe3701a77a3bdd7e7e5166254',44.5],['8cc62c145cd0c6dc444168eaeb1b61b351f9b1809a579cc9b4c9e9d7213a39ee',140],['4eaf70b1f7a797962b9d2a533f122c8039012b31e0a52b34a426729319cb792a',0],['98df8d46f118f8bef552b0ec0a3d729466a912577830212a844b73960777ac56',0.9]]}, }; const users = (new CustomAudience(id)).createUser( fields, params ); logApiCallResult('users api call complete.', users);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\CustomAudience; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<CUSTOM_AUDIENCE_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'payload' => array('schema' => array('EMAIL','LOOKALIKE_VALUE'),'data' => array(array('9b431636bd164765d63c573c346708846af4f68fe3701a77a3bdd7e7e5166254',44.5),array('8cc62c145cd0c6dc444168eaeb1b61b351f9b1809a579cc9b4c9e9d7213a39ee',140),array('4eaf70b1f7a797962b9d2a533f122c8039012b31e0a52b34a426729319cb792a',0),array('98df8d46f118f8bef552b0ec0a3d729466a912577830212a844b73960777ac56',0.9))), ); echo json_encode((new CustomAudience($id))->createUser( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.customaudience import CustomAudience from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<CUSTOM_AUDIENCE_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'payload': {'schema':['EMAIL','LOOKALIKE_VALUE'],'data':[['9b431636bd164765d63c573c346708846af4f68fe3701a77a3bdd7e7e5166254',44.5],['8cc62c145cd0c6dc444168eaeb1b61b351f9b1809a579cc9b4c9e9d7213a39ee',140],['4eaf70b1f7a797962b9d2a533f122c8039012b31e0a52b34a426729319cb792a',0],['98df8d46f118f8bef552b0ec0a3d729466a912577830212a844b73960777ac56',0.9]]}, } print CustomAudience(id).create_user( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<CUSTOM_AUDIENCE_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new CustomAudience(id, context).createUser() .setPayload(\"{\\"schema\\":[\\"EMAIL\\",\\"LOOKALIKE_VALUE\\"],\\"data\\":[[\\"9b431636bd164765d63c573c346708846af4f68fe3701a77a3bdd7e7e5166254\\",44.5],[\\"8cc62c145cd0c6dc444168eaeb1b61b351f9b1809a579cc9b4c9e9d7213a39ee\\",140],[\\"4eaf70b1f7a797962b9d2a533f122c8039012b31e0a52b34a426729319cb792a\\",0],[\\"98df8d46f118f8bef552b0ec0a3d729466a912577830212a844b73960777ac56\\",0.9]]}\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<CUSTOM_AUDIENCE_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end custom_audience = FacebookAds::CustomAudience.get(id) users = custom_audience.users.create({ payload: {'schema':['EMAIL','LOOKALIKE_VALUE'],'data':[['9b431636bd164765d63c573c346708846af4f68fe3701a77a3bdd7e7e5166254',44.5],['8cc62c145cd0c6dc444168eaeb1b61b351f9b1809a579cc9b4c9e9d7213a39ee',140],['4eaf70b1f7a797962b9d2a533f122c8039012b31e0a52b34a426729319cb792a',0],['98df8d46f118f8bef552b0ec0a3d729466a912577830212a844b73960777ac56',0.9]]}, })

Step 3: Create a Value-Based Lookalike

After the custom audience contains at least 100 people, you can use it as a seed audience for a new lookalike of type custom_ratio.

curl -X POST \ -F 'name="Value-Based lookalike"' \ -F 'subtype="LOOKALIKE"' \ -F 'origin_audience_id="<CUSTOM_AUDIENCE_ID>"' \ -F 'lookalike_spec={ "type": "custom_ratio", "ratio": 0.01, "country": "US" }' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/customaudiences
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const CustomAudience = bizSdk.CustomAudience; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'Value-Based lookalike', 'subtype' : 'LOOKALIKE', 'origin_audience_id' : '<valueBasedCustomAudienceID>', 'lookalike_spec' : {'type':'custom_ratio','ratio':0.01,'country':'US'}, }; const customaudiences = (new AdAccount(id)).createCustomAudience( fields, params ); logApiCallResult('customaudiences api call complete.', customaudiences);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\CustomAudience; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Value-Based lookalike', 'subtype' => 'LOOKALIKE', 'origin_audience_id' => '<valueBasedCustomAudienceID>', 'lookalike_spec' => array('type' => 'custom_ratio','ratio' => 0.01,'country' => 'US'), ); echo json_encode((new AdAccount($id))->createCustomAudience( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.customaudience import CustomAudience from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Value-Based lookalike', 'subtype': 'LOOKALIKE', 'origin_audience_id': '<valueBasedCustomAudienceID>', 'lookalike_spec': {'type':'custom_ratio','ratio':0.01,'country':'US'}, } print AdAccount(id).create_custom_audience( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createCustomAudience() .setName(\"Value-Based lookalike\") .setSubtype(CustomAudience.EnumSubtype.VALUE_LOOKALIKE) .setOriginAudienceId(\"<valueBasedCustomAudienceID>\") .setLookalikeSpec(\"{\\"type\\":\\"custom_ratio\\",\\"ratio\\":0.01,\\"country\\":\\"US\\"}\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) customaudiences = ad_account.customaudiences.create({ name: 'Value-Based lookalike', subtype: 'LOOKALIKE', origin_audience_id: '<valueBasedCustomAudienceID>', lookalike_spec: {'type':'custom_ratio','ratio':0.01,'country':'US'}, })

You can read, update and delete a value-based lookalike as you do normal Lookalike Audiences. See also Custom Audiences, Reference and Custom Audience Users, Reference.

Targeting

You can target ads with a value-based lookalikes as you do for any other custom audience. See Ad Set, Reference.