Shadowrocket Subscription Parse Error or Empty Node List: URL and Account Checks

If a subscription fails to parse or shows no nodes, check the URL, response, account status, and update timing.

At a glance

Keep your existing subscription, then check the URL, access, response content, account status, and update timing—in that order. Don’t delete all your nodes as a first step. This guide is for Shadowrocket users who already have a service provider and subscription. The steps use Home on iPhone and iPad as an example; the same troubleshooting sequence applies on Mac, Windows, Android, and Linux, though control locations vary by platform.

1. Tell parse errors, empty lists, and connection failures apart

Updating a Shadowrocket subscription involves fetching remote content and then reading node settings from it. A timeout, a login page, an empty response, and unrecognized node settings occur at different stages. “Update failed” alone doesn’t identify the cause or tell you whether your existing nodes still work.

Read URL Request subscription Receive content Parse nodes Display list
What you seeCheck firstAvoid for now
Update times out, but old nodes remainWhether your current network can reach the subscription URLDeleting an old subscription that still works
Parse error after content is receivedWhether the response contains subscription data, a webpage, or an error pageChanging the UUID, password, or protocol type at random
Subscription group appears, but no nodes are listedProvider-side node assignment, response content, and list filtersAssuming an empty list means the local configuration is corrupted
Nodes appear, but connections failNode settings, network, and connection test resultsReimporting the same subscription repeatedly instead of diagnosing the connection

In Home, first make sure you’re viewing the intended subscription group. Clear any search terms and expand collapsed groups. If node names appear, node data is present; don’t treat this as an empty-list issue. Config rules and node subscriptions in Home serve different purposes. Adding a rule configuration file does not replace importing a node subscription.

2. Check the subscription URL: a complete address matters more than reimporting

Copy the Shadowrocket subscription URL again from your own provider’s account page, then compare it with the saved URL. Don’t copy the account homepage from the browser’s address bar, or use page instructions, button labels, or a login redirect as the subscription URL. The example below shows URL structure only and cannot be used to import a subscription.

https://example.com/sub?token=xxxx
  1. Check the beginning. Make sure the scheme is complete, such as https://, including the colon and slashes. The URL should not include quotation marks, Chinese parentheses, or explanatory text.
  2. Check the end. Make sure all query parameters after ? are present. An ellipsis in a message preview isn’t part of the URL; copying from a preview card can omit the token.
  3. Keep parameters unchanged. & separates query parameters, and sequences such as %2F are encoded. Don’t decode, reorder, or remove characters that look unnecessary.
  4. Check where you copied it from. Use the copy option on the account page whenever possible. If the pasted URL contains a line break, copy it again and check; don’t confuse automatic line wrapping on screen with an actual line break.
  5. Confirm what the URL is for. A single-node share, a rule configuration URL, and a subscription URL are different inputs. Import it according to the provider’s instructions; don’t judge its purpose by the file extension alone.

If your provider has reset the subscription credentials, the old URL may no longer work even if its format is correct. Update the subscription URL on your device rather than just changing its display name. Avoid resetting the token repeatedly while troubleshooting; other devices using the same URL may be affected too.

3. Use the response to distinguish access issues from content issues

“It opens in a browser” only means the browser received some kind of response; it doesn’t mean Shadowrocket can parse it. A browser may have a logged-in Cookie, while a subscription request can’t rely on the browser’s login state. A login page, CAPTCHA, or maintenance notice is not node data, even if it loads successfully.

443
Default port for HTTPS when none is specified
401
HTTP status: missing valid authentication credentials
403
HTTP status: server refused the request

The following standard HTTP statuses may appear in a response or diagnostic information. They won’t necessarily appear in a popup with the same wording on every platform. Use a status-specific step only if you actually see that status; don’t infer a particular status code just because the list is empty.

HTTP 401 Unauthorized

Cause and next step: The request is missing valid authentication credentials, possibly because the token has expired. Check the subscription URL again on your account page and ask your provider to confirm the credential status.

HTTP 403 Forbidden

Cause and next step: The server denied access, possibly because of its access policy or your account permissions. Note when it happened and which network you were using, then ask your provider to investigate. Changing a node password won’t fix this.

HTTP 404 Not Found

Cause and next step: The requested path doesn’t exist or the resource isn’t available. Copy the current URL from your account page again and check whether the path was truncated or has changed.

