Skip to content

Creative

The Creative page breaks your ad performance down by individual creative, not just by campaign. It pairs each creative’s numbers with tags like hook type, format, and audience temperature, so you can see which creative attributes are actually driving results.

Open Creative in the left navigation to see it. Inside the product the page header reads “Creative Intelligence”; the sidebar label is just Creative. It has four tabs: Overview, Attributes, Lifecycle, and Gallery.

If your brand has TikTok Ads connected, a Meta / TikTok switch appears at the top of the page and sets the URL’s platform parameter to meta or tiktok. A brand with only Meta connected never sees the switch - the page looks exactly as it always has.

Opening the page fresh picks a platform for you: the URL’s platform value if it’s valid, otherwise TikTok if only TikTok is connected, otherwise Meta. Switching brands drops a stale platform selection carried over from the previous brand, so each brand re-resolves its own default.

All four tabs - Overview, Attributes, Lifecycle, and Gallery - re-scope to whichever platform is selected; there’s no blended “all platforms” view, on purpose. A visible note explains why: “Showing Meta (or TikTok) creatives against Meta’s (or TikTok’s) own stage rules and efficiency bars. The two platforms attribute differently, so their raw ROAS is never compared side by side.”

Like the other Dashboard pages, Creative has an “Analytics range” bar at the top with a sales-channel filter and a date range picker. The date range picker sets the reporting window for the Overview, Attributes, and Gallery tabs. See Dates and comparisons for how the presets, custom ranges, and comparison periods work.

The sales-channel filter only affects Shopify sales data. It has no effect on the ad metrics shown on this page.

A KPI row across the top shows four numbers for the selected period:

  • Spend
  • ROAS
  • CPA
  • New this period (creatives that are new within the selected window)

Below that:

  • A media mix line summarizing how many of your creatives are video versus image, with a total count.
  • Top performers: your best creatives by ROAS.
  • Needs attention: creatives showing signs of wear, each badged with the specific reason - for example “ROAS -32% vs prior 7d” or “7d freq 4.1” - joined with a middle dot when more than one reason applies. On TikTok, only ROAS and CTR decline reasons can appear, since TikTok reports no reach or frequency, so a frequency-based reason never shows for a TikTok creative.
  • A best-hook or best-format callout at the bottom. Click it to jump to the Gallery tab, pre-filtered to that hook or format.

Four cards break performance down by attribute: Hook type, Format type, Media type, and Audience temperature. On TikTok, the Hook type card leaves out the hook rate and hold rate columns, which TikTok doesn’t report. Each card pairs a bar chart with a table.

Table columns:

| Column | What it shows | |---|---| | Value | The attribute value, for example a specific hook type | | Creatives | Number of creatives with that value | | Spend | Total spend | | ROAS | Return on ad spend | | First 14d | ROAS during each creative’s first 14 days live, with the change versus its ROAS for the selected date range | | CTR | Click-through rate | | Hook rate / Hold rate | Meta only - omitted for TikTok, see below |

Rows in the Hook type and Format type cards are clickable. Clicking one jumps to the Gallery tab, pre-filtered to that value.

Audience temperature (Cold, Warm, or Retargeting) is auto-detected by Kreel. You can override it per campaign from the Meta Ads or TikTok Ads table on Paid Ads.

If your brand has a parsed ad-naming convention (see Ad naming schema, Meta only), this tab also shows one additional “ROAS by field” table per field your naming schema extracts from ad names - for example hook, angle, or audience tokens parsed straight out of the ad name.

Below the attribute cards, a Winning combinations card ranks creatives across every dimension you choose at once, rather than one attribute at a time. “Rank across the selected accounts and date window. Shared creative filters do not apply to this leaderboard.”

  1. Toggle one or more dimensions to group by. Meta offers Hook type, Format type, Asset, and any parsed naming-schema fields; TikTok offers Hook type, Format type, and Media type only (no asset grouping, no naming-schema fields).
  2. Pick a metric from Rank by - ROAS, CPA, CTR, CPM, CPC, Conversion rate, Spend, Revenue, or Purchases, plus Hook rate and ThruPlay hold rate on Meta only.
  3. Set a minimum spend to filter out combinations without enough data; it defaults to your stage rules’ testing spend floor for the selected platform.

The result is a ranked table - one row per combination of the dimensions you chose, with spend and your ranking metric - and an “Excluded” note explaining any combination the spend floor or missing data dropped.

The Lifecycle tab tracks creatives through five stages: Testing, Scaling, Winner, Fatiguing, and Dead.

Two views, switched with an inner tab:

  • Stage board: a kanban-style board with one column per stage. Click a stage header to jump to the Gallery tab, filtered to that stage. When a signal the current platform can’t measure would otherwise affect staging - TikTok has no frequency, so nothing can be measured as saturated on frequency - the board states it plainly with a line like "Not measurable here: frequency."
  • Batch timeline: a timeline view of your creatives grouped by launch batch.

In either view, click a creative to open a detail view with more information about it.

If nothing ran in that 30-day window, this tab shows “No creative delivery in this period.”

Stage definitions live in Settings, one set per brand per platform. A first-visit banner on this tab reads “Stages use default definitions - review them,” linking to Review stage rules (or, from the Stage board, Edit definitions) at Stage rules, pre-filtered to the platform you’re viewing.

The Gallery is a card grid of every individual ad creative, with thumbnails.

Controls above the grid:

  • All campaigns: narrow the gallery to one campaign.
  • Sort: Spend, ROAS, Revenue, CTR, CPM, CPC, Conversions, or CPA, with a direction toggle between high-to-low and low-to-high.

