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
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 verificationNo live request is running
- 01
Keep the relationship.
Atlas costs 25;
Boreal costs 99.
Atlas price 25The 99 belongs to Boreal. Finding it on the page does not support Atlas = 99.
- 02
Make uncertainty visible.
Body textAtlas costs 25
MetadataAtlas price 99
ConflictingAnswer withheldWhy 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.
- 03
Give the decision a source.
Inspect your own snapshotSupportedTwo-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.
Your request
Start with a source. Inspect the answer.
Receive useful data with the context needed to assess it. Understand the result →
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.
Follow the request
See loading, processing and completion. Requests stay within account limits; inaccessible sources or unavailable capacity may prevent an answer.
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.
- 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.
- 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.
- 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.
- loading
- processing
- 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.
- request
- each redirect
- 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 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"
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"
{
"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.
