← Back to Metrics

Reviews Submitted

Also known as: Review Submissions, Product Reviews Submitted

EngagementmetricE-commerce: Product Discovery & Merchandising (Search/Filters/PDP)E-commerce

Count of product reviews customers successfully submit in the reporting period, one per unique review ID. It counts submissions, not reviews that pass moderation and get published.

Business Use Case

1️⃣ Merchandising lists top-selling SKUs with few new reviews each month and targets them in review-request emails.,2️⃣ CRM marketing compares reviews submitted per post-purchase email variant and keeps the higher-yield timing.,3️⃣ Product team sees submissions fall after a PDP release and checks the review form for errors.,4️⃣ Merchandising reviews weekly counts by category to prioritise sampling or review-incentive programmes.

Business Criticality

Medium

Journey / Navigation Area

Discovery

Owning Function

Merchandising

Scope

Event

Formula

COUNT(DISTINCT review_id) WHERE event = product review submission AND submission succeeded AND event_date IN reporting window

Calculation Notes

1️⃣ Count only confirmed submissions (server accepted the review); form opens, star-only clicks and validation failures are excluded.,2️⃣ Deduplicate on review_id so double clicks, page reloads and client retries count once.,3️⃣ Counts submissions before moderation; approved or published review totals come from the review platform and will be lower.,4️⃣ Include PDP, post-purchase email and account-page entry points; report the entry point as a breakdown, not a filter.,5️⃣ Date the review on submission time in the property time zone, not on approval or publish date.,6️⃣ Exclude internal, test and bot traffic via traffic_type.,7️⃣ Review text and reviewer names never enter analytics; only IDs, rating value and product attributes are collected.

Technical Details

Measure TypeCounter
Aggregation WindowDaily, Weekly, Monthly

Events

PlatformEvent
Google Analytics 4submit_form
Adobeform_submit

Data Mappings

W3 Data Layer
{
  "digitalData": {
    "event": [
      {
        "eventName": "submit_form",
        "eventInfo": {
          "formType": "product_review",
          "formStatus": "confirmed",
          "reviewId": "rev_8842991",
          "rating": 4,
          "ratingScaleMax": 5,
          "captureOrigin": "pdp",
          "trafficType": "customer",
          "userId": "usr_5591"
        }
      }
    ],
    "product": [
      {
        "productID": "SKU-10293",
        "productInfo": {
          "productName": "Wireless Noise-Cancelling Headphones"
        },
        "category": {
          "primaryCategory": "Electronics"
        }
      }
    ]
  }
}
GA4 Data Layer
{
  "event": "submit_form",
  "form_type": "product_review",
  "form_status": "confirmed",
  "review_id": "rev_8842991",
  "items": [
    {
      "item_id": "SKU-10293",
      "item_name": "Wireless Noise-Cancelling Headphones",
      "item_category": "Electronics"
    }
  ],
  "rating": 4,
  "rating_scale_max": 5,
  "capture_origin": "pdp",
  "traffic_type": "customer",
  "user_id": "usr_5591"
}
Adobe Client Data Layer
{
  "event": "form_submit",
  "formType": "product_review",
  "formStatus": "confirmed",
  "reviewId": "rev_8842991",
  "items": [
    {
      "itemId": "SKU-10293",
      "itemName": "Wireless Noise-Cancelling Headphones",
      "itemCategory": "Electronics"
    }
  ],
  "rating": 4,
  "ratingScaleMax": 5,
  "captureOrigin": "pdp",
  "trafficType": "customer",
  "userId": "usr_5591"
}
XDM Mapping
{
  "eventType": "web.formFilledOut",
  "_experience": {
    "analytics": {
      "customDimensions": {
        "eVars": {
          "eVar10": "reviewId",
          "eVar11": "formStatus",
          "eVar12": "captureOrigin"
        }
      }
    }
  },
  "commerce": {
    "productListItems": [
      {
        "SKU": "SKU-10293",
        "name": "Wireless Noise-Cancelling Headphones",
        "productCategoryId": "Electronics"
      }
    ]
  },
  "_tenant": {
    "form": {
      "formType": "product_review",
      "formStatus": "confirmed",
      "reviewId": "rev_8842991",
      "captureOrigin": "pdp",
      "trafficType": "customer",
      "userId": "usr_5591",
      "rating": 4,
      "ratingScaleMax": 5
    }
  }
}

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
DECLARE start_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);
DECLARE end_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);

