Skip to main content
POST https://api.acedata.cloud/webextrator/extract The WebExtrator Intelligent Extraction API converts a URL into typed structured results — articles, products, recipes, videos, discussions, job postings, etc., along with cleaned Markdown and plain text. This is the interface to use when you want “clean structured data” instead of raw HTML. At the core is a three-layer pipeline:
  1. schema.org JSON-LD Mapper — Deterministic, zero LLM cost. Covers Wikipedia / BestBuy / AllRecipes / YouTube / most news / most product pages.
  2. Typed LLM Extraction — Triggered only when schema.org is not hit. Select Schema by page type, strict validation with Zod.
  3. Readability + Markdown Fallback — Always runs, filling in top-level fields not populated by the first two layers.
Repeated requests for the same URL will be caught by Redis result caching, returning in <1 ms.

Application Process

To use the WebExtrator service page, first go to the Ace Data Cloud Console to obtain your API Token for backup. If you are not logged in or registered, you will be automatically redirected to the login page inviting you to register and log in, and will return to the current page upon completion. One API Token can call all services on the platform, no need to apply separately for each service. The first application will grant a free quota for a trial experience; when the quota is insufficient, you can recharge the general balance in the console.
📘 Complete documentation: WebExtrator Service Page →

Authentication

Request Parameters

Extract accepts all Render API parameters (url, user_agent, timeout, wait_until, delay, wait_for_selector, block_resources, headers, cookies, callback_url, bypass_cache, cache_ttl_seconds, async), plus two Extract-specific fields:
When the page has its own schema.org JSON-LD, enable_llm is ineffective — the deterministic mapper directly produces results, never wasting LLM calls. You get free typed results.

Synchronous Response

Top-Level Fields

data.structured Subfields

schema.org Mapper Coverage

Sorted by priority (hit is treated as structured.schemaOrg.primary): Mapper processes:
  • @graph container (recursively expanded);
  • @type array (e.g., ["Recipe", "NewsArticle"] — both recognized, with priority winning);
  • Variants with http://schema.org/ prefix;
  • Nested Offer and AggregateOffer (the latter reads lowPrice);
  • Relative image URLs (resolved to absolute by finalUrl).

LLM Typed Schema

When enable_llm: true and schema.org has no primary, the extractor uses URL heuristics (or expected_type hints) to select one of the Zod Schema validation model outputs below: When LLM is successful, it will also backfill the top-level fields as a “last-resort”:
  • articledescription / byline / publishedAt / language
  • productdescription
  • discussiondescription (first 280 characters of body) / byline (author) / publishedAt (postedAt)
  • recipedescription / byline (author)
  • videodescription / byline (channel) / publishedAt (uploadDate)
  • jobdescription / byline (company) / publishedAt (datePosted)
Backfill is triggered only when the deterministic data source has not filled the corresponding fields — LLM is always the last fallback.

Cache

Identical requests will be hashed to the same Redis Key: webextrator:cache:extract:<sha256(canonical-json)>. Cache Key ignores async, bypass_cache, cache_ttl_seconds (this is an operational switch, does not affect response). cookies / headers will be bucketed for caching. Responses hitting the cache will include data.cached: true and data.cacheStoredAt: <unix-ms>.

Asynchronous Mode and Callback

Set async: true to enter asynchronous mode (providing callback_url will also automatically enter). The platform immediately returns (HTTP 200):
When the task is complete, it will POST the complete envelope to your callback_url (if configured). You can also actively query later through /webextrator/tasks.

Example

1. Wikipedia Article (schema.org hit, no LLM needed)

data.structured.schemaOrg.primary key fields:

2. BestBuy Product Page (schema.org Hit)

schema.org Extraction:

3. AllRecipes Recipe Page (Including Nutrition and Steps)

schema.org Extraction:

4. HN Discussion Page (No JSON-LD — LLM Needs to be Enabled)

data.structured.llm.data:
Top-level fields are also filled: byline = "alice"publishedAt = "..."

5. Amazon Product Page (Amazon No JSON-LD — LLM Needs to be Enabled)

data.structured.llm.data (Typed product):

Python (requests)

Node.js (fetch)

Tips and Pitfalls

  • If expected_type can be passed, do so. Free tip, skip heuristic judgment, especially useful for pages not in the built-in list.
  • enable_llm: true is free on schema.org hit pages. LLM is only called when schema.org does not have primary, so it’s safe to keep it on by default.
  • Check rawSignals.hasJsonLd first during debugging. If true but structured.schemaOrg.primary is null, it means the page used a @type that our mapper has not covered — please file an issue, and we will add it.
  • structured.llmError is informational. The request is still successful, and heuristic results are still returned. Check llmError.error to locate the reason (timeout, JSON parsing failure, Zod validation failure).
  • Non-article page’s links[] will not be sorted by relevance. Only cleaned up by “up to 100 entries + filtering invalid protocols.”
  • Cache hits are also charged. Caching is for latency and protecting the browser pool, not for saving money.