| spend |
BigDecimal |
|
[optional] |
| impressions |
Integer |
|
[optional] |
| reach |
Integer |
|
[optional] |
| clicks |
Integer |
|
[optional] |
| ctr |
BigDecimal |
Click-through rate (%) |
[optional] |
| cpc |
BigDecimal |
Cost per click |
[optional] |
| cpm |
BigDecimal |
Cost per 1000 impressions |
[optional] |
| engagement |
Integer |
|
[optional] |
| conversions |
Integer |
Count of conversion events matching the campaign's promoted_object.custom_event_type (PURCHASE, LEAD, etc.) over the requested date range. 0 for non-conversion campaigns or when no events have fired. Meta-only at time of writing; other platforms return 0. |
[optional] |
| costPerConversion |
BigDecimal |
Derived spend / conversions in the same currency as spend. 0 when conversions is 0. |
[optional] |
| actions |
Map<String, Integer> |
Raw per-action-type counts from Meta's Insights actions[] array, summed over the date range. Keys are Meta action_type strings (e.g. link_click, offsite_conversion.fb_pixel_purchase, onsite_conversion.lead_grouped). Use this to extract any conversion event (purchases, leads, add_to_cart, etc.) without relying on the derived conversions field. Empty object when no actions are reported. |
[optional] |
| actionValues |
Map<String, BigDecimal> |
Monetary mirror of `actions`, from Meta's Insights `action_values[]` array. Same keying — values are the revenue attributed to each action_type, in ad-account native currency (same unit as `spend`; see the campaign node's `currency` field). Use this to compute revenue-per-event (e.g. avg purchase value). Meta-only; other platforms return {}. |
[optional] |
| purchaseValue |
BigDecimal |
Convenience sum of purchase-type action values — picked from `actionValues` via the same priority list as `conversions` so both fields describe the same events. In ad-account native currency. 0 when the campaign has no purchase event configured. Meta-only. |
[optional] |
| roas |
BigDecimal |
Return on ad spend — derived as `purchaseValue / spend`. 0 when `spend` is 0. Equivalent to Meta's `purchase_roas` under default attribution. At ad-set and campaign levels this is recomputed from summed purchaseValue + spend (NOT averaged across children) so it's mathematically correct at every rollup level. |
[optional] |
| videoPlayActions |
Integer |
Meta video ads only (0 for non-video ads and other platforms), like all video* fields below. Number of times the video started playing (Meta `video_play_actions`), summed over the date range and across children at ad-set/campaign level. |
[optional] |
| video30SecWatchedActions |
Integer |
Views of at least 30 seconds (or to the end, for shorter videos). Meta `video_30_sec_watched_actions`. |
[optional] |
| videoThruplayWatchedActions |
Integer |
ThruPlays (watched to completion, or at least 15 seconds). Meta `video_thruplay_watched_actions`. |
[optional] |
| videoP25WatchedActions |
Integer |
Views reaching 25% of the video's length. With the other percentile fields, powers hook/hold/drop-off analysis (e.g. hook rate = videoP25WatchedActions / videoPlayActions). Meta `video_p25_watched_actions`. |
[optional] |
| videoP50WatchedActions |
Integer |
Views reaching 50% of the video's length. Meta `video_p50_watched_actions`. |
[optional] |
| videoP75WatchedActions |
Integer |
Views reaching 75% of the video's length. Meta `video_p75_watched_actions`. |
[optional] |
| videoP95WatchedActions |
Integer |
Views reaching 95% of the video's length. Meta `video_p95_watched_actions`. |
[optional] |
| videoP100WatchedActions |
Integer |
Views reaching 100% of the video's length. Meta `video_p100_watched_actions`. |
[optional] |
| videoAvgTimeWatchedActions |
BigDecimal |
Average seconds watched per play (Meta `video_avg_time_watched_actions`). Aggregated over date ranges and across children as a play-weighted average (total watch time / total plays), never a plain average of averages. |
[optional] |
| lastSyncedAt |
OffsetDateTime |
Present on individual ads only, not on campaign aggregations |
[optional] |
| date |
LocalDate |
|
[optional] |