> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ocular.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Asset Breakdowns

> Six Meta Ads creative breakdown models in Ocular — analyze body copy, headline, description, image, video, or full creative for ad testing and iteration.

Six related data models for **creative A/B testing** — each slicing performance by a different element of the ad (text copy, visual asset, or full creative package). Pick the one matching the element you're testing.

## Pick an asset to test

<CardGroup cols={2}>
  <Card title="Body Asset" icon="align-left" href="#body-asset">
    Primary ad copy. Slice by `body_text`.
  </Card>

  <Card title="Title Asset" icon="heading" href="#title-asset">
    Headlines. Slice by `title_text`.
  </Card>

  <Card title="Description Asset" icon="align-justify" href="#description-asset">
    Description text. Slice by `description_text`.
  </Card>

  <Card title="Image Asset" icon="image" href="#image-asset">
    Individual images. Slice by `image_hash`.
  </Card>

  <Card title="Video Asset" icon="video" href="#video-asset">
    Videos. Only one with native Video Views.
  </Card>

  <Card title="Creative Asset" icon="layers" href="#creative-asset">
    Full ad as one unit. Slice by `asset_id`.
  </Card>
</CardGroup>

## What they all share

Every asset breakdown carries the same near-complete metric set. The per-asset sections below cover only the slice-by dimensions and per-asset quirks.

**Metrics, grouped by category** — every number you can compute, across all six asset types. Expand below for examples in each.

```mermaid theme={null}
flowchart LR
    R1["Spend & revenue"]:::cat --- S
    R2["Clicks & impressions"]:::cat --- S

    S(["Metrics"]):::root

    S --- R3["Cost efficiency"]:::cat
    S --- R4[Engagement]:::cat
    S --- R5["Conversion funnel"]:::cat

    classDef root fill:#0f172a,color:#f8fafc,stroke:#0f172a,stroke-width:2px
    classDef cat fill:#2563eb,color:#fff,stroke:#1d4ed8,stroke-width:1.5px
```

<Accordion title="Show sample metrics in each category">
  ```mermaid theme={null}
  flowchart LR
    sr1[Ad Spend]:::leaf --- SR["Spend & revenue"]
    sr2[Conversion Value]:::leaf --- SR
    sr3[ROAS]:::leaf --- SR
    sr4[AOV]:::leaf --- SR

    ci1[Clicks All]:::leaf --- CI["Clicks & impressions"]
    ci2[Impressions]:::leaf --- CI
    ci3[Link Clicks]:::leaf --- CI

    SR:::cat --- S
    CI:::cat --- S

    S(["Metrics"]):::root

    S --- CE["Cost efficiency"]:::cat
    S --- En[Engagement]:::cat
    S --- CF["Conversion funnel"]:::cat

    CE --- ce1[CPC]:::leaf
    CE --- ce2[CPM]:::leaf
    CE --- ce3[Cost Per Link Click]:::leaf

    En --- en1[Landing Page Views]:::leaf
    En --- en2[Post Engagement]:::leaf
    En --- en3[Page Engagement]:::leaf

    CF --- cf1[View Content]:::leaf
    CF --- cf2[Add to Cart]:::leaf
    CF --- cf3[Checkouts Initiated]:::leaf
    CF --- cf4[Searches]:::leaf

    classDef root fill:#0f172a,color:#f8fafc,stroke:#0f172a,stroke-width:2px
    classDef cat fill:#2563eb,color:#fff,stroke:#1d4ed8,stroke-width:1.5px
    classDef leaf fill:#eff6ff,color:#1e3a8a,stroke:#bfdbfe,stroke-width:1px
  ```
</Accordion>

**Dimensions, grouped by category** — pick an asset type to slice the metric by, plus the standard hierarchy shared across all Meta Ads data models. Expand below for examples in each.

```mermaid theme={null}
flowchart LR
    D1["Asset under test"]:::cat --- M
    D2["Campaign hierarchy"]:::cat --- M

    M(["Dimensions"]):::root

    M --- D3[Time]:::cat
    M --- D4["Account & creative"]:::cat
    M --- D5[Attribution]:::cat

    classDef root fill:#0f172a,color:#f8fafc,stroke:#0f172a,stroke-width:2px
    classDef cat fill:#9333ea,color:#fff,stroke:#7e22ce,stroke-width:1.5px
```

