Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to avoid "requests have too many data" in Facebook Ads API call

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.

like image 692
tupptp Avatar asked Sep 11 '25 23:09

tupptp


1 Answers

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()
like image 97
linpingta Avatar answered Sep 14 '25 14:09

linpingta



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!