Ecommerce · Vibe Scraping avatar
Ecommerce · Vibe Scraping

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Ecommerce · Vibe Scraping

Ecommerce · Vibe Scraping

The last ecommerce scraper you'll need. Our AI analyzes any store, builds a custom crawler, and delivers rich product data in a consistent schema.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(2)

Developer

Extralt

Extralt

Maintained by Community

Actor stats

2

Bookmarked

19

Total users

5

Monthly active users

7 hours ago

Last modified

Share


Ecommerce · Vibe Scraping


One actor, any ecommerce website

Part of our Vibe Scraping series:
AI-built crawlers for structured data extraction.




⚠️ Beta Release

This actor is currently in beta. We're actively improving based on feedback. Report issues on the issues tab.

🔥 Why This Actor

The last ecommerce scraper you'll need. One actor, any store, consistent schema.

  • Any ecommerce site: Works on most stores out of the box — no hunting for site-specific actors
  • Consistent schema: Same product structure across all sites — no per-site field mapping
  • Portable: Reuse across stores with consistent output for your pipeline
  • Fast & cheap: Custom Rust engine — no AI during extraction, orders of magnitude faster than LLM-based scraping

✨ Use Cases

  • Price Intelligence: Monitor competitor pricing across multiple stores
  • Inventory Tracking: Track product availability and variants across brands
  • Market Research: Aggregate product catalogs from entire verticals
  • Multi-store Aggregation: Combine data from dozens of stores into one consistent dataset

💡 About Extralt

We're rethinking web scraping. Our crawlers are generated by AI but run as compiled code — giving you enterprise-scale performance without the brittleness of traditional scrapers or the cost of pure AI solutions.

🪙 Pricing

This actor uses a pay-per-event pricing model — you only pay for successfully extracted pages:

SubscriptionDiscountPrice per dataset item
StarterBronze$0.002
ScaleSilver$0.0015
BusinessGold$0.001

Example: Extracting 1,000 pages on a Business plan costs: 1,000 × $0.001 = $1.00

All-inclusive pricing: We only use premium residential proxies, with no hidden costs or add-ons.

Why paid plans only? Apify excludes free plan users from revenue calculations (see docs), so we restrict this actor to paying customers only.

Concurrent runs: You can run up to 3 Extralt actors simultaneously. If you need more concurrent runs, please wait for one to finish before starting a new one. This number will increase as we scale up our infrastructure.

⬇️ Input

ParameterRequiredDescription
Start URLsYesOne or more URLs to begin crawling
CountryYesProxy location for regional content
BudgetNoMaximum number of products to extract
Graph ModeNoAlso extract non-item pages and generate site structure

Start URLs

The crawler adapts based on URL type:

  • Catalog/category page: Follows pagination, extracts products until budget is reached
  • Any other page: Parses sitemap or follows internal links

Constraints:

  • All URLs must be from the same host
  • URLs should match your target country (e.g., example.fr or example.com/fr for France)
  • Only ecommerce URLs are supported (this actor uses a product-specific schema)

Graph Mode

Extracts all page types (Home, List, Item, Other) and generates a site structure graph.

When to use: You need to understand the website's architecture before extraction.

When to skip: You just want product data. Non-graph mode is faster, cheaper, and better leverages sitemaps.

For more details about graph mode, see the Graph · Vibe Scraping actor.

⬆️ Output

1. Dataset

Each extracted item contains metadata and extracted data:

FieldDescription
extracted_atUnix timestamp of extraction
urlPage URL
page_kindPage type: home, list, item, or other
titlePage title
dataExtracted product data (item pages only)
outbound_linksLinks found on the page

Use the Overview view in Apify to browse results as a formatted table, or download in JSON, CSV, HTML, or Excel.

Page Kind

The crawler classifies each page into one of four kinds:

Page KindDescriptionExample
homeMain entry point of the sitehttps://www.nike.com
listCategory or collection pages listing multiple itemshttps://www.nike.com/w/womens-running-shoes-37v7jz5e1x6zy7ok
itemPages containing 1 main itemhttps://www.nike.com/t/vomero-plus-womens-road-running-shoes-8AH6updi/HV8154-501
otherLanding, navigation, help, or non-content pageshttps://www.nike.com/women

Data

The data field is only present for item pages. See below for the extraction schema as well as an example.

The crawler extracts different links depending on the page type:

Page KindGraph Mode OnlyLinks Extracted
homeYesHeader navigation links only
listYesItem pages in the catalog (ignores navigation, header, footer)
itemNoRelated variants only (e.g., same product in different colors)
otherYesAll content links (excludes header/footer navigation)

Dataset Views

