Level 2 access to customer data versus public app approval

Hi!

So we are currently in the approval process for our public app. However, our reviewer is not able to finish testing since we get data through shopifyqlQuery, and apparently, according to this post Required permissions for accessing non-PII aggregated data , we need Level 2 access to customer data to make any requests through shopifyqlQuery. I added the right scopes in our TOML config file:

[access_scopes]
scopes = “read_analytics,read_customers,read_orders,read_products,read_reports”

But even after reinstalling the app, I get the error:
”Access denied for shopifyqlQuery field. Required access: `read_reports` access scope. Also: Level 2 access to Customer data including name, address, phone, and email fields. Please refer to protected customer data [requirements](https://shopify.dev/docs/apps/launch/protected-customer-data)." So I assume it’s really about the Level 2.

I’d like to know if it’s possible to get Level 2 access for our approval or if there’s any way we could change the way we get the data for say, the sales (example query we make) or the orders, so our reviewer can finish the functional tests of the review:

{
“query”: “query { shopifyqlQuery(query: “FROM sales SHOW total_sales GROUP BY month SINCE 2026-01-01 UNTIL 2026-01-31”) { tableData { rows } parseErrors } }”
}

Thank you!!

Marie-Pier
Software Developer @ DashThis

Hey @vnext_account,

For the scopes issue, can you confirm that the updated TOML has been deployed and that when you reinstalled it you approved the reports permission?

For the Level 2 access, make sure you’ve completely filled out the access request in your partner dashboard with the increased permissions request. You do still need level 2 access currently for shopifyqlQuery.

@vnext_account adding to what Kyle mentioned, if the Level 2 approval is holding up the review process in the meantime, one option is switching the sales query from shopifyqlQuery to the standard Orders GraphQL API temporarily. It doesn’t require Level 2 and unblocks the reviewer while the access request goes through:

query {
  orders(first: 250, query: "created_at:>2026-01-01 created_at:<2026-01-31") {
    edges {
      node {
        totalPriceSet {
          shopMoney {
            amount
          }
        }
        createdAt
      }
    }
  }
}

You’d aggregate by month on your side but at least it keeps the review moving.

1 Like

Hey Kyle!

Yes, the TOML has been deployed and I explicitly asked the reviewer to reinstall the app before testing since it had changed. I also tested afterwards because the reviewer gave me access to their test store so I could try to debug, and I get the same error.

For Level 2 access, is this available through the public app request? Does the public app need to be approved before I can do that?

@yavuzoktay Thanks!! I’ll definitely try this to we can keep the review process going.

Cheers to both!

Marie

Hey Marie, the level 2 access review is reviewed during the app review process so you should have the form fully filled out before the review. Until then, you can only access level 2 data on development stores within your same partner organization.

If you’re still stuck, chat in to our help center so we can take a look at your specific implementation. Sounds like you’ve completed all of the necessary steps.