Start free

Article schema for web extraction

An article schema captures the parts of a news story, blog post, or documentation page that matter for downstream use: the headline, author, publish date, summary, full body text, and tags. Teams extract this to build reading archives, feed summarization and classification models, monitor coverage of a topic, or power internal search over external writing. Because the schema names each field, you get structured records instead of a wall of HTML you still have to parse. Articles are a good fit for this approach because the model reads them by meaning, whether the text ships in the initial HTML or is rendered with JavaScript, since every request runs through a real headless browser. You describe what a headline or a publish date is, and the model pulls it from the rendered page. When a field like author is missing, it comes back as null rather than a guess, which keeps your dataset honest and lets you filter or backfill those records deliberately instead of trusting invented bylines.


Fields in a Article schema

The fields teams most often extract for a article, what type each one is, and whether it is usually present.

Field Type Required Notes
headline string yes The main title of the article as shown on the page. This is the field most archives and search indexes are keyed on, so it is required rather than optional.
author string optional The byline, the person or people credited with writing the piece. Returned as written on the page, and set to null when no author is listed rather than guessed from context.
publishDate string optional The date the article was published, ideally in ISO 8601 form like 2026-05-21. Lets you sort chronologically and filter by recency without parsing free-form date strings later.
summary string optional A short abstract or deck describing the article, usually one or two sentences. Useful for previews and as a lightweight signal for relevance ranking before you process the full body.
body string optional The main article text, with navigation, ads, and boilerplate left out. This is the field you feed into summarization, classification, or full text search over the content you collect.
tags string[] optional The topics or categories the article is filed under, returned as a list of strings. Helpful for grouping coverage by subject and for building faceted filters over a large archive.
section string optional The site section the article lives in, such as Technology, Sports, or Opinion. Gives you a coarse editorial category that complements the finer-grained tags field.
canonicalUrl string optional The canonical URL the publisher declares for the article. Useful as a stable key for deduplicating the same story collected from syndication, AMP, or tracking-parameter variants.

The schema

Copy this and send it with any URL.

{
  "headline": "string",
  "author": "string",
  "publishDate": "string",
  "summary": "string",
  "body": "string",
  "tags": "string[]",
  "section": "string",
  "canonicalUrl": "string"
}

Example output

Validated JSON back, matching the schema.

{
  "headline": "City Council Approves New Riverside Park Plan",
  "author": "Dana Whitfield",
  "publishDate": "2026-05-21",
  "summary": "The council voted seven to two to fund a twelve acre riverside park, with construction set to begin next spring.",
  "body": "After months of public comment, the city council approved funding for the long-debated Riverside Park project on Tuesday evening...",
  "tags": [
    "local government",
    "parks",
    "urban planning"
  ],
  "section": "Local",
  "canonicalUrl": "https://example.com/news/riverside-park-approved"
}

Try this article schema against a real page in the live demo, or read the docs to use it via the API.

Article schema: FAQ

How does Extracto separate the article body from ads and navigation?
Extracto renders the page in headless Chrome and passes the page text and metadata to an LLM with your schema as a strict contract. The model selects the main article text and leaves boilerplate like menus, ad slots, and footers out of the body field. Because every request renders in a real headless browser, this works on JavaScript-heavy articles as well as plain HTML ones, with very cluttered layouts the only place results occasionally vary.
What date format will I get back for publishDate?
You decide by describing the field in your schema. If you ask for an ISO 8601 date, the model normalizes what it finds on the page toward that format, which makes sorting and filtering straightforward. When a page shows no clear publish date, the field returns null instead of an invented one, so you can choose to skip or backfill those records.
Can I extract from any news site?
Extracto works on any public news article, including JavaScript-rendered and anti-bot-protected pages, because every request runs through a real headless browser with a managed bypass layer and proxies handled for you. The exception is login-gated or paywalled content that needs session cookies, which is available on Enterprise. Always respect each site's robots.txt and terms of service before extracting at scale.
What happens to fields that are not present, like author?
Any field the model cannot find on the page comes back as null, never a guess. That is enforced because the output is validated against your schema before it is returned. For articles this matters: an invented byline would quietly corrupt your dataset, so a null tells you clearly that the page did not credit an author.
Can I run this schema across many articles at once?
Yes. Because the schema describes meaning rather than markup, one definition runs across articles from many publishers that lay out their pages differently, giving you uniform records to merge into an archive or feed. Normalizing the publish date to ISO 8601 and keeping a canonical URL makes deduplication and chronological sorting straightforward once the records are combined.