Shadowrocket Subscription Not Updating or Empty Server List: 5-Step Troubleshooting Checklist

Check the URL, copied link, provider status, update timing, and network to pinpoint why a Shadowrocket subscription fails to load.

At a glance

Use this checklist if you already have a subscription URL from your provider but Shadowrocket shows an update error, imports no entries, or stops refreshing an existing list. Keep your current configuration and work through these five checks. The goal is to determine whether the URL is wrong, the server returned no usable content, or the content could not be parsed—not to delete the subscription or change all your network settings right away.

First, distinguish subscription update errors from connection failures

A subscription update retrieves a list of server entries and parses it into records the client can use. If entries are already listed but connections fail, that is an issue at a later stage. An empty list does not prove that every server is unavailable. A successful latency test also does not prove that the subscription URL is reachable; the test target and subscription server may be different addresses.

Read URL Resolve domain Request subscription Parse response Show entries

Before troubleshooting, note the target subscription's name, current entry count, and any message shown on the Home screen. Keep any old entries that still work. Store backups containing credentials only somewhere you control. Don't start by deleting and re-adding the subscription; that removes useful information for comparing what changed.

What you seeCheck firstWhat you can't conclude yet
An update error, but old entries remainThe subscription request and its latest responseThat all old entries are invalid
No entries after the first importThe URL's purpose, response content, and formatThat you must change the connection protocol
The list is present, but one entry won't connectThat entry's settings and outbound network pathThat the subscription definitely failed to update
The list count decreases after an updateWhat the provider returned and any filtering criteriaThat the client must have mistakenly deleted entries

Step 1: Make sure it's a subscription URL, not a webpage

Get the subscription URL from your provider. An account home page, order page, or help page may open in a browser, but that doesn't make it an importable subscription URL. These pages usually return HTML for people to read, not server entries. A URL containing “sub” isn't proof of its purpose either; check the provider's import instructions.

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

These example addresses illustrate URL structure only; they won't connect to anything. https:// is the scheme, example.com is the hostname, /sub is the path, and ?token=xxxx is the query string. Real URLs may use completely different paths and parameter names. Don't alter your URL to match this example.

  1. Go back to where your provider shared the URL and confirm it's meant for a client subscription, not a web login.
  2. A single server share link is different from a subscription URL containing multiple entries. Don't assume they're interchangeable just because both have a Copy link option.
  3. To check where you added it, open the add option from Home, go to Add Server, confirm Type is set to Subscribe, and review the URL field.
  4. Don't import unknown content on the Config screen as a substitute for checking the subscription. Rule configurations and server subscriptions serve different purposes.
5 steps
URL, copying, provider status, update timing, network
443
Default port for HTTPS when none is specified
80
Default port for HTTP when none is specified

Port defaults explain the request destination; they aren't a recommendation to change anything. If the original subscription URL specifies another port, keep it as is. The subscription URL's port is also separate from the connection port of each server in the list.

Step 2: Check that the URL was copied in full

Two URLs that look alike can point to different resources if even one character differs. Common mistakes include copying a Chinese full stop, selecting only the visible part of the URL, missing parameters after the question mark, or pasting line breaks from formatted text. Checking the full string and trying one update is more useful than repeatedly tapping refresh.

When copying the URL again, use the source page's full-copy option if available. Replace the value in the target subscription's URL field and save. Change only this one variable, run one update, and record the result. Don't also rename groups, change rules, or switch protocols; otherwise, it will be hard to tell what changed the outcome.

Step 3: Check the provider's status and response

If the complete URL still fails, check with your provider: Is your account active? Was the subscription URL reset? Is the service under maintenance? Does the URL have access or rate limits? Buying the client does not include a server plan; purchasing Shadowrocket cannot reactivate an invalid subscription URL.

If the update message or available diagnostic details include an HTTP status code, use the standard meanings below to narrow down the cause. The English text on each card describes an HTTP status; the exact message may differ between updates. If no status code is shown, don't guess which error the server returned.

HTTP 401 Unauthorized

What it means and what to do: The request didn't meet the resource's authentication requirements, possibly because credentials are missing or invalid. Check the full URL parameters and ask your provider whether the address is still valid.

HTTP 403 Forbidden

What it means and what to do: The server denied the request, possibly because of permissions or an access policy. Share the status code and time with your provider so they can check why; don't assume this alone means your plan has expired.

