Social guides
Guides

Creator insights.

Report impressions as they happen; read back per-post views, unique reach, engagement, and a daily series — plus a follower time series per actor. Insights reads are gated by social.analytics.read; your backend decides who sees them (the same trust model as story viewers).


1

Report impressions

Batch impressions to POST /posts/impressions (debounce client-side, max 200 ids per call). Pass viewer_actor_id to count the impression toward unique reach — deduped per viewer, per post, per day. Omit it for anonymous traffic, which still counts total views but not reach. Ids that aren't published posts in the community are skipped silently, so a deleted post mid-batch never fails the rest. Needs social.view; the two read endpoints below need social.analytics.read.

bash
curl -X POST -H "Authorization: Bearer pcft_live_..." \
  -H "Content-Type: application/json" \
  -d '{"post_ids":["<post1>","<post2>"],"viewer_actor_id":"<viewer>"}' \
  "https://social.productcraft.co/v1/communities/<c>/posts/impressions"   # 204

2

Post insights

Total views + unique reach, engagement counts, and a daily { views, reach } series over an optional ?from/?to window of YYYY-MM-DD dates (defaults to the trailing 30 days; a span over 366 days is a 400). Days with no traffic are absent from daily.

bash
curl -H "Authorization: Bearer pcft_live_..." \
  "https://social.productcraft.co/v1/communities/<c>/posts/<post>/insights?from=2026-05-01&to=2026-05-31"
# → { post_id, community_id, views, unique_reach, reaction_count,
#     comment_count, repost_count, quote_count,
#     daily: [ { day, views, reach } ] }

3

Actor follower series

The live follower count plus a daily series built from a nightly snapshot taken after the 04:00 UTC counter reconcile. Same optional ?from/?to window as post insights. daily only has points for days that were snapshotted — it is empty for an actor created since the last run.

bash
curl -H "Authorization: Bearer pcft_live_..." \
  "https://social.productcraft.co/v1/communities/<c>/actors/<actor>/insights"
# → { actor_id, community_id, follower_count,
#     daily: [ { day, follower_count } ] }

Privacy. Reach rows are keyed by viewer and are personal data — they're erased when the viewer's actor is deleted (the aggregate view tallies carry no viewer identity). See data-subject requests. Insights are aggregate by design — there is no raw per-viewer impression export.