Use the Overview view to browse all fields, or the Highlight view for a quick glance at key product info (brand, title, subtitle, image).

Dataset Overview

Dataset Highlight

Product Data Schema

The data field contains comprehensive product information. Fields depend on what's available on the target website.

{
"age_group": {
"description": "Age group of the product.",
"type": "string"
},
"brand": {
"description": "Brand of the product.",
"type": "string"
},
"breadcrumbs": {
"description": "Page navigation breadcrumbs.",
"type": "string"
},
"categories": {
"description": "List of categories names, often as a hierarchy of category and subcategories.",
"type": "array"
},
"color": {
"description": "Color of the product.",
"type": "string"
},
"country_of_origin": {
"description": "Country of origin or manufactoring.",
"type": "string"
},
"description": {
"description": "Product description.",
"type": "string"
},
"dimensions": {
"description": "Product dimensions.",
"type": "string"
},
"gender": {
"description": "Gender of the product.",
"type": "string"
},
"images": {
"description": "List of image URLs in the carousel of the product details page.",
"type": "array"
},
"main_image": {
"description": "Main image of the product.",
"type": "url"
},
"material": {
"description": "Materials of the product.",
"type": "string"
},
"pattern": {
"description": "Pattern of the product.",
"type": "string"
},
"product_group": {
"description": "Parent for multiple products that vary by one or multiple attributes.",
"properties": {
"attributes": {
"description": "Attribute values that distinguish this product from others in the group.",
"type": "dict"
},
"id": {
"description": "Unique identifier for the product group.",
"type": "string"
},
"varies_by": {
"description": "List of attributes where each value has its own unique product page URL.",
"type": "array"
}
},
"type": "record"
},
"product_id": {
"description": "Primary product identifier used by the website.",
"type": "string"
},
"properties_dict": {
"description": "Dictionary of additional properties.",
"type": "dict"
},
"properties_list": {
"description": "List of additional properties or specifications.",
"type": "array"
},
"ratings": {
"description": "Product ratings and reviews information.",
"properties": {
"average_rating": {
"description": "Average rating score (e.g., 4.5).",
"type": "number"
},
"rating_scale": {
"description": "Maximum rating scale (e.g., 5 for a 5-star rating system, 10 for a 10-point scale).",
"type": "number"
},
"total_reviews": {
"description": "Total number of reviews or ratings.",
"type": "number"
}
},
"type": "record"
},
"release_date": {
"description": "Release or launch date of the product.",
"type": "date"
},
"subtitle": {
"description": "Subtitle of the product.",
"type": "string"
},
"title": {
"description": "Title or name of the product.",
"type": "string"
},
"variants": {
"description": "SKUs of this same product that differ by selectable attributes (e.g., sizes of the same shirt). Each variant has its own SKU/GTIN and potentially different stock/price, but all variants share the same product URL and page.",
"properties": {
"list": {
"description": "List of product variants (e.g., different sizes).",
"items": {
"description": "Details for one particular variant.",
"properties": {
"attributes": {
"description": "Attribute values that distinguish this variant (e.g., size, additional color details).",
"type": "dict"
},
"identifiers": {
"description": "Variant-specific identifiers. These are unique per variant (e.g., each size has a different SKU/barcode).",
"properties": {
"gtin": {
"description": "Global Trade Item Number (barcode). Covers EAN (13 digits), UPC (12 digits), ISBN.",
"type": "string"
},
"sku": {
"description": "Stock Keeping Unit - merchant-specific identifier for this variant.",
"type": "string"
},
"variant_id": {
"description": "Customer-facing variant identifier as displayed on the page",
"type": "string"
}
},
"type": "record"
},
"main_image": {
"description": "Main image for this specific variant.",
"type": "url"
},
"offers": {
"description": "Available offers for this variant.",
"items": {
"description": "Offer details from a specific seller.",
"properties": {
"availability": {
"description": "Availability information.",
"properties": {
"available": {
"description": "Whether the variant is available for purchase.",
"type": "boolean"
},
"stock": {
"description": "Stock information if available.",
"type": "string"
}
},
"type": "record"
},
"condition": {
"description": "Condition of the product (e.g., new, used, refurbished)",
"type": "string"
},
"id": {
"description": "Unique identifier for this offer as found in the page data",
"type": "string"
},
"price": {
"description": "Price details for this offer.",
"properties": {
"currency": {
"description": "Currency code (e.g., EUR, USD).",
"type": "string"
},
"current_amount": {
"description": "Current price amount.",
"type": "number"
},
"full_amount": {
"description": "Full price amount before discount.",
"type": "number"
},
"on_sale": {
"description": "Whether this offer is on sale.",
"type": "boolean"
},
"sale_percentage": {
"description": "Percentage discount if on sale.",
"type": "number"
}
},
"type": "record"
},
"seller": {
"description": "Seller information.",
"properties": {
"id": {
"description": "Unique identifier for the seller, mostly used for marketplace sellers.",
"type": "string"
},
"kind": {
"description": "Type of seller, where `marketplace` is a third-party marketplace like Amazon, eBay, or Etsy, `reseller` is a seller who buys and sells products from many brands, and `brand` is the brand itself.",
"options": [
"marketplace",
"reseller",
"brand"
],
"type": "enum"
},
"name": {
"description": "Name of the seller.",
"type": "string"
},
"url": {
"description": "URL to the seller's page or store, mostly used for marketplace sellers.",
"type": "url"
}
},
"type": "record"
}
},
"type": "record"
},
"type": "array"
}
},
"type": "record"
},
"type": "array"
},
"varies_by": {
"description": "List of attributes selectable on the current page via dropdowns, buttons, or selectors without url navigation",
"type": "array"
}
},
"type": "record"
},
"videos": {
"description": "List of video URLs of the product.",
"type": "array"
},
"weight": {
"description": "Product weight with unit.",
"type": "string"
}
}

