Shadowrocket Data Usage: Understanding Per-Server and Per-App Stats

Learn what the numbers in Shadowrocket’s Data view measure, how per-server and per-app stats differ, and why they may not match your provider’s usage totals.

At a glance

Data helps you monitor traffic handled by Shadowrocket. It is not the same as your device’s cellular usage or your provider’s billing records. This guide is for users who already have a subscription and server details from their provider and want to check usage. First, distinguish cumulative data from real-time speed. Then review usage by server and app, and compare changes over the same time window.

Data usage, live speeds, and plan usage are different

Shadowrocket’s local stats, system network stats, and your provider’s records each measure traffic at a different point. Interpret Data readings in the context of the selected category and recording period. They are not the total usage for your iPhone or iPad, and they cannot tell you exactly how much your plan has been charged. The units, category labels, and recording start point matter more than any single number.

Upload usually means data sent from your device; download means data received by your device. For example, video streaming is mostly download traffic, but it also involves requests, acknowledgments, and other uploads. A unit ending in /s indicates a rate; a byte value without a time denominator is cumulative data. A high speed at one moment does not mean that speed was sustained throughout the reporting period.

2 directions
Check upload and download separately before comparing their total
8 bit
1 Byte = 8 bits; MB/s is not Mbps
2 readings
The change for this session is the ending reading minus the starting reading

For example, 8 Mbps theoretically equals 1 MB/s, before accounting for protocol overhead. MB and MiB are also different units: 1 MB is 1,000,000 bytes, while 1 MiB is 1,048,576 bytes. Before comparing two screens, confirm how each defines its units. Similar abbreviations do not guarantee the same conversion method.

View by server: identify which outbound connection carried the traffic

The per-server view shows proxy outbound usage: which server entry handled requests, where traffic was concentrated, and whether new requests moved after a switch. A server entry does not correspond one-to-one with a provider plan. One plan can include multiple servers, and multiple devices may use the same plan. So the cumulative total for one entry on this device cannot represent the whole account’s usage.

  1. In Home, check the currently selected server and note its name. If multiple entries share a name, also check the address and port so you do not mistake one entry for another.
  2. Check Global Routing. With Config, routing follows the rules in your configuration. With Proxy or Direct, ordinary requests use different outbound routes, so the readings are not directly comparable.
  3. Open Data and review the server stats shown. Note the upload and download readings for the relevant entries and the recording period. Use the categories available on your current screen.
  4. After a brief test, read the same entry again. Use the change to confirm whether it carried the test traffic; do not rely only on the size of its historical total.

Switching servers does not immediately move every existing connection to a new one. Video streams, persistent connections, or background transfers may continue on the original connection until it closes or is recreated. A small increase in the old entry after switching does not, by itself, mean the selection failed. For a useful comparison, end the test, start a new request, and check the next change in usage.

How to check: compare changes for the same entry

To check whether the current server is being used, keep Global Routing and the test task unchanged, and record readings before and after. Do not compare one entry’s long-term total with another entry’s short-term reading.

View by app: useful for attribution, not a complete system inventory

The per-app view answers “which source can these observed connections be attributed to?”—not “how much carrier data did every app on this device use?” App identification on Apple platforms has permission and system capability limits. If Data offers app categories, use the categories and attribution results actually shown. An app missing from the list does not prove it is offline, and not every connection can necessarily be matched to an app name.

A single foreground action can trigger requests to multiple services, while background syncing may happen at the same time. Conversely, multiple apps may access the same domain or share a system service. A domain, server address, or connection time alone is usually not enough to identify the originating app. Treat the per-app view as a troubleshooting clue, then verify it by testing one action at a time.

Per-server checklist

Where to look
Check the selection in Home; view stats in Data
What it covers
A specific server entry and its proxy outbound traffic
Before you start
Note the current Global Routing mode
How to compare
Changes for the same entry over the same period

Useful for checking outbound usage, not as a substitute for account billing records.

Per-app checklist

Where to look
App categories actually shown in Data
What it covers
Connections that can be observed and attributed
Before you start
Confirm which categories are available and what they include
How to compare
Pause other tasks and use only the app you want to check

Useful for finding traffic sources, not as a substitute for system cellular usage stats.

