Shadowrocket Data Usage Stats: Server vs. App Traffic

Learn how Shadowrocket’s Data stats work, how to read traffic by server or app, and why counters may reset or differ.

At a glance

Data shows connection traffic recorded by Shadowrocket. It is not a carrier bill or a provider’s account balance. This guide is for users who have already configured the app and want to trace traffic: distinguish totals from speeds, read the server and app views separately, then check resets, routing, and discrepancies over the same time window.

Data Stats: Scope and Units

Data in Shadowrocket is where you monitor traffic on your device. These figures reflect connections that pass through processing paths the app can observe and count; they are not a complete record of all network activity on the device. Traffic generated while the connection is off, traffic from other devices, and usage counted under a provider’s different remote rules cannot be reconstructed from Data on this device.

Check the units before comparing numbers. KB/s and MB/s indicate a rate per second, while KB, MB, and GB indicate cumulative data. After a webpage loads, the rate may quickly drop while the total remains. These are different metrics, not conflicting readings.

2 directions
Upload and Download show outgoing and incoming traffic, respectively
8 bit
Equals 1 byte; Mbps and MB/s are different units
60 seconds
A fixed observation window recommended here—not the app’s refresh interval

Upload and Download are usually understood from the device’s perspective: sending a request or uploading a file is outgoing traffic; receiving webpage content or downloading a file is incoming traffic. Upload can still increase during a download because requests, acknowledgments, and other exchanges also send data. An Upload reading alone does not mean a file is uploading in the background.

Read by Server: Identify the Traffic Route

In the server view, focus on which proxy server a connection is assigned to—not which website or app generated it. Check the selected server and Global Routing on Home first, then open Data and review the corresponding entry. Server totals help answer which route carried the most traffic during a period; they do not, by themselves, show which app used the most.

Changing the selected server on Home does not mean all existing connections have migrated. Long-lived connections may continue using the previous route; new connections are handled according to the current selection and rules. If the old entry keeps increasing shortly after a switch, first check whether video, downloads, or other long-lived connections are still active.

What you seeWhat it may indicateWhat to check next
A server’s total increasesThat entry recorded traffic during the observation windowCheck the current selection on Home and active connections
The old server keeps increasing after a switchSome connections may still be using the previous routeStop the existing task, then make a new request and observe
Webpages load, but the proxy entry does not increaseThe request may have matched DIRECT or been served from cacheCheck Global Routing and the connection records
Two entries with the same name are hard to tell apartA name alone does not confirm which configuration an entry usesCheck the server address, port, and subscription

After a subscription update, display names, server addresses, or item organization may change. When comparing with older records, keep all of these details; a matching name alone does not prove that two entries are the same. Get subscriptions from your service provider. Updating a subscription refreshes the configuration source; it does not reset local stats or make the provider recalculate usage.

Read by App: Identify Traffic Sources

The app view groups traffic by source when it can be attributed; the server view groups traffic by route. One app can access multiple domains and generate both DIRECT and proxy connections under different rules. Likewise, one proxy server can carry connections from multiple apps. These are two views of traffic, not separate totals to add together.

On iPhone and iPad, the information the system provides to the network extension has limits. Whether an app name appears or a connection can be attributed accurately depends on the available system information, connection type, and current stats view. Don’t assume an unattributed or unlisted entry belongs to a specific app. If the current interface does not provide an app-level view, you cannot infer one from server names.

  1. Pause video playback, cloud sync, and other obvious background tasks. Note the current Data readings and the time.
  2. Perform one action in a single app—for example, open a webpage that has not loaded before. Avoid switching between multiple tasks.
  3. Wait a fixed 60 seconds, then return to Data and compare the increase. Also check whether the corresponding server entry changed.
  4. Repeat the same steps once. If the page is cached, the second attempt may use less traffic; test with content that has not loaded yet.

Takeaway: Use a single app’s increase to trace traffic; don’t add the two views together

Note the starting readings, then run just one task. Use the app view to identify the source and the server view to identify the route. Cross-checking the two is more useful for troubleshooting than comparing their cumulative totals.

How Global Routing and Rules Affect Stats

