Every event. Every surface. One taxonomy.
Idukki emits the same six events from every widget — galleries, story rails, video walls, link-in-bio, competitions — and routes them through one endpoint. You read them in the Idukki dashboard, in Shopify, or from your warehouse.
- Six core events: impression, click, product_click, video_play, add_to_cart, wishlist_add
- Server-side ingest — ad-blockers don't kill the data
- Posts back to Shopify so native attribution sees Idukki
- p95 ingest 180ms · 4.8M events/day median across customers
4.8M
Events / day
180 ms
p95 ingest
12
Surfaces
Six events. Same shape everywhere.
Every widget you embed emits the same event names with the same payload keys. No "this surface is special" — your dashboards, alerts and reverse-ETL pipelines all read from one source.
post_impression
Fires when a UGC post appears in the viewport for ≥ 50% / ≥ 250ms. Per-post, per-surface, with widget ID + collection ID.
post_click
Tap or click on a post that opens the product drawer or detail. Captures whether a hotspot or the post itself was the source.
product_click
Click on a specific product card or hotspot. Carries the product ID, source post ID and the position in the gallery.
video_play
Video started playing (autoplay or user-initiated). Sibling events: video_25, video_50, video_75, video_complete.
add_to_cart
Idukki-attributed add-to-cart. Carries the source post, source widget, and the variant ID. Posts back to your Shopify analytics too.
wishlist_add
Wishlist or save event. Optional per workspace — disabled by default unless the widget exposes a wishlist control.
One endpoint. Predictable shape.
Every event posts to /api/analytics/eventwith the same envelope. The widget framework adds the surface metadata; you can extend the body with up to 5 custom keys per event.
- Event router writes to per-event tables for fast reads
- Optional warehouse mirror on Enterprise (BigQuery, Snowflake, Redshift)
- Webhook out on any event, configurable per workspace
POST /api/analytics/event
{
"event": "add_to_cart",
"bguid": "biz_…",
"widgetId": "wid_…",
"collectionId": "col_…",
"postId": "pst_…",
"productId": "prod_…",
"variantId": "var_…",
"ts": "2026-05-12T22:14:02Z",
"session": "ses_…",
"extra": { "position": 3, "via": "hotspot" }
}Three things we deliberately don’t do.
No probabilistic fingerprinting
Visitor sessions use a first-party cookie + workspace ID. No IP-based or canvas-based fingerprinting. EU-friendly by default.
Aggregation is server-side
Events POST to /api/analytics/event. The widget never speaks directly to a third-party analytics endpoint, so ad-blockers don't silently kill your data.
No vanity-only stats
Every event lands in the same table your conversion attribution reads from. There's no separate "engagement-only" stream that goes nowhere useful.
Stop renting six tools. Ship one.
Spin up your first widget in 4 minutes. Migrate from Bazaarvoice, EmbedSocial, Tolstoy or Videowise in a day. Your CFO will love us. Your CRO already does.
- No credit card
- Cancel anytime
- SOC 2 + GDPR