Allows to download CSV file with raw RUM data.

Overview and requirements

This endpoint returns an S3 pre-signed URL for the specified RUM export file. The URL expires in 10 minutes.

Daily exports

RUM export files are done on a daily basis and contain the data from 00:00:00 to 23:59:59 UTC.

Files become available after 5am UTC. If you try to access the file between midnight and 5am you'll get a URL that returns an error.

This API endpoint is not enabled by default. In order to use this endpoint, you must check the Enable RUM export API checkbox in your SpeedCurve team's RUM settings. Please note that RUM export data will only be generated from that point in time forwards.

Hourly exports

Use date (day in YYYYMMDD format) and hour (0-23) request parameters to retrieve hourly exports up to last hour.

Last hour data becomes available 15 minutes past.
Example request: https://api.speedcurve.com/v1/lux/export/?date=20241025&hour=3

Rate limits

Please note that rate limits applied to this API and you can only send 3 requests per minute.

File Format and Schema

The RUM export file is in CSV syntax. Instead of comma, the delimiter is the caret character (^).

Each row in the export can be one of three types:

  • Main Row

    There will always be one main row and it can be identified by numdomelements > 0

  • User Timing Row

    There can be zero or more user timing rows depending on how many marks and measures are present on the page. These rows can be identified by uttime > 0

  • Interaction Row

    If a visitor interacts with the page after the first beacon has been sent then there will be a separate interaction row that can be identified by ixtime > 0

The fields and schema are:

Page info

FieldTypeDescription
luxidBIGINTUnique ID for this page view.
sessionidBIGINTUnique ID for this session.
epochINTEpoch time the information was recorded.
account_idINTYour account/team ID.
pagelabelVARCHAR (255)Label for the page. If no label was specified using LUX.label the document title is used.
urlEmpty fieldDeprecated in July 2020 and removed in February 2022.

Use the hostname and pathname fields instead.
useragentVARCHAR (500)Full User Agent HTTP request header.
pbrowserVARCHAR (64)Pretty browser name.
flagsINTBitmask of flags (1 = SPA page view, 2 = Nav Timing not available, 4 = User Timing not available)

Geo Info

FieldTypeDescription
continentVARCHAR (2)
countryVARCHAR (2)
postalEmpty fieldDeprecated, will be empty
cityVARCHAR (64)

Page Stats

FieldTypeDescription
extScriptsSMALLINTNumber of external scripts.
blockingExtScriptsSMALLINTNumber of blocking external scripts.
stylesheetsSMALLINTNumber of stylesheets.
blockingStylesheetsSMALLINTNumber of blocking stylesheets.
fontsSMALLINTNumber of font files.
imagesAtfSMALLINTNumber of images in the viewport.
avgDomDepthSMALLINTAverage DOM depth.
numDomElementsINTNumber of DOM elements.
viewport_wINTViewport width.
viewport_hINTViewport height.
document_wINTDocument width.
document_hINTDocument height.

Navigation timing metrics

FieldType
navigationStartINT
redirectStartINT
redirectEndINT
fetchStartINT
domainLookupStartINT
domainLookupEndINT
connectStartINT
secureConnectionStartINT
connectEndINT
requestStartINT
responseStart (TTFB)INT
responseEndINT
domLoadingINT
domInteractiveINT
domContentLoadedEventStartINT
domContentLoadedEventEndINT
domCompleteINT
loadEventStartINT
loadEventEndINT

Other timing metrics

FieldTypeDescription
startRenderINTStart render time
FIDINTFirst Input Delay
cpuVARCHAR (128)Long Tasks timing information. Format detail.

Interaction (IX) metrics, INP attribution and subparts

Only interaction with the largest INP value collected for each page view. SpeedCurve doesn't report on subsequent interactions or any smaller INP values that may have occurred before the largest.

FieldTypeDescription
ixtypeVARCHAR (32)scroll, click, or key
ixtimeINTWhen the interaction occurred.
trackIdVARCHAR (32)DOM element data-sctrack attribute or ID (only valid for click and key)
ixXINTThe x position of the trackid DOM element.
ixYINTThe y position of the trackid DOM element.
inpINTInteraction to Next Paint duration value
inp_element_selectorVARCHAR (100)INP Element Selector
inp_start_timeINTINP Start Time - the time that the user interaction started (when the input was received).
inp_input_delayINTINP Input Delay - the time from interaction start until the event handler is able to run.
inp_processing_timeINTINP Processing time - the time it takes event callbacks, initiated by the interaction, to complete.
inp_presentation_delayINTINP Presentation Delay - the time it takes the frame to be presented after the event callbacks are completed.

Learn more about INP attribution and subparts.

User timing metrics and customer data

