I use Facebook Ads Api to call statistic of adas in one Ad account:
GET graph.facebook.com/v2.7/act_xxxx/insights?level=ad
But it returns error:
Please reduce the amount data you request.
I wonder how to solve it? Thanks.
The problem happened because you query all ads under one ad account, while it may contain too many.
Solve solution: try to query campaigns under ad account first, then only query campaigns which have insight(statistics) in certain time range.
Python API like below: (start_dt, end_dt, account_id is what you should input)
total_insights = []
# Get campaign first, then get ad insights
account = AdAccount("act_" + str(fb_account_id))
valid_campaigns = []
campaigns_iterator = account.get_campaigns(
fields=[
Campaign.Field.id,
]
)
for campaigns in self.generate_batches(
campaigns_iterator,
BATCH_LIMIT,
):
api_batch = self.api.new_batch()
for campaign in campaigns:
params = {
'time_range': { 'since': start_dt, 'until': end_dt },
'level': 'campaign',
'filtering': '[{field:"campaign.impressions",operator:"GREATER_THAN",value:0},]',
'fields': ['impressions']
}
campaign_insights = campaign.get_insights(params=params)
if campaign_insights:
valid_campaigns.append(campaign)
api_batch.execute()
for campaign in valid_campaigns:
params = {
'time_range': { 'since': start_dt, 'until': end_dt },
'level': 'ad',
'filtering': '[{field:"ad.impressions",operator:"GREATER_THAN",value:0},]',
'fields':['spend','unique_social_clicks', 'inline_link_clicks', 'impressions', 'actions', 'relevance_score', 'ad_id', 'adset_id', 'campaign_id'],
}
insights_iterator = campaign.get_insights(params=params)
# query insights later
for ad_insights in self.generate_batches(
insights_iterator,
BATCH_LIMIT,
):
api_batch = self.api.new_batch()
total_insights.extend(ad_insights)
api_batch.execute()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With