OrbTop

DxOMark Camera, Lens & Sensor Score Scraper

ECOMMERCE

DxOMark Camera, Lens & Sensor Score Scraper

Extract objective lab-bench scores for cameras, lenses, and sensors from DxOMark — the world's leading independent image quality measurement authority since 2008.

What this actor does

This actor scrapes scored products from DxOMark, discovering them via the site's sitemap (3,500+ products). For each product it fetches:

  • The test/review page to get the overall DxOMark score, protocol type, and review date
  • The product page to get the brand and full set of sub-scores

Camera sensors — sub-scores extracted:

  • Portrait (Color Depth, in bits)
  • Landscape (Dynamic Range, in EV)
  • Sports (Low-Light ISO)

Lenses — sub-scores extracted:

  • Sharpness (P-Mpix)
  • Transmission (TStop)
  • Distortion (%)
  • Vignetting (EV)
  • Chromatic Aberration (µm)
  • Tested-on camera body

Output data

Each record contains:

Field Type Description
product_name string Full product name (e.g. "Sony A9 III", "Sigma 90mm F2.8 DG DN")
brand string Brand/manufacturer
product_type string camera-sensor or lens
mount string Lens mount (where available)
dxomark_overall_score integer Overall DxOMark score
sub_scores string (JSON) Sub-score key/value pairs as a JSON string
sensor_specs string Sensor specifications (reserved for future use)
tested_on_body string Camera body used to test the lens (lenses only)
launch_price_usd number Launch price in USD (not available in static HTML)
rank_in_category integer Rank in category (not available in static HTML)
review_url string URL of the DxOMark test/review page
review_date string Review publication date

Sample output (camera sensor)

{
  "product_name": "Sony a9 III",
  "brand": "Sony",
  "product_type": "camera-sensor",
  "dxomark_overall_score": 87,
  "sub_scores": "{\"Overall Sensor Score\":87,\"Portrait (Color Depth)\":24.1,\"Landscape (Dynamic Range)\":13,\"Sports (Low-Light ISO)\":3224}",
  "review_url": "https://www.dxomark.com/sony-a9-iii-sensor-test/",
  "review_date": "November 14, 2024"
}

Sample output (lens)

{
  "product_name": "Sigma 90 mm F2.8 DG DN (for Sony)",
  "brand": "Sigma",
  "product_type": "lens",
  "dxomark_overall_score": 39,
  "sub_scores": "{\"Sharpness\":\"35 P-Mpix\",\"Transmission\":\"2.9 TStop\",\"Distortion\":\"1.2 %\",\"Vignetting\":\"-2.1 EV\",\"Chr. aberration\":\"17 µm\"}",
  "tested_on_body": "Sony A7R IV",
  "review_url": "https://www.dxomark.com/sigma-90mm-f2-8-dg-dn-for-sony-lens-test/",
  "review_date": "June 30, 2022"
}

Input configuration

Parameter Type Required Description
maxItems integer Yes Maximum number of products to scrape
startUrls array No Specific DxOMark test/review page URLs to scrape. Leave empty to discover all products via sitemap.

Scrape specific products

To scrape specific products, provide their DxOMark test/review page URLs:

{
  "maxItems": 10,
  "startUrls": [
    { "url": "https://www.dxomark.com/sony-a9-iii-sensor-test/" },
    { "url": "https://www.dxomark.com/sigma-90mm-f2-8-dg-dn-for-sony-lens-test/" }
  ]
}

Discover and scrape all products (sitemap crawl)

Leave startUrls empty to walk the DxOMark sitemap and discover all scored products:

{
  "maxItems": 500
}

Use cases

  • Gear recommendation tools — build recommendation engines using objective sensor scores
  • Affiliate content sites — programmatically enrich product pages with lab-measured scores
  • Price-intelligence platforms — correlate DxOMark scores with market pricing
  • ML training datasets — build computer vision and image quality models with ground-truth measurements
  • Camera comparison apps — power comparison tools with the same data DxOMark uses

Notes

  • No proxy required — DxOMark serves plain HTML with no anti-bot challenges
  • launch_price_usd and rank_in_category are loaded via JavaScript on the product page and are not available in the static HTML; both fields output null
  • Smartphone camera tests are filtered out; only camera sensors (-sensor-test/) and lenses (-lens-test/, -lens-review/) are included
  • The sub_scores field is a JSON-encoded string; parse it with JSON.parse() in your downstream code