Shadowrocket Subscription Import Failed or Empty: Check the URL and Update Timing

If Subscribe fails to parse or shows an empty list, check the URL, provider status, and update timing, then re-import step by step to find the cause.

At a glance

This guide is for users who already have their own provider and subscription but can’t import it into Shadowrocket or see servers after an update. Troubleshooting covers URL integrity, request results, response content, and re-importing. Keep your existing configuration, then run one update you can compare against; this helps distinguish an access failure from an empty response or a connection failure.

First, distinguish an import failure from an empty list or connection failure

Subscribe retrieves content from a specified URL and adds recognized server configurations to the list. Saving a subscription entry doesn’t mean valid content was retrieved, and seeing a server in the list doesn’t guarantee it can connect. Identify which step failed before changing settings; this is more likely to preserve useful clues than repeatedly deleting the whole list.

Read URL Request URL Retrieve content Parse configuration Display list

Home shows servers and connection status, Config manages configuration files, and Settings contains app preferences. Don’t clear Config to fix a failed Subscribe request; they handle different things. This guide also doesn’t recommend changing Global Routing as a general fix, since the route used for subscription updates depends on relevant settings and the current network.

Check the Subscribe URL and preserve its original characters

A subscription URL usually contains a domain, path, and query parameters. A token in the query string acts as an access credential; even one missing character can result in a different request. Copy the URL directly from your provider’s subscription page. Don’t reconstruct it from a chat preview, a screenshot, or a truncated address bar.

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

The values above are fictitious and cannot be used to connect; they are shown only to illustrate the format. https:// is the access scheme, example.com is a sample domain, /sub is a sample path, and token=xxxx is a sample parameter. The path and parameter names in a real URL may differ. Use the exact URL provided by your provider; don’t adapt the example to construct a real link.

443
Default port used when an HTTPS URL doesn’t specify a port
?
Separator between the URL path and query string
&
Common separator between query parameters

Bottom line: copy the URL again and compare

If you suspect the URL was truncated, copy the complete link again from your own account and keep the old entry for comparison. Don’t guess the missing token, and don’t post the full URL in a public forum or online checker.

Use the request result to distinguish network issues from server issues

An HTTP error status and no response at all require different troubleshooting. The cards below list standard HTTP status phrases to help match diagnostic details with response records from your provider. Shadowrocket may use different wording; the exact English phrases don’t need to appear on screen. If there’s no status code, record the message the app actually shows rather than assuming the credentials have expired.

HTTP 401 Unauthorized

Cause and fix: The server didn’t accept the current authentication details. Check that the URL is complete and whether the credentials were reset, then copy the currently valid subscription URL from your own account.

HTTP 403 Forbidden

Cause and fix: The server rejected the request, but the status code alone doesn’t reveal why. Ask your provider to check account permissions, access restrictions, or security blocks, and share the error record with credentials redacted.

HTTP 404 Not Found

Cause and fix: The requested path wasn’t found, or the server may be masking a resource. Check the domain and path, then confirm whether the subscription endpoint has changed. Don’t just replace the token and try again.

HTTP 429 Too Many Requests

Cause and fix: The request triggered rate limiting. Stop refreshing repeatedly. If the response includes Retry-After, retry after the specified interval or at the specified time; otherwise, wait as instructed by your provider.

HTTP 503 Service Unavailable

Cause and fix: The service is temporarily unable to process the request. Keep your existing configuration and check the server status and recovery plans. Deleting and recreating the subscription repeatedly won’t fix a server-side outage.

If the request times out, the domain can’t be resolved, or TLS validation fails, first confirm that your iPhone or iPad can access ordinary HTTPS sites on the current network. Then compare Wi-Fi and cellular data separately. Change only the network each time and note the result. For certificate errors, also check that the system date and time are correct; don’t bypass the issue by disabling certificate validation.

If the request succeeds but returns nothing, check the content—not just the status

HTTP 200 means the request succeeded at the HTTP level; it doesn’t guarantee that the response contains subscription data Shadowrocket can recognize. A sign-in page, expiration notice, or security verification page may also return 200. These are webpage contents, not server lists ready for import. A page opening in a browser isn’t enough to confirm that the subscription is working.

