Send any app event to one API endpoint and see a holistic view of your app in one place.
With App Events, you can now track merchant behavior inside your app and see it in the same Dev Dashboard where you monitor webhook deliveries, Function executions, and API calls.
App Events: Complete the picture
Until now, understanding how merchants use your app required separate analytics tools. Apps could receive data from Shopify (webhook deliveries, Function executions, API calls) but if a sync failed, a feature went unused, or a merchant hit an error, you had no way to log that back to Shopify. Debugging meant switching between your own monitoring tools, separate databases, and dashboards outside of Shopify.
App Events changes that.
Send any event through one API
The App Events API accepts any event from your app. You define the `event_handle` and attributes. There's no fixed list of event types. Track whatever matters to your app:
-
Feature usage: `bulk_edit_completed`, `report_generated`, `automation_created`
-
Workflows: `onboarding_completed`, `campaign_sent`, `export_finished`
-
Performance: `sync_failed`, `api_timeout`, `rate_limit_hit`
-
Conversion signals: `limit_hit`, `premium_viewed`, `milestone_achieved`
-
Billable activities: `order_processed`, `email_sent`, `label_printed`
Any event you send can also become a billable meter in Shopify App Pricing, but it doesn't have to be. You decide which events are for analytics and which ones power billing.
See it all in one dashboard

App events flow into your Dev Dashboard Logs automatically, alongside your existing data – webhooks, Functions, GraphQL requests, REST requests. No separate analytics platform to maintain or multiple dashboards to juggle. You see what Shopify is doing for your app and what your app is doing for merchants, in one complete view.
Build from real behavior
The App Events API tracks first-party data happening inside the platform it runs on. See which features drive engagement, spot the usage patterns that predict retention, catch the drop-offs that lead to churn. Build what merchants actually use, based on data you own, not approximations from third-party tools with incomplete access.
Unlock revenue from any event
On Shopify App Pricing, any event your app already emits can be turned into a usage-based charge. Define a meter in the Partner Dashboard, match it to an `event_handle`, and Shopify handles the metering and invoicing from there. The same event that shows up in your Dev Dashboard analytics also drives the merchant's bill. No separate billing integration, no code changes.
Let’s put this into practice:
Imagine you're building an inventory sync app. You ship a new bulk import feature and want to know if merchants are actually using it, and whether it's working.
You send events through the App Events API: `bulk_import_started` when a merchant kicks off an import, `bulk_import_completed` when it finishes, and `bulk_import_failed` when something goes wrong. Each event carries attributes like `item_count` and, for failures, an `error_type`.
/* POST /app/unstable/events */
const response = await fetch("https://api.shopify.com/app/unstable/event", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer {BEARER_TOKEN}",
},
body: JSON.stringify({
shop_id: 23423423,
event_handle: "bulk_import_failed",
timestamp: "2026-05-08T14:30:00Z",
idempotency_key: "evt_88012345",
attributes: {
item_count: 340,
error_type: "csv_parse_error",
},
}),
});
const data = await response.json();
A few days after launch, you open your Dev Dashboard and filter by `bulk_import_failed`. One shop stands out: they've triggered the same `csv_parse_error` six times in two days. You click into their event timeline and see the pattern: they start an import, it fails, they try again a few minutes later, same error. They're stuck.
You reach out, discover they're exporting from a system that adds non-standard column headers, and push a fix that handles the edge case. That merchant goes from six failures to a clean import the next day.
Without App Events, you'd have no idea that feature was broken for that shop. The import wasn't hitting your API error logs — it was failing inside your app's parsing logic, silently.
If you're charging per import with Shopify App Pricing, those same `bulk_import_completed` events can double as your billing meters. Filter by billable activities to validate charges in the same dashboard.
One Dev Dashboard for your entire app business
This is where it comes together.
App Events, alongside your current app data logs, gives you a more holistic view in your app business: data flowing in and data flowing out, both visible in one place.
For the first time, you get unified visibility into both infrastructure health and merchant behavior.
Start tracking app events with Shopify.
App Events gives you one endpoint, one dashboard, and the complete picture you need to make better decisions.

