Product Review
vidextract.predefined.product_review.v1
A product review, unboxing, or comparison extracted from a video. Captures what the product is, its specs, the creator's verdict, and the pros/cons they actually voiced. Do not invent specs or ratings the creator never gave — omit optional fields instead.
Fields
Full product name as stated, including model, e.g. 'Sony WH-1000XM5'.
Manufacturer or brand. Omit if not mentioned.
Product category, lowercased — e.g. 'headphones', 'espresso machine', 'running shoes'.
Price in US dollars if stated. Convert clearly-stated other currencies only if the rate is given; otherwise use priceText.
Price exactly as spoken when not a clean USD number, e.g. '£249', 'around 300 bucks', 'free with plan'. Omit if priceUsd captures it.
Numeric rating the creator explicitly gives, on its original scale. Omit if they never rate it numerically.
Max of the rating scale (e.g. 5 or 10) so overallRating is interpretable. Required only if overallRating is present.
The creator's bottom-line stance, mapped to the closest bucket.
One or two sentences capturing the closing recommendation in the creator's own framing.
Positive points the creator actually voiced. Short phrases.
Negative points, complaints, or dealbreakers the creator voiced. Short phrases.
Notable specifications mentioned, as label/value pairs.
Who or what use-case the creator says this is best for. Omit if not stated.
Competing or alternative products the creator names as comparisons. Product names only.
True only if the creator discloses the video is sponsored or gifted. Omit if no disclosure is made.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "vidextract.predefined.product_review.v1",
"title": "Product Review",
"description": "A product review, unboxing, or comparison extracted from a video. Captures what the product is, its specs, the creator's verdict, and the pros/cons they actually voiced. Do not invent specs or ratings the creator never gave — omit optional fields instead.",
"type": "object",
"required": [
"productName",
"verdict"
],
"additionalProperties": false,
"properties": {
"productName": {
"type": "string",
"description": "Full product name as stated, including model, e.g. 'Sony WH-1000XM5'."
},
"brand": {
"type": "string",
"description": "Manufacturer or brand. Omit if not mentioned."
},
"category": {
"type": "string",
"description": "Product category, lowercased — e.g. 'headphones', 'espresso machine', 'running shoes'."
},
"priceUsd": {
"type": "number",
"description": "Price in US dollars if stated. Convert clearly-stated other currencies only if the rate is given; otherwise use priceText."
},
"priceText": {
"type": "string",
"description": "Price exactly as spoken when not a clean USD number, e.g. '£249', 'around 300 bucks', 'free with plan'. Omit if priceUsd captures it."
},
"overallRating": {
"type": "number",
"description": "Numeric rating the creator explicitly gives, on its original scale. Omit if they never rate it numerically."
},
"ratingScale": {
"type": "integer",
"description": "Max of the rating scale (e.g. 5 or 10) so overallRating is interpretable. Required only if overallRating is present."
},
"verdict": {
"type": "string",
"enum": [
"must-buy",
"recommended",
"good-with-caveats",
"mixed",
"not-worth-it",
"avoid"
],
"description": "The creator's bottom-line stance, mapped to the closest bucket."
},
"verdictSummary": {
"type": "string",
"description": "One or two sentences capturing the closing recommendation in the creator's own framing."
},
"pros": {
"type": "array",
"description": "Positive points the creator actually voiced. Short phrases.",
"items": {
"type": "string"
}
},
"cons": {
"type": "array",
"description": "Negative points, complaints, or dealbreakers the creator voiced. Short phrases.",
"items": {
"type": "string"
}
},
"keySpecs": {
"type": "array",
"description": "Notable specifications mentioned, as label/value pairs.",
"items": {
"type": "object",
"required": [
"label",
"value"
],
"additionalProperties": false,
"properties": {
"label": {
"type": "string",
"description": "Spec name, e.g. 'battery life', 'weight', 'screen'."
},
"value": {
"type": "string",
"description": "Spec value as stated, e.g. '30 hours', '1.2 kg', '6.1 inch OLED'."
}
}
}
},
"bestFor": {
"type": "string",
"description": "Who or what use-case the creator says this is best for. Omit if not stated."
},
"alternatives": {
"type": "array",
"description": "Competing or alternative products the creator names as comparisons. Product names only.",
"items": {
"type": "string"
}
},
"sponsored": {
"type": "boolean",
"description": "True only if the creator discloses the video is sponsored or gifted. Omit if no disclosure is made."
}
}
}Use it via the API
Pass schemaId: "vidextract.predefined.product_review.v1" when you submit an extraction. The call returns an id immediately. Poll GET /v1/extractions/{id}/result (or register a webhook) for the structured result.
curl -s -X POST https://postreef.com/v1/extractions \
-H "x-api-key: $VIDEXTRACT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"inputs": ["transcript", "comments"],
"schemaId": "vidextract.predefined.product_review.v1"}'Full request/response shape in the API reference; copy-paste poll loops in the API quickstart.
Pass schemaId: "vidextract.predefined.product_review.v1" in your request to extract with this schema.