FieldTypeDescription
utnameVARCHAR (128)Name of the mark or measure.
uttimeINTTime of the mark (relative to navigationStart) or duration of the measure.
customerdataVARCHAR (512)Data specified using LUX.addData() Format detail.

Additional data

FieldTypeDescription
devicetypeVARCHAR (32)"mobile", "tablet", or "desktop".
imagesTotalSMALLINTTotal number of IMG tags in the document.
htmlSizeINTTransfer size (bytes) of the first HTML document.
connTypeVARCHAR (32)Connection type.
fcpINTFirst Contentful Paint.
inlinescriptsizeINTUncompressed inline script size (bytes).
inlinestylesizeINTUncompressed inline style size (bytes).
devicememoryINTEstimated device memory (GB).
lcpINTLargest Contentful Paint.
elementtimingVARCHAR (255)Element timing data. Format detail.
dclsFLOAT (4)The document cumulative layout score up until the time when RUM beacon was sent.
hostVARCHAR (255)Domain the beacon was sent from e.g. if URL was https://example.com/about this value would be example.com
pathVARCHAR (255)Path from the URL the beacon was sent from e.g. if URL was https://example.com/about this value would be /about

CPU format

The cpu field is a delimited string with this syntax:
type|total,n|count,d|median,x|max,[i|first_cpu_idle,]start|duration[,start|duration] [|type|total,n|count,d|median,x|max,start|duration[,start|duration]]

Currently the only type supported is JavaScript ("s") as this is the only data available from the Long Tasks API at this time. This example shows there were three long tasks starting at 306 ms, 448 ms, and 534 ms that totalled to 806 ms:
s|806,n|3,d|448,x|534,i|1134,306|128,448|78,534|600

Customerdata format

The customerdata field represents custom data variables as a delimited string containing name-value tuples for each variable set using LUX.addData(). The name-value tuple is delimited by "|". The tuples are comma-delimited. An example value from speedcurve.com is:
,loggedin|yes,team|1,tvmode|0,

Elementtiming format

The elementtiming field is a delimited string containing name-value pairs for each element measured using the Element Timing API. The name-value pair is delimited by "|". The pairs are comma-delimited. An example value is:
nav-links|1409,nav-title|1409,lead-image|2255

This indicates that the nav-links element was displayed 1409 ms after navigation start, nav-title after 1409 ms, and lead-image after 2255 ms.

Data Structure