<Accordion title="Show sample dimensions in each category">
  ```mermaid theme={null}
  flowchart LR
    au1[body_text]:::leaf --- Au["Asset under test"]
    au2[title_text]:::leaf --- Au
    au3[description_text]:::leaf --- Au
    au4[image_hash]:::leaf --- Au
    au5[video_id]:::leaf --- Au
    au6[asset_id]:::leaf --- Au

    ch1[campaign_id]:::leaf --- CH["Campaign hierarchy"]
    ch2[adset_id]:::leaf --- CH
    ch3[ad_id]:::leaf --- CH

    Au:::cat --- M
    CH:::cat --- M

    M(["Dimensions"]):::root

    M --- Ti[Time]:::cat
    M --- AC["Account & creative"]:::cat
    M --- At[Attribution]:::cat

    Ti --- t1[date]:::leaf
    Ti --- t2[week_start_date]:::leaf

    AC --- ac1[ad_account_id]:::leaf
    AC --- ac2[creative_id]:::leaf
    AC --- ac3[ad_type]:::leaf

    At --- at1[attribution_window]:::leaf

    classDef root fill:#0f172a,color:#f8fafc,stroke:#0f172a,stroke-width:2px
    classDef cat fill:#9333ea,color:#fff,stroke:#7e22ce,stroke-width:1.5px
    classDef leaf fill:#faf5ff,color:#581c87,stroke:#e9d5ff,stroke-width:1px
  ```
</Accordion>

### Common metrics

