Page Quarry avatar

Page Quarry

Pricing

from $15.00 / 1,000 results

Go to Apify Store
Page Quarry

Page Quarry

Extract structured JSON from ordinary public webpages.

Pricing

from $15.00 / 1,000 results

Rating

0.0

(0)

Developer

Result Quarry

Result Quarry

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Turn ordinary public webpages into structured JSON with natural-language instructions and an optional JSON Schema.

Page Quarry fetches each URL, reads the content present in its initial HTML, extracts the requested facts with Gemini 3.5 Flash-Lite, validates the response, and writes one auditable record per URL to the run's default Dataset.

What you can extract

Use Page Quarry with public, server-rendered pages such as:

  • articles and documentation;
  • product or detail pages;
  • tables;
  • lists and card layouts;
  • long text pages;
  • pages with mildly malformed HTML or legacy text encodings.

Example requests include “extract the product name, price, and availability,” “return every row in this table,” or “find the policy title, effective date, and covered regions.”

Quick start

Provide one to ten public URLs and describe the result you want. A JSON Schema is optional but recommended when downstream code expects stable fields and types.

{
"startUrls": [
{"url": "https://example.com/"}
],
"instructions": "Extract the page title and its main descriptive sentence.",
"jsonSchema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"description": {"type": "string"}
},
"required": ["title", "description"],
"additionalProperties": false
}
}

Without jsonSchema, Page Quarry uses JSON-output mode and still requires the model response to parse as JSON. It does not generate a schema for you.

Worked example

For the input above, the Dataset record is:

{
"url": "https://example.com/",
"finalUrl": "https://example.com/",
"status": "success",
"extracted": {
"title": "Example Domain",
"description": "This domain is for use in documentation examples without needing permission."
},
"schemaValid": true,
"httpStatus": 200,
"provider": "google-gemini",
"model": "gemini-3.5-flash-lite",
"timing": {
"fetchSeconds": 0.051963,
"transformSeconds": 0.002634,
"inferenceSeconds": 8.291204,
"totalSeconds": 8.346644
},
"usage": {
"inputTokens": 159,
"outputTokens": 30,
"thinkingTokens": 0,
"totalTokens": 189
},
"retries": {
"fetch": 0,
"provider": 0,
"output": 0
},
"responseBytes": 559,
"markdownCharacters": 184,
"redirects": []
}

This one-result run costs:

(1 result × $0.015) + (1 run × $0.00005) = $0.01505

A ten-URL run that emits ten records costs $0.15005. The result rate is

$15 per 1,000 Dataset results
, plus the small per-run start charge.

Input reference

FieldRequiredDefaultDescription
startUrlsYesOne to ten public HTTP/HTTPS URL objects in Apify's standard { "url": "…" } form.
instructionsYesWhat to extract, up to 10,000 characters.
jsonSchemaNoJSON modeJSON Schema used for structured output and local validation.
maxPageBytesNo10 MiBMaximum response body size. Configurable from 1 byte to 25 MiB.
fetchTimeoutSecsNo30Per-request fetch timeout, from 1 to 60 seconds.

Compatible schemas can use object, array, and scalar types; properties and required fields; additionalProperties; enums and formats; numeric bounds; and array item/count constraints. Unsupported keywords such as $ref and $defs are rejected before page fetching begins.

Output reference

The default Dataset contains one record per processed URL. A record has status: "success" with an extracted value, or status: "error" with a stable errorCode and errorCategory. Full source HTML, extraction instructions, schemas, and raw model responses are not included in the Dataset or ordinary logs.

FieldDescription
urlOriginal URL supplied in the input.
finalUrlURL after accepted public redirects, when fetching reached a page.
statussuccess or error.
extractedStructured JSON returned by the model after validation. Present on success.
errorCodeStable machine-readable failure code, such as http_404, unusable_content, or provider_timeout.
errorCategoryBroad failure stage: fetch, content, provider, or validation.
httpStatusFinal HTTP status when available.
provider / modelInference backend used for the record.
schemaValidWhether output passed JSON parsing and the supplied schema. On schema-less calls this means valid JSON.
timingFetch, transformation, inference, and total pipeline seconds.
usageProvider-reported input, output, thinking, and total tokens.
retriesCounts of fetch, provider-transport, and invalid-output retries.
responseBytesDownloaded response size.
markdownCharactersSize of the Markdown used for extraction.
redirectsAccepted redirect chain. Every destination is checked against the public-network policy.
fetchAttempts / providerAttemptsSanitized attempt telemetry with status, reason, latency, and bounded retry delay.

Each emitted Dataset record is a billable result, including a classified failure record. Failed pages still require fetch or provider work, and the error record gives you an auditable outcome instead of silently dropping the URL. Input rejected before URL processing produces no Dataset item; the small Actor-start event still applies.

Failure handling

Page Quarry retries only failures that are detectable and likely transient:

  • fetch network errors, timeouts, HTTP 408/425/429, and selected 5xx responses;
  • provider network errors, timeouts, HTTP 408/429, and 5xx responses;
  • one additional identical inference request after empty, malformed, or schema-invalid output.

Transport attempts are bounded at three. Retry-After is honored up to 60 seconds. Page Quarry does not retry because extracted values merely appear semantically wrong, and it never sends a repair or self-critique prompt.

Supported and unsupported pages

Page Quarry is intentionally HTTP-only. It does not support:

  • authenticated pages, cookies, bearer tokens, or custom authorization headers;
  • localhost, private, loopback, link-local, reserved, or cloud-metadata destinations;
  • browser rendering or content that appears only after JavaScript executes;
  • CAPTCHA solving, anti-bot evasion, or access-denied pages;
  • PDFs and other non-HTML documents;
  • crawling, link discovery, or agentic navigation.

Every redirect is rechecked against the same public-network policy. Webpage content is treated as untrusted data and cannot grant the model tools, change the extraction request, or authorize an external action.

Accuracy and data handling

AI extraction can make semantic mistakes even when JSON is schema-valid. In the 22-case evaluation, Page Quarry achieved 86.6% field accuracy, 86.1% critical-field accuracy, and 15/22 exact complete records. Verify important outputs before taking consequential action.

Page contents, extraction instructions, and the supplied schema are sent to Google Gemini for inference. Do not put secrets or private data in URLs, instructions, or schemas. Page Quarry is for ordinary public-web content only.