Skip to main content

Standard event registry

Developer preview

App Events in Analytics is in developer preview. The preview is available to approved apps and supports declared standard events. Sign up for early access.

The standard event registry defines app-reported activities that Shopify Analytics can recognize across apps. Declare a standard event when your app reports an activity that matches the event definition.

For example, multiple email apps can declare shopify.marketing.email_sent. Merchants can then query the emails_sent metric by app_name in Shopify Analytics.


Each standard event has a single handle that you use in both the app configuration and the API request:

HandleExampleWhere it's used
Standard registry handleshopify.marketing.email_sentThe Shopify-defined event identity. Use it in the shopify.extension.toml declaration and as the App Events API event_handle.

The shopify. prefix identifies the Shopify-defined registry event. For custom and billing events the prefix is reserved, but standard analytics events emit the full prefixed handle.


The registry groups standard events by the type of app-reported activity that they represent. Use the category overview to find the right event, then refer to the event's entry for the exact handles and attributes.

CategoryStandard registry handlesDescription
Checkoutshopify.checkout.offer_shown
shopify.checkout.offer_accepted
shopify.checkout.offer_declined
Offers and other checkout actions managed by apps.
Demandshopify.demand.restock_subscribed
shopify.demand.restock_sent
shopify.demand.restock_clicked
shopify.demand.wishlist_item_added
shopify.demand.preorder_submitted
shopify.demand.backorder_requested
Restock, wishlist, preorder, and backorder activity reported by apps.
Discoveryshopify.discovery.search_results_loaded
shopify.discovery.recommendations_loaded
Search and product recommendation activity reported by apps.
Duties and tariffsshopify.duties.fee_applied
shopify.duties.duty_calculated
shopify.duties.hs_code_classified
Duty, tariff, fee, and classification activity reported by apps.
Experimentationshopify.experimentation.experiment_started
shopify.experimentation.variant_assigned
shopify.experimentation.experiment_concluded
Experiments, assignments, and outcomes managed by apps.
Fraud and riskshopify.fraud.decision_approved
shopify.fraud.decision_declined
shopify.fraud.manual_review_started
shopify.fraud.alert_received
Fraud decisions, reviews, alerts, and chargeback-related activity reported by apps.
Fulfillmentshopify.fulfillment.order_status_updated
shopify.fulfillment.label_created
shopify.fulfillment.carrier_exception_detected
shopify.fulfillment.delivery_promise_updated
shopify.fulfillment.shipment_delivered
Shipping, labels, tracking, delivery, and carrier activity reported by apps.
Inventoryshopify.inventory.stockout_risk_predicted
shopify.inventory.replenishment_recommended
shopify.inventory.purchase_order_recommended
shopify.inventory.demand_forecast_updated
shopify.inventory.inventory_synced
Forecasts, stockout risk, replenishment, purchase orders, and sync activity reported by apps.
Lead captureshopify.lead_capture.lead_captured
shopify.lead_capture.form_submitted
shopify.lead_capture.incentive_issued
Leads, forms, and incentives managed by apps.
Loyaltyshopify.loyalty.member_enrolled
shopify.loyalty.points_earned
shopify.loyalty.points_redeemed
shopify.loyalty.reward_issued
shopify.loyalty.reward_redeemed
shopify.loyalty.tier_changed
shopify.loyalty.referral_completed
shopify.loyalty.customer_segment_assigned
shopify.loyalty.churn_risk_flagged
Enrollment, points, rewards, tiers, referrals, and segments managed by apps.
Marketingshopify.marketing.email_sent
shopify.marketing.email_delivered
shopify.marketing.email_opened
shopify.marketing.email_clicked
shopify.marketing.email_bounced
shopify.marketing.email_unsubscribed
shopify.marketing.sms_sent
shopify.marketing.sms_delivered
shopify.marketing.sms_clicked
shopify.marketing.sms_unsubscribed
shopify.marketing.push_sent
shopify.marketing.push_opened
Email, SMS, and push marketing activity reported by apps.
Merchandisingshopify.merchandising.review_requested
shopify.merchandising.review_submitted
shopify.merchandising.review_published
shopify.merchandising.review_syndicated
shopify.merchandising.quiz_started
shopify.merchandising.quiz_completed
shopify.merchandising.quiz_recommendation_viewed
Reviews, quizzes, user-generated content, and recommendations managed by apps.
Purchasingshopify.purchasing.invoice_generated
shopify.purchasing.receipt_sent
shopify.purchasing.download_completed
Invoices, receipts, and downloads generated or managed by apps.
Returnsshopify.returns.label_generated
shopify.returns.inspection_completed
shopify.returns.disposition_assigned
shopify.returns.exchange_offer_accepted
Return labels, inspections, dispositions, and exchanges managed by apps.
Subscriptionsshopify.subscriptions.payment_recovery_started
shopify.subscriptions.payment_recovery_completed
shopify.subscriptions.retention_offer_started
shopify.subscriptions.retention_offer_accepted
shopify.subscriptions.cancellation_reason_captured
shopify.subscriptions.skip_requested
shopify.subscriptions.swap_completed
Payment recovery, retention, cancellation, skip, and swap activity reported by apps.
Supportshopify.support.ticket_created
shopify.support.first_response_sent
shopify.support.ticket_resolved
shopify.support.rating_submitted
shopify.support.service_recovery_offer_accepted
Support tickets, responses, resolutions, ratings, and recovery offers managed by apps.

