Aug 21, 2026 · Troubleshooting · About 8 min read

Shadowrocket Subscription Parsing Failed or List Empty: Troubleshooting Checklist

If a subscription fails to parse or the server list is empty, there are usually three possible causes: the URL is malformed or incomplete, the provider subscription has expired or changed format, or the timing or network conditions are unsuitable. This guide walks through troubleshooting in order.

At a glance

This guide is for Shadowrocket users who already have a subscription from their own provider. First, distinguish a failed request from unparseable content or an empty set of entries. Then check the full URL, subscription status, and network used for updates. Finally, check what appears on Home and keep a record of your troubleshooting. Keep your existing configuration; don’t start by deleting all servers or reinstalling the app.

1. First, determine whether no content was received or the content contained no servers

Subscription updates in Shadowrocket involve several steps. The app first requests the subscription URL, then reads the response, and finally displays recognized server entries on Home. A “parse failed” message doesn’t necessarily mean the protocol settings are wrong, and an empty list doesn’t necessarily mean the network connection was interrupted. Identify the step that failed before changing unrelated settings.

Check URL Request subscription Read response Parse entries Display list

After a failed update, previously saved servers may remain in the list. So seeing old entries doesn’t mean the update succeeded, and being able to connect to an old entry doesn’t prove the current subscription URL is valid. Record the update result separately from the connection status of existing entries.

2. Check the full URL: don’t mistake your account page for a subscription URL

Copy the Shadowrocket subscription URL again from your own provider’s account page, then compare it with the URL for the corresponding subscription on Home. Don’t copy the account home page from your browser’s address bar or use a single server’s share link as the subscription URL. Subscription URLs often contain access credentials, so check them only on your own device.

  1. Check the beginning: Make sure you copied the entire URL, including the scheme specified by your provider, such as https://, not just the domain and path.
  2. Check the end: Make sure a chat app hasn’t truncated the query parameters. Pay particular attention to the text after ?, &, and =; don’t try to fill it in from memory.
  3. Check for extra characters: Remove any surrounding quotation marks, punctuation, spaces, or line breaks added during copying. Don’t arbitrarily change the URL’s capitalization or encoded characters.
  4. Check the URL’s purpose: Use the subscription URL your provider identifies as compatible with Shadowrocket, not a login URL, billing page, or configuration guide.
  5. Save, then update once: Return to Home, update the corresponding subscription, and wait for the request to finish before checking the result.
https://example.com/sub?token=xxxx

The example above illustrates URL structure only; don’t use it to import a subscription. In token=xxxx, the value represents an access credential; don’t replace the credentials in your actual URL with the example. Don’t encode the entire URL again or remove query parameters just to make it “look right.”

3. Check the subscription status and response format

Even a complete URL can return an error. An expired service, reset access credentials, server maintenance, or a format change can prevent a previously working URL from returning the expected subscription data. Opening a page in a browser only confirms that a response was received; it doesn’t prove Shadowrocket can parse it.

The HTTP status descriptions below are standard explanations to help identify server responses; they don’t guarantee that Shadowrocket will display these exact errors. Refer to the message shown in the app and any response your provider can confirm. Don’t submit a URL containing credentials to a third-party testing site just to look up a status code.

HTTP 401 Unauthorized

Cause and solution: The server requires valid credentials, and the ones you have may have expired. Check your subscription status in your provider account, copy a valid URL, and try updating again.

HTTP 403 Forbidden

Cause and solution: The server rejected the request, possibly because of account permissions or access restrictions. Ask your provider to check the reason; don’t keep trying by switching servers.

HTTP 404 Not Found

Cause and solution: The requested path doesn’t exist, possibly because the URL was truncated or the subscription endpoint changed. Copy the URL again from your provider’s current account page and check the path and parameters.

HTTP 429 Too Many Requests

Cause and solution: Too many requests in a short period triggered a rate limit. Stop refreshing repeatedly, then try again after the wait time indicated by the server or your provider.

Even an HTTP 200 response may contain a login page or a notice. If your provider confirms that a response was returned, ask whether it contains a subscription format Shadowrocket can recognize, rather than a page intended for viewing in a browser. Don’t judge compatibility by the file extension, file size, or a “request successful” message alone.

Bottom line: receiving a response doesn’t tell you what it contains

