Skip to content

Measurement Data

The test results are structured as an object. The actual results depend on the type of test being run. In the following, we will describe the results for the different tests.

General Fields

The results from our mobile SDK are aligned with the results you get from our Surfmeter Automator solution. They are only slightly different in a few minor aspects due to the different environments (mobile vs. desktop).

For a general overview of the data structure, see our reference.

Here are additional fields that are specific to the mobile SDK:

Property Type Description
client_reports Array Client-reported data captured during the test. See Client Reports. Video tests include a P.1203 Client Report.
statistics_input Object Raw data used to calculate statistics. This field is experimental and may change.
geolocation_trace Array Location samples collected while the test runs. The array is empty when location is unavailable or not permitted.
connection_detail_trace Array Connection snapshots collected while the test runs. The available fields depend on the platform, device, connection type, and permissions.

Connection and Location Traces

Android and iOS use the same top-level trace names and common field names. Both collectors run only for the duration of a test.

The SDK records an initial connection snapshot when the operating system reports the network state. It adds another entry whenever an available connection value changes. Timestamp changes alone do not create duplicate entries.

Location updates are separate entries in geolocation_trace. Missing permissions or unavailable location data do not fail the test.

The listener-facing report has this shape:

{
  "connection_detail_trace": [
    {
      "type": "WifiConnectionDetail",
      "is_internet_reachable": true,
      "is_connection_expensive": false,
      "ip_address": "192.0.2.14",
      "subnet": 24,
      "ssid": "Example Lab",
      "bssid": "00:11:22:33:44:55",
      "client_time": "2026-09-09T12:00:00.000Z",
      "client_time_skewed": "2026-09-09T12:00:00.000Z"
    }
  ],
  "geolocation_trace": [
    {
      "type": "MeasurementGeolocation",
      "latitude": 48.2085,
      "longitude": 16.3721,
      "accuracy": 4.8,
      "speed": 0.2,
      "client_time": "2026-09-09T12:00:01.000Z",
      "client_time_skewed": "2026-09-09T12:00:01.000Z"
    }
  ]
}

The upload layer converts these arrays to the nested attributes expected by the Surfmeter server. Apps should use the listener-facing names shown above.

geolocation_trace

Each entry describes one location update.

Field Type Availability Description
type String Android and iOS Always MeasurementGeolocation for a test sample.
latitude Number Android and iOS Latitude in decimal degrees.
longitude Number Android and iOS Longitude in decimal degrees.
accuracy Number Android and iOS Estimated horizontal accuracy in metres.
speed Number Android and iOS, when available Device speed in metres per second. iOS omits this field when Core Location reports no valid speed.
client_time String Android and iOS ISO 8601 time at which the SDK created the sample.
client_time_skewed String Android and iOS Client time after clock-skew handling. It currently matches client_time in both mobile SDKs.

Android location detail depends on ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION. See Android permissions.

iOS records only precise locations. Denied access, disabled Location Services, reduced accuracy, or the absence of an update produces an empty trace and does not fail the test. See Measurement Context and Privacy on iOS.

connection_detail_trace

These fields are shared across Android and iOS where the operating system makes them available:

Field Type Availability Description
type String Android and iOS WifiConnectionDetail, MobileConnectionDetail, EthernetConnectionDetail, VpnConnectionDetail, or UndefinedConnectionDetail. Android can also report other platform-specific types.
is_internet_reachable Boolean Android and iOS Whether the active path has internet connectivity.
is_connection_expensive Boolean Android and iOS Whether the operating system considers the connection metered or expensive.
ip_address String Android and iOS, when available A local IPv4 or IPv6 address for the active interface.
subnet Integer Android and iOS, when available Network prefix length, such as 24 for an IPv4 /24 network.
client_time String Android and iOS ISO 8601 time at which the SDK created the snapshot.
client_time_skewed String Android and iOS Client time after clock-skew handling. It currently matches client_time in both mobile SDKs.

iOS Fields and Limitations

The iOS SDK can add these fields:

Field Connection Requirement Description
ssid Wi-Fi Access WiFi Information capability and values provided by iOS Current Wi-Fi network name.
bssid Wi-Fi Access WiFi Information capability and values provided by iOS Current Wi-Fi access-point identifier.
mobile_network_type Cellular Radio technology provided by Core Telephony Values include GPRS, EDGE, UMTS, HSDPA, HSUPA, CDMA, LTE, NRNSA, and NR.

iOS does not provide public App Store APIs for Wi-Fi RSSI, frequency, or link speed, or for cellular signal strength and cell identity. These Android fields are omitted instead of estimated. See Measurement Context and Privacy on iOS for the complete permission and disclosure requirements.

