Shadowrocket Data Usage Guide: Traffic by Server and App Explained

Learn how Shadowrocket Data reports traffic by server and app, why totals may differ, and how to check whether rules route requests as expected.

At a glance

This guide is for users who have imported their own subscription into Shadowrocket and want to check where traffic is going. First distinguish server totals from app attribution, then use a consistent measurement window and cross-check a single request against its matching rule and the change in traffic. Data shows cumulative usage, not real-time speed, and is not a substitute for your provider’s bill. App attribution is limited to the information available in the app and the system.

1. Start with what the Data figures measure

When you open Data, don’t focus only on the largest number. First check whether an entry represents a server, a connection destination, or an app; whether the figure is upload, download, or total; and when the measurement period began. Even if two places show MB, their values are not directly comparable if they cover different items or time periods. Available groups, fields, and reset controls depend on the app’s current interface.

Upload generally means data sent from your device; download means data received by it. Web browsing also sends requests, connection negotiations, and acknowledgments, so nonzero upload does not mean files are being actively sent. Cumulative usage is the amount transferred over a period of time. Speed includes a time unit, such as KB/s. Treating a cumulative total of 20 MB as a current speed of 20 MB leads to the wrong conclusion.

2 directions
Track uploads and downloads separately instead of looking only at the total
60 seconds
A suggested window for a single test, not a fixed app interval
3 baseline values
Record the start time, cumulative upload, and cumulative download

To measure traffic generated by an action, subtract the starting value from the ending value; don’t compare two cumulative totals. If you reset statistics, change the measurement scope, or reconnect during the test, record a new baseline. In-app counters, system cellular usage, and provider bills each have different measurement boundaries. A mismatch alone does not indicate a problem.

2. Server totals show the route; app stats show the source

Server totals answer: “Which server entry handled the traffic?” If multiple apps use the same server, their traffic is combined. A single app may also access multiple destinations and use different outbound routes depending on the rules. An increase in server traffic alone cannot prove that all requests from a particular app went through that server.

App request Tunnel receives traffic Rule match Outbound selected Traffic counted

App-level stats aim to answer: “Which app generated this traffic?” But an app is not the same as a domain: one app may connect to different domains for content, images, sign-in, and push notifications, while multiple apps may access the same domain. Don’t treat the cumulative traffic for one destination as an app’s complete usage.

This distinction matters especially on iPhone and iPad: packet information available to a VPN tunnel is not the same as complete system process information. If the current Data screen has no app attribution field, you can’t infer an app-by-app ranking from server names. If the interface shows unidentified or unattributed entries, keep that uncertainty in mind. To check each app’s cellular usage, go to system Settings → Cellular and check the system’s measurement period. These figures do not include an app’s Wi-Fi usage.

What’s being measuredWhat it can tell youWhat it can’t prove on its own
Server entryTraffic change for this entry during the current windowThat every request from a particular app used this server
App attributionTraffic sources identifiable within the available dataThat traffic from every app on the device is fully attributed
Destination domain or IPWhere a request connectedThat a request definitely came from a particular app
System cellular usageCellular data used during the system’s measurement periodThe same app’s usage over Wi-Fi

3. Use a consistent window for a repeatable traffic test

Before testing, check Home to confirm the connection is established, then note the current Global Routing selection and the enabled profile in Config. This guide assumes you already have your own server and subscription; you don’t need another connection service to view statistics. Don’t update your subscription or switch servers during the test, since changes to entries with the same name can affect the comparison.

  1. Reduce background activity: Pause large transfers, video playback, and cloud syncing. Avoid using other apps in the foreground, but don’t assume this will eliminate all background traffic.
  2. Record a baseline: In Data, note the target server’s cumulative upload and download values and the time. Keep existing records; there’s no need to clear all statistics before every test.
  3. Trigger one action: Open just one app and visit a known page or perform one specific action. Don’t refresh several pages at once. Observe for about 60 seconds.
  4. Record the end values: Return to Data and read the same entry using the same measurement scope. Calculate the upload and download increases separately.
  5. Check the request: Use the available connection records to verify the destination domain, matched rule, and outbound. If there isn’t enough detail, draw a more cautious conclusion; don’t treat the traffic increase as the only evidence.
  6. Repeat once: Run the test again without changing settings. The second run may use cached data, so its byte count won’t necessarily match the first exactly.

