# How to validate structured web extraction

Design a small extraction schema, submit an individual request, inspect extraction state, and validate data before storing or reusing a recipe.

Canonical: https://runharvester.com/guides/structured-extraction

By: [RunHarvester](https://runharvester.com/about-us)

Updated: 2026-10-03

## Define the smallest useful schema

Start a product page entry with the title, price, and a stable identifier or URL. Before marking a field as required, decide if missing data is acceptable. Maintain clarity on currency and units within your downstream model; for instance, 19.99 alone is not a full monetary value.

Use multiple for scalar lists. For repeated records use an object collection with multiple true and scalar child fields. Do not create nested object collections or duplicate names within the same level.

- [Example request and field rules](https://runharvester.com/structured-data-extraction)

## Submit and inspect both states

Pass extraction.fields or an owned active extraction.recipe_id in an individual request. Preserve the request ID and idempotency key. Wait for page completion, retrieve the result, then inspect data and the extraction run state.

Data API batches accept raw scrape jobs, so a structured-extraction queue should submit individual requests under the account's current concurrency limits. Do not silently convert an extraction workload into a raw batch.

1. Validate required fields and scalar types.
2. Check that records belong to the requested page and are not navigation or recommendations.
3. Check units, currency context, duplicates, and unexpectedly empty collections.
4. Quarantine invalid records with their request IDs instead of overwriting known-good data.

## Reuse a recipe without losing validation

Once a schema works on representative pages, reuse the recipe for the same task. Include empty pages and layout variants in your sample, not just a single successful URL.

Keep an eye on shifts in missing fields and record totals. A modified target may still serve a valid page but generate inaccurate data. Retain adequate request context to troubleshoot the extraction without disclosing private results or credentials.

- [JSON sources in reusable recipes](https://docs.runharvester.com/guides/json-sources)

## Can extraction return a list of products?

Yes. An object collection employs type object, sets multiple to true, and includes a fields list outlining its scalar attributes. Nested object collections aren't allowed. Field names need to be unique at their level; check current limits before creating a complex schema.

[Documentation](https://docs.runharvester.com/concepts/structured-extraction)

## What is an extraction recipe?

A recipe serves as reusable extraction settings. Use an owned active recipe if you need to run the same extraction again. When the target layout shifts, test sample pages and confirm required fields; relying solely on reuse doesn't ensure accurate data.

[Documentation](https://docs.runharvester.com/concepts/structured-extraction)

## How long can I retrieve a result?

Data retention is governed by your specific service and plan settings. Make sure to review the expiry details provided and fetch any necessary results prior to expiration. If a Data API result expires, it will return RESULT_EXPIRED. Ensure you export necessary data to your personal storage instead of relying on retained results as a permanent archive.

[Documentation](https://docs.runharvester.com/getting-started/first-request)

## Continue reading

- [Product data monitoring](https://runharvester.com/use-cases/product-data-monitoring)

- [Asynchronous retries](https://runharvester.com/guides/async-scraping-retries)

[Source: RunHarvester documentation](https://docs.runharvester.com/concepts/structured-extraction)