Android Basic Network Fields

Field Required Permission Minimum Android Version Notes
type ACCESS_NETWORK_STATE All Connection type, such as Wi-Fi or mobile.
is_internet_reachable ACCESS_NETWORK_STATE All Whether the active network has internet capability.
is_connection_expensive ACCESS_NETWORK_STATE All Whether Android considers the active network metered.
ip_address None All Local IPv4 or IPv6 address.
subnet None All Network prefix length.
client_time None All Sample time in ISO 8601 format.
client_time_skewed None All Clock-skew-adjusted sample time.

Android Wi-Fi Fields

Field Required Permission Minimum Android Version Notes
ssid ACCESS_WIFI_STATE All Current Wi-Fi network name.
bssid ACCESS_WIFI_STATE All Current Wi-Fi access-point identifier.
signal_strength ACCESS_WIFI_STATE All Signal level normalized to 0–100.
frequency ACCESS_WIFI_STATE All Frequency in MHz.
link_speed ACCESS_WIFI_STATE All Link speed in Mbps.
link_speed_rx ACCESS_WIFI_STATE Q (29) Current receive link speed in Mbps.
link_speed_tx ACCESS_WIFI_STATE Q (29) Current transmit link speed in Mbps.
rssi ACCESS_WIFI_STATE All Raw received signal strength.
dbm ACCESS_WIFI_STATE All Same value as RSSI.

Android Mobile Network Fields

Field Required Permission Minimum Android Version Notes
mobile_network_type READ_PHONE_STATE All Radio technology such as LTE or NR.
is_roaming None All Whether the device is roaming.
mno None All Mobile network operator.
mcc None All Mobile country code.
mnc None All Mobile network code.

GSM details:

Field Required Permission Minimum Android Version Notes
cid ACCESS_FINE_LOCATION All Cell ID.
lac ACCESS_FINE_LOCATION All Location area code.
arfcn ACCESS_FINE_LOCATION N (24) Absolute radio-frequency channel number.
bsic ACCESS_FINE_LOCATION N (24) Base station identity code.
signal_level ACCESS_FINE_LOCATION All Android signal level.
asu_level ACCESS_FINE_LOCATION All Signal level in ASU.
dbm ACCESS_FINE_LOCATION All Signal strength in dBm.
rssi ACCESS_FINE_LOCATION R (30) Received signal strength indicator.

LTE details:

Field Required Permission Minimum Android Version Notes
cid ACCESS_FINE_LOCATION All Cell ID.
enodeb_id ACCESS_FINE_LOCATION All Derived eNodeB ID.
pci ACCESS_FINE_LOCATION All Physical cell ID.
tac ACCESS_FINE_LOCATION All Tracking area code.
arfcn ACCESS_FINE_LOCATION N (24) Absolute radio-frequency channel number.
signal_level ACCESS_FINE_LOCATION All Android signal level.
asu_level ACCESS_FINE_LOCATION All Signal level in ASU.
rsrp ACCESS_FINE_LOCATION O (26) Reference Signal Received Power.
rsrq ACCESS_FINE_LOCATION O (26) Reference Signal Received Quality.
rssnr ACCESS_FINE_LOCATION Q (29) Reference signal-to-noise ratio.

5G NR details:

Field Required Permission Minimum Android Version Notes
nci ACCESS_FINE_LOCATION Q (29) NR cell identity.
pci ACCESS_FINE_LOCATION Q (29) Physical cell ID.
tac ACCESS_FINE_LOCATION Q (29) Tracking area code.
nrarfcn ACCESS_FINE_LOCATION Q (29) NR absolute radio-frequency channel number.
signal_level ACCESS_FINE_LOCATION Q (29) Android signal level.
dbm ACCESS_FINE_LOCATION Q (29) Signal strength in dBm.
asu_level ACCESS_FINE_LOCATION Q (29) Signal level in ASU.
ssrsrp ACCESS_FINE_LOCATION Q (29) SS Reference Signal Received Power.
ssrsrq ACCESS_FINE_LOCATION Q (29) SS Reference Signal Received Quality.
sssinr ACCESS_FINE_LOCATION Q (29) SS signal-to-noise and interference ratio.

Android can also provide WCDMA, CDMA, and TDSCDMA fields. See the general connection-data reference for the complete radio-field matrix.

Diagnostics

Further, there is a diagnostics: object containing diagnostic information – but this is experimental and may be changed in the future. It currently contains the following:

  • test_settings: Object with test-specific settings
  • client_version: Version of the Quality SDK used (same as above)

ExoPlayerQualityTest

For the statistic values, see here.

VideoQualityTest

For the statistic values, see here.

WebQualityTest

For the statistic values, see here.