Structured product offer comparison
Extract and normalize Schema.org offers from up to three supplied product pages; group matching identifiers and currencies with source evidence.
Try extraction freeNo account. No API key. 0.006000 USDC per execution.
curl https://api.xguardgate.com/v1/execute \
-H 'content-type: application/json' \
-d '{"intent":"Extract product offers","urls":["https://www.adafruit.com/product/50"]}'The demo runs the real parser on labelled sample HTML.
What comes back
Validated offer fields and comparable groups; missing identifiers and unsupported pages are explicitly reported.
When to use it
Compare machine-readable offers across supplied merchant pages without writing multiple fetchers, parsers and matching rules.
Limits
- Supply product URLs; no web-wide search
- Requires Product/Offer JSON-LD
- Different currencies or unidentified products are not ranked together
- No stock or seller-truth guarantee
Latency: measured figures are not yet available; source timeouts are bounded. No SLA.
Machine contract
Input and output schemas · OpenAPI: xguardExecute · MCP: xguard_execute · A2A skill: product-offers
Input schema
{
"type": "object",
"properties": {
"intent": {
"oneOf": [
{
"type": "string",
"maxLength": 3000
},
{
"type": "object"
}
]
},
"capability": {
"type": "string",
"enum": [
"extract-preview",
"web-extraction",
"product-offers",
"feed-digest"
]
},
"url": {
"type": "string",
"format": "uri"
},
"urls": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"format": "uri"
}
},
"sources": {
"type": "array",
"maxItems": 3,
"items": {
"oneOf": [
{
"type": "string",
"format": "uri",
"pattern": "^https://"
},
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"fallbacks": {
"type": "array",
"maxItems": 1,
"items": {
"type": "string",
"format": "uri"
}
}
},
"additionalProperties": false
}
]
}
},
"action": {
"type": "string"
},
"desired_action": {
"type": "string"
},
"html": {
"type": "string",
"maxLength": 12288
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 30
},
"max_age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 60,
"default": 0
},
"query": {
"type": "string",
"maxLength": 200
},
"testnet": {
"type": "boolean",
"default": false
},
"input": {
"type": "object"
},
"arguments": {
"type": "object"
},
"name": {
"type": "string"
},
"tool": {
"type": "string"
},
"operation": {
"type": "object",
"description": "Resolved read-only OpenAPI operation with URL, method and desired action; no remote spec fetching."
},
"http": {
"type": "object"
},
"command": {
"type": "string"
},
"task": {
"type": "object"
}
},
"additionalProperties": false,
"description": "Use intent:'demo' for a free result. Paid outcomes accept supported English/Arabic intents with public sources. Unknown jobs return repair guidance; this is not a general-purpose language model.",
"examples": [
{
"intent": "Extract product offers",
"urls": [
"https://www.adafruit.com/product/50"
]
}
]
}Output schema
{
"type": "object",
"required": [
"ok",
"intent",
"capability",
"result",
"verification",
"cost",
"receipt"
],
"properties": {
"ok": {
"const": true
},
"intent": {
"type": "object"
},
"capability": {
"type": "string"
},
"result": {
"type": "object"
},
"verification": {
"type": "object"
},
"cost": {
"type": "object"
},
"receipt": {
"type": [
"object",
"null"
]
}
}
}Less work between intent and result.
Tell us the outcome.
Send pages, product URLs or feeds. For a technology digest, the source set is already provided.
See the exact price.
A paid request returns a signed 402. Your funded x402 client authorizes that request and retries it automatically.
Get a consistent answer.
Receive normalized records, coverage, source digests and a signed receipt. Identical paid retries recover the stored outcome.
A signed source digest records what was observed. It does not prove that an article is true, a merchant price is current at checkout, or multiple pages are independent sources.
Bring your agent.
REST: POST /v1/execute · MCP: xguard_execute · A2A skills · Short agent instructions
JavaScript and Python examples
// JavaScript: free first result
const response = await fetch('https://api.xguardgate.com/v1/execute', {
method: 'POST', headers: {'content-type': 'application/json'},
body: JSON.stringify({intent: 'demo'})
});
console.log(await response.json());
# Python: free first result
import requests
print(requests.post('https://api.xguardgate.com/v1/execute', json={'intent': 'demo'}).json())Cursor · VS Code · Claude Code · Codex configuration
Installing an MCP server does not supply a funded wallet. Advanced scoped vendor actions and operator credits remain at operator pricing.