Export raw view data

Download your raw FastPix Video Data as a daily CSV export, one file per UTC day, with every field captured for each view.

Raw view exports give you every view FastPix captured, as a CSV file you can load into your own database or data warehouse. FastPix generates one export per UTC day, containing every view that completed on that date, and returns a time-limited URL to download it. Use raw exports when you want to run your own analysis, join view data with other datasets, or archive it beyond the dashboard.


Choose an export method

FastPix delivers raw view data three ways. All three carry the same per-view fields, so pick the one that matches how you consume the data.

  • Daily CSV export, described on this page. One file per UTC day, pulled on your own schedule. Best for batch loads and archival.
  • Amazon Kinesis, a streaming export that writes each view to a Kinesis data stream in your AWS account in near real time.
  • Google Cloud Pub/Sub, a streaming export that publishes each view to a Pub/Sub topic in your Google Cloud project in near real time.

The two streaming methods deliver a byte-for-byte identical record envelope, so a pipeline you build for one keeps working if you switch clouds.

Here is how the daily CSV and the streaming methods compare:

Daily CSVStreaming
ArrivesOnce a day, one file per UTC daySeconds after each view ends
You set upNothingA stream or topic in your own cloud
You receiveA gzipped CSV per dayOne record per view
Kept for7 days, then deletedAs long as your own stream keeps it
Good forWarehouse loads, ad-hoc analysis, archivalDashboards, alerting, joining to your own events

The methods are independent. Run one, the other, or both. The CSV covers the same views whether or not streaming is on, which is why it is the fallback if a streaming destination stops.


Before you begin

Make sure you have the following:

  • A FastPix account on a paid plan. Raw view exports aren’t available on the free plan.
  • Your Access Token ID and Secret Key for the FastPix API. See Activate your account.

How raw view exports work

  • One file per day. A scheduled job runs once a day and produces a single CSV covering the whole previous UTC day, including views that completed earlier that day.
  • Retained for 7 days. Each export is available for 7 days, then the file is deleted and its download URL stops working.
  • Enabled two ways. Turn on daily CSV exports from Data Exports > CSV exports in your dashboard, or call the list endpoint, since the first call enables exports automatically. That first request returns an empty list and a message naming the date your first file will cover; your first file is produced by the next scheduled run.
  • No backfill. Only dates on or after the day you enabled exports are available. Earlier dates are never generated.

To turn exports on from the dashboard, go to Data Exports > CSV exports and switch on Daily CSV exports.

Daily CSV exports toggle switched off in the FastPix Data Exports dashboard

Once enabled, a banner confirms the date your first file will cover and the daily run time.

Daily CSV exports enabled in the FastPix dashboard with a banner explaining the first file and 04:00 UTC schedule

List available exports

Call the List raw view exports endpoint to see which daily exports are ready and get a download URL for each.

curl "https://api.fastpix.com/v1/data/exports/rawViews?timespan[]=7:days" \
-u "$ACCESS_TOKEN:$SECRET_KEY"

The timespan[] query parameter accepts a duration string from 1:days to 7:days. Because exports are retained for 7 days, that’s the widest window available. If you omit it, the full 7-day window is returned.

The key fields in each export record are:

FieldDescription
exportDateThe UTC date the export covers.
statusCOMPLETED for a day with views, or EMPTY for a day with none.
filesThe files for this export. Each export produces a single file, returned as a one-item array.
files[].downloadUrlA time-limited URL that downloads the export as views_{date}.csv.
files[].downloadUrlExpiresAtWhen the download URL stops working. This matches when the file is deleted.
files[].rowCountThe number of data rows in the file, excluding the header row.
files[].versionThe CSV format version.

Example response

{
"success": true,
"data": {
"timeFrame": [
1788348969,
1788953769
],
"totalRowCount": 7,
"data": [
{
"files": [
{
"type": "csv",
"downloadUrl": "https://storage.fastpix.net/exports/{workspaceId}/v1/views_2026-09-08.csv.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&…&X-Amz-Signature=…",
"version": "v1",
"rowCount": 1,
"downloadUrlExpiresAt": "2026-09-16T04:01:27.960077Z"
}
],
"exportDate": "2026-09-08",
"status": "COMPLETED"
},
{
"files": [
{
"type": "csv",
"downloadUrl": "https://storage.fastpix.net/exports/{workspaceId}/v1/views_2026-09-07.csv.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&…&X-Amz-Signature=…",
"version": "v1",
"rowCount": 0,
"downloadUrlExpiresAt": "2026-09-15T04:01:20.729056Z"
}
],
"exportDate": "2026-09-07",
"status": "EMPTY"
},
{
"files": [
{
"type": "csv",
"downloadUrl": "https://storage.fastpix.net/exports/{workspaceId}/v1/views_2026-09-04.csv.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&…&X-Amz-Signature=…",
"version": "v1",
"rowCount": 7,
"downloadUrlExpiresAt": "2026-09-12T04:01:28.647078Z"
}
],
"exportDate": "2026-09-04",
"status": "COMPLETED"
}
]
}
}