To compare two settings, change one variable at a time. For example, keep the server the same and switch Global Routing from Proxy to Config, then establish a new test connection. If you change the server, DNS, and rules all at once, you won’t know which change caused the difference.

4. Match traffic changes to rule hits

In Home → Global Routing, Proxy, Direct, Config, and Scene represent different routing modes. Proxy is useful for testing a proxy route, while Direct provides a direct-connection comparison. Config routes traffic according to the rules in the current configuration. Scene depends on the settings for the selected scene; don’t assume it always means proxy or direct routing.

To verify rule-based routing, select Config and confirm which file is enabled in Config. Rules are generally evaluated in order, so an earlier match can determine the outcome; FINAL is the fallback. Seeing a DOMAIN-SUFFIX rule in the editor doesn’t prove that this connection matched it or that it takes precedence over other matching rules.

Record before testing

Connection entry
Home
Routing entry
Home → Global Routing
Routing mode
Config
Configuration check
The file currently enabled in Config

Record the actual selection; don’t rely on what you remember setting.

Example rule meaning

DOMAIN-SUFFIX
example.com,PROXY
IP-CIDR
192.0.2.0/24,DIRECT,no-resolve
FINAL
DIRECT
Match order
Top to bottom; the matching rule’s policy is applied

The example uses reserved domains and documentation address ranges to explain the syntax; they are not test targets.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
FINAL,DIRECT

In the example, example.com and its subdomains match PROXY; the documentation address range matches DIRECT. no-resolve means this IP rule won’t trigger an additional domain lookup. All other requests fall through to DIRECT. This is only a rule snippet, not a complete configuration. In practice, check that the policy names are available in your current configuration and match your intended routing.

How to verify: match each request with a set of evidence

If a destination is expected to use PROXY, check the rule matched by that request, the actual outbound, and the traffic increase for the corresponding server. If the cumulative figure increases but you can’t tie it to a request, repeat the test with a single app before changing the entire ruleset.

5. Why traffic figures may differ from expectations

Differences most often come from measurement boundaries, not failed rules. The device may count data at one processing layer, while the provider bills on the server side using its own methodology. Encapsulation, connection negotiation, retransmissions, upload and download billing policies, and measurement windows can all contribute. HTTPS commonly uses TCP port 443, while HTTP/3 commonly uses UDP port 443. The same port doesn’t identify the app, nor does it mean every request uses the same transport.

On Demand can also affect the observation window. If the connection disconnects or reconnects automatically during a test, check the trigger conditions in Settings → On Demand and note the actual connection state. On Demand controls connection behavior; it doesn’t show that a request matched PROXY or DIRECT. Check Global Routing and the request records to determine its route.

6. Common traffic questions and what to check

The app is open, but why hasn’t server traffic increased?

First check whether the page loaded from cache, then check the connection status and Global Routing in Home. If the current mode is Direct, or a Config rule sends the destination to DIRECT, no increase under a proxy server entry may be expected. Trigger another network action and check its destination and outbound.

I closed all my apps, but the Data figures are still rising. Are my rules wrong?

Stop other transfers, record the increase over two consecutive 60-second windows, and check for background connections or long-lived connections that are still transferring data. No foreground activity doesn’t prove that traffic is abnormal. Identify the destination and connection before deciding whether to change any rules.

Why don’t the app totals add up to the server total?

First check the measurement window, network type, and whether you’re comparing upload, download, or total usage. Then check whether app attribution is complete, whether any entries are unattributed, and whether DIRECT traffic is included. System cellular statistics and Data are not expected to match, and you can’t assign the entire difference to a particular app.

I changed the rules, but the traffic still seems to use the old server. Why?

First confirm in Config that the modified file is enabled, then select Config in Home → Global Routing. End the old connection and try again. If the route still doesn’t match, check earlier rules and FINAL. Reconnect if needed, but save your test baseline first so you don’t combine cumulative readings from before and after reconnecting.

A complete troubleshooting record should include the test time, network type, Global Routing selection, enabled configuration, destination request, and upload and download increases. For more help, use the troubleshooting guide to check connections and rules, or consult the glossary for policy keywords. Data is useful for spotting trends and testing assumptions; a routing conclusion should be based on a specific request and its actual outbound.

Verify Shadowrocket on the App Store →