HTTP 404 Not Found

What it means and what to do: The requested path doesn't match a resource. Check whether the URL was truncated or the path changed, then verify the current subscription URL with your provider.

HTTP 429 Too Many Requests

What it means and what to do: The server is rate-limiting requests. Stop refreshing repeatedly and try again after the wait specified by your provider or in the response, such as the Retry-After value.

An HTTP 200 response only means the request succeeded at the HTTP level; it doesn't guarantee that the response body is a valid subscription. A login page, verification page, empty body, or data in an unsupported format may produce no entries. If a browser can display content, that only confirms that particular browser request received a response. The browser's login state, cache, and request conditions may differ from the client's.

Bottom line: Check what the server returned before troubleshooting parsing

If the URL is correct but the list is empty, ask your provider whether it returns non-empty subscription content that Shadowrocket can use. Changing rule configurations won't fix a login page or empty response.

Step 4: Update once, at the right time, and check only the target subscription

Refreshing repeatedly won't fix invalid credentials and may trigger rate limits. If your provider has just reset the URL, changed entries, or restored the service, first confirm the change has taken effect, then run one update and record the result. Don't invent a fixed wait time before retrying; use the provider's instructions or the server's response as your guide.

  1. Record the starting state: On Home, confirm the target subscription's name and entry count, and check whether its group is collapsed. Make sure search or filters aren't hiding entries.
  2. Update the target: Use the update action for that subscription. If the current screen offers pull-to-refresh, check which subscriptions it affects so you don't mistake another group's results for this one.
  3. Wait for the update to finish: Don't trigger repeated requests while one is still in progress. Note the completion message and time.
  4. Check the result: View the same group again. An unchanged count doesn't mean the update failed; the provider may have returned the same content.
  5. Know what success means: A successful update only confirms that the subscription was retrieved and parsed. It doesn't mean every entry has been tested for connectivity.

If automatic updates don't run but a manual update works, check the relevant automatic-update options and trigger conditions before investigating background timing. Don't combine a failed manual update with an automatic update that never triggered in the same test. Changing the update interval won't resolve a server access denial.

Step 5: Isolate network issues with a one-variable test

The same subscription URL may behave differently on different networks. A Wi-Fi sign-in page, DNS resolution failure, timeout connecting to the subscription domain, or TLS certificate issue can stop the request before its content is parsed. First make sure the device can access the network, then compare subscription requests. Don't change the server protocol just because the list is empty.

TestWhat to recordNext step
Keep the same URL and switch from Wi-Fi to cellularUpdate fails only on Wi-FiCheck Wi-Fi sign-in, DNS, and access restrictions
Repeat the same request on another networkThe same 401 or 403 appears on both networksCheck credentials and the server's access policy first
Check the device's date and timeA message refers to the TLS certificate validity periodCorrect the device time; if the issue persists, ask your provider to check the certificate
Check existing connections and automatic connection conditionsDisconnect, then reconnect immediatelyCheck On Demand conditions under Settings

To rule out the current tunnel, first note its original state, then check automatic connection conditions under Settings → On Demand. Temporarily disable the relevant conditions for a test, then restore them. Don't disable TLS certificate verification to hide a certificate error; that changes the security boundary and doesn't prove the subscription content is valid.

Proxy, Direct, Config, and Scene under Global Routing control traffic handling; they aren't subscription repair options. The actual route used by a subscription update may also depend on related settings, so don't assume its outbound path based only on the selected mode. For a comparison test, note the current options and avoid changing DNS, routing, the subscription URL, and server settings at the same time.

Bottom line: Keep one failure you can reproduce

If the same URL fails on only one network, check that network first. If both networks return the same access denial, check the provider's status. If the request succeeds but no entries appear, check the response content. Change one condition at a time.

Still not working after five steps? Prepare a diagnostic report

When contacting your provider, specific details are more useful than simply saying “the update doesn't work.” Don't send the full subscription URL publicly. Start with a redacted report and follow the provider's secure support process to verify your account. This checklist covers both an empty first import and updates that stopped working after the subscription had been working normally.

Troubleshoot individual connection issues only after a valid subscription is restored and entries appear normally. To review the import process, read the subscription guide. For a first-time setup, follow the steps in the getting started guide.

Verify the official App Store listing