We have a custom-distribution app that a merchant cannot install. The consent screen renders correctly, but the Install button is disabled and no reason is surfaced anywhere we can reach.
App
- Custom distribution, bound to a single store
- Non-embedded, authorization code grant (our backend builds
/admin/oauth/authorizeitself) - Current released version declares 11 access scopes
Merchant store
A live store on the Grow plan — not a development store.
Symptom
The permission screen renders in full. The Install button is rendered aria-disabled="true". No tooltip, no error banner, no console error, no failed network request. Both the store owner and a staff user see the identical screen, so this is not a “Manage and install apps” permission problem.
What the merchant found in the admin’s own response
"blocked": true,
"unmetInstallRequirements": [],
"primaryAlerts": [], "grantFooterAlerts": [], "grantSummaryAlerts": [],
"privacyPolicyUrl": null,
"supportEmail": null
blocked: true with an empty unmetInstallRequirements and no alerts.
Already ruled out
- Distribution is configured (Custom, bound to that store; the install link exists and resolves)
- The store owner is blocked too, so not an account-permission issue
- Protected customer data — per Shopify staff guidance elsewhere on this forum, custom apps receive Level 1 and Level 2 automatically
- Scope bloat — exactly 11 scopes:
read_orders, read_products, read_inventory, read_locations, read_price_rules, read_discounts, write_products, write_discounts, write_draft_orders, write_publications, write_orders - The same app installs successfully on our own development store
Two configurations released, neither of which unblocked it
[access_scopes]with the 11 scopes plususe_legacy_install_flow = true- The same 11 scopes using managed installation (legacy flag removed)
Questions
-
What sets
blocked: truefor an app on a given store whenunmetInstallRequirementsis empty? Is there anywhere a partner can see the server-side reason? -
privacyPolicyUrlandsupportEmailare both null. Our app requests protected customer data and the merchant’s store is not a development store. Where does a custom-distribution app set those two fields? There is no App Store listing for a custom app, and we can find no field for either in the Partner Dashboard or the Dev Dashboard. If these are the block, we simply need somewhere to enter them.
This is blocking a live merchant onboarding, so any pointer to the specific setting would be very welcome. Happy to provide the client ID and store domain privately.