Observed resultPotential point of failureNext step
A sign-in page or security verification page is returnedThe request didn’t retrieve the expected subscription contentConfirm you’re using the dedicated subscription endpoint and ask your provider about access requirements
The response body is emptyThe server didn’t return any server configurationsCheck your account status and whether this subscription should currently contain entries
Content is present, but the format doesn’t matchThe response format doesn’t match the import methodConfirm that your provider offers a subscription format compatible with Shadowrocket
The entry exists, but the main list isn’t expandedList display stateExpand the relevant group in Home and check the filters

An expired account, changed permissions, server maintenance, or an unfinished subscription generation process could all affect the response, but an empty list alone can’t tell you which one applies. Check your account page and ask your provider how many valid configurations this URL should return right now. A plan name shown on the account page isn’t proof that a valid subscription has been generated.

Keep protocol names and subscription formats distinct. Shadowsocks, VMess, VLESS, Trojan, Hysteria2, and WireGuard are protocols or tunnel types used in connection configurations. Their names appearing in a text file doesn’t mean Subscribe can parse that file directly. Don’t rewrite encoded content or assemble protocol fields yourself. If you need to enter parameters manually, use the appropriate entry method and provide all required values.

Bottom line: HTTP 200 and valid entries are two separate checks

If the request succeeds but produces no entries, first confirm that the server returned recognizable content, then check the app’s list state. Changing routing rules such as DOMAIN-SUFFIX or FINAL won’t turn an empty response into server configurations.

Keep your existing configuration and re-import once, step by step

Re-importing can help verify whether the URL was copied incorrectly or the URL saved in an old entry has stopped working. It shouldn’t be the first thing you do after every failure. Before you begin, note the original subscription name and number of entries. Keep any working configuration, and don’t delete the entire Home list. Interface layouts can vary slightly; look for the same English labels to identify each action.

  1. Record the current state

    In Home, check the original subscription group and note the visible server count and the result of its last update. Keep the original entry, and don’t change Config or server parameters while troubleshooting.

  2. Copy the URL

    Copy the complete subscription URL again from your provider’s account page. If you’ve just reset the credentials, use the new URL and check whether the old one has expired.

  3. Choose the type

    Go to Home → + in the top-right corner → Type → Subscribe. Return to the add screen, paste the link into the URL field, and use a recognizable note to distinguish this test from the original entry.

  4. Save and update

    After saving, return to Home and pull down to update. Wait for the request to finish and note the actual message. Don’t pull down repeatedly while the request is still running. If you have multiple subscriptions, make a note of which one failed.

  5. Check the list

    Expand the new subscription group and check whether servers appear and how many. Once the new entry works, you can clean up duplicates. If both old and new entries fail, keep the error record and investigate the network or server.

If the new URL imports successfully but the old one still fails, compare the saved URLs and credential status first. If both entries show servers but connections fail, stop troubleshooting the import and check the selected server separately. Don’t report a failed latency test as a Subscribe parsing failure.

Update timing and recording results

Updating a subscription requests fresh content from the server; it won’t restore expired account access or immediately lift a rate limit. After credentials are reset, permissions restored, or content changed, confirm that the update has taken effect on the server before running one manual update. Whether automatic updates are enabled and when they run depends on settings and system conditions. Don’t assume an update succeeded just because the app is open.

What to include when reporting an issue

A useful report should make the steps reproducible while protecting your access credentials. Tell your provider when the issue occurred, which network you used, which import path you followed, how many entries there were before and after the update, and the exact error message. If a record includes the full URL, redact the token, account identifier, and other authorization parameters. Don’t send subscription content, server passwords, or QR codes.

Path: Home → + → Type → Subscribe
Action: Save, return to Home, and pull down once to update
Result: The original entry is still there, but the new subscription group has no servers
Compare: Record the update result on Wi-Fi and cellular separately
Error: Copy the actual message shown; don’t guess the status code from what happened
Privacy: Redact URL credentials and account details from your report

Wrap up by checking the three stages: if the request didn’t complete, investigate the network and endpoint; if it completed but returned no valid entries, check the response content and account status; if entries appeared but can’t connect, check the server configuration and connection process. Work on one stage at a time to avoid deleting useful configurations and make any follow-up report more specific.

Official App Store listing Check the developer and app ID first