HTTP 429 Too Many Requests

Cause and fix: The request rate has been limited. Stop refreshing repeatedly, wait as instructed by your provider or for the interval specified by the response's Retry-After header, then try updating once.

An HTTP 200 response doesn’t guarantee a successful parse: it may contain an HTML error message or an empty body. If you can inspect the response, check that it contains subscription data in a format provided for the client. Don’t paste a full HTML page into Add Server. Even if you see encoded text, don’t decode it and overwrite the subscription without first confirming the export format.

Bottom line: identify the response before changing the client

If the same URL returns a login page, maintenance page, or empty content, ask your provider about the subscription endpoint. Switching Global Routing or changing Config rules won’t turn a webpage into node data.

4. Check provider-side issues: expiry, quota, and node assignment

Being able to log in to an account and having a working subscription are two different things. The subscription content may be affected by service validity, data quota, account status, or node assignment. Providers handle these situations differently: some return an empty list, some return an explanatory message, and others deny the request. Don’t conclude that an account has expired based on one message alone.

Shadowsocks, VMess, VLESS, Trojan, Hysteria2, and WireGuard are different protocols, and subscription settings must match the corresponding protocol. If parsing fails, don’t change the protocol type just to make something appear. Ask your provider to confirm that the export is compatible with the client rather than guessing at ports, TLS, or authentication fields.

5. Check update timing and network: change one condition at a time

After a renewal, URL reset, or change to node assignment, the upstream system may need time to sync. There’s no fixed wait time that applies to every provider; follow the account status and provider instructions. Repeated refreshing won’t speed up synchronization and may trigger rate limits, complicating the original issue.

  1. Record the current state. Note the update time, exact error message, whether nodes are still present, and whether you were on Wi-Fi or mobile data. Don’t clear content that still works.
  2. Connect to the network. If Wi-Fi requires web authentication, complete it first, then return to Home to update the subscription. The authentication page may cause the subscription request to receive unexpected content.
  3. Update manually once. In Home, update the target subscription. You can pull down to refresh; check whether the intended group updates rather than looking only at the connection toggle.
  4. Try another network. If possible, switch from Wi-Fi to mobile data, or the other way around. Keep the subscription URL unchanged so you can tell whether the network is involved.
  5. Choose your next step based on the result. If it fails only on one network, check that network’s access conditions first. If different networks return the same permission or content error, contact your provider first.

Don’t assume you must connect before updating. Whether a subscription request can reach its destination depends on the network and relevant settings; if the current node is already unavailable, relying on it to access the subscription can create a loop. Config, Proxy, Direct, and Scene under Global Routing are routing modes, not options for fixing a subscription format. If you test routing conditions, change one setting at a time, record its original value, and restore it afterward.

Settings → On Demand controls when connections are made; it doesn’t generate subscription content. Repeatedly toggling On Demand to troubleshoot an empty list adds variables. Keep the current setting and check the URL and response first. Automatic updates can’t fix an expired token either. Once a manual update succeeds, check whether subsequent automatic updates work.

6. Common questions and what to report

Why does parsing fail if the subscription opens in a browser?

First check that the page shows subscription data rather than a login page or notice. The browser’s logged-in state may mask an access issue with the endpoint. Copy the client subscription URL again from your own account page and update it once in Home.

Why is the list still empty after renewing?

First check that the account page shows the benefits as active and nodes as assigned, then wait for synchronization as instructed by your provider. Don’t add multiple copies of the same subscription while waiting, or it may be hard to tell which group was updated.

Another device has nodes, but this one doesn’t. Should I reinstall?

First compare the subscription URLs, update times, and search filters on both devices. The other device may be showing an old cache, which doesn’t prove the current endpoint is working. Update on each device and record the results before investigating device-specific differences.

Should I delete the old subscription before importing again?

Keep the old subscription and any nodes that still work. If you need to test a new URL, use a distinct name and check the update result. Once the new subscription works and you’ve confirmed there are no local changes to keep, you can clean up duplicate entries.

If you still can’t identify the cause, send your provider a record that contains no credentials. Reproducible details are more useful than “it stopped working” and can reduce back-and-forth. Don’t include the full subscription QR code or screenshots that identify your account.

Download Shadowrocket