My app is a public app currently live in the App Store. It uses shopifyqlquery on the Admin GraphQL API for aggregated store-level analytics and core functionality. The queries themselves never reference any customer-level fields. No names, addresses, phones, or emails, no PII of any kind. Just aggregated numeric metrics.
Despite that, calling shopifyqlquery on a store without Level 2 PCD approval returns:
“Access denied for
shopifyqlQueryfield. Required access:read_reportsaccess scope. Also: Level 2 access to Customer data including name, address, phone, and email fields.”
And the official reference at https://shopify.dev/docs/api/admin-graphql/latest/queries/shopifyqlQuery repeats the same requirement.
A few questions I can’t get clear answers on from the docs alone:
-
Is this accurate? Is shopifyqlquery truly gated at the field level behind Level 2 PCD, meaning every app that calls this field (regardless of whether the specific query touches customer data) needs to go through the full Level 2 review? Or is there a configuration I’m missing where you can access shopifyqlquery with just read_reports if you explicitly don’t request customer fields?
-
What’s the typical review timeline for a Level 2 PCD request in the Partner Dashboard for a public app that’s already live in the App Store? Days? Weeks? I’ve read the PCD docs and guidelines but can’t find any official SLA or range. Trying to plan the communication to existing and incoming merchants appropriately.
-
If Level 2 is truly required, is there any alternative approach others have used to get aggregated store-level numeric metrics (not per-customer) without going through shopifyqlquery , e.g. paginated Order queries plus client-side aggregation, that avoids the L2 gate? I know Orders are also PCD-classified resources, but my read of the docs suggests read_orders alone is enough to query the Order object if you avoid the customer fields within it.