The full standard event registry follows. Each entry defines the event's category, standard registry handle, required attributes, optional attributes, and queryable metrics. Shopify defines these entries, and only events that are listed here can be declared.

Attribute names are followed by their value type (string, int, or bool). Optional attributes can be omitted when they don't apply to the event or to your app. The Metrics column lists each event's ShopifyQL metric name and its aggregation; query a metric by name with SHOW, such as SHOW emails_sent. Every event has a count metric, and a few also expose a sum metric for a numeric measure. To send an event, use the full standard registry handle, including the shopify. prefix, as the App Events API event_handle (the same value you declare in shopify.extension.toml).

CategoryEvent handleRequired attributesOptional attributesMetrics
Checkoutshopify.checkout.offer_shownoffer_id (int), offer_type (string)placement (string), cart_id (int), checkout_id (int), product_id (int), bundle_id (int), funnel_id (int)offers_shown (count)
Checkoutshopify.checkout.offer_acceptedoffer_id (int), offer_type (string)placement (string), cart_id (int), checkout_id (int), product_id (int), bundle_id (int), funnel_id (int)offers_accepted (count)
Checkoutshopify.checkout.offer_declinedoffer_id (int), offer_type (string)placement (string), cart_id (int), checkout_id (int), product_id (int), bundle_id (int), funnel_id (int)offers_declined (count)
Demandshopify.demand.restock_subscribedproduct_id (int)variant_id (int), notification_channel (string), list_id (int), source (string)restock_subscriptions (count)
Demandshopify.demand.restock_sentproduct_id (int)variant_id (int), notification_channel (string), list_id (int), source (string)restock_notifications_sent (count)
Demandshopify.demand.restock_clickedproduct_id (int)variant_id (int), notification_channel (string), list_id (int), source (string)restock_clicks (count)
Demandshopify.demand.wishlist_item_addedproduct_id (int)variant_id (int), list_id (int), source (string)wishlist_items_added (count)
Demandshopify.demand.preorder_submittedproduct_id (int)variant_id (int), preorder_id (int), source (string)preorders_submitted (count)
Demandshopify.demand.backorder_requestedproduct_id (int)variant_id (int), source (string)backorders_requested (count)
Discoveryshopify.discovery.search_results_loadedsearch_id (int), result_count (int)query_id (int), surface (string), zero_results (bool), algorithm_id (int)search_results_loaded_events (count); search_results_count_total (sum)
Discoveryshopify.discovery.recommendations_loadedrecommendation_id (int), recommendation_count (int)recommendation_type (string), placement (string), surface (string), algorithm_id (int), product_id (int), variant_id (int)recommendations_loaded_events (count); recommendation_count_total (sum)
Duties and tariffsshopify.duties.fee_appliedorder_id (int)country_code (string), tariff_code (string), fee_type (string)duties_fees_applied (count)
Duties and tariffsshopify.duties.duty_calculatedorder_id (int)country_code (string), tariff_code (string)duties_calculated (count)
Duties and tariffsshopify.duties.hs_code_classifiedorder_id (int)country_code (string), hs_code (string), classification_source (string)hs_codes_classified (count)
Experimentationshopify.experimentation.experiment_startedexperiment_id (int)audience_id (int), placement (string), objective (string)experiments_started (count)
Experimentationshopify.experimentation.variant_assignedexperiment_id (int), variant_id (int)audience_id (int), placement (string), assignment_method (string)variants_assigned (count)
Experimentationshopify.experimentation.experiment_concludedexperiment_id (int)result_status (string), objective (string)experiments_concluded (count)
Fraud and riskshopify.fraud.decision_approveddecision_id (int)risk_level (string), reason_code (string), rule_id (int)decisions_approved (count)
Fraud and riskshopify.fraud.decision_declineddecision_id (int)risk_level (string), reason_code (string), rule_id (int)decisions_declined (count)
Fraud and riskshopify.fraud.manual_review_startedreview_id (int)risk_level (string), reason_code (string)manual_reviews_started (count)
Fraud and riskshopify.fraud.alert_receivedalert_type (string)risk_level (string), chargeback_id (int)alerts_received (count)
Fulfillmentshopify.fulfillment.order_status_updatedfulfillment_order_id (int)shipment_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string)order_status_updates (count)
Fulfillmentshopify.fulfillment.label_createdshipment_id (int)fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string)labels_created (count)
Fulfillmentshopify.fulfillment.carrier_exception_detectedshipment_id (int)fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), exception_type (string), delivery_region (string)carrier_exceptions_detected (count)
Fulfillmentshopify.fulfillment.delivery_promise_updatedshipment_id (int)fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string)delivery_promises_updated (count)
Fulfillmentshopify.fulfillment.shipment_deliveredshipment_id (int)fulfillment_order_id (int), tracking_number (string), carrier (string), service_level (string), delivery_region (string)shipments_delivered (count)
Inventoryshopify.inventory.stockout_risk_predictedproduct_id (int)variant_id (int), location_id (int), forecast_window (string), risk_level (string)stockout_risks_predicted (count)
Inventoryshopify.inventory.replenishment_recommendedproduct_id (int)variant_id (int), location_id (int), supplier_id (int), purchase_order_id (int)replenishment_recommendations (count)
Inventoryshopify.inventory.purchase_order_recommendedproduct_id (int)variant_id (int), location_id (int), supplier_id (int), purchase_order_id (int)purchase_orders_recommended (count)
Inventoryshopify.inventory.demand_forecast_updatedproduct_id (int)variant_id (int), location_id (int), forecast_window (string)demand_forecasts_updated (count)
Inventoryshopify.inventory.inventory_syncedproduct_id (int)variant_id (int), location_id (int), sync_source (string)inventory_syncs (count)
Lead captureshopify.lead_capture.lead_capturedlead_id (int)form_id (int), campaign_id (int), flow_id (int), capture_type (string), contact_method (string), consent_state (string), incentive_id (int), source (string)leads_captured (count)
Lead captureshopify.lead_capture.form_submittedform_id (int)campaign_id (int), flow_id (int), placement (string), capture_type (string), contact_method (string), consent_state (string), submission_status (string), source (string)forms_submitted (count)
Lead captureshopify.lead_capture.incentive_issuedincentive_id (int)lead_id (int), form_id (int), campaign_id (int), incentive_type (string), delivery_channel (string), source (string)incentives_issued (count)
Loyaltyshopify.loyalty.member_enrolledprogram_id (int), member_id (int)referral_channel (string)members_enrolled (count)
Loyaltyshopify.loyalty.points_earnedprogram_id (int), member_id (int), points_delta (int)points_balance (int)points_earned_events (count); points_earned (sum)
Loyaltyshopify.loyalty.points_redeemedprogram_id (int), member_id (int), points_delta (int)points_balance (int)points_redeemed_events (count); points_redeemed (sum)
Loyaltyshopify.loyalty.reward_issuedprogram_id (int), member_id (int), reward_type (string)points_delta (int), points_balance (int)rewards_issued (count); reward_points_issued (sum)
Loyaltyshopify.loyalty.reward_redeemedprogram_id (int), member_id (int), reward_type (string)points_delta (int), points_balance (int)rewards_redeemed (count); reward_points_redeemed (sum)
Loyaltyshopify.loyalty.tier_changedprogram_id (int), member_id (int), tier_from (string), tier_to (string)Nonetier_changes (count)
Loyaltyshopify.loyalty.referral_completedprogram_id (int), member_id (int)referral_channel (string)referrals_completed (count)
Loyaltyshopify.loyalty.customer_segment_assignedprogram_id (int), member_id (int)Nonecustomer_segment_assignments (count)
Loyaltyshopify.loyalty.churn_risk_flaggedprogram_id (int), member_id (int)Nonechurn_risk_flags (count)
Marketingshopify.marketing.email_sentNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string)emails_sent (count)
Marketingshopify.marketing.email_deliveredNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string)emails_delivered (count)
Marketingshopify.marketing.email_openedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string)emails_opened (count)
Marketingshopify.marketing.email_clickedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), link_domain (string)email_clicks (count)
Marketingshopify.marketing.email_bouncedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string)emails_bounced (count)
Marketingshopify.marketing.email_unsubscribedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string)email_unsubscribes (count)
Marketingshopify.marketing.sms_sentNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), country_code (string)sms_messages_sent (count)
Marketingshopify.marketing.sms_deliveredNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string)sms_messages_delivered (count)
Marketingshopify.marketing.sms_clickedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), link_domain (string), country_code (string)sms_clicks (count)
Marketingshopify.marketing.sms_unsubscribedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), recipient_status (string), consent_state (string), country_code (string)sms_unsubscribes (count)
Marketingshopify.marketing.push_sentNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), device_platform (string)push_notifications_sent (count)
Marketingshopify.marketing.push_openedNonechannel (string), campaign_id (int), flow_id (int), template_id (int), message_type (string), consent_state (string), device_platform (string)push_notifications_opened (count)
Merchandisingshopify.merchandising.review_requestedproduct_id (int)review_id (int), request_channel (string)reviews_requested (count)
Merchandisingshopify.merchandising.review_submittedproduct_id (int), review_id (int)rating (int), review_source (string), media_attached (bool)reviews_submitted (count)
Merchandisingshopify.merchandising.review_publishedproduct_id (int), review_id (int)rating (int), review_source (string), media_attached (bool), moderation_status (string)reviews_published (count)
Merchandisingshopify.merchandising.review_syndicatedproduct_id (int), review_id (int)rating (int), review_source (string), media_attached (bool)reviews_syndicated (count)
Merchandisingshopify.merchandising.quiz_startedquiz_id (int)product_id (int), question_group (string)quizzes_started (count)
Merchandisingshopify.merchandising.quiz_completedquiz_id (int)product_id (int), question_group (string), completion_state (string)quizzes_completed (count)
Merchandisingshopify.merchandising.quiz_recommendation_viewedquiz_id (int), recommendation_id (int)product_id (int), question_group (string)quiz_recommendations_viewed (count)
Purchasingshopify.purchasing.invoice_generatedorder_id (int)recipient_type (string), delivery_channel (string)invoices_generated (count)
Purchasingshopify.purchasing.receipt_sentorder_id (int)recipient_type (string), delivery_channel (string)receipts_sent (count)
Purchasingshopify.purchasing.download_completedorder_id (int)export_format (string)downloads_completed (count)
Returnsshopify.returns.label_generatedreturn_id (int)rma_id (int), return_reason (string), return_method (string)labels_generated (count)
Returnsshopify.returns.inspection_completedreturn_id (int)rma_id (int), return_reason (string), item_condition (string)inspections_completed (count)
Returnsshopify.returns.disposition_assignedreturn_id (int)rma_id (int), return_reason (string), disposition (string)dispositions_assigned (count)
Returnsshopify.returns.exchange_offer_acceptedreturn_id (int)rma_id (int), return_reason (string), exchange_type (string)exchange_offers_accepted (count)
Subscriptionsshopify.subscriptions.payment_recovery_startedsubscription_id (int)contract_id (int), plan_id (int), cadence (string), recovery_reason (string)payment_recoveries_started (count)
Subscriptionsshopify.subscriptions.payment_recovery_completedsubscription_id (int)contract_id (int), plan_id (int), cadence (string), recovery_reason (string)payment_recoveries_completed (count)
Subscriptionsshopify.subscriptions.retention_offer_startedsubscription_id (int), offer_id (int)contract_id (int), plan_id (int), cadence (string)retention_offers_started (count)
Subscriptionsshopify.subscriptions.retention_offer_acceptedsubscription_id (int), offer_id (int)contract_id (int), plan_id (int), cadence (string)retention_offers_accepted (count)
Subscriptionsshopify.subscriptions.cancellation_reason_capturedsubscription_id (int), cancellation_reason (string)contract_id (int), plan_id (int), cadence (string)cancellation_reasons_captured (count)
Subscriptionsshopify.subscriptions.skip_requestedsubscription_id (int)contract_id (int), plan_id (int), cadence (string)skips_requested (count)
Subscriptionsshopify.subscriptions.swap_completedsubscription_id (int)contract_id (int), plan_id (int), cadence (string)swaps_completed (count)
Supportshopify.support.ticket_createdticket_id (int)channel (string), topic (string), priority (string), agent_team (string)tickets_created (count)
Supportshopify.support.first_response_sentticket_id (int)channel (string), topic (string), priority (string), agent_team (string), response_time_bucket (string)first_responses_sent (count)
Supportshopify.support.ticket_resolvedticket_id (int)channel (string), topic (string), priority (string), agent_team (string), resolution_time_bucket (string)tickets_resolved (count)
Supportshopify.support.rating_submittedticket_id (int)channel (string), topic (string), rating_score (int)support_ratings_submitted (count)
Supportshopify.support.service_recovery_offer_acceptedticket_id (int)channel (string), topic (string), priority (string), agent_team (string)service_recovery_offers_accepted (count)

Only use a standard event when your app's activity matches the event definition. Standard event definitions are shared across apps so that merchants can compare app-reported activity consistently.


Anchor to ShopifyQL fields and metricsShopifyQL fields and metrics

Merchants query standard events through FROM app_events. For the queryable fields, types, metrics, dimensions, version availability, and query examples, refer to the versioned ShopifyQL reference.

Each event's queryable metric names appear in the Metrics column of the event entries. Use those names with SHOW, such as SHOW emails_sent. Every event has a count metric, and some also expose a sum metric for a numeric measure.


Anchor to Attribute requirementsAttribute requirements

In addition to the requirements that are listed for each event, attributes must follow the App Events API constraints:

  • A maximum of 15 keys.
  • String, number, or boolean values only.
  • No arrays or nested objects.
  • String values are limited to 128 characters.
  • Keys are limited to 64 characters.

Standard registry attributes count toward the 15-key payload limit.


Standard events represent activity that's reported by an app. They don't replace Shopify's commerce data, even when an event relates to fulfillment, returns, subscriptions, inventory, purchasing, or duties. Only send a standard event when your app is the source of the reported activity.

Don't include personal data or data that can identify a natural person in event attributes. Follow the App Events API requirements when choosing attribute values.


Was this page helpful?