A row of filter pills below that lets you narrow by:

  • Status (Active or All)
  • Audience temperature (Cold, Warm, Retargeting, or Untagged)
  • Hook type
  • Format type
  • Lifecycle stage (Testing, Scaling, Winner, Fatiguing, or Dead)
  • Product (plus an “Unlinked” option for creatives not tied to a product)

A live count shows how many creatives match your current filters. A Clear filters link appears once any of them differ from the default and resets them all at once.

  1. Open Creative, then the Gallery tab.
  2. Pick a campaign from All campaigns, if you want to narrow to one.
  3. Choose a metric from the Sort dropdown and set the direction.
  4. Use the filter pills to narrow by status, audience, hook, format, stage, or product.
  5. Click a creative’s card to see more detail, or Clear filters to start over.

The gallery loads creatives in batches of 48. Click Show more to load the next batch.

If no creatives match your filters, the gallery shows “No creatives match your filters…”. If there is no creative data at all for the period, it shows “No creative data available for this period.”

Kreel tags every ad creative it syncs so you can slice performance beyond the campaign level:

  • Hook type: how the creative opens.
  • Format type: the creative’s format.
  • Media type: image or video.
  • Audience temperature: Cold, Warm, or Retargeting, auto-detected by Kreel with a manual override available per campaign on Paid Ads.
  • Lifecycle stage: Testing, Scaling, Winner, Fatiguing, or Dead.

These are the same attributes used across the Overview, Attributes, Lifecycle, and Gallery tabs above, so a filter or breakdown you see in one place lines up with the others.

TikTok Ads doesn’t report reach, frequency, link clicks, or any of the hook/hold/ThruPlay video-rate family, and conversion rate isn’t available at ad grain either. Kreel never shows these as zero for TikTok creatives - they’re left out of the relevant cards, tables, and columns instead, so a missing number never reads as a measured 0. The one place this is stated explicitly in the UI is the Lifecycle stage board’s “Not measurable here” note; everywhere else (Overview cards, Attributes columns), the unavailable measure is simply not shown.

Hook, thumbstop, and ThruPlay hold (Meta only)

Section titled “Hook, thumbstop, and ThruPlay hold (Meta only)”

Overview shows aggregate rates, Attributes shows rates per group, and creative Detail shows the video funnel. Counts are added before division, so larger contributors carry their delivery weight; rates are never summed or averaged.

| Metric | Formula | | --- | --- | | Hook rate / thumbstop | 3-second video plays ÷ impressions | | Hold rate (ThruPlay: 15s or completion) | ThruPlays ÷ 3-second video plays |

Meta ThruPlay means 15 seconds or completion for a shorter video. It is not a separate true 15-second play count. The API names this measurement thruplay_hold_rate, rather than implying an exact 15-second hold rate.

MCP get_creatives and DSL creatives expose hook_rate, its identical alias thumbstop, and thruplay_hold_rate as four-decimal fractions: 0.3 means 30%. The dashboard renders percentages. The gallery’s existing hook_rate field retains its percentage unit; its new thumbstop and thruplay_hold_rate fields are fractions. Missing measurements or nonpositive denominators produce null (shown as ”—”); measured zero with a positive denominator displays 0.0%. If any contributing daily row lacks a measurement, that aggregate measurement is unavailable, rather than a partial sum.

For compatibility, the nested MCP fatigue.hook_rate still uses 30-second views ÷ impressions, and fatigue.hold_rate uses p100 views ÷ 30-second views. The legacy gallery hold_rate retains the latter definition in percentage units. These older fields differ from the canonical metrics above.

These rates, and asset-hash grouping below, are Meta-only: TikTok creatives don’t carry hook, hold, or thumbstop data, and TikTok’s get_creatives grouping only accepts hook_type, format_type, and media_type - not asset.

Grouping assets and querying performance (Meta only)

Section titled “Grouping assets and querying performance (Meta only)”

Use MCP get_creatives(group_by=["asset"]) or the agent REST comma-separated group_by=asset; combine asset with hook_type and format_type if needed. Confirmed single images with nonblank Meta image hashes share an asset group, including across selected accounts in the same brand. Meta’s image_hash is not a downloaded-file checksum. Videos, carousels, unknown media, blank hashes, and absent asset metadata fall back to account-scoped creative ID; missing creative IDs fall back to account-scoped ad ID. Shared video thumbnails never establish video identity, and this feature does not deduplicate video re-uploads. creative_count retains its existing meaning: number of contributing ads.

DSL metadata-only queries retain their original projection and grain. Selecting, filtering, ordering, or grouping on performance fields activates a fixed lookup through ads to daily performance, with a default of seven inclusive days ending yesterday. Use a filter-only date equality or a bounded gte/lte date range to override it. Metadata without matching performance retains null metrics.

The MCP coverage block includes hash availability by media type (over the returned page for individual rows, or all contributors for asset groups). Numerical coverage depends on the selected dataset and window; no approved live dataset was reachable during implementation. Reproduce a read-only report from backend/ against an approved database:

Terminal window
.venv/bin/python -m scripts.report_creative_hash_coverage \
--client-id BRAND_ID --start 2026-08-01 --end 2026-08-31

The report counts unique synced creative identities represented in that daily performance window: metadata matches, nonblank hashes, usable image hashes, fallbacks, and duplicate usable-hash groups, by media type.

The same creative data is available to your AI agent through the get_creatives MCP tool, including a platform argument for Meta or TikTok. Once you connect MCP or the CLI, you can ask your agent about creative performance directly instead of browsing the gallery by hand.

Email support@kreel.ai.