Example Output

This page was extracted from https://www.nike.com:

{
"extracted_at": 1769580188060,
"url": "https://www.nike.com/t/nj-ny-gotham-fc-2025-stadium-home-womens-dri-fit-nwsl-replica-jersey-ZlvHdW5Y/P35557SBFC-BLK",
"page_kind": "item",
"title": "NJ/NY Gotham FC 2025 Stadium Home",
"data": {
"age_group": "Adult",
"brand": "Nike",
"breadcrumbs": null,
"categories": [
"Nike",
"Women",
"Soccer",
"Jerseys"
],
"color": "Black/Copa",
"country_of_origin": null,
"description": "Celebrate a city like no other, and a team that has no limits. The Gotham FC 2025 Home jersey embodies the spirit, lights and colors of NYC. The bright-blue graphic nods to the city lights set against the black of the night sky. The sash represents the river that runs between New York and New Jersey.",
"dimensions": null,
"gender": "Women",
"images": [
"https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"https://static.nike.com/a/images/t_default/bc4f84dc-45e1-463c-87f5-9eedf799751e/SP25+W+NWSL+STADIUM+CREW+NECK.png"
],
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"material": null,
"pattern": null,
"product_group": {
"attributes": {
"color": "Black/Copa"
},
"id": "ZlvHdW5Y",
"varies_by": [
"color"
]
},
"product_id": "P35557SBFC-BLK",
"properties_dict": {
"style": "P35557SBFC-BLK",
"shown": "Black/Copa"
},
"properties_list": [
"Replica design",
"Woven crest",
"Embroidered Swoosh",
"100% polyester",
"Machine wash",
"Imported",
"Shown: Black/Copa",
"Style: P35557SBFC-BLK"
],
"ratings": {
"average_rating": null,
"rating_scale": 5,
"total_reviews": 0
},
"release_date": "2025-03-07T15:00:00.000Z",
"subtitle": "Women's Nike Dri-FIT NWSL Replica Jersey",
"title": "NJ/NY Gotham FC 2025 Stadium Home",
"variants": {
"list": [
{
"attributes": {
"size": "XS"
},
"identifiers": {
"gtin": "00196793538414",
"sku": "214af052-ccec-5a47-99a4-a22caa27f873",
"variant_id": "XS (0–2)"
},
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"offers": [
{
"availability": {
"available": false,
"stock": "OOS"
},
"condition": "new",
"id": "214af052-ccec-5a47-99a4-a22caa27f873",
"price": {
"currency": "USD",
"current_amount": 95,
"full_amount": 95,
"on_sale": false,
"sale_percentage": 0
},
"seller": {
"id": "nike",
"kind": "brand",
"name": "Nike",
"url": "https://www.nike.com"
}
}
]
},
{
"attributes": {
"size": "S"
},
"identifiers": {
"gtin": "00196793538438",
"sku": "3680149f-49b6-50ee-ae80-f6671686bdc0",
"variant_id": "S (4–6)"
},
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"offers": [
{
"availability": {
"available": false,
"stock": "OOS"
},
"condition": "new",
"id": "3680149f-49b6-50ee-ae80-f6671686bdc0",
"price": {
"currency": "USD",
"current_amount": 95,
"full_amount": 95,
"on_sale": false,
"sale_percentage": 0
},
"seller": {
"id": "nike",
"kind": "brand",
"name": "Nike",
"url": "https://www.nike.com"
}
}
]
},
{
"attributes": {
"size": "M"
},
"identifiers": {
"gtin": "00196793538605",
"sku": "95d63249-6218-55d5-83ff-d5716936bd18",
"variant_id": "M (8–10)"
},
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"offers": [
{
"availability": {
"available": false,
"stock": "OOS"
},
"condition": "new",
"id": "95d63249-6218-55d5-83ff-d5716936bd18",
"price": {
"currency": "USD",
"current_amount": 95,
"full_amount": 95,
"on_sale": false,
"sale_percentage": 0
},
"seller": {
"id": "nike",
"kind": "brand",
"name": "Nike",
"url": "https://www.nike.com"
}
}
]
},
{
"attributes": {
"size": "L"
},
"identifiers": {
"gtin": "00196793396519",
"sku": "a6b830d3-6ce8-51a0-87b1-dcd025dff96c",
"variant_id": "L (12–14)"
},
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"offers": [
{
"availability": {
"available": false,
"stock": "OOS"
},
"condition": "new",
"id": "a6b830d3-6ce8-51a0-87b1-dcd025dff96c",
"price": {
"currency": "USD",
"current_amount": 95,
"full_amount": 95,
"on_sale": false,
"sale_percentage": 0
},
"seller": {
"id": "nike",
"kind": "brand",
"name": "Nike",
"url": "https://www.nike.com"
}
}
]
},
{
"attributes": {
"size": "XL"
},
"identifiers": {
"gtin": "00196793396878",
"sku": "9108ff83-42c1-5533-9cb3-7cafa02af955",
"variant_id": "XL (16–18)"
},
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"offers": [
{
"availability": {
"available": false,
"stock": "OOS"
},
"condition": "new",
"id": "9108ff83-42c1-5533-9cb3-7cafa02af955",
"price": {
"currency": "USD",
"current_amount": 95,
"full_amount": 95,
"on_sale": false,
"sale_percentage": 0
},
"seller": {
"id": "nike",
"kind": "brand",
"name": "Nike",
"url": "https://www.nike.com"
}
}
]
},
{
"attributes": {
"size": "2XL"
},
"identifiers": {
"gtin": "00196793397196",
"sku": "77a3f24b-7a5b-58b5-8190-03f9485534e3",
"variant_id": "XXL (20–22)"
},
"main_image": "https://static.nike.com/a/images/t_default/d5d23fc3-b9be-4433-aef6-838e1ee80cb8/SP25+W+NWSL+STADIUM+CREW+NECK.png",
"offers": [
{
"availability": {
"available": true,
"stock": "LOW"
},
"condition": "new",
"id": "77a3f24b-7a5b-58b5-8190-03f9485534e3",
"price": {
"currency": "USD",
"current_amount": 95,
"full_amount": 95,
"on_sale": false,
"sale_percentage": 0
},
"seller": {
"id": "nike",
"kind": "brand",
"name": "Nike",
"url": "https://www.nike.com"
}
}
]
}
],
"varies_by": [
"size"
]
},
"videos": null,
"weight": null
},
"outbound_links": []
}

