Search code examples
facebookgeolocationfacebook-ads-api

Is there any relationship between the reach estimate in Ads Manager and in the Ads API?


I just noticed that the numbers given by Ads API and the Ads Manager are wildly different. For instance, when searching for the French speakers in the city of Anderlecht, Belgium, the Ads Manager shows 44,000 people and the Ads API gives me the number 12,000.

See the screenshot of the Ads Manager UI and of the curl script calling below:

Audience reach in Ads Manager

curl -G  -q \
  -d 'targeting_spec={"geo_locations":{"cities":    
      [{"key":"171194"}]},"locales":[1003]}' \
  -d 'access_token=XYZ' \
https://graph.facebook.com/v2.3/act_000000000000000/reachestimate

The number 1003 in locales corresponds to "French (All)" and the number 171194 is cities corresponds to "Anderlecht".

What explains such a difference in reach estimations?

Here's the JSON output from the above script:

{"users": 12000, "bid_estimations": [{
  "unsupported": false, "location": 3, "cpa_min": 66,
     "cpa_median": 107, "cpa_max": 140, "cpc_min": 19, 
     "cpc_median": 33, "cpc_max": 43, "cpm_min": 10, 
     "cpm_median": 42, "cpm_max": 106 }],
  "estimate_ready": true, "data": {"users": 12000,
"bid_estimations": [{
   "unsupported": false,  "location": 3, "cpa_min": 66,
   "cpa_median": 107, "cpa_max": 140, "cpc_min": 19, 
   "cpc_median": 33, "cpc_max": 43, "cpm_min": 10, 
   "cpm_median": 42, "cpm_max": 106}],
"estimate_ready": true}}

Solution

  • OK, I did look into the AJAX calls made by Ads Manager, and it looks like the default location_types attribute is "home" while the Ads Manager uses "home" and "recent". That's the difference.

    curl -G  -q \
      -d 'targeting_spec={"geo_locations":{"cities":    
          [{"key":"171194"}],"location_types":["recent", "home"]},"locales":[1003]}' \
      -d 'access_token=XYZ' \
    https://graph.facebook.com/v2.3/act_000000000000000/reachestimate