Skip to content

Web data for AI agents

The web, ready for agents. The evidence, ready for you.

Turn web pages into structured data with source excerpts and clear validation results. Inspect the evidence before putting the answer to work.

Up to 200 free credits a month, no card

source evidence · checks · credits

@ AgentExtract

Rank this week's trending Rust repositories

https://github.com/trending/rust?since=weekly

JSON Schema The top 10 trending repositories this week, in page order, with total stars, forks and stars gained this week

Ready

Quality
91
Fields
70 of 70
Text support
77%
Receipt
signed
Recorded
2026-09-24
Follow the evidence

Follow the evidence

Match each value to its source and context.

A number on a page can belong to someone else. Check each claim against its entity, context and the original source passage.

Explore snapshot verification
Illustrative snapshots
No live request is running
  1. 01

    Keep the relationship.

    Supplied page · body text

    Atlas costs 25;

    Boreal costs 99.

    Atlas price 25

    The 99 belongs to Boreal. Finding it on the page does not support Atlas = 99.

  2. 02

    Make uncertainty visible.

    Body text

    Atlas costs 25

    Metadata

    Atlas price 99

    ConflictingAnswer withheld
    Why these declarations conflict

    Both declarations describe the same entity and property within a compatible context. They disagree, so both remain inspectable. Different currencies or periods may describe different claims.

    Preserve competing evidence instead of silently choosing a value.

  3. 03

    Give the decision a source.

    SupportedTwo-entity example
    Entity
    Atlas
    Field
    price
    Value
    25
    “Atlas costs 25; Boreal costs 99”

    Support for this claim in the supplied snapshot. It does not establish publisher truth or live freshness.

    Inspect your own snapshot
From evidence to your workflow

Your request

Start with a source. Inspect the answer.

Receive useful data with the context needed to assess it. Understand the result →

  1. Choose your source

    Provide one public URL or HTML you are authorized to use. Describe the fields you need, supply a supported JSON Schema, or request readable markdown.

  2. Follow the request

    See loading, processing and completion. Requests stay within account limits; inaccessible sources or unavailable capacity may prevent an answer.

  3. Inspect the result

    Check acceptance, requested fields, source excerpts and credits. Quality and text presence do not establish field attribution or factual truth. Markdown is ungraded.

The agent economy

Agents are the users.

More and more of the web is read by software on someone's behalf. Those agents need a tool that answers in their terms — typed data, evidence they can inspect, and credits they can budget. Contrie is built as that tool first, and a website second.

  1. 01

    Machine onboarding

    A hosted MCP endpoint, an OpenAPI description, llms.txt, and a SKILL.md give agents a documented setup path. Recorded examples work keyless; live calls need an account credential and available allowance.

  2. 02

    Evidence with the answer

    Check success and validity first, then inspect requested fields, text support, source and credits. A grounding ratio measures value presence; it does not verify field meaning or factual truth. The evidence status says whether a receipt was signed.

  3. 03

    Usage you can track

    Each response reports the customer credits charged. Rejected structured requests charge zero answer credits. Live service requires remaining allowance and available capacity.

What you receive

Data your application can inspect

The examples on this page are recorded runs. An account key makes the same request live, and the response distinguishes the two.

offers.price
51.77
found in the page
offers.priceCurrency
GBP
matched by its symbol (£)

Grounding check

Checkable strings and numbers are matched against source text. groundingCoverage reports what was checkable; missing support limits acceptance. Matching text does not prove that a value belongs to the requested field or entity.

  1. loading
  2. processing
  3. complete

Request progress

Follow loading, processing and completion. The final response reports acceptance, source evidence and credits so your application can act on the result.

format
"markdown"
qualityScoreKind
"not_applicable"
credits
1

Readable markdown

format: "markdown" returns the page as clean, structure-preserving markdown — one credit, with an explicitly ungraded result. Tables stay tables, lists stay lists, links keep their targets.

schemaValidtrue

requestedFields70 of 70

JSON Schema contract

Provide a supported JSON Schema and inspect success, schemaValid and requested-field coverage. Failed shape or coverage checks refuse the candidate. Validate downstream when using constraints outside the documented subset.

  • contrie_extract
  • contrie_read
  • contrie_account
  • contrie_verify
  • contrie_watch
  • contrie_changes
  • contrie_monitors
  • contrie_unwatch

