E-commerce

Product Listing

/extract/json

Schema for e-commerce product listings from marketplaces and direct retail sites.

Download the schemae-commerce/product-listing.json

product-listing.schema

// names marked ? are optional

title:string// Product title or name. Commonly found in: product page h1, og:title meta tag, product card title.
brand?:string// Brand or manufacturer name. Commonly found in: brand field in product details, product byline, breadcrumb.
asin_or_sku?:string// Platform-specific product identifier (ASIN, SKU, or product ID). Commonly found in: product details table, URL parameter, item number field.
platform:string// E-commerce platform or marketplace (e.g., Amazon, Walmart, Shopify). Commonly found in: site domain, platform branding, page footer.
price:number// Current listed price. Commonly found in: price display, product price span, JSON-LD price field.
sale_price?:number// Sale or discounted price. Commonly found in: sale price display, discounted price label, strikethrough price context.
currency?:string// ISO 4217 currency code. Commonly found in: price currency symbol, JSON-LD priceCurrency, locale settings.
availability:string// Current availability status of the product. Commonly found in: availability badge, in stock indicator, JSON-LD availability field. One of: in_stock, out_of_stock, limited, preorder, other.
condition?:string// Condition of the product. Commonly found in: condition badge, product condition field, used/new selector. One of: new, used, refurbished, other.
variant_options?:object[]// Available variant options (e.g., color, size). Commonly found in: variant selector buttons, color/size options, product options section.
name:string// Variant dimension name (e.g., Color, Size).
value:string// Variant value (e.g., Red, XL).
review_count?:number// Total number of customer reviews. Commonly found in: review count label, ratings summary, review section header.
review_rating?:number// Average customer review rating. Commonly found in: star rating display, average rating number, JSON-LD ratingValue.
seller_name?:string// Name of the seller or vendor. Commonly found in: sold by field, seller name display, merchant info section.
fulfillment_type?:string// Fulfillment method (Fulfilled by Amazon, Merchant, or Direct). Commonly found in: fulfillment badge, ships from label, sold and shipped by text. One of: FBA, FBM, direct, other.
images?:string[]// URLs of product images. Commonly found in: product image gallery, image carousel, og:image meta tag.
description?:string// Full product description text. Commonly found in: product description section, about this item, product overview.
features_list?:string[]// Bullet-point feature list. Commonly found in: feature bullets section, key features list, product highlights.
category?:string// Primary product category. Commonly found in: breadcrumb navigation, category field, product metadata.
subcategory?:string// Product subcategory. Commonly found in: breadcrumb navigation, subcategory field, product metadata.
rank_in_category?:number// Bestseller or sales rank within the category. Commonly found in: bestseller rank section, category rank display, product details.
page_title?:string// Title of the source page. Tabstack auto-fills this from page metadata when left empty.
favicon?:string// Favicon URL of the source page. Tabstack auto-fills this from page metadata when left empty.

Try it live

A sample Product Listing document, generated from the schema. Edit it, or paste a real response, and see it checked against the schema instantly. It runs in your browser, nothing is sent anywhere.

your-output.json
validation

Valid, matches Product Listing

Every required field is present and each value matches its type. Extra fields are allowed. A field the page does not carry is not guaranteed to come back as null, so check values rather than only checking for null.

/extract/json

Copy-paste usage

The same call in TypeScript, Python, and curl. Point it at your own URL and go. The schema drives the response, so you get back the fields you asked for instead of a page to parse.

Features

  • Typed TypeScript and Python SDKs
  • One call, no parsing code and no second LLM pass
  • The same field names on every request, even when the page layout changes
product-listing.ts
// curl -sfLO https://raw.githubusercontent.com/Mozilla-Ocho/tabstack-schemas/main/e-commerce/product-listing.json
import Tabstack from '@tabstack/sdk'
import schema from './product-listing.json' with { type: 'json' }

const client = new Tabstack() // reads TABSTACK_API_KEY from the environment

try {
  const data = await client.extract.json({
    url: 'https://example.com/products/item',
    json_schema: schema,
    effort: 'standard', // 'min' | 'standard' | 'max'
  })

  console.log(data)
} catch (err) {
  console.error('Extraction failed:', err)
}

Ship this schema in one call.

Pass a URL, get matching JSON back. Free to start, no extraction layer to maintain.