To investigate cellular plan usage, also check the usage for each app in the system’s Settings > Cellular or Mobile Data screen. The menu name varies by system language and region. Check the reporting periods for system cellular stats and Shadowrocket’s local stats separately. Data sent over Wi-Fi cannot explain a cellular bill.

Run a traffic comparison you can repeat

You do not need to clear all historical records for a useful comparison. Keep the starting readings and subtract them from the ending readings to calculate the change, preserving information that may help with later troubleshooting. The figures below are a calculation example, not measured results or a performance claim.

  1. Keep conditions consistent: Use one network, keep the same server and Global Routing mode, and pause cloud syncing, app updates, and transfers from other devices on the same account.
  2. Record the starting point: Note the time, upload and download readings in Data, and the usage shown in your provider’s account dashboard, including when it was last refreshed. Any remaining-usage figure in subscription details may also reflect an earlier refresh.
  3. Run one task: Open just one target app and perform an action with a clear start and finish. Web caching and video preloading affect actual transfers, so do not treat a page’s stated file size as a network reading.
  4. Record the end point: When the task is finished, wait for connections to become idle, then read the same fields again. If your provider’s dashboard updates with a delay, wait for it to refresh before recording the result. Do not repeat the task just to fill in the numbers.
  5. Calculate the difference: Calculate the upload and download changes separately, note the test period, and compare them with your provider’s published usage rules.
ReadingBeforeAfterChange
Cumulative upload20 MB22 MB2 MB
Cumulative download100 MB150 MB50 MB
Upload and download total120 MB172 MB52 MB

This example shows only that the selected local stats increased by 52 MB. It does not prove that your provider should deduct 52 MB, or that the target app’s actual content was exactly 50 MB. Check separately whether upload and download are both counted, whether a multiplier applies, and whether other devices were using the account.

Why readings differ: measurement points and routing decisions vary

App request Tunnel entry Rule match Outbound transfer Provider-side accounting

This flow explains why the numbers may not line up: an app requests content, Shadowrocket handles connections within its scope, rules determine how they are routed, and the provider measures traffic at its own network boundary. Each measurement point may cover a different range of bytes and reporting period. Direct traffic does not automatically count toward a proxy server plan just because it was handled locally.

With Config selected in Global Routing, rules in Config are checked from top to bottom, and the first match determines the policy. The following is a syntax example, not a recommendation to replace your existing configuration. Use the policy names defined in your own configuration.

[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

In this example, requests matching example.com and its subdomains use DIRECT. Next, GEOIP,CN,DIRECT handles matching IP addresses, and requests with no earlier match go to the final rule, FINAL,PROXY. A single browsing session can therefore create connections that take different routes. Ignoring the individual policies and comparing only the local total is a common source of discrepancies.

Align these four factors before comparing usage

Match the device scope, start and end times, upload/download coverage, and units before comparing. If the discrepancy persists, keep readings from the same test window and ask your provider how usage is measured.

FAQs: reset readings, background usage, and unexpected uploads

Data readings dropped or reset. Does that mean my plan renewed?

Not necessarily. First check whether the selected server, category, or recording period changed, then check whether you reset the stats, reinstalled the app, or restored data. A change in local records does not mean your provider’s billing changed. Check your remaining plan usage in the provider’s account dashboard.

Why is usage increasing when I haven’t opened a webpage?

Pause photo syncing, file transfers, and media playback first, then check whether the increase slows down. Next, review automatic connection conditions in Settings → On Demand. Background notifications, syncing, and existing connections can continue to transfer data. No foreground activity does not, by itself, mean the stats are wrong.

What should I check if uploads are higher than expected?

Record the upload change over five minutes and check for cloud backups, video calls, or file uploads. If Data provides app attribution, pause the relevant entries one at a time to verify. Do not assume a server problem just because cumulative uploads exceed downloads.

Will resetting Data make my provider recalculate usage?

Resetting local stats affects only local records; it does not change how your provider measures usage. If the current screen offers a reset option, save your readings and review the confirmation prompt first. For a comparison, use the difference between readings instead of resetting. Do not assume that reconnecting, refreshing a subscription, or switching servers will clear account usage.

When investigating traffic, save your readings before changing settings. Your provider can usually investigate with the start and end times, units, server entry, and upload/download changes. Before sharing records, hide credentials in subscription URLs, account identifiers, and private information in access logs. For more on routing or setting up your first connection, continue with the guides on this site.

Verify the App Store listing