Hosted MCP and streaming

Eight hosted tools cover extraction, reading, account status, verification, watching, changes, listing monitors and stopping them. The REST API can stream trace events as newline-delimited JSON. Live calls require authentication and available capacity.

  1. request
  2. each redirect
  3. page

Guarded API surface

Hosted page acquisition checks destinations and redirects, API keys are hashed, and request admission requires a shared rate-limit decision. Browser rendering adds destination checks for subresources.

The API

One endpoint, three ways to ask

Describe the data, hand over a JSON Schema, or just ask for the page as markdown. Check acceptance first, then source evidence and the credits charged.

Full reference in the docs · machine-readable at /openapi.json

POST /api/v1/scrapeRecorded run · 2026-09-24 · trimmed

curl -X POST https://www.contrie.com/api/v1/scrape \  -H "Authorization: Bearer $CONTRIE_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "url": "https://pypi.org/project/requests/",    "extract": "The package name, latest version, release date, license, required Python version and one-line summary"  }'
{  "url": "https://pypi.org/project/requests/",  "schema": {    "type": "object",    "required": ["name", "version", "released", "license", "requires_python", "summary"],    "properties": {      "name": { "type": "string" },      "version": { "type": "string" },      "released": { "type": "string" },      "license": { "type": ["string", "null"] },      "requires_python": { "type": ["string", "null"] },      "summary": { "type": "string" }    }  }}
{  "url": "https://pypi.org/project/requests/",  "format": "markdown"} // 1 credit · ungraded readable output
{  "success": true,  "data": {    "name": "requests",    "version": "2.34.2",    "released": "May 14, 2026",    "license": "Apache Software License (Apache-2.0)",    "requires_python": ">=3.10",    "summary": "Python HTTP for Humans."  },  "metadata": {    "valid": true,    "schemaValid": true,    "qualityScore": 100,    "requestedFields": { "total": 6, "returned": 6, "missing": [] },    "grounding": 1,    "groundingFields": [{ "path": "$.version", "grounded": true,      "excerpt": "# requests 2.34.2 Python HTTP for Humans. pip install requests…" }],      // + 5 more groundingFields    "credits": 1  }}

Install

Eight hosted tools. One connection.

The hosted MCP endpoint exposes contrie_extract (typed JSON with the receipts) and contrie_read (clean readable markdown). In Claude Code and claude.ai there is no key to copy. In Claude Code, contrie shows Needs authentication; run /mcp, pick contrie, choose Authenticate (or run claude mcp login contrie) and sign in with your Contrie account. In claude.ai, add the URL as a custom connector with Sign in when needed. Headless setups, Codex and Cursor use an API key; recorded samples answer without either. You can also check your own credits and capacity with contrie_account, check existing data with contrie_verify, watch a page with contrie_watch, read its history with contrie_changes, list your monitors with contrie_monitors and stop one with contrie_unwatch.

Claude Codeterminal
claude mcp add --transport http contrie \
  https://www.contrie.com/mcp

or in claude.ai, under Customize → Connectors → Add custom connector

https://www.contrie.com/mcp

or headless, with CONTRIE_API_KEY

claude mcp add --transport http contrie \
  https://www.contrie.com/mcp \
  --header \
  "Authorization: Bearer $CONTRIE_API_KEY"
Codexterminal
codex mcp add contrie \
  --url https://www.contrie.com/mcp \
  --bearer-token-env-var CONTRIE_API_KEY

or in ~/.codex/config.toml

[mcp_servers.contrie]
url = "https://www.contrie.com/mcp"
bearer_token_env_var = "CONTRIE_API_KEY"
Cursor and other clientsmcp.json
{
  "mcpServers": {
    "contrie": {
      "url": "https://www.contrie.com/mcp",
      "headers": {
        "Authorization": "Bearer ck_live_…"
      }
    }
  }
}

Prefer REST? POST https://www.contrie.com/api/v1/scrape returns the same object, and Accept: application/x-ndjson streams request progress. Never put a key in a URL or paste it into an agent chat.

See it run

Ask your own page. Free, no card.

You have seen a recorded example run. A key lets you ask your own page, and see its result, evidence and credits.