Working with Captures
A capture is a single extracted data record. Each run produces one capture per successfully extracted URL, containing structured ecommerce product data.
Browsing captures
• Dashboard
Navigate to Extract > Captures to view your extracted data.
Use the filter dropdown to choose how to view captures:
- By run name: select a specific run to see its captures.
- By robot name: select a robot to see captures across all of its runs. An additional Run Name column appears so you can tell which run produced each capture.
The table displays Image, Brand, Title, Price, Available, Variants, URL, and Extracted At for each capture.
Click any row to open a detail panel with two tabs:
- Product — an interactive product page view showing images, options, pricing, description, and more.
- Raw Data — the full JSON extraction data with syntax highlighting.
• API
List captures from a specific run:
export EXTRALT_API_KEY="your-api-key"
curl -s "https://api.extralt.com/captures?runId=$RUN_ID" \
-H "Authorization: Bearer $EXTRALT_API_KEY" | jqWhen a run produces many captures, API results are paginated. See Common Patterns for pagination handling.
Extraction data schema
Every capture contains structured product data. The same schema is used across all sites.
{
"id": "019d3ec3-cf96-7520-bc31-1474206e06ed",
"url": "https://www.nike.com/t/dna-mens-dri-fit-basketball-shorts-hVGm16/HV1878-350",
"extracted_at": 1774874512106,
"product_id": "HV1878-350",
"handle": "dna-mens-dri-fit-basketball-shorts-hVGm16",
"group_id": "hVGm16",
"title": "Nike DNA",
"subtitle": "Men's Dri-FIT Basketball Shorts",
"brand": "Nike",
"breadcrumbs": "Men > Basketball > Shorts",
"description": "Built for the court, ready for anywhere. These lightweight-yet-durable basketball shorts help keep you cool with our sweat-wicking Dri-FIT technology.",
"release_date": "2025-10-02T07:00:00.000Z",
"gender": "MEN",
"age_group": "Adult",
"rating_average": null,
"rating_count": 0,
"rating_scale": 5,
"min_price": 41.97,
"max_price": 41.97,
"currency": "USD",
"is_available": true,
"variant_count": 7,
"image_url": "https://static.nike.com/a/images/t_default/326dc2d4-a16d-4433-93d7-8d6f8313d4d0/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"categories": [
"Men",
"Basketball",
"Shorts"
],
"tags": [
"Basketball",
"Dri-FIT",
"Shorts",
"Men"
],
"images": [
{
"url": "https://static.nike.com/a/images/t_default/326dc2d4-a16d-4433-93d7-8d6f8313d4d0/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"position": 1,
"variant_ids": [
"HV1878-350"
]
},
{
"url": "https://static.nike.com/a/images/t_default/e2c6c1aa-6d12-46b9-9385-d76bd4fa30e0/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"position": 3,
"variant_ids": [
"HV1878-350"
]
},
{
"url": "https://static.nike.com/a/images/t_default/38d8c21c-c8dd-466b-949c-92fdfcd0320b/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"position": 4,
"variant_ids": [
"HV1878-350"
]
},
{
"url": "https://static.nike.com/a/images/t_default/79d907aa-1763-4af7-a1bf-99f5fc30acc4/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"position": 5,
"variant_ids": [
"HV1878-350"
]
},
{
"url": "https://static.nike.com/a/images/t_default/1cd3d1a3-fea9-4295-bf8a-f3d6d59f2d47/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"position": 6,
"variant_ids": [
"HV1878-350"
]
},
{
"url": "https://static.nike.com/a/images/t_default/3cf19355-4f26-4faf-b658-581297b87e9c/M+NK+DF+DNA+8IN+SHORT+AOP.png",
"position": 7,
"variant_ids": [
"HV1878-350"
]
}
],
"videos": null,
"properties_dict": {
"Style": "HV1878-350",
"Shown": "Chlorophyll/Black"
},
"properties_list": [
"Recycled Materials",
"Designed for Basketball",
"Unlined",
"Lightweight, sweat-wicking fabric with mesh and smooth interior",
"Side pockets and zippered utility pocket large enough for a phone",
"Elastic waistband with drawcord",
"Body: 100% polyester. Pocket bags: 100% polyester.",
"Machine wash",
"Imported",
"Shown: Chlorophyll/Black",
"Style: HV1878-350"
],
"options": {
"opt1": {
"name": "Color",
"values": [
"Chlorophyll/Black"
]
},
"opt2": {
"name": "Size",
"values": [
"S",
"M",
"L",
"XL",
"2XL",
"3XL",
"4XL"
]
},
"opt3": null
},
"variants": [
{
"id": "90c9f2c2-d984-5cc2-a2a0-89deac668eb3",
"title": null,
"identifiers": {
"gtin": "00198482162061",
"mpn": "HV1878-350"
},
"opt1": "Chlorophyll/Black",
"opt2": "S",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": true,
"quantity": "In stock"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
},
{
"id": "032621f4-8f17-5716-932d-a93b0d1dfc4a",
"title": null,
"identifiers": {
"gtin": "00198481839179",
"mpn": "HV1878-350"
},
"opt1": "Chlorophyll/Black",
"opt2": "M",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": true,
"quantity": "In stock"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
},
{
"id": "a73069dc-17b2-5dc7-b5cc-e78c9674d8cd",
"title": null,
"identifiers": {
"gtin": "00198481982455",
"mpn": "HV1878-350"
},
"opt1": "Chlorophyll/Black",
"opt2": "L",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": true,
"quantity": "In stock"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
},
{
"id": "417e97e7-c31c-5ac0-999c-5b6779ba831d",
"title": null,
"identifiers": {
"gtin": "00198482264932",
"mpn": "HV1878-350"
},
"opt1": "Chlorophyll/Black",
"opt2": "XL",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": true,
"quantity": "In stock"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
},
{
"id": "42484108-e343-520f-9ed1-1ca72a301174",
"title": null,
"identifiers": {
"gtin": "00198481731473",
"mpn": "HV1878-350"
},
"opt1": "Chlorophyll/Black",
"opt2": "2XL",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": true,
"quantity": "Limited stock available"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
},
{
"id": "179d2b07-b59e-5a7d-912f-cebf81b1d13f",
"title": null,
"identifiers": {
"mpn": "HV1878-350",
"gtin": "00198482258597"
},
"opt1": "Chlorophyll/Black",
"opt2": "3XL",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": false,
"quantity": "Out of stock"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
},
{
"id": "fad73aae-e6b1-58ac-83a3-f17125c0b3b2",
"title": null,
"identifiers": {
"gtin": "00198482211318",
"mpn": "HV1878-350"
},
"opt1": "Chlorophyll/Black",
"opt2": "4XL",
"opt3": null,
"offers": [
{
"price": {
"amount": 41.97,
"full_amount": 60,
"currency": "USD"
},
"availability": {
"in_stock": false,
"quantity": "Out of stock"
},
"condition": "new",
"seller": "Nike",
"seller_type": "1p"
}
]
}
],
"recommended_products": [
"https://www.nike.com/t/mens-dri-fit-basketball-t-shirt-WPpZO1IN/HV1772-010",
"https://www.nike.com/t/victory-sunglasses-PP0tbC/DV2138-010",
"https://www.nike.com/t/brasilia-95-training-backpack-medium-24l-zz5tL7/DH7709-068",
"https://www.nike.com/t/ja-2-basketball-shoes-mkEicYoS/HQ8513-001",
"https://www.nike.com/t/mens-basketball-t-shirt-MRuIhbgt/IO9764-133",
"https://www.nike.com/t/dri-fit-club-structured-swoosh-cap-kxvJ3j/FB5625-222",
"https://www.nike.com/t/22oz-big-mouth-water-bottle-2VjPJW/N0000042-968",
"https://www.nike.com/t/lebron-witness-9-basketball-shoes-h9SkAFPT/II7520-100",
"https://www.nike.com/t/primary-mens-dri-fit-short-sleeve-versatile-top-XK77j1/DV9831-097",
"https://www.nike.com/t/utility-speed-backpack-27l-QnNg7P/FN4106-010",
"https://www.nike.com/t/everyday-playground-8-panel-basketball-gcWDgD/N1003082-816",
"https://www.nike.com/t/precision-7-easyon-mens-basketball-shoes-779glM/FN0324-101"
]
}Key fields:
| Field | Description |
|---|---|
product_id | Primary product identifier on the site (product handle, ASIN, etc.) |
group_id | Groups captures that are variants of the same product (e.g., different color pages) |
title, brand, description | Core product identity |
image_url | Primary product image URL |
images | Product images with position and optional variant association |
min_price, max_price, currency | Price range across all variants |
is_available | Whether any variant is currently in stock |
variant_count | Total number of variants |
properties_dict | Structured attributes as key-value pairs (material, closure, etc.) |
properties_list | Unstructured features and claims (bullet points from the product page) |
rating_average, rating_count, rating_scale | Rating metrics |
options | Up to 3 option axes (e.g., Color, Size) with all available values |
variants | One entry per option combination, each with identifiers and offers |
variants[].identifiers | GTIN, SKU, MPN, and other identifiers for this variant |
variants[].offers | Price, availability, condition, and seller for each offer |
variants[].offers[].seller_type | 1p (marketplace selling directly), 3p (third-party seller), or null |
All fields are optional. What gets extracted depends on what the site exposes.
Exporting captures
• Dashboard
Once data is loaded, a download button appears in the filter bar. Click it and choose a format:
- JSONL: one JSON object per line, with fields for
id,url,title,extracted_at,robot_name,run_name, and the full product data. Good for scripting, analysis, and importing into other tools. - Parquet: columnar format preserving all capture fields. Ideal for data pipelines, DuckDB queries, and pandas DataFrames.
• API
For bulk download, use the run download endpoint. It returns a signed URL to a compressed .jsonl.lz4 file containing all captures from the run.
curl -s "https://api.extralt.com/runs/$RUN_ID/download" \
-H "Authorization: Bearer $EXTRALT_API_KEY" | jq '.url'The signed URL is valid for 10 minutes.
Analyzing captures with Python
Every Extralt organization gets full access to its own cloud storage. All data generated by your runs is yours — the storage token we provide gives you direct GCS access, so you can use your data however you want: pandas, DuckDB, Spark, or any tool that reads Parquet.
The notebook below shows how to authenticate, read captures into a DataFrame, and build a quick analysis.
Prerequisites:
- An Extralt API key (set as
EXTRALT_API_KEYenvironment variable, or saved in a .env file) pip install gcsfs pandas pyarrow python-dotenv requests
In [1]:
import json
import os
import gcsfs
import pandas as pd
import requests
from google.oauth2.credentials import Credentials
from dotenv import load_dotenv
load_dotenv()Out [1]:
True
In [2]:
def authenticate():
api_key = os.environ["EXTRALT_API_KEY"]
resp = requests.get(
"https://api.extralt.dev/v1/storage/token",
headers={"Authorization": f"Bearer {api_key}"},
)
resp.raise_for_status()
data = resp.json()
token = data["token"]
uri = data["uri"]
return token, uri
token, uri = authenticate()
fs = gcsfs.GCSFileSystem(token=Credentials(token=token))In [3]:
runs = fs.ls(f"{uri}captures/")
pd.DataFrame({"run": [r.split("/")[-1] for r in runs]})Out [3]:
| run | |
|---|---|
| 0 | kh72tvgdng8nq5yma8pwwrtf0182b2br |
In [4]:
run_id = runs[0].split("/")[-1]
df = pd.read_parquet(f"{uri}captures/{run_id}/data.parquet", filesystem=fs)
dfOut [4]:
| id | robot_id | robot_name | run_id | run_name | url | extracted_at | title | data | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 019cbcc8-f638-7f80-a4d0-3b81c342d7ba | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/club-mens-lacrosse-flee... | 1.772694e+12 | Nike Club | {"id":"M71768LX25-BLK","product_group_id":"Jao... |
| 1 | 019cbcc8-f638-7f80-a4d0-3b90c0f1b3bc | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/colorado-rockies-city-c... | 1.772694e+12 | Colorado Rockies City Connect | {"id":"LM2W0CN5DNV-1U2","product_group_id":"MT... |
| 2 | 019cbcc8-f638-7f80-a4d0-3badff7de589 | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/minnesota-vikings-glory... | 1.772694e+12 | Minnesota Vikings Glory Max90 | {"id":"01AY51A9M-RJD","product_group_id":"xhrM... |
| 3 | 019cbcc8-f638-7f80-a4d0-3bbccd621653 | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/los-angeles-rams-feel-t... | 1.772694e+12 | Los Angeles Rams Feel The Pressure | {"id":"03BA0DGG95-RZB","product_group_id":"jLk... |
| 4 | 019cbcc8-f638-7f80-a4d0-3bc535e7cf44 | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/cleveland-browns-swing-... | 1.772694e+12 | Cleveland Browns Swing Pass Rewind Club | {"id":"NKPU0DD693V-LDC","product_group_id":"4g... |
| 5 | 019cbcc8-f639-7620-ac93-88e39a16654b | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/philadelphia-eagles-202... | 1.772694e+12 | Philadelphia Eagles 2025 NFC East Champions Tr... | {"id":"01K900A86Z-KZ5","product_group_id":"jLJ... |
| 6 | 019cbcc8-f639-7620-ac93-88f3c6c38ea5 | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/sportswear-essential-bi... | 1.772694e+12 | Nike Sportswear Essential | {"id":"FZ5535-610","product_group_id":"3yqbJpm... |
| 7 | 019cbcc8-f639-7620-ac93-8907be277cc9 | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/tech-mens-pullover-hood... | 1.772694e+12 | Nike Tech | {"id":"HV1342-437","product_group_id":"BmWkyVA... |
| 8 | 019cbcc8-f639-7620-ac93-8916a2579c02 | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/chelsea-fc-2025-26-matc... | 1.772694e+12 | Chelsea FC 2025/26 Match Home | {"id":"HJ4543-496","product_group_id":"qN2Fzp"... |
| 9 | 019cbcc8-f639-7620-ac93-8927c89d4a5e | m5739en5f3pf86t8b234p9909h82av7m | www_nike_com-us-6442 | kh72tvgdng8nq5yma8pwwrtf0182b2br | brave-skink-7455 | https://www.nike.com/t/sportswear-club-fleece-... | 1.772694e+12 | Nike Sportswear Club Fleece | {"id":"HV0422-634","product_group_id":"7qBlsmz... |
In [5]:
parsed = df.copy()
parsed["data"] = parsed["data"].apply(json.loads)
parsed["brand"] = parsed["data"].apply(lambda d: d.get("brand"))
parsed["gender"] = parsed["data"].apply(lambda d: d.get("gender"))
first_offer = lambda d: (d.get("variants") or [{}])[0].get("offers", [{}])[0]
parsed["price"] = parsed["data"].apply(
lambda d: (first_offer(d).get("price") or {}).get("amount")
)
parsed["currency"] = parsed["data"].apply(
lambda d: (first_offer(d).get("price") or {}).get("currency")
)
parsed["rating"] = parsed["data"].apply(
lambda d: (d.get("ratings") or {}).get("average")
)
parsed["reviews"] = parsed["data"].apply(
lambda d: (d.get("ratings") or {}).get("count")
)
parsed[
[
"title",
"brand",
"gender",
"price",
"currency",
"rating",
"reviews",
"url",
]
]Out [5]:
| title | brand | gender | price | currency | rating | reviews | url | |
|---|---|---|---|---|---|---|---|---|
| 0 | Nike Club | Nike | Men | 65.00 | USD | NaN | NaN | https://www.nike.com/t/club-mens-lacrosse-flee... |
| 1 | Colorado Rockies City Connect | Nike | Women | 155.00 | USD | NaN | NaN | https://www.nike.com/t/colorado-rockies-city-c... |
| 2 | Minnesota Vikings Glory Max90 | Nike | Men | 55.00 | USD | NaN | NaN | https://www.nike.com/t/minnesota-vikings-glory... |
| 3 | Los Angeles Rams Feel The Pressure | Nike | Men | 90.00 | USD | NaN | NaN | https://www.nike.com/t/los-angeles-rams-feel-t... |
| 4 | Cleveland Browns Swing Pass Rewind Club | Nike | Men | 85.00 | USD | NaN | NaN | https://www.nike.com/t/cleveland-browns-swing-... |
| 5 | Philadelphia Eagles 2025 NFC East Champions Tr... | Nike | Women | 45.00 | USD | NaN | NaN | https://www.nike.com/t/philadelphia-eagles-202... |
| 6 | Nike Sportswear Essential | Nike | Girls | 17.97 | USD | NaN | NaN | https://www.nike.com/t/sportswear-essential-bi... |
| 7 | Nike Tech | Nike | Men | 103.97 | USD | 3.0 | 1.0 | https://www.nike.com/t/tech-mens-pullover-hood... |
| 8 | Chelsea FC 2025/26 Match Home | Nike | Men | 170.00 | USD | NaN | NaN | https://www.nike.com/t/chelsea-fc-2025-26-matc... |
| 9 | Nike Sportswear Club Fleece | Nike | Girls | 37.97 | USD | NaN | NaN | https://www.nike.com/t/sportswear-club-fleece-... |
In [6]:
brand_df = parsed[parsed["brand"].notna()]
brand_df.groupby("brand").agg(
products=("brand", "count"),
avg_price=("price", "mean"),
min_price=("price", "min"),
max_price=("price", "max"),
avg_rating=("rating", "mean"),
).round(2).sort_values("products", ascending=False)Out [6]:
| products | avg_price | min_price | max_price | avg_rating | |
|---|---|---|---|---|---|
| brand | |||||
| Nike | 10 | 82.49 | 17.97 | 170.0 | 3.0 |