The Facebook Ads bidding and budget information may seem to work in mysterious ways, especially when you are trying to generate a report from the API. Here is a picture of how it fits together.
First, if you are trying to recreate the numbers you see in the online web reporting, you may need to recreate the logic behind the numbers as well. The Facebook Marketing API does not offer the data in the same way. For example, the ‘results’ column contains a different number depending of the objective of the campaign. In the API, those numbers are stored in different fields, so if you have a report with campaigns with different objectives, you will need to include the appropriate metric fields.
While spending data comes from the Insights API, the bidding and budgets data is available from the campaign, adset and ad endpoints (in the Analytics Edge connector, this would be the Ads Listing query). This means a budget-and-spending report will need multiple queries.
At the Campaign level, you have:
- objective – the objective for the campaign (e.g. conversions, link clicks)
- buying_type – auction or reserved (for reach and frequency ads)
- can_use_spend_cap – if a spend cap is allowed for this campaign.
- spend_cap – if one is specified, expressed in currency subunits (e.g. cents).
At the Ad Set level, you have:
- lifetime_budget – for fixed duration ad sets
- daily_budget – for continuous-run ad sets
- budget_remaining – remaining lifetime or daily budget.
- bid_amount – bid cap or target cost for this ad set (only if autobid is turned off).
- billing_event – the event that triggers a cost (e.g. clicks, impressions, page likes)
And at the Ad level, you have:
- bid_type – if and only if set at the ad-level, this overrides the adset bid amount for this ad.
- bid_amount – if and only if set at the ad-level, this overrides the adset bid amount for this ad.