Solving the Shopify Managed Pricing 404: Your App's Billing Page Mystery Explained
Okay, picture this: you've poured your heart and soul into building an amazing Shopify app. You've set up your plans, enabled Managed Pricing, and you're ready for merchants to start subscribing. You hit that "test" button, or perhaps a merchant tries to subscribe, and... BAM! A dreaded "Shopify Admin 404" error stares back at you from the hosted plan selection page. Frustrating, right?
That's exactly the scenario a developer named HaroldAA recently encountered in the Shopify Community forums, and it sparked a really insightful discussion among experts. If you're an app developer, chances are you've either faced this or will at some point. Let's break down why this happens and, more importantly, how to fix it, drawing from the collective wisdom of the community.
Why Your Managed Pricing Page Might Be Showing a 404
When you see a 404 on your Managed Pricing page, it's essentially Shopify's billing service telling you, "Hey, I can't find or resolve your app's plan configuration right now." It's not usually a broken link, but more a structural issue with how your app's billing is set up or its current status.
The "Under Review" State: The Top Culprit
Almost every expert in the thread pointed to this as the number one reason for a Managed Pricing 404. As mastroke and LitExtension highlighted, if your app is still in a "draft," "in review," "unlisted," or "pending review" state, Shopify often won't expose the hosted pricing page to anyone, even you. The redirect URL might be perfectly formed, but the destination simply doesn't exist yet in a publicly accessible way.
Emilyjhonsan98 and lumine echoed this, emphasizing that Shopify restricts the hosted pricing page until your app is "Live" or has been published at least once. So, if your app isn't fully approved and listed in the Shopify App Store, this is almost certainly your primary issue.
Configuration and Setup Snafus
Beyond the review process, several other setup details can trip you up:
-
Managed Pricing Enabled? Double-check your Partner Dashboard under "App setup" → "Pricing." Ensure it's toggled ON. LitExtension mentioned cases where the UI toggle might not perfectly match the backend state, so give it some time (emilyjhonsan98 suggested 30 minutes for propagation) if you've just flipped it.
-
Active Plans? Make sure your plans are marked as "Active" in the Partner Dashboard, not just "saved" or "draft." No active plans mean no page to render.
-
App Handle Mismatch: This is a sneaky one, as lumine pointed out. The URL format expects an
{app-handle}, which is the slug from your public listing. This isn't your internal client ID. If you've renamed your app, this handle can silently change, causing your redirect URL to point to the wrong place. -
Incorrect App Context: LitExtension raised a good point about testing context. If you're installing on a development store or a store that doesn't fully support billing flows, Shopify can sometimes silently fail with a 404 instead of a clearer error.
URL Structure and Redirect Issues
The way you construct your redirect URL is critical. HaroldAA mentioned using target: "_top", which is the correct approach to break out of an iframe. However, the exact URL itself needs scrutiny:
-
Exact URL Format: Mastroke provided the general format:
https://[shop].myshopify.com/admin/billing/[pricing-handle]. Emilyjhonsan98 gave a slightly different, more specific one:https://{shop}.myshopify.com/admin/billing/managed_pricing/plans?app_id={your_app_id}. Any tiny mismatch, especially in theapp_idorpricing-handle, will absolutely lead to a 404. -
Official Listing Flow: Mastroke also noted that if your app hasn't been installed through the official listing flow (e.g., using direct install URLs), it can bypass managed pricing, potentially leading to a 404.
Listing Content and Locale Mismatch
HaroldAA specifically asked if missing plan descriptions or features could cause a 404. Here, the community had slightly different takes: some suggested it could cause issues or a page failure (mastroke, emilyjhonsan98), while LitExtension argued it would result in a minimal page, not a hard 404. My take? It's always best practice to ensure all required fields are populated to avoid any rendering issues.
As for locale mismatch, lumine mentioned it as a less common but possible cause. If your listing is set to "English only" but the merchant's admin loads as en-CA or en-AU, it could trigger a 404 as the system looks for a matching locale.
How to Troubleshoot Your Managed Pricing 404
Alright, so you know the culprits. Now, how do you actually pinpoint the problem and fix it? Here's a step-by-step approach based on the community's advice:
-
Check Your App's Publication Status FIRST: This is the most common issue. Go to your Partner Dashboard, navigate to your app, and check its "Distribution" status. Is it "Published"? If not, you'll need to wait for approval and publication. As LitExtension and mastroke confirmed, there's no CLI or API way to directly verify the hosted pricing page status while your app is under review; the Partner Dashboard is your single source of truth.
-
Verify Managed Pricing Configuration in Partner Dashboard:
- Under "App setup" → "Pricing," ensure "Managed Pricing" is enabled and your pricing handle is saved correctly.
- Confirm your plans are marked as "Active."
- Ensure your app is set as a "public app" and the plan is attached to the correct app version.
-
Test the URL Directly and Cleanly: Lumine's advice here is golden. Construct the exact URL you're redirecting to. Then, open a clean browser tab, sign into the merchant admin (the store you're testing on), and paste that URL directly into the address bar. If it 404s there, the issue is with your app's configuration on Shopify's side. If it loads, then the problem lies in how your embedded app is constructing or handling the redirect.
-
Scrutinize Your Redirect URL Format: Double-check that it precisely matches
https://[shop].myshopify.com/admin/billing/[pricing-handle]orhttps://{shop}.myshopify.com/admin/billing/managed_pricing/plans?app_id={your_app_id}. Pay extreme attention to thepricing-handleorapp_id– a tiny typo will cause a 404. -
Ensure Listing Completeness: Make sure all required fields, including plan descriptions and features, are fully populated for your active listing language to avoid rendering issues.
-
Consider Your Testing Environment: If you're testing on a development store, ensure it's correctly configured and your app was installed via the proper flow. If it only 404s on live stores, it points back to the "under review" restriction.
In the meantime, while your app is awaiting approval, the community agreed with HaroldAA's approach: maintaining an internal /app/billing fallback page is absolutely the right move. Keep that as your default until your app is live and the Shopify-managed pricing page is ready to shine.
Navigating app development and submission can have its quirks, but with these insights from the Shopify community, you're now much better equipped to tackle that Managed Pricing 404 head-on. Happy developing!