Web SDK Events
Runtime analytics events emitted by the Amondo Web SDK.
The Web SDK emits analytics events automatically when an Imprint is embedded on a page. Events are sent to Amondo analytics when analytics is enabled, and are also dispatched on window as amondoEvent for debugging or custom analytics pipelines.
window.addEventListener('amondoEvent', (event) => {
console.log(event.detail.event)
console.log(event.detail)
})
Each dispatched event has an event field containing the event name. The remaining fields depend on the event type and the current Imprint, format, Tile and Frame context.
Common Properties
These properties are registered for the Web SDK session and appear on most events.
| Property | Description |
|---|---|
sdk_version | Web SDK version. |
imprint_id | Published Imprint identifier. |
imprint_title | Imprint title. |
imprint_mode | Imprint format, for example GALLERY, CAROUSEL or STORY. |
team_id | Team identifier for the Imprint. |
rendering_mode | NORMAL or ADS. |
tiles_total | Total number of Tiles in the Imprint, when available. |
imprint_tag_analytics | Optional Imprint analytics tag. |
amo_user_id | Optional user identifier passed through analytics.userId. |
connection_type | Browser network effective connection type, when available. |
browser_language | Browser language. |
$device_type | Device type inferred by PostHog. |
prefers_dark_mode | Browser colour scheme preference. |
prefers_reduced_motion | Browser reduced-motion preference. |
viewport_w | Page viewport width in CSS pixels. Uses analytics.viewport.width when a valid host viewport is provided; otherwise SDK-measured when available. |
viewport_h | Page viewport height in CSS pixels. Uses analytics.viewport.height when a valid host viewport is provided; otherwise SDK-measured when available. |
scroll_y | Page scroll offset in CSS pixels. Uses analytics.viewport.scrollY when supplied; otherwise SDK-measured when available. |
viewport_source | Viewport measurement source: host_provided, sdk_measured or unavailable. |
Custom values passed in analytics.options are added to the session and sent with Web SDK events. Viewport properties are registered after analytics.options, so SDK viewport fields take precedence over custom values with the same names.
media_url and outcome_media_url contain the media URL used by the SDK for the Tile or Reveal outcome. For Cloudinary-hosted media, the SDK uses the selected delivery URL when available and falls back to publicUrl or secureUrl.
Click and tap analytics can include container-relative interaction coordinates for heat-map analysis. imprint_click_x_px and imprint_click_y_px are measured in pixels from the top-left of the SDK container, rounded and clamped to the container bounds. Keyboard-generated clicks do not include these properties.
Timing Properties
imprint_time_ms is added to captured events. It measures accumulated time while the Imprint is considered in view. The timer pauses when the Imprint leaves view or the page becomes hidden. $pageleave also receives imprint_time_ms before the event is sent.
The default Imprint viewed threshold is 0%. Integrations can set analytics.imprintViewedThresholdPercent to require a higher visible percentage before imprint_viewed fires.
tile_time_ms is only added to tile_left. It measures wall-clock time from the qualified tile_viewed event to leave or cleanup.
time_spent_ms appears on Frame events that measure active Frame dwell time.
Page and Imprint Events
| Event | Runs when | Key properties |
|---|---|---|
$pageview | Web SDK analytics initialises. Emitted across supported rendering modes, including ADS. | Common properties, imprint_time_ms. |
$pageleave | The browser page is left or hidden. Emitted once per SDK instance across supported rendering modes, including ADS. | Common properties, current page, slide or story context, imprint_time_ms. |
imprint_viewed | The Imprint reaches the configured viewed threshold. | Common properties, imprint_time_ms. |
imprint_qualified | The Imprint stays sufficiently visible for 1 continuous second. Can fire again after leaving and re-entering view. | Common properties, imprint_time_ms. |
imprint_left | The Imprint leaves the viewport after being viewed. | Common properties, scrolled_percentage, imprint_time_ms. |
imprint_scrolled | A Gallery Imprint scroll percentage changes. | Common properties, scrolled_percentage, imprint_time_ms. |
Format Events
| Event | Format | Runs when | Key properties |
|---|---|---|---|
page_changed | Gallery | User changes Gallery page. | page_id, page_index, opened_from_url, changed_from_frame, imprint_time_ms. |
slide_viewed | Carousel | Carousel slide is viewed, including initial active slide. | slide_id, slide_index, imprint_time_ms. |
slide_changed | Carousel | User navigates to another slide by arrow or swipe. | slide_id, slide_index, subsequent_slide_id, subsequent_slide_index, direction, imprint_time_ms. |
story_viewed | Stories | Story section appears in the viewport. | story_id, story_title, story_index, story_state, imprint_time_ms. |
story_clicked | Stories | User clicks a story cover or highlight. | story_id, story_title, story_index, story_state, imprint_click_x_px, imprint_click_y_px, imprint_time_ms. |
story_opened | Stories | Story opens in Frame view. | story_id, story_title, story_index, story_state, imprint_time_ms. |
story_left | Stories | Story section leaves the viewport after being viewed. | story_id, story_title, story_index, story_state, imprint_time_ms. |
Tile and Frame Events
| Event | Runs when | Key properties |
|---|---|---|
tile_viewed | A Tile is at least 50% visible after the scroll-stable delay. Default delay is 300ms. | tile_id, tile_type, tile_source, media_url, media_type, tile_tag_analytics, imprint_time_ms. |
tile_left | A previously viewed Tile leaves view or unmounts. | tile_id, tile_type, tile_source, media_url, media_type, tile_tag_analytics, tile_time_ms, imprint_time_ms. |
tile_clicked | User clicks or taps a Tile. | tile_id, tile_type, tile_source, media_url, media_type, tile_tag_analytics, imprint_click_x_px, imprint_click_y_px, imprint_time_ms. |
frame_viewed | Frame opens or Frame navigation lands on a new Tile. | tile_id, tile_type, tile_source, opened_from_url, media_url, media_type, tile_tag_analytics, imprint_time_ms. |
frame_changed | User or autoplay moves to another Tile in Frame view. Navigation is cooldown-limited to 200ms. | tile_id, subsequent_tile_id, direction, changed_method, time_spent_ms, media_url, media_type, tile_tag_analytics, imprint_time_ms. |
frame_closed | Frame closes or is dismissed. | tile_id, tile_type, tile_source, time_spent_ms, media_url, media_type, tile_tag_analytics, imprint_time_ms. |
frame_story_changed | Frame navigation crosses from one story section to another. | prev_story_id, new_story_id, direction, story_state, imprint_time_ms. |
source_clicked | User clicks a source or attribution link. | tile_id, tile_type, tile_source, destination_url, tile_tag_analytics, imprint_click_x_px, imprint_click_y_px, imprint_time_ms. |
cta_clicked | User clicks a Clickthrough, Quiz, Poll or Reveal CTA. | tile_id, tile_type, tile_source, destination_url, cta_label, outcome_id, outcome_media_url, outcome_media_type, tile_tag_analytics, imprint_click_x_px, imprint_click_y_px, imprint_time_ms. |
Video Events
| Event | Runs when | Key properties |
|---|---|---|
video_played | A video crosses a tracked progress point. The duration value is 0, 50, 90 or 100. | tile_id, media_url, duration, loop, tile_tag_analytics, imprint_time_ms. |
video_midpoint_reached | First play of a video reaches 50%. This fires once for loop 0. | tile_id, media_url, tile_tag_analytics, imprint_time_ms. |
Activation Tile Events
| Event | Tile type | Runs when | Key properties |
|---|---|---|---|
quiz_started | Quiz | User starts a Quiz Tile. | tile_id, tile_tag_analytics, imprint_time_ms. |
question_answered | Quiz | User selects an answer. | tile_id, question_index, answer_index, is_correct, tile_tag_analytics, imprint_time_ms. |
question_finished | Quiz | User advances from a non-final question. | tile_id, question_index, tile_tag_analytics, imprint_time_ms. |
quiz_finished | Quiz | User completes all quiz questions. | tile_id, tile_tag_analytics, imprint_time_ms. |
quiz_retried | Quiz | User restarts a completed quiz. | tile_id, tile_tag_analytics, imprint_time_ms. |
quiz_shared | Quiz | User shares the quiz result. | tile_id, tile_tag_analytics, imprint_time_ms. |
poll_voted | Poll | Vote submission succeeds and results are returned. | tile_id, option_id, tile_tag_analytics, imprint_time_ms. |
poll_shared | Poll | User shares poll results. | tile_id, tile_tag_analytics, imprint_time_ms. |
reveal_started | Reveal | User first interacts with a Reveal Tile. Fires once per Tile instance. | tile_id, reveal_type, outcome_id, outcome_media_url, outcome_media_type, tile_tag_analytics, imprint_click_x_px, imprint_click_y_px, imprint_time_ms. |
tile_scratched | Reveal | Scratch Reveal progress milestone is reached. Fires once for each milestone. | tile_id, reveal_type, outcome_id, outcome_media_url, outcome_media_type, scratch_milestone, scratch_percentage, tile_tag_analytics, imprint_time_ms. |
reveal_completed | Reveal | Reveal outcome is shown. | tile_id, reveal_type, outcome_id, outcome_media_url, outcome_media_type, time_to_reveal_ms, scratch_percentage, tile_tag_analytics, imprint_time_ms. |
tile_scratched is emitted only for Scratch Reveal Tiles. The tracked milestones are 10_percent, 50_percent and done. Broken-cover auto-reveal does not emit tile_scratched.
Form Tile Events
Form Tiles emit a drop-off funnel. The same events fire on two surfaces: the Web SDK embed (a Form Tile rendered inside an Imprint) and the standalone public form page. Every form event carries form_surface (embed or standalone) so the two surfaces can be segmented. Form events fire client-side only.
A form moves through up to three screens — intro (optional), content (the fields) and final (confirmation) — and the events map onto those transitions plus the submit outcomes.
| Event | Runs when | Frequency |
|---|---|---|
form_intro_viewed | The intro screen renders. Only emitted when the form has an intro screen. | Once per visit |
form_viewed | The content/fields screen renders. This is the funnel denominator and fires for both intro and intro-less forms. | Once per visit |
form_started | The first field loses focus, regardless of whether a value was entered. | Once per visit |
field_filled | A field is completed: text, email or date on blur with a value; checkbox or choice on change; media on upload complete. | Once per field |
form_submit_blocked | Submit is blocked client-side before any mutation runs. Carries reason. | Per attempt |
form_submitted | The submit mutation resolves successfully. | Per success |
form_submit_failed | The submit mutation rejects from a server or network error. | Per failure |
form_completed | The final/confirmation screen renders. Roughly 1:1 with form_submitted on the happy path. | Once per visit |
form_resubmitted | The visitor starts a second pass via the resubmit action. The once-per-visit view events do not re-fire. | Per resubmit |
Form event properties
Every form event carries:
| Property | Type | Notes |
|---|---|---|
tile_id | String | The Form Tile id. Primary per-form identifier. |
form_surface | String | embed or standalone. |
form_tag_analytics | String | Present only when the Tile has an author-set analytics tag. |
On the embed surface, form events also inherit the Web SDK session common properties, including imprint_id and team_id (team_id is embed-only). On the standalone surface, form events also carry form_slug (the public page slug), and the page emits $pageview and $pageleave.
field_filled adds:
| Property | Type | Notes |
|---|---|---|
field_id | String | The field id. |
field_type | String | For example text, email, date, checkbox, choice or media. |
field_label | String | The field's author-defined label. |
field_required | Boolean | Whether the field is required. |
field_position | Numeric | The field's index in the form. |
form_submit_blocked adds reason, one of missing_required, invalid_email, media_uploading or empty_form.
No user-entered values are ever sent. Form event payloads are a fixed allowlist of field metadata only — never field contents, including no answer values.
Reading the funnel
The primary drop-off funnel is:
form_viewed → form_started → field_filled (per field) → form_submitted
Segment by form_surface, tile_id or form_slug, and form_tag_analytics. Submit failures, client-side blocks and silent abandonment are distinguishable through form_submit_failed, form_submit_blocked and the absence of form_submitted.
Measurement caveats:
form_startedandfield_filledrely on blur, so autofill or Enter-to-submit without a blur can under-count.- The funnel localizes drop-off to the last completed field, not the last reached field. A focused-but-empty field emits nothing.
- An embed Frame reopen (remount) re-fires the once-per-visit events. Dedupe is in-memory per mount.
Events Not Currently Emitted
The Web SDK does not currently emit canonical events for ugc_upload, competition_entry or a generic share. Share behaviour is currently represented by quiz_shared and poll_shared. Form funnel events are documented under Form Tile Events.
Do not add tile_dwell_3s or tile_dwell_10s as separate events. Derive dwell thresholds from tile_left.tile_time_ms.