# Social Analytics (/docs/social/analytics)



Social analytics surface in two main places:

1. **Project Dashboard** — high-level KPIs.
2. **Live / Scheduled posts views** under `/project/{projectId}/content`
   — per-post metrics with a detail panel per post.

## Metrics collected [#metrics-collected]

Metrics are stored on `platform_post_metrics` and the latest snapshot
on `platform_post_metrics_latest`. What's fetched depends on media
type:

**Instagram Reels** — likes, comments, shares, saved, reach,
total\_interactions, views, average watch time, total view time,
skip rate.

**Instagram Feed (image/carousel)** — likes, comments, shares, saved,
reach, total\_interactions, views, follows, profile\_visits,
profile\_activity.

**Instagram Stories** — reach, shares, total\_interactions, views,
follows, profile\_visits, navigation, replies.

**TikTok** — view\_count, like\_count, comment\_count, share\_count, plus
engagement-over-time series.

## Sourcing [#sourcing]

* **Instagram** — Instagram Graph API for OAuth accounts; the SIFT API
  for external / UGC accounts where we don't hold a token.
* **TikTok** — TikTok Business API for OAuth accounts; SIFT for
  external accounts.

No other platforms are wired up. If a post's `platform` is not
`instagram` or `tiktok`, Layers does not collect metrics for it.

## Refresh cadence [#refresh-cadence]

Three global schedules drive refresh, working across stale platform
accounts:

* **Quick sync** — every 5 minutes. OAuth path hits page 1 of the
  platform API; SIFT path kicks off an async scrape.
* **Periodic posts sync** — every 30 minutes.
* **Full sync** — every 20 minutes. Paginates the full post list and
  detects deletions for OAuth accounts.

## Engagement breakdown & trend charts [#engagement-breakdown--trend-charts]

The dashboard shows an engagement-mix breakdown per post and trend
curves for common metrics. Content detail panels surface per-post
metrics plus generation audit data (prompt used, influencer, media
source).

## Organic score [#organic-score]

Each `ads_content` row (one per `content_container` or `platform_post`)
has an `organic_score` (0–10). See
[Organic scoring](/docs/concepts/organic-scoring) for the formula.

## Ad-eligibility [#ad-eligibility]

Ad-eligibility is controlled by `project_ads_content.override`:

* `organic_score >= 4.0` — eligible by default.
* `override = 'include'` — always eligible, even below threshold.
* `override = 'exclude'` — never eligible, regardless of score.

Scoring runs every 6 hours.

## Export [#export]

CSV export is available from the filtered posts view. There is no
built-in scheduled-export feature today.
