Sep 15, 2026 · Troubleshooting · About 9 min read

Shadowrocket Subscription Empty or Parse Failed: URL, Provider, and Update Checks

If a subscription is empty or fails to parse, check the URL, response format, provider status, and update timing in order.

At a glance

Keep your existing subscription and working entries while determining whether the request failed, the response could not be parsed, or the response contained no valid entries. For users who already have a subscription from their own provider, this guide walks through the checks in order, from adding it under Subscribe on Home to verifying the URL, HTTP response, network path, and retry timing. There’s no need to reset Config or repeatedly delete and recreate the subscription.

First, tell the difference between an empty subscription, a parse error, and a connection failure

Updating a Shadowrocket subscription retrieves content from an existing subscription URL and turns it into entries. A connection test, by contrast, attempts to connect using a specific entry. A successful update doesn’t mean the connection will work, and a failed connection doesn’t prove the subscription URL is invalid. First identify which step failed; don’t lump every issue under “the server doesn’t work.”

Use Home to manage entries and connections, Config to manage configuration files, and Settings for related options. Changing DOMAIN-SUFFIX or FINAL in Config won’t turn a login page into subscription content. Keep your existing configuration and limit checks to the subscription itself so you can tell whether each step helped.

URL format: Verify the full address from Subscribe

Copy the URL again from your provider’s subscription management page. This is safer than manually patching a broken link. Make sure it’s the subscription URL—not an account homepage, login page, or billing page. Query parameters in a subscription URL often provide authentication, and even a single missing character can change the server’s response.

  1. Keep a record of the current setup

    On Home, note the subscription name, the number of existing entries, and the exact error from this attempt. Don’t delete a subscription that still has working entries or overwrite your existing Config.

  2. Copy the full URL

    Copy the full subscription URL from your provider’s page. Check the scheme, domain, path, and every parameter after the question mark. Remove any spaces accidentally included when copying, but don’t alter the parameters.

  3. Check the entry type

    To add a new subscription, tap “+” in the upper-right corner of Home to open Add Server. Set Type to Subscribe, then paste the address into URL. If you already have a subscription, open its edit screen and verify the URL instead of creating duplicate groups.

  4. Save, then update

    Save and return to Home, then pull down to update. Wait for the request to finish before checking the group’s entry count and any message. Don’t trigger repeated refreshes while a request is still in progress.

  5. Record the result

    Note the time of the update, the network you used, and the exact message. Change only one condition next time—for example, switch networks—so you can tell what made the difference.

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

The address above illustrates URL structure; it isn’t a working subscription. Parameters after ?, & separators, and percent-encoding may all be part of the original URL. Don’t treat an ellipsis shown by a messaging app as part of the link, and don’t decode and rebuild the URL yourself. If you copied the literal & from a page’s source, return to the page and use its copy option to get the address again rather than guessing how to change the token.

[Check]

ss://, vmess://, vless://, and trojan:// usually represent a single shared entry, not an HTTPS subscription URL that can be fetched regularly. Import a single entry using the appropriate method. Changing its prefix to HTTPS won’t enable subscription updates.

Response content: An HTTP success doesn’t guarantee a successful parse

Even after a request reaches the server, you still need to check what the server returned. The HTTP status code describes the request outcome; subscription parsing also depends on whether the response body contains recognizable entries. So if a URL opens in a browser, that only confirms it returned a response. A visible page alone doesn’t prove the subscription is valid.

200
An HTTP request can succeed, but the response body still needs to contain subscription data
401
If HTTP authentication fails, check the token and authorization status first
429
If there are too many HTTP requests, wait as directed by the server before retrying

Bottom line: Check the response body before diagnosing the parser

If the response is a login page, verification page, or maintenance notice, ask your provider to confirm the subscription endpoint’s status and supported format. Don’t try to fix a server-generated page by repeatedly changing local rules.

Some subscriptions return an encoded list of entries; others return readable text. Don’t assume it’s corrupted just because it looks like a long string of characters. Conversely, a well-formatted HTML page can return HTTP 200 without containing any importable entries. Ask your provider to confirm that the endpoint supplies subscription data Shadowrocket can recognize, rather than instructions intended to be read in a browser.

Provider-side checks: Use the original response; don’t guess at the cause

