For users who already have a provider and subscription and need to maintain their Shadowrocket list. Keep existing entries, refresh once manually from Home, then check the automatic update option in Settings. If it fails, check the URL, network request, and response format in that order. After a successful update, test the connection separately—refreshing the list does not confirm that a server is reachable.
First, tell whether the subscription update failed or the connection failed
Shadowrocket subscription updates fetch server information from an address you provide and organize it in the Home list. This does not update the app itself or connect to a server. If old entries are still visible, that only means data is saved locally; it does not confirm that the latest refresh succeeded.
Note where the failure occurs: does an alert appear as soon as you refresh, does the request time out, or does it report success without adding entries? If the update completed but a server will not connect, troubleshoot it with a connection test. Do not repeatedly delete and re-add the subscription.
This process explains two common scenarios: old servers may still connect even though the subscription URL has expired; or the subscription may refresh successfully while one of its servers is temporarily unavailable. These are not contradictory. The first issue occurs while fetching the list; the second occurs after the list is in use.
Manual refresh: start from Home and keep the existing subscription
Start with a manual refresh so you can see the full result. Do not make “add it again” your first step: importing the same URL more than once can create duplicate groups in Home and make the results harder to interpret. If you need to re-enter the URL, check and edit the existing subscription first.
-
Find the subscription
Go to Home and locate the subscription group you want to update. Note its name and current entry count so you do not mistake a server added individually for a subscription.
-
Check the URL
Open the subscription’s edit screen and make sure its URL matches the one from your provider. To import a subscription for the first time, go to Home → “+” in the top-right corner → Type → Subscribe. There is no need to create another one if it already exists.
-
Pull to refresh
Return to Home, pull down at the top of the list, and wait for the request to finish. If you have multiple subscriptions, check each group separately; success for one does not mean they all updated.
-
Check the result
Note the success or failure message, then check the target group. An unchanged entry count may simply mean the remote list has not changed. Use the update message to confirm whether the request and parsing completed.
Update On Open: configure it in Settings
Automatic updates can reduce manual work, but they will not fix an expired URL. First confirm that a manual refresh works, then enable Update On Open. Go to Settings → Subscribe, find Update On Open, and turn it on. Labels and their placement may change with app updates; check what appears in your app.
This option triggers a subscription update when you open the app. It is not a scheduled refresh that runs continuously in the background. If you cannot tell whether an update ran after returning to the app, go to Home, refresh manually, and check the result. This is more conclusive than repeatedly toggling the setting.
- Check the setting: Settings → Subscribe → Update On Open. Do not look in Config for an automatic refresh setting for the server list.
- Then verify it: After enabling the option, reopen the app, wait for the request to finish, and check the target subscription for an update result. Seeing the Home screen alone does not mean the request succeeded.
- Check your network: Automatic updates may fail if you open the app before connecting to the internet or while Wi-Fi still requires authentication. Once the network is available, refresh manually.
- Keep the features separate: Settings → On Demand controls on-demand connections; it does not replace the update option under Subscribe. Starting a connection and refreshing a subscription are different actions.
If automatic updates fail but a manual refresh works, compare the network and connection state during each attempt. The app may have opened while the device was switching between Wi-Fi and cellular. One difference does not prove the setting is broken; test again on the same network.
Step 1: Check for an expired subscription URL or changed access
First, ask your provider to confirm that the subscription URL is still valid. Do not substitute a website login URL for the subscription URL, and do not remove query parameters from memory. A long URL may contain an account identifier, access credentials, and an output format. Removing even one parameter can change the response.
https://example.com/sub?token=xxxx
The example above cannot be used for an actual import. When troubleshooting, compare the URL on your device with the source, character by character. Check the protocol, domain, path, parameters after the question mark, and any spaces or line breaks introduced when copying. Do not share the real URL publicly or enter it into an unfamiliar conversion tool.
- URL was reset: If your provider generated a new subscription URL, the old token may no longer work. Save the complete new URL to the existing subscription, then refresh.
- Access permissions changed: Account status, service term, or provider access restrictions may affect the subscription response. Purchasing the app does not grant these permissions.
- Response is 401 or 403: If the error details show either HTTP status, check authorization and access restrictions first. The status code alone does not identify a single cause.
- Response is 404: Check the full path and whether the endpoint has changed. Changing a server port at random will usually not fix a problem with the subscription endpoint path.
- Response is 429: Stop refreshing repeatedly and wait before trying again, following your provider’s instructions. Repeated requests may continue to trigger rate limits.
Being able to open the domain’s home page in a browser does not mean the subscription endpoint works. The home page and subscription path may use different access checks, and a redirect to a login page does not provide a server list. Check the response from the complete subscription URL, not just whether the domain is reachable.
Step 2: Check the network and request timeouts
After confirming that the URL is valid, check whether your device can reliably reach the host serving the subscription. Complete Wi-Fi sign-in if required, confirm that regular web pages load, then compare Wi-Fi with cellular. Change only one condition at a time so you can compare results.
Error: Failed to load subscription
What it means and what to do: This message means the subscription did not load successfully; by itself, it does not identify whether the cause is the URL, network, or content parsing. Check the URL and access permissions first, then try a manual refresh on another network and keep the detailed error message.
Error: The request timed out.
What it means and what to do: The request did not finish within the allowed time. The network route or the subscription service may be responsible. Confirm that you are online, try Wi-Fi or cellular, and wait rather than refreshing repeatedly.
Error: Could not connect to the server.
What it means and what to do: The request could not connect to the target host. The URL, port, or server availability may be involved. Check the host and any explicitly specified port in the URL, then ask your provider to check the endpoint.
These are examples of messages you might see while troubleshooting. The wording may differ depending on the system language and where the error comes from. Do not ignore the error details just because they differ from one of these examples. If you see a certificate warning, check the device’s date and time and ask your provider to inspect the certificate. Do not bypass the issue by disabling certificate verification.
- In system settings, confirm that the current network is connected. If Wi-Fi requires web sign-in, complete it first.
- Note Shadowrocket’s current connection status and Global Routing selection, then refresh once without changing them.
- Switch only between Wi-Fi and cellular, then refresh the same subscription and compare the results.
- If you suspect the current connection is affecting the request, disconnect and test under controlled conditions. If On Demand is enabled, check whether it starts the connection again.
Proxy, Direct, Config, and Scene under Global Routing are traffic-handling modes, not “fix subscription” buttons. Do not force a permanent change to how all traffic is handled just to refresh one URL, and do not add a DIRECT rule without verifying that it is needed. The route used for a subscription request depends on the current connection and settings.
Step 3: Check the response content and subscription format
Even when the network request completes, the response may not contain importable entries. An HTTP 200 status means the request succeeded at the HTTP level, but the response body could be a login page, maintenance page, error message, or data the current import option cannot recognize. Changing networks again may not help.
- Check the import type first: Home → “+” → Type → Subscribe is for importing subscriptions. Config manages configuration files; a complete configuration file URL is not interchangeable with a server subscription URL.
- Then check the intended output: Tell your provider you use Shadowrocket and confirm that the subscription output they provide is compatible with the import method you are using. Do not judge compatibility by the file extension alone.
- Check for an empty response: An empty response, or one without recognizable server entries, can prevent the list from updating as expected. Ask your provider to check the response body instead of clearing the local list first.
- Check that entries are complete: Address, Port, and the authentication details required by the protocol must match the server. A readable subscription does not guarantee that every entry has complete, usable parameters.
Shadowsocks, VMess, VLESS, Trojan, Hysteria2, and WireGuard are protocol names; Subscribe is the subscription import type. Two services using the same protocol do not necessarily use the same subscription format. Protocols, subscription formats, and complete configuration structures are different things.
After updating: verify entries, then remove duplicates if needed
After a successful update, check the target group and test the connection using one of its entries. Connectivity Test can show reachability and latency under the test conditions, but it is not a bandwidth test. A single result does not prove that every website or service will work.
- Confirm the update: Check the target group name and whether its entries changed. If your provider has not changed the content, an unchanged count and set of names may be normal.
- Test a specific connection: Select an existing entry and run Connectivity Test, then open a page you need to access. Record the list refresh and access test as separate results.
- Check for duplicate sources: If you imported the same subscription more than once, first confirm which group has the correct URL, then remove the extra group. Do not identify duplicates by server display name alone.
- Keep a maintenance record: Note whether you changed the URL, network, or automatic update setting. If the same issue comes up again, you can start with the relevant step.
If it still fails, send your provider the network type, time of failure, full error message, and steps you have tried. Use their private support channel to check your subscription access, and hide credentials in any screenshots shared publicly. These details make it easier to determine whether the problem is the URL, endpoint response, or format than simply saying “it won’t update.”
Shadowrocket is a one-time-purchase, closed-source commercial app, primarily for iPhone and iPad. It is available exclusively from the App Store. Check the App Store listing for system requirements. Buying the app ≠ buying a server plan; purchasing the app does not include a server or subscription. This site explains how to manage a subscription you already have and does not provide, sell, or recommend servers or subscriptions.