If the URL is complete and the request finishes but no server entries appear, focus on the subscription content and account status. Changing routing rules in Config usually won’t fix an incorrectly formatted response.

4. Change one network condition at a time, then test the update

Updating a subscription sends a request to the subscription server; it’s not the same as visiting a website. Being able to open a website doesn’t mean the subscription domain is reachable, and having a working proxy doesn’t mean a subscription request through it will succeed. Keep the URL unchanged and test each update path separately to identify which condition matters.

  1. Record the baseline: Note whether you’re using Wi-Fi or cellular, the connection toggle’s status, and the message shown for this update. Don’t change routing rules, DNS, and the subscription URL at the same time.
  2. Switch networks: If possible, switch from Wi-Fi to cellular, or vice versa, then update the same subscription once. If a public network requires a web login, complete that authentication first.
  3. Check the update path: Go to Settings → Subscribe and check Update via Proxy. If this option is available, make sure a proxy connection is working before enabling it. Note the original setting so you can restore it after testing.
  4. Avoid a dependency loop: If your only server is already unavailable, don’t expect it to fetch new servers. First check whether the subscription can be reached directly, or ask your provider which subscription endpoint is accessible.
  5. Check the time and certificate: If you see a TLS or certificate warning, verify that your device’s date and time are correct and ask your provider to check the certificate. Don’t treat disabling certificate verification as a general fix.

Config, Proxy, and Direct under Global Routing control how traffic is handled; they aren’t subscription format options. Scene controls scene settings and won’t convert an invalid subscription response into a server list. Don’t treat switching these options as a parsing fix. Check the relevant setting separately to confirm which path subscription updates use.

5. Still empty after updating? Check Home and confirm whether entries exist

Go back to Home, clear any active search filters, and expand the target subscription group. Make sure you’re looking at the subscription you just updated, not another group with the same name or manually added entries. A group name only shows that the subscription record is still saved; it doesn’t mean the group contains valid servers.

443
The default HTTPS port when none is specified is not the server’s connection port
2 items
Check these separately: subscription update result and server connection result
1 item
Change one condition per test to help pinpoint the cause

Shadowsocks, VMess, VLESS, and Trojan describe server connection protocols; they don’t identify the format used by the subscription itself. Parameters for the same protocol may also be represented differently. Ask your provider for compatible content instead of bulk-editing field names by hand. Don’t enter the HTTPS port from the subscription URL as the server’s Port.

6. Keep redacted records and follow up with the results

If these checks don’t resolve the issue, a reproducible report is more useful to your provider than saying you’ve “tried everything.” Include which step failed, whether the network conditions changed, and whether entries appeared before or after the update. Don’t send full tokens, passwords, private keys, or unobscured QR codes.

  1. Note the local time of the failure, whether you were on Wi-Fi or cellular, and the exact message shown in the app.
  2. Say whether this was a failed first import or a subscription that previously worked but suddenly stopped updating. Note whether the old entries are still there.
  3. Provide the subscription domain and a redacted description of the path, and say whether you’ve copied the currently valid URL again.
  4. Say whether you tested Update via Proxy, whether the proxy connection was working at the time, and whether switching networks changed the result.
  5. Ask your provider to confirm that your account is active, check for access restrictions, verify whether the subscription response is empty, and confirm the format is compatible with Shadowrocket.

Why does the link open in a browser but still fail to parse?

First check whether it opens subscription content or a login or notice page. If you only see a web page, copy the subscription URL for Shadowrocket again from your provider account. A successful web login doesn’t mean the subscription format is valid.

Should I delete the entire subscription and import it again?

Keep your existing entries for now. Check the URL and update once. Only remove the old subscription if you’ve confirmed the new URL works, safely saved any information you need, and determined that rebuilding is necessary. This helps avoid deleting connection details that still work.

The update succeeded and the list is there, but none of the servers connect. What should I do?

This is now a connection issue. Choose one entry and check its connection status, then ask your provider to confirm the port, authentication details, and service status. Don’t repeatedly import the same subscription or assume that a populated list guarantees a working connection.

I bought Shadowrocket. Why do I still need my own subscription?

Buying the app doesn’t include a server plan. Purchasing Shadowrocket gives you the client; servers and subscriptions are provided by your own service provider. This site does not provide, sell, or recommend nodes or subscriptions.

Verify the App Store listing