The cards below list standard HTTP response phrases. They don’t mean Shadowrocket will necessarily display the exact same wording. Follow a branch only if the corresponding status code appears in an app message, request diagnostic, or your provider’s records. A “parse error” alone doesn’t prove authentication failed or access was restricted.

HTTP 401 Unauthorized

Cause and next steps: The request wasn’t authenticated. Get the current subscription URL from your provider’s page, check the full token, and confirm your authorization status before updating.

HTTP 403 Forbidden

Cause and next steps: The server rejected the request; only the server can confirm the specific restriction. Share the status code and time with your provider so they can check their access policy. Don’t assume from the status code alone that your account has expired.

HTTP 404 Not Found

Cause and next steps: The requested resource wasn’t found. Check that the domain and path are complete, and confirm whether your provider changed the subscription endpoint. Don’t guess a new path.

HTTP 429 Too Many Requests

Cause and next steps: The request hit a rate limit. Stop refreshing repeatedly. If the response includes Retry-After, wait as instructed; otherwise, ask your provider how long to wait before retrying.

HTTP 503 Service Unavailable

Cause and next steps: The server can’t handle the request right now. Keep your existing entries and ask your provider when service will be restored. Update once service is back.

If your provider confirms the endpoint is back online but the client still shows an empty subscription, determine whether the update failed to retrieve new content or retrieved content that was still empty. Share the update time, status code, change in entry count, and exact message to help them investigate. Before sharing screenshots or logs, hide subscription tokens, passwords, UUIDs, and other authentication details. Don’t post a full URL in public forums.

Update timing: Network paths, proxy updates, and automatic connections

Updating a subscription requires access to its domain; connecting an entry requires access to that entry’s server. The domains and network paths may differ. An entry connecting successfully doesn’t mean the subscription domain is currently reachable directly, and an accessible subscription domain doesn’t mean every entry’s server is working.

If a direct request times out but an existing entry still works, connect through that entry first. Then go to Settings → Subscribe and check Update via Proxy. Enable it if needed, then return to Home and update. This changes how subscription requests access the server; it won’t fix an invalid token, an empty response, or an unsupported server-side format. Without a working connection, enabling it alone can’t create a working route for updates.

Don’t disable certificate validation to fix a subscription update error. For a TLS-related message, first check your device’s date and time and verify the subscription domain, then ask your provider to check the certificate and certificate chain. If the problem occurs only on one network, keep the message from that network as diagnostic information—it’s more useful than bypassing a security check.

Frequently asked questions: Final checks that preserve your data

Why is Home still empty if the link opens in a browser?

First check that the browser shows entry data, not an account page or verification page. A browser’s login session isn’t the same as the authentication used for a subscription request. Copy the client subscription URL again from your provider’s page, verify it in the Subscribe edit screen on Home, and update.

Should I delete the whole subscription after an update fails?

Not yet. Note the existing entry count, message, and last update time, and keep any entries that still work. Reimporting isn’t necessary to fix an endpoint error. If you do need to recreate the subscription, first confirm the URL is valid and save any necessary original information.

Update via Proxy is on, but the request still times out. What should I do?

First confirm that an existing entry can actually connect, then check that the current connection can reach the subscription domain. If the connection itself isn’t working, test on a network that can reach the domain. If only this endpoint fails, give your provider the time and error message so they can investigate.

Why won’t a selected entry connect even though the subscription update succeeded?

A successful update only means the subscription content was retrieved and processed. Open the entry’s edit screen to check its protocol, address, port, and authentication parameters, then check the server status. For example, Trojan TLS settings should match the details from your provider. Refreshing again won’t replace checking the parameters.

Finally, check each item in order: full URL → Subscribe type → response body → server status → update network → retry timing. Change only one variable at a time, and record the result after each request finishes. If you need to report the issue, the checklist below describes what happened without exposing your full authentication details.

  1. Say whether the subscription was empty on first import, an existing subscription update failed, or some entries were missing after an update.
  2. Provide the time, connection type (such as Wi-Fi or cellular), and whether Update via Proxy was enabled.
  3. Include the exact message and any verifiable HTTP status code. If there’s no status code, say “not available” rather than guessing.
  4. Give the entry count before and after the update, and say whether your provider confirmed that valid entries should currently be available.
  5. Share only necessary details with your provider through a private support channel. Before posting screenshots publicly, hide tokens and other authentication fields.
Verify the official App Store listing