2. Key-Value Store

Only in Graph Mode, see our Graph Actor for more details.

⚙️ Under the Hood

How It Works

  1. First run — AI analyzes the site and generates a custom crawler (3-5 minutes)
  2. Subsequent runs — Crawler is reused, extraction starts immediately

The crawler is regenerated when you change the website or country.

Why It's Fast

Unlike LLM-based scrapers that call AI for every page, we use AI once to generate a compiled Rust extractor. This means:

  • No per-page AI costs — extraction runs as pure code
  • High throughput — up to 50 pages/second (3,000/minute)
  • Consistent results — same extractor, deterministic output

Infrastructure

Extraction runs on our dedicated infrastructure, not Apify's platform. There may be a brief delay (~15-20s) while provisioning resources before the crawl starts.

Stealth

Our Rust engine includes custom HTTP and browser implementations built specifically for web scraping:

  • Smart request routing (Chrome rendering, fast HTTP, direct API calls)
  • Anti-detection measures to avoid blocks
  • Premium residential proxies included

🛠️ Troubleshooting

Extraction taking longer than expected?

  • First run: AI is generating your custom crawler (3-5 minutes). Subsequent runs start immediately.
  • Provisioning: Brief delay (~15-20s) while infrastructure spins up.

Getting blocked or no results?

  • Verify the start URL is accessible in your browser
  • Ensure the selected country matches the website's region
  • Try a smaller budget to reduce request volume
  • Some sites have aggressive bot protection — report persistent issues

🎙️ Feedback & Support

We're actively improving extraction quality based on your feedback.