Data records the results; routing settings determine how connections are handled. Before troubleshooting, check Home → Global Routing: Proxy, Direct, Config, and Scene are different routing modes, not four separate counters. Proxy handles applicable connections through a proxy, while Direct connects directly. Config routes traffic according to the current configuration rules; with Scene, check the active scene settings to understand how connections are handled.

App request Connection enters the tunnel Routing decision Direct or proxy Stats aggregation

In Config mode, loading one page may trigger requests to the main site, images, video, and analytics endpoints. Those domains may not match the same rule. The rules below illustrate matching order; they are not a complete configuration and are not intended to replace your current settings. 192.0.2.0/24 is a documentation-only example range.

DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

Browser traffic does not necessarily mean a proxy server’s counter will increase. Check the destination, matched rule, and final policy in the connection records. If the connection appears to resume on its own, also check the current settings under Settings → On Demand. On-demand connections can change connection state during the stats window, but Data is not a carrier billing record.

Resetting Stats: Save a Baseline Before Starting a New Window

Resetting changes the starting point for comparing local stats. It is not the same as disconnecting, switching servers, or updating a subscription, and it does not reset usage on your provider account. Before resetting, note the displayed stats view, totals, and time. If you are investigating an unexpected reading, keeping the pre-reset information is more useful than clearing it immediately.

  1. Open Data, confirm whether you’re viewing stats by server or by app, and note any existing filters or time range.
  2. Save the readings for key entries along with the device time. Record Upload and Download separately, not just the combined total.
  3. Use the clear or reset control available in the current Data interface, and read the confirmation prompt. The interface may vary; don’t confuse clearing connection records with resetting cumulative traffic.
  4. Return to the same stats view and check which entries were affected. If there is no reset control for the relevant stats, subtract the starting reading to establish an observation window.
  5. Run one consistent task and record the final reading after 60 seconds. Calculate the increase by subtracting the starting reading from the final reading, and note whether you switched networks or servers.

For example, if a project’s Download reading starts at 120 MB and ends at 145 MB, the displayed increase for that window is 25 MB. This example illustrates subtraction only; it is not a measured result. If a reset occurred during the window, or the start and end readings came from different filtered views, subtracting them is meaningless. Establish a new baseline instead.

Discrepancies and Common Questions

Local Data stats, iOS cellular usage, and provider-reported usage are measured in different places. A provider may combine usage across multiple devices on an account, use a different billing time zone, update after a delay, or account for protocol overhead and traffic multipliers under its own billing rules. iOS cellular stats may also include activity from connections that are off, but do not count Wi-Fi traffic as cellular usage. Before comparing, align the device, time period, network type, and units.

Why does my provider show more usage than Data?

First check the provider’s reporting period, whether it includes other devices, and whether a traffic multiplier applies. Then run a fixed-window test on one device and compare the increases after the remote data has refreshed. The byte count shown by the app is not a substitute for the provider’s billing rules.

Why do the stats keep increasing when I haven’t opened the app?

Pause background sync and media playback, check for unfinished downloads or long-lived connections, then check the connection status on Home and Settings → On Demand. No foreground activity on screen does not mean the device has no network activity; a cumulative total alone cannot identify the source.

Why isn’t a server’s count changing while I’m browsing?

Check the mode under Home → Global Routing, then see whether the connection matched DIRECT. If routing is as expected, test with a page that is not cached and check the same stats view again. Don’t change the entire ruleset just to make the number increase.

Can I restore stats after resetting them?

Do not assume a reset can be undone. First check whether the current interface still retains stats for another time range. If not, cleared local data cannot be accurately reconstructed from the current totals alone. For long-term reconciliation, save the readings and time before each reset.

Takeaway: Align the Time Window Before Investigating Differences

If the discrepancy persists, record the start and end times, network type, Global Routing mode, server identity, and increases on both sides, then check the billing methods. Don’t substitute protocol switching or repeated resets for these basic records.

Data is best for spotting trends and narrowing down an issue: which route keeps increasing, how much traffic a single task generates, and whether Direct and proxy routing match the rules. It cannot, on its own, prove that all traffic belongs to a particular app or show the remaining balance from your provider. After checking the details above, adjust the configuration based on specific connection records to avoid changing settings that are already working as intended.

App Store Verification