Need a metric not listed? See the [Meta Ads metric availability matrix](/data-models/meta-ads/overview#metric-availability-matrix).

| Metric                      | Formula                                         |
| --------------------------- | ----------------------------------------------- |
| **Spend & revenue**         |                                                 |
| Ad Spend                    | Sum of daily spend                              |
| Conversion Value            | Sum of reported revenue (see naming note below) |
| ROAS                        | Conversion Value ÷ Ad Spend                     |
| Conversions                 | Sum of reported orders                          |
| AOV                         | Conversion Value ÷ Conversions                  |
| **Clicks & impressions**    |                                                 |
| Clicks (All)                | Sum of clicks (inline + outbound)               |
| Impressions                 | Sum of impressions                              |
| CTR (All)                   | Clicks ÷ Impressions × 100                      |
| Link Clicks                 | Sum of inline link clicks (website-bound)       |
| Link Click-Through Rate     | Link Clicks ÷ Impressions × 100                 |
| **Cost efficiency**         |                                                 |
| CPC (All)                   | Ad Spend ÷ Clicks                               |
| CPM                         | Ad Spend ÷ Impressions × 1,000                  |
| CPA                         | Ad Spend ÷ Conversions                          |
| Cost Per Link Click         | Ad Spend ÷ Link Clicks                          |
| **Engagement**              |                                                 |
| Landing Page Views          | Sum                                             |
| Post Engagement             | Sum (reactions + comments + shares + clicks)    |
| Page Engagement             | Sum (Facebook Page likes, follows)              |
| Post Reactions              | Sum (Like, Love, Haha, Wow, Sad, Angry)         |
| Cost Per Landing Page View  | Ad Spend ÷ Landing Page Views                   |
| **Conversion funnel**       |                                                 |
| View Content                | Sum                                             |
| Add to Cart                 | Sum                                             |
| Checkouts Initiated         | Sum                                             |
| Add Payment Info            | Sum                                             |
| Searches                    | Sum (on-site search actions)                    |
| Cost Per View Content       | Ad Spend ÷ View Content                         |
| Cost Per Add to Cart        | Ad Spend ÷ Add to Cart                          |
| Cost Per Checkout Initiated | Ad Spend ÷ Checkouts Initiated                  |
| Cost Per Add Payment Info   | Ad Spend ÷ Add Payment Info                     |

<Warning>
  Three asset breakdowns — **Title**, **Image**, and **Video** — expose the four revenue metrics under a **`Channel Reported`** prefix instead of the standard name. Values are identical. See [Channel-reported naming](#channel-reported-naming) for the field-by-field mapping.
</Warning>

### Common dimensions

Standard campaign hierarchy, time, account, and attribution dimensions — documented once on the [Meta Ads Overview](/data-models/meta-ads/overview).

***

## Body Asset

**Grain:** one row per `date × ad × body_text`.

**Slice by:**

| Dimension       | Type   | Description                       |
| --------------- | ------ | --------------------------------- |
| `body_text`     | String | Full body copy text               |
| `body_asset_id` | String | Unique ID for the body text asset |

**Use it to answer:**

* Which messaging approach wins — benefit, feature, or urgency framing?
* Which copy gets clicks but no conversions? (clickbait detection)
* Does longer or shorter copy convert better per campaign objective?

Uses standard revenue metric names.

## Title Asset

**Grain:** one row per `date × ad × title_text`.

**Slice by:**

| Dimension        | Type   | Description                   |
| ---------------- | ------ | ----------------------------- |
| `title_text`     | String | Headline text                 |
| `title_asset_id` | String | Unique ID for the title asset |
| `ad_title`       | String | Ad title (from creative data) |

**Use it to answer:**

* Which headline patterns drive CTR — questions, numbers, urgency?
* What's the right title length for each placement?
* Which titles convert vs. which just attract clicks?

<Note>
  Uses **Channel Reported** naming for revenue metrics. `Channel Reported ROAS` here = `ROAS` everywhere else.
</Note>

## Description Asset

**Grain:** one row per `date × ad × description_text`.

**Slice by:**

| Dimension              | Type   | Description                         |
| ---------------------- | ------ | ----------------------------------- |
| `description_text`     | String | Description text content            |
| `description_asset_id` | String | Unique ID for the description asset |

**Use it to answer:**

* Do longer descriptions with more detail outperform shorter ones?
* Does benefit-focused or feature-focused framing convert better?
* How does description copy affect funnel conversion rates?

Uses standard revenue metric names.

## Image Asset

**Grain:** one row per `date × ad × image_hash`.

**Slice by:**

| Dimension          | Type   | Description                                                  |
| ------------------ | ------ | ------------------------------------------------------------ |
| `asset_id`         | String | Unique asset identifier                                      |
| `image_hash`       | String | Content hash — tracks the **same image across multiple ads** |
| `image_asset_url`  | String | Image file URL                                               |
| `image_asset_name` | String | Image file name                                              |
| `asset_type`       | String | `IMAGE`, `CAROUSEL_IMAGE`, `STATIC_CARD`                     |

**Use it to answer:**

* Which images perform best regardless of how they're packaged? (use `image_hash`)
* Which image style wins — lifestyle, product-shot, or promotional?
* Where is creative fatigue setting in? (CTR decay by image over time)

<Note>
  Uses **Channel Reported** naming for revenue metrics. `image_hash` is the key thing here — it tracks the same source image across multiple ads.
</Note>

## Video Asset

**Grain:** one row per `date × ad × video_id`.

**Slice by:**

| Dimension       | Type   | Description            |
| --------------- | ------ | ---------------------- |
| `video_id`      | String | Video asset identifier |
| `video_url`     | String | Video file URL         |
| `thumbnail_url` | String | Video thumbnail URL    |

**Use it to answer:**

* Which video creatives drive view-through and conversion?
* What's the winning video length and style?
* Where does the **View Content → Add to Cart** funnel break for a given video?

<Tip>
  Only data model with native **Video Views** (3-second threshold) and **Cost Per Video View**. For completion-percentage metrics (Video 25/50/75/100%, Hook Rate, Hold Rate), go to [Platform & Device](/data-models/meta-ads/platform-and-device). Uses **Channel Reported** naming for revenue metrics.
</Tip>

## Creative Asset

**Grain:** one row per `date × ad × asset_id`.

**Slice by:**

| Dimension         | Type   | Description                         |
| ----------------- | ------ | ----------------------------------- |
| `asset_id`        | String | Combined creative asset identifier  |
| `image_asset_url` | String | Image URL for the creative          |
| `video_id`        | String | Video ID if the creative uses video |

**Use it to answer:**

* Which full creative packages win? (image + copy + headline + CTA + format as one unit)
* Which creative format scales best — single image, carousel, video, or collection?
* What combinations should be promoted to top performers across campaigns?

Uses standard revenue metric names.

***

## Channel-reported naming

Three asset breakdowns expose revenue metrics under a different name due to source-schema convention. Values are identical — only the field name differs.

| Standard name (used in Body, Description, Creative) | Channel Reported name (used in Title, Image, Video) |
| --------------------------------------------------- | --------------------------------------------------- |
| `Conversion Value`                                  | `Channel Reported Conversion Value`                 |
| `ROAS`                                              | `Channel Reported ROAS`                             |
| `Conversions`                                       | `Channel Reported Conversions`                      |
| `AOV`                                               | `Channel Reported AOV`                              |

When building cross-asset reports that combine all six, normalize to a single name in your query layer.

<Accordion title="Raw fields (for custom calculations)">
  All asset breakdowns expose:

  `ad_spend` · `clicks` · `impressions` · `link_clicks` · `reported_orders` · `reported_revenue` · `landing_page_views` · `add_to_cart` · `checkouts_initiated` · `view_content` · `add_payment_info` · `post_engagement` · `page_engagement` · `post_reaction` · `searches`

  **Video Asset additionally exposes:** `video_views_total` · `cost_per_video_view`
</Accordion>