-- Product review form submissions, event_params pivoted; event_date is already in the property time zone
WITH review_submissions AS (
  SELECT
    MAX(IF(ep.key = 'form_type', ep.value.string_value, NULL)) AS form_type,
    MAX(IF(ep.key = 'form_status', ep.value.string_value, NULL)) AS form_status,
    MAX(IF(ep.key = 'review_id', ep.value.string_value, NULL)) AS review_id,
    MAX(IF(ep.key = 'capture_origin', ep.value.string_value, NULL)) AS capture_origin,
    MAX(IF(ep.key = 'traffic_type', ep.value.string_value, NULL)) AS traffic_type
  FROM `your-project.analytics_123456789.events_*`,
    UNNEST(event_params) AS ep
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', start_date) AND FORMAT_DATE('%Y%m%d', end_date)
    AND event_name = 'submit_form'
  GROUP BY user_pseudo_id, event_timestamp, event_bundle_sequence_id
)
-- Unique confirmed review_id count excluding internal, test and bot traffic, total plus entry-point breakdown
SELECT
  capture_origin,
  COUNT(DISTINCT review_id) AS reviews_submitted
FROM review_submissions
WHERE form_type = 'product_review'
  AND form_status = 'confirmed'
  AND review_id IS NOT NULL
  AND COALESCE(traffic_type, '') NOT IN ('internal', 'test', 'bot')
GROUP BY ROLLUP (capture_origin)
ORDER BY capture_origin NULLS FIRST;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Reporting window and property time zone
WITH params AS (
  SELECT
    date_sub(to_date(from_utc_timestamp(current_timestamp(), 'America/New_York')), 90) AS start_date,
    date_sub(to_date(from_utc_timestamp(current_timestamp(), 'America/New_York')), 1) AS end_date,
    'America/New_York' AS property_tz
),
-- Confirmed product review submissions excluding internal, test and bot traffic, dated by submission time in the property time zone
review_submissions AS (
  SELECT
    e._tenant.form.reviewId AS review_id,
    e._tenant.form.captureOrigin AS capture_origin
  FROM your_aep_web_events_dataset AS e
  CROSS JOIN params AS p
  WHERE e.eventType = 'web.formFilledOut'
    AND e._tenant.form.formType = 'product_review'
    AND e._tenant.form.formStatus = 'confirmed'
    AND e._tenant.form.reviewId IS NOT NULL
    AND COALESCE(e._tenant.form.trafficType, '') NOT IN ('internal', 'test', 'bot')
    AND to_date(from_utc_timestamp(e.timestamp, p.property_tz)) BETWEEN p.start_date AND p.end_date
)
-- Unique review_id count, total plus entry-point breakdown (retries and reloads count once)
SELECT
  capture_origin,
  COUNT(DISTINCT review_id) AS reviews_submitted
FROM review_submissions
GROUP BY ROLLUP (capture_origin)
ORDER BY capture_origin NULLS FIRST;

Source Data

Digital Analytics (GA4)

Dependencies

Prerequisite: List the dependencies required for this Metric

Events:

product-review-submission

Dimensions:

item-categoryproduct-name

Report Attributes

item-category product-name device-category traffic-source customer-status

Recommended Reporting Views

Views
Product Discovery & MerchandisingCustomer Reviews & UGCPost-Purchase Engagement

Segment Eligibility

true

Governance

Data SensitivityInternal

Governance

Created bydevyendarm
Created on9/25/2026
Last modified bydevyendarm
Last modified on9/25/2026
Version1.0.0
Validation stateqa passed
StatusPUBLISHED

GitHub

View related Pull Requestcatalog/metrics/reviews-submitted.yml

Community Discussion