Skip to main content

Expose full Meta Pixel funnel, native breakdowns and creative metadata in /ads/tree

Following the recent addition of the top-level video retention fields (huge win, thanks) — there are still several native Meta Insights fields that we have to extract by string-matching inside metrics.actions[] / metrics.actionValues[]. This is fragile: Meta occasionally renames action types, and summing actions[] at campaign / ad set level corrupts the values (same reason you isolated videoAvgTimeWatchedActions as a dedicated field).

We'd like the same treatment for the following.


1. Full Pixel funnel as top-level fields (highest priority)

  • landingPageViews — landing_page_view

  • viewContent — view_content / offsite_conversion.fb_pixel_view_content

  • addToCart + addToCartValue

  • initiateCheckout

  • purchases + purchaseValue

  • leads

Why: these are the core conversion events Meta exposes. Reading purchases and purchaseValue out of an array is the single most error-prone thing in the current response — one rename from Meta and ROAS goes to zero silently.


2. Click metrics as top-level fields

  • linkClicks

  • outboundClicks

  • uniqueLinkClicks

Why: unique link clicks is the only way to compute a deduplicated CTR when frequency is high. It's a native Meta field and can't be reconstructed from actions[].


3. Engagement metrics as top-level fields

  • postEngagements, postReactions, comments, shares, pageEngagement

Why: same rationale — dedicated fields, no array parsing, no rename risk.


4. Native Meta breakdowns (high priority)

Meta's Insights API supports breakdowns=publisher_platform, placement, age, gender, device_platform, country, region. Today /ads/tree returns totals only.

Ideal: an optional breakdowns query param on /ads/tree (and /ads, /ads/campaigns) that returns a breakdowns[] array per ad with the same metrics object per segment.

Priority for us: placement → age + gender → device_platform → country.

Why: without breakdowns, an ad shows only its aggregate performance. The whole diagnostic value of Meta Insights is being able to see where the performance concentrates (e.g. Reels vs Right Column, mobile vs desktop). Right now we have to hit Meta Graph directly to get this.


5. Configurable attribution window

Ability to request 1d_click, 7d_click, 1d_view, 7d_click_1d_view separately — either as a query param (?attribution=1d_click) or as parallel fields in the response.

Why: Meta's default mixes click + view attribution. Being able to isolate the click window is a standard Meta Insights capability that isn't currently exposed.


6. Creative metadata

  • videoPermalinkUrl / videoSourceUrl (HD)

  • thumbnailUrlHD (256px+ — current thumbnails are ~64px)

  • creativeType — explicit enum: VIDEO / IMAGE / CAROUSEL / DPA / COLLECTION

  • adPreviewUrl

Why: to render an ad in a UI today we have to make additional Meta Graph calls for playable video URLs and hi-res thumbnails. Bundling this into /ads/tree removes those extra calls and the rate-limit pressure they generate.


7. Extra video metrics missed in the last batch

  • videoContinuous2SecWatchedActions — Meta's official "2 continuous seconds" metric (different from video_view)

  • costPerThruplay

  • costPer2SecContinuousVideoView


Suggested implementation

Same pattern as the video retention batch:

  • Top-level key inside metrics (not inside metrics.actions) so aggregation is dedicated and safe.

  • 0 for non-Meta platforms / non-applicable ads.

  • Included in metrics.daily[] when timeIncrement=1 is requested.

  • Breakdowns opt-in via query param, returned as metrics.breakdowns.placement[], etc.

Alternative

Add a generic insightsFields query param that accepts raw Meta Insights field names and passes them through. That way integrators can unblock themselves without waiting for each field, and it future-proofs against Meta adding new ones.

Status: Completed2 comments

Log in to comment and vote

Comments2

  • Miquel Palet López changed status to Completed
    Team•

    Aug 6

    Pinned

    Hey Ezequiel, this is live.

    Every metrics object in /v1/ads/tree and both analytics endpoints now carries metrics.funnel (landing page views, content views, cart adds, checkouts initiated, purchases, leads, registrations, app installs, messaging conversations) and metrics.engagementBreakdown (reactions, comments, shares, saves, page likes, video views, link clicks), plus costPerThruplay and a creativeType on ad nodes.

    The part that matters most: each field picks a single member of Meta's action-type family instead of summing it, so you no longer risk the double counting you get from adding up actions keys yourself, and the numbers stay correct when rolled up to ad set and campaign.

    The breakdowns, attribution windows and video retention metrics you asked for already existed on https://docs.zernio.com/ad-insights/get-ad-analytics (and its campaign-level twin), and those breakdown rows carry the new funnel fields too, so purchases per placement works today. The one thing still outstanding is outbound and unique clicks on the tree specifically, they live on the analytics endpoint for now.

    Full field reference: https://docs.zernio.com/ad-campaigns/get-ad-tree.

    • Ezequiel Contestabile

      •

      Aug 6

      Thanks; please confirm when the outbound clicks and unique clicks are ready.