There are three types of rows in the export file: Main, User Timing, and Interaction Metrics. For a given page view, there can be multiple rows:

  • There is always one-and-only-one Main row.
  • If there are "n" User Timing marks and measures in the page, then there are "n-1" separate User Timing rows. (The first User Timing mark or measure is included in the Main row.)
  • If the user interacts with the page, there is typically a separate Interaction Metrics row. (It's possible for the interaction metrics to be in the Main row if the user interacts before the window load event.)
    In the following sections we describe each type of row.

Main rows

Main rows contain the information for the overall page:

  • Page info
  • Geo info
  • Page stats
  • Navigation Timing metrics
  • Other timing metrics

If there were any User Timing marks or measures, the Main row contains one of these metrics. Additionally, if the user interacted with the page before the window load event, the Main row contains the Interaction Metrics.

Here's an example of a Main row from speedcurve.com:
153384288740141560^153384288740141560^1533842889^1^.blog-post^https://www.speedcurve.com/blog/performance-improvement-checklist/^Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36^Chrome 68^^NA^US^95051^santa clara^10^0^4^3^^3^8^399^1032^1268^4056^1268^1533842886766^^^4^19^63^63^134^216^216^379^390^394^1088^1089^1095^2011^2011^2028^938^2^s|388,640|201,869|60,1049|57,1176|70^^^^^^speedcurvecss applied^613^,team|1,loggedin|yes,tvmode|0,

Here's the same Main row broken out by individual value:

luxid: 153384288740141560
sessionid: 153384288740141560
epoch: 1533842889
account_id: 1
pagelabel: .blog-post
url: https://www.speedcurve.com/blog/performance-improvement-checklist/
useragent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
pbrowser: Chrome 68
flags:
continent: NA
country: US
postal: 95051
city: santa clara
extScripts: 10
blockingExtScripts: 0
stylesheets: 4
blockingstylesheets: 3
fonts:
imagesAtf: 3
avgDomDepth: 8
numDomElements: 399
viewport_w: 1268
viewport_h: 1032
document_w: 1268
document_h: 4056
navigationStart: 1533842886766
redirectStart:
redirectEnd:
fetchStart: 4
domainLookupStart: 19
domainLookupEnd: 63
connectStart: 63
secureConnectionStart: 134
connectEnd: 216
requestStart: 216
responseStart: 379
responseEnd: 390
domLoading: 394
domInteractive: 1088
domContentLoadedEventStart: 1089
domContentLoadedEventEnd: 1095
domComplete: 2011
loadEventStart: 2011
loadEventEnd: 2028
startRender: 938
FID: 2
cpu: s|388,640|201,869|60,1049|57,1176|70
ixtype:
ixtime:
trackId:
ixX:
ixY:
utname: speedcurvecss applied
uttime: 613
customerdata: ,team|1,loggedin|yes,tvmode|0,

User timing rows

User Timing rows contain the User Timing metrics plus some other fields to aid in querying:

  • Page info
  • Geo info
  • User Timing metrics and Customer Data

Here's an example of a User Timing row from speedcurve.com:

153384288740141560^153384288740141560^1533842889^1^.blog-post^https://www.speedcurve.com/blog/performance-improvement-checklist/^^Chrome 68^^NA^US^95051^santa clara^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^speedcurvejs eval^23^,team|1,loggedin|yes,tvmode|0,

Here's the same User Timing row broken out by individual value. Note how most of the fields are empty.

luxid: 153384288740141560
sessionid: 153384288740141560
epoch: 1533842889
account_id: 1
pagelabel: .blog-post
url: https://www.speedcurve.com/blog/performance-improvement-checklist/
useragent:
pbrowser: Chrome 68
flags:
continent: NA
country: US
postal: 95051
city: santa clara
extScripts:
blockingExtScripts:
stylesheets:
blockingstylesheets:
fonts:
imagesAtf:
avgDomDepth:
numDomElements:
viewport_w:
viewport_h:
document_w:
document_h:
navigationStart:
redirectStart:
redirectEnd:
fetchStart:
domainLookupStart:
domainLookupEnd:
connectStart:
secureConnectionStart:
connectEnd:
requestStart:
responseStart:
responseEnd:
domLoading:
domInteractive:
domContentLoadedEventStart:
domContentLoadedEventEnd:
domComplete:
loadEventStart:
loadEventEnd:
startRender:
FID:
cpu:
ixtype:
ixtime:
trackId:
ixX:
ixY:
utname: speedcurvejs eval
uttime: 23
customerdata: ,team|1,loggedin|yes,tvmode|0,

Interaction metrics rows

Interaction Metrics rows contain the user interaction information plus some other fields to aid in querying:

  • Page info
  • Geo info
  • Interaction (IX) metrics
  • Customer Data

Here's an example of an Interaction Metrics row from speedcurve.com:

153384288740141560^153384288740141560^1533842889^1^.blog-post^https://www.speedcurve.com/blog/performance-improvement-checklist/^^Chrome 68^^NA^US^95051^santa clara^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^click^10582^nav^154^27^^^,team|1,loggedin|yes,tvmode|0,

Here's the same Interaction Metrics row broken out by individual value. Note how most of the fields are empty.

luxid: 153384288740141560
sessionid: 153384288740141560
epoch: 1533842889
account_id: 1
pagelabel: .blog-post
url: https://www.speedcurve.com/blog/performance-improvement-checklist/
useragent:
pbrowser: Chrome 68
flags:
continent: NA
country: US
postal: 95051
city: santa clara
extScripts:
blockingExtScripts:
stylesheets:
blockingstylesheets:
fonts:
imagesAtf:
avgDomDepth:
numDomElements:
viewport_w:
viewport_h:
document_w:
document_h:
navigationStart:
redirectStart:
redirectEnd:
fetchStart:
domainLookupStart:
domainLookupEnd:
connectStart:
secureConnectionStart:
connectEnd:
requestStart:
responseStart:
responseEnd:
domLoading:
domInteractive:
domContentLoadedEventStart:
domContentLoadedEventEnd:
domComplete:
loadEventStart:
loadEventEnd:
startRender:
FID:
cpu:
ixtype: click
ixtime: 10582
trackId: nav
ixX: 154
ixY: 27
utname:
uttime:
customerdata: ,team|1,loggedin|yes,tvmode|0,

Query tips

Here are some tips for querying the data.

  • Use "luxid" to get all the rows for a single page view.
  • Use "sessionid" to get all the rows for a single session.
  • To find all Main rows, query for numdomelements > 0. This is because some browsers still do not support Navigation Timing, but all pages have a non-zero number of DOM elements, and the number of DOM elements is only stored in Main rows.
  • The easiest way to find all User Timing rows is to query for uttime > 0. Note that this will return one Main row that has the first User Timing metric.
  • The easiest way to find all Interaction Metrics rows is to query for ixtime > 0. Note that this may return a Main row is the user interacted with the page before the window load event.
  • To find a specific customer data variable, prepend it with a comma. For example:
    customerdata like ',loggedin%'
Language
Credentials
Basic
base64
:
Click Try It! to start a request and see the response here!