An export with status EMPTY still returns a valid file whose rowCount is 0 (the CSV contains only the header row). This example is truncated to three days; a full response lists every day in the requested window, most recent first.


Example response (first request)

On the first request that enables exports for your workspace, the data array is empty and a message names the date your first file will cover.

{
"success": true,
"data": {
"timeFrame": [
1788351436,
1788956236
],
"totalRowCount": 0,
"message": "Exports are now enabled for this workspace. Your first CSV covers today (UTC) and will be generated by the scheduled job at 04:00 UTC. Dates before today are not exported.",
"data": []
}
}

Download an export

The download is a plain CSV saved as views_{date}.csv. Most HTTP clients, including Python requests and httpx and JavaScript fetch, handle it automatically.

The file is compressed in transit to save bandwidth. Clients that don’t request compression, such as curl, wget, and Java’s HttpClient, receive the compressed bytes instead of the CSV. With curl, ask for decompression explicitly:

curl --compressed -o views_2026-08-16.csv "<downloadUrl>"

Exports can be large. A busy day of roughly 200,000 views produces several hundred megabytes of CSV, so stream the file to disk and parse it row by row rather than loading it into memory, and use a database or data warehouse rather than a spreadsheet on high-volume days.


What’s in the export

Each row is one view, and each column is a field FastPix captured for that view, such as asnId, avgBitrate, browserName, country, viewStart, and watchTime. New columns are appended over time, so parse by column name, never by position. For the full field reference, see What Video Data do we capture.

The export includes the following columns, one per captured field, listed in the order they appear in the CSV.

Fields in the export

FieldDescription
asnIdID of the viewer’s Autonomous System (network/ISP).
asnNameName of the viewer’s Autonomous System (network/ISP).
avgBitrateAverage bitrate of the video stream during the view, in bits per second.
avgDownscalingAverage amount the player downscaled the video below its source resolution during the view.
avgRequestLatencyAverage latency of media segment requests during the view.
avgRequestThroughputAverage throughput (data received rate) of media segment requests during the view.
avgUpscalingAverage amount the player upscaled the video above its source resolution during the view.
beaconDomainDomain the FastPix Data beacon sent measurements to.
browserNameWeb browser used by the viewer (for example, Chrome, Firefox).
browserVersionVersion of the web browser.
bufferCountNumber of rebuffering events during the view.
bufferFillAverage buffering duration per view, in seconds.
bufferFrequencyRebuffering events per second.
bufferRatioFraction of viewing time spent buffering (lower is smoother).
cdnContent Delivery Network that served the stream.
cityCity the viewer accessed the content from.
connectionTypeNetwork connection type (for example, wifi, cellular).
continentContinent the viewer accessed the content from.
countryCountry the viewer accessed the content from (for example, US).
custom1Optional custom metadata field 1 you set at playback for your own filtering and segmentation.
custom10Optional custom metadata field 10 you set at playback for your own filtering and segmentation.
custom2Optional custom metadata field 2 you set at playback for your own filtering and segmentation.
custom3Optional custom metadata field 3 you set at playback for your own filtering and segmentation.
custom4Optional custom metadata field 4 you set at playback for your own filtering and segmentation.
custom5Optional custom metadata field 5 you set at playback for your own filtering and segmentation.
custom6Optional custom metadata field 6 you set at playback for your own filtering and segmentation.
custom7Optional custom metadata field 7 you set at playback for your own filtering and segmentation.
custom8Optional custom metadata field 8 you set at playback for your own filtering and segmentation.
custom9Optional custom metadata field 9 you set at playback for your own filtering and segmentation.
deviceManufacturerManufacturer of the viewer’s device (for example, Apple, Samsung).
deviceModelSpecific device model (for example, iPhone 12).
deviceNameDevice name (for example, MacBook Pro).
deviceTypeDevice category (for example, desktop, mobile, tablet, tv).
drmTypeDigital Rights Management type applied to the content, if any.
droppedFrameCountNumber of frames dropped during playback.
errorCodeCode for any playback error encountered during the view.
errorContextAdditional context about the playback error.
errorMessageHuman-readable message for the playback error.
eventsPlayback events recorded during the view.
exitBeforeVideoStartWhether the viewer left before playback began (true/false).
fpLiveStreamIdFastPix live stream ID, if the view was of a live stream.
fpPlaybackIdFastPix playback ID used for the view.
fpSdkFastPix SDK used for playback, if applicable.
fpSdkVersionVersion of the FastPix SDK used.
fpViewerIdFastPix-generated viewer identifier.
jumpLatencyAverage wait time after seeking to a new position.
latitudeApproximate latitude of the viewer.
liveStreamLatencyDelay between the live event and playback (live streams only).
longitudeApproximate longitude of the viewer.
maxDownscalingMaximum amount the player downscaled the video during the view.
maxRequestLatencyMaximum media segment request latency during the view.
maxUpscalingMaximum amount the player upscaled the video during the view.
mediaIdFastPix media identifier for the content, if applicable.
osNameOperating system of the viewer’s device (for example, Windows, iOS).
osVersionVersion of the operating system.
pageContextContext about the page where the video was embedded or viewed.
pageLoadTimeTime for the page to load before playback began.
playbackScorePlayback success score for the view.
playerAutoplayOnWhether autoplay was enabled (true/false).
playerHeightRendered height of the player, in pixels.
playerInitializationTimeTime for the player to initialize after page load.
playerInstanceIdIdentifier for the player instance.
playerLanguageLanguage configured in the player.
playerNameName of the video player.
playerPosterPoster image URL configured on the player.
playerPreloadOnWhether preloading of video content was enabled (true/false).
playerRemotePlayedWhether the video was played remotely, for example via casting (true/false).
playerResolutionResolution the player was configured to display.
playerSoftwareNamePlayer software framework (for example, Shaka Player).
playerSoftwareVersionVersion of the player software framework.
playerSourceDomainDomain the player was served from.
playerSourceHeightHeight of the source video, in pixels.
playerSourceWidthWidth of the source video, in pixels.
playerVersionVersion of the video player.
playerViewCountNumber of views recorded for this player instance.
playerWidthRendered width of the player, in pixels.
propertyIdIdentifier of the property (workspace) the view belongs to.
qualityOfExperienceScoreComposite score reflecting overall viewer experience.
regionRegion or state within the country the viewer accessed the content from.
renderQualityScoreScore based on the visual quality rendered during the view.
sessionIdIdentifier for the viewer’s session.
signInternal row-versioning marker (CollapsingMergeTree sign); 1 marks the current row. Ignore for analysis.
stabilityScoreScore reflecting playback smoothness; higher means fewer interruptions.
startupScoreScore based on how quickly the video started.
subPropertyIdIdentifier for a sub-property associated with the view, if applicable.
totalStartupTimeTotal time from initiation to the video being ready to play.
usedFullScreenWhether the viewer used fullscreen during the view (true/false).
userAgentRaw user-agent string of the viewer’s client.
videoContentTypeType of content viewed (for example, movie, series).
videoDurationDuration of the video.
videoEncodingVariantEncoding variant delivered for the view.
videoIdYour identifier for the video content.
videoLanguageLanguage of the video content.
videoProducerProducer of the video content.
videoResolutionResolution of the video played.
videoSeriesSeries the video belongs to, if applicable.
videoSourceDomainDomain the video was sourced from.
videoSourceDurationDuration of the source video.
videoSourceHostnameHostname the video content was served from.
videoSourceStreamTypeStream type of the source (for example, live, on-demand).
videoSourceTypeSource delivery type (for example, application/dash+xml).
videoSourceUrlURL of the video source.
videoStartupFailedWhether the video failed to start (true/false).
videoStartupTimeTime for the video to begin playback.
videoTitleTitle of the video content.
videoVariantIdIdentifier of the video variant.
videoVariantNameName of the video variant.
viewEndTimestamp when the view ended.
viewHasAdWhether an ad played during the view (true/false).
viewHasErrorWhether playback failed due to an error during the view (true/false).
viewIdUnique identifier for this view.
viewMaxPlayheadPositionFurthest playhead position the viewer reached.
viewPageUrlURL of the page where the view happened.
viewPlayingTimeTotal time the video was actively playing during the view.
viewSeekedCountNumber of seek actions during the view.
viewSeekedDurationsTotal duration seeked during the view.
viewSessionIdIdentifier for the viewing session.
viewStartTimestamp when the view started.
viewTotalContentPlaybackTimeTotal content playback time for the view.
viewerIdYour identifier for the viewer.
watchTimeTotal time the viewer spent watching during the view.
workspaceIdFastPix workspace identifier.

To see the format before you integrate, download a sample export:


Best practices

  • Parse by column name, not position. New columns are appended over time.
  • Replace by date, don’t append. If you download the same date more than once, replace that date’s rows rather than adding duplicates.
  • Handle EMPTY days. A day with no views returns EMPTY with a rowCount of 0 and a valid file containing only the header row. This is a success, not an error, and needs no retry.
  • Don’t store or share download URLs. Each one grants direct access to your view data and stays valid until the file expires. Fetch a fresh URL from the list endpoint when you need to download again.

Frequently asked questions

How far back can I export raw view data?

Exports are retained for 7 days, so you can download any daily file from the last 7 days. Dates before you enabled exports are never generated, and older files are deleted once they pass the 7-day window.

Why did my first request return an empty list?

The first call to the list endpoint enables exports for your workspace. It returns an empty list and a message naming the date your first file will cover. That file is produced by the next scheduled run.

Why did curl download a compressed file instead of a CSV?

Exports are compressed in transit. Clients that don’t request compression (curl, wget, Java’s HttpClient) receive the compressed bytes. Pass --compressed to curl to get the decoded CSV.

How do I decode the columns in the export?

Each column is a per-view field. See What Video Data do we capture for the full list of fields and their definitions.

Are raw view exports available on the free plan?

No. Raw view exports are available on paid plans. The first request to the list endpoint checks your plan; if your organization isn’t eligible, it returns a 403 and nothing is enabled.


If your plan changes

Moving to a free plan stops daily CSV exports. Existing files stay downloadable until they expire, and returning to a paid plan resumes generation with nothing to set up again.


What’s next