At a Glance

An empty Shadowrocket subscription does not mean you need to buy the app again. This guide is for users who already have a provider and subscription. Follow the checks in order—URL, response, parsing, and update path—to distinguish a failed request from an empty response or a display issue, while preserving your existing configuration and verifying the fix.

First, tell whether no content was retrieved or the content is not showing

A subscription update involves two separate steps: retrieving a response from the subscription URL, then parsing its valid entries into Home. If the request fails, the app may keep the old entries. If it succeeds, the response might still be a login page, an error message, or empty content. So a populated list does not prove the latest update succeeded, and an empty list does not necessarily mean the network is completely unavailable.

Read URLConnectReceive responseParse contentDisplay entries
  1. First import is empty: Check that you imported a subscription URL, not an account page or Config URL. Then confirm that your provider actually returned usable entries.
  2. Entries were there before, but the update failed: Note the error and when it occurred. Keep the old entries for now; do not delete the entire subscription.
  3. The update completed, but you cannot find any entries: Go to Home, expand the relevant subscription group, clear any search filters, and make sure you are not viewing a different group.
  4. Entries are visible, but connections fail: This is a separate connection issue. Being able to reach a subscription URL does not mean every server address in it is reachable.

Check the URL: preserve all parameters and confirm what you imported

Copy the URL again from your own provider account page, choosing the format labeled for Shadowrocket or a compatible subscription format. Do not copy the account homepage URL from your browser’s address bar, or mistake a webpage that imports on click for the actual subscription URL. If several formats are offered, follow the provider’s guidance for Shadowrocket.

https://example.com/sub?token=xxxx

The example above uses dummy values to illustrate the URL structure; it is not a usable subscription. A URL usually contains a scheme, hostname, path, and query parameters. A token may serve as an access credential. A missing character, an accidental line break, or replacing ASCII punctuation with full-width characters can make the request fail.

Go to Home and check the URL for the relevant subscription. If needed, replace it with the URL you just copied, then run a manual update. If you need to create a new subscription to test it, give the test entry a recognizable name and keep the original until you have checked the new list and its connections.

Check the response: what the status code and content tell you

If the error details or your provider’s diagnostic logs include an HTTP status code, use the meanings below to narrow down the issue. These are standard HTTP status descriptions; they may not appear verbatim in every app version. If there is no status code, keep the original error message rather than guessing what “empty” means.

401 / 403
First check credentials, authorization, and access restrictions
429
First check the update frequency and any rate-limit message
200
Still check whether the response body is a valid subscription

Error: 401 Unauthorized

Cause and fix: The request lacks valid authorization, or the current credentials have expired. Check your subscription status and current URL in your provider account, replace the URL if needed, and try again.

Error: 403 Forbidden

Cause and fix: The server rejected the request, possibly because of account permissions, source address restrictions, or access protection. Ask your provider what triggered the rejection; do not assume this code means the app is at fault.

Error: 404 Not Found

Cause and fix: The requested path does not exist, or the server uses this status to hide a resource that cannot be accessed. Copy the full URL again and check the domain, path, and whether the URL has been replaced.

Error: 429 Too Many Requests

Cause and fix: The update request has been rate-limited. Stop retrying repeatedly. If the response includes a Retry-After header, wait for the specified period; otherwise, follow the service provider’s guidance on when to try again.

Even a 200 OK response may contain an HTML login page, an account status message, or a subscription with no entries. Opening an account page in a browser only shows that the browser’s current session can access it. The browser’s saved login state does not automatically authorize the app’s subscription request.

Bottom line: Check the response content before changing the network

If your provider confirms the request reached the server but the response is a login page or empty list, fix the URL, account status, or output format first. Switching networks repeatedly will not turn an error page into a valid subscription.

Check the network: change one update condition at a time

The route used to reach a subscription URL may differ from the route used by its entries. Existing entries may still connect while the subscription domain cannot be resolved or reached. First confirm that your current Wi-Fi network does not require web-based authentication, then compare it with cellular data. Do not change the network, URL, and configuration all in the same test.

  1. Record a baseline: Note the current network, connection toggle state, Global Routing selection, and the full message shown after a manual update.
  2. Test another network: If cellular data is available, switch between Wi-Fi and cellular data and run one manual update on each. If only one network fails, check its authentication, DNS, or access restrictions first.
  3. Check the update path: In Settings → Subscribe, check Update via Proxy. Enable it and test only if you already have a working connection and need to access the subscription URL through a proxy.
  4. Change one setting at a time: Adjust only one condition per test. Record whether it succeeds, then decide whether to keep the change so you can identify what made a difference.

Proxy, Direct, Config, and Scene in Global Routing are different traffic-routing choices, not four subscription formats. Switching to Proxy is not a universal fix. When troubleshooting a subscription, check the dedicated update option and whether you have a working connection; do not rely only on whether the system shows a VPN status.

For a certificate verification error, first check the device’s date and time. Then ask your provider to verify the certificate’s validity period and domain match. Do not hide the problem by disabling certificate verification. For a connection timeout, distinguish between DNS resolution, establishing a connection, and waiting for a response; the word “timeout” alone does not mean your account has expired.

Update succeeds but the list is still empty: check the format, group, and timing

If the response arrives but contains no entries, focus on its content and the parsing result. Subscriptions can use different encodings and structures. Being able to open a file as text does not mean its contents match what the client expects. A different type of configuration, truncated encoding, or a response containing only a status message may produce no usable list.

A manual update provides a useful diagnostic baseline because you can relate the action to its result at that moment. Automatic updates depend on the app’s running state, system scheduling, and network conditions. Not seeing a background update does not prove the URL is invalid. On Demand establishes connections based on conditions; it is not a subscription update schedule.

Bottom line: Once manual updates work, check automatic updates

First, make sure the same URL completes a manual update on a known network and verify the entries. Only then should you check automatic update settings and when background updates run.

Common questions: Keep existing content and avoid repeated steps

Should I delete the subscription and import it again after an update fails?

Do not delete it yet. Note the existing groups and entries in Home, then check the URL and error message. If you need to test a fresh import, keep the original. Remove duplicates only after the new subscription updates and its entries connect successfully.

Why is the list empty in Shadowrocket when the URL opens in a browser?

Check whether the browser shows the subscription content or a webpage after login. Ask your provider whether the URL can return compatible content without a browser session, and check for redirects, access protection, or differences in the output format.

What should I do if enabling Update via Proxy stops updates from working?

First confirm that existing entries connect successfully, then compare the results with the setting on and off. If the proxy connection itself is unavailable, restore the original setting and test on a network known to be able to reach the subscription URL.

Will buying Shadowrocket again fix the subscription?

No. Rebuying will not fix an invalid URL, a server rejection, or an incorrect format. A one-time app purchase is separate from a connectivity plan; the app purchase and your existing subscription are managed separately. Troubleshoot the failing step instead of buying the app again.

Share diagnostic details and verify the fix

If the issue persists, give your provider enough information to locate the request rather than simply saying “import failed.” If you have confirmed that the server returns complete, compatible content but the app still cannot parse it, document the minimal steps to reproduce the issue so the client-side behavior can be investigated further.

After fixing the issue, manually update the target subscription from Home. Confirm there is no error and the expected entries appear in the group, then test the connection for one entry. Finally, remove test items and restore any temporary settings you do not need. Verify update success and connection success separately.