Sample report: web-scraping.dev
A real, unedited result of our free agent readiness test. The store is web-scraping.dev, a public mock store that Scrapfly publishes for testing web crawlers. We picked it so we can show everything without naming a real brand; it isn’t a Specoria customer.
Agent readiness score
75/100 Partly ready
Estimated score once the top three priorities are fixed: 89
23 checks measured · 2 not verifiable · 2 not applicable to this store
Source: Specoria free test, sample report (JSON) ·
Categories
Two findings, in full
The result page shows the findings that cost the most points as full cards. The first two from this report:
Machine-readable return policy
FailedYour return policy isn’t in structured data, so an agent can’t verify a condition like “30-day returns”.
The return policy is defined once at organization level (OnlineStore → hasMerchantReturnPolicy) or on the product offer, with the same values as your returns page.
{
"@context": "https://schema.org",
"@type": "OnlineStore",
"@id": "https://web-scraping.dev/#org",
"name": "Store Name",
"url": "https://web-scraping.dev",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}Returns page and window
FailedNo return policy link was found on the homepage or product page; it may be added later by JavaScript.
The homepage links to an HTML returns page that states the window, fees and method clearly.
All checks
Every check’s status and the sentence the result page shows. Titles link to the check’s permanent page.
Access · 100
- PassedSearch and user agents allowed (robots.txt)
robots.txt doesn’t block OAI-SearchBot, ChatGPT-User, Claude, Perplexity, Googlebot, Google-Agent, Bingbot or Applebot on the homepage or the product page.
- PassedIs bot protection open to agents?
The homepage and product page responded normally to an automated request; we didn’t hit a challenge wall.
- PassedProduct name and price readable without JavaScript
The product name and price are in the page’s initial HTML, so agent crawlers that don’t run JavaScript can read them.
- PassedSitemap
A sitemap was found, so agents can discover your product pages.
- PassedCan the product page be indexed?
The product page has no noindex and its canonical URL is on your own domain.
Product data · 83
- PassedProduct structured data (schema.org)
The product page includes schema.org Product data.
- PassedPrice, currency, availability and URL
The offer data includes price, currency, availability and the product URL.
- PartialProduct identity (GTIN/MPN, brand, SKU)
Product identity is incomplete: GTIN, SKU.
- PassedImages and description
The product data includes an image and a description of useful length (at least 20 words or 120 characters).
- PassedReviews and rating
The product data includes a rating and a review count (AggregateRating).
- PartialCan variants (size, color) be addressed?
Variants open at their own URLs, but structured data has no ProductGroup + hasVariant.
Policies and trust · 7
- FailedMachine-readable return policy
Your return policy isn’t in structured data, so an agent can’t verify a condition like “30-day returns”.
- FailedReturns page and window
No return policy link was found on the homepage or product page; it may be added later by JavaScript.
- FailedMachine-readable shipping information
Shipping time and cost aren’t in structured data, so agents can’t compare your delivery terms.
- FailedShipping cost and time on the page
No shipping cost or delivery time was found on the page.
- PartialBusiness identity
Organization data is present but missing: contact details.
- Not applicableLegal pages (distance selling, Türkiye)
Doesn’t apply to this store; not counted in the score.
Consistency · 100
- PassedPrice consistency
The price in structured data matches the price shown on the page.
- PassedStock consistency
The availability in structured data matches the page.
- PassedCurrency and language
The price currency and page language match the store’s market.
- Not verifiableReturn window consistency
Nothing to compare was found; not counted in the score.
- Not applicableTaxes-included wording
Doesn’t apply to this store; not counted in the score.
Action (cart and orders) · 82
- PassedAdd-to-cart button in the initial HTML
An add-to-cart button or form is in the initial HTML.
- PassedIs the cart button accessible?
Add to cart is a real button with a readable name.
- Not verifiableBuying without an account
Can’t be seen from outside without a real browser; the deep audit report measures it with one.
- FailedOrder tracking
No order tracking link was found.
- PassedSite search that works by URL
Site search works with a URL parameter (e.g. /search?q=…).
Information rows (no effect on score)
- Training bots (no effect on score)
- Training bots aren’t blocked.
- Other AI bots (no effect on score)
- Applebot-Extended, Meta-ExternalAgent, Amazonbot, MistralAI-User and Bytespider aren’t blocked.
- robots.txt group precedence (no effect on score)
- No agent group shadowing the general (*) rules was seen.
- Content signals · Content-Signal (no effect on score)
- robots.txt has no Content-Signal line.
- Access with a bot identity (possible block)
- A request that identified itself as a bot (SpecoriaBot) opened too.
- Cloudflare
- Cloudflare wasn’t detected.
- llms.txt (no effect on score)
- The site has no /llms.txt. Independent studies show AI bots rarely read it, so it isn’t scored.
- Agent protocols and discovery files (no effect on score)
- No UCP, MCP, A2A agent card, AI Catalog, API Catalog, Web Bot Auth directory, WebMCP or ACP signal was found. Protocols like Google UCP and OpenAI ACP are still early; this doesn’t affect the score.
- Merchant Center / Search Console
- Shipping and return settings in Google Merchant Center and Search Console can’t be seen from outside. If set there, they apply on Google surfaces; other agents read your pages.
- Payment providers
- No known payment provider was detected on the page.
- Online return request
- No online return request (by order number) link was found.
- Pop-ups and newsletter
- No pop-up markers were seen.
How this scan was run
- The scan ran from our team’s machine with the free test’s own code (apps/worker/src/scan/run.ts (runScan), commit a5e9875) and took 2.7 seconds.
- The optional AI step (category and scenario wording) was off; the score and every check are independent of it.
- No second network was used; the store opened on the first request.
- The simulation built from the result isn’t shown on this page. In the JSON “sim” block the two competitor prices are placeholders (3% below and 4% above the product price), not real stores.
- The result object is unedited (none: the result object below is the scan output as produced).
The same report as JSON
The result object our panel returns; you can load it into your own spreadsheet or BI tool. Download the JSON file
Show the JSON
{
"meta": {
"label": {
"en": "Sample report",
"tr": "Örnek rapor"
},
"store": "web-scraping.dev",
"store_about": {
"owner": "Scrapfly",
"url": "https://web-scraping.dev/",
"note": "Public mock e-commerce site published for testing web scrapers; not a Specoria customer."
},
"run": {
"where": "local",
"code": "apps/worker/src/scan/run.ts (runScan)",
"commit": "a5e9875",
"llm": false,
"relay": false,
"lang": "en",
"duration_ms": 2653,
"run_at": "2026-10-08T11:48:06.279Z"
},
"edits": "none: the result object below is the scan output as produced"
},
"result": {
"model": "v2.3",
"domain": "web-scraping.dev",
"product_url": "https://web-scraping.dev/product/1",
"scanned_at": "2026-10-08T11:48:06.279Z",
"score": 75,
"raw_score": 75,
"level": "partial",
"insufficient": false,
"blockers": [],
"categories": [
{
"id": "access",
"score": 100,
"measured": 5,
"total": 5
},
{
"id": "product",
"score": 83,
"measured": 6,
"total": 6
},
{
"id": "policy",
"score": 7,
"measured": 5,
"total": 6
},
{
"id": "consistency",
"score": 100,
"measured": 3,
"total": 5
},
{
"id": "action",
"score": 82,
"measured": 4,
"total": 5
}
],
"checks": [
{
"id": "bots_search",
"status": "pass"
},
{
"id": "waf_access",
"status": "pass"
},
{
"id": "no_js",
"status": "pass"
},
{
"id": "sitemap",
"status": "pass"
},
{
"id": "indexable",
"status": "pass"
},
{
"id": "product_schema",
"status": "pass"
},
{
"id": "offer_complete",
"status": "pass"
},
{
"id": "product_identity",
"status": "warn",
"detail": "gtin,sku",
"credit": 0.35
},
{
"id": "product_media",
"status": "pass"
},
{
"id": "reviews",
"status": "pass"
},
{
"id": "variants",
"status": "warn",
"detail": "no_productgroup",
"credit": 0.5
},
{
"id": "returns_machine",
"status": "fail"
},
{
"id": "returns_human",
"status": "fail"
},
{
"id": "shipping_machine",
"status": "fail"
},
{
"id": "shipping_human",
"status": "fail"
},
{
"id": "org_identity",
"status": "warn",
"detail": "contact",
"credit": 0.66
},
{
"id": "legal_pages",
"status": "na",
"reason": "not_applicable"
},
{
"id": "price_match",
"status": "pass"
},
{
"id": "stock_match",
"status": "pass"
},
{
"id": "market_match",
"status": "pass"
},
{
"id": "policy_match",
"status": "na",
"reason": "no_data"
},
{
"id": "price_transparency",
"status": "na",
"reason": "not_applicable"
},
{
"id": "add_to_cart",
"status": "pass"
},
{
"id": "cart_accessible",
"status": "pass"
},
{
"id": "guest_checkout",
"status": "na",
"reason": "external"
},
{
"id": "order_tracking",
"status": "fail"
},
{
"id": "site_search",
"status": "pass"
}
],
"info": [
{
"id": "training_bots",
"value": "no"
},
{
"id": "other_bots",
"value": "no"
},
{
"id": "robots_groups",
"value": "no"
},
{
"id": "content_signals",
"value": "no"
},
{
"id": "bot_ua",
"value": "no"
},
{
"id": "cloudflare",
"value": "no"
},
{
"id": "llms_txt",
"value": "no"
},
{
"id": "protocols",
"value": "no"
},
{
"id": "policy_sources",
"value": "unknown"
},
{
"id": "payments",
"value": "no"
},
{
"id": "returns_portal",
"value": "no"
},
{
"id": "popups",
"value": "no"
}
],
"priorities": [
"returns_machine",
"returns_human",
"shipping_machine",
"product_identity",
"shipping_human",
"order_tracking",
"variants",
"org_identity"
],
"potential": 89,
"market": {
"country": "US",
"currency": "USD",
"lang": "en",
"legal_return_days": null,
"return_days": null,
"return_fees": null,
"free_shipping_over": null,
"delivery": null,
"extracted_by": "none"
},
"product": {
"name": "Box of Chocolate Candy",
"price": 9.99,
"currency": "USD",
"availability": "InStock"
},
"sim": {
"product": {
"name": "Box of Chocolate Candy",
"price": 9.99,
"currency": "USD"
},
"budget": 20,
"return_days": 30,
"scenario": {
"tr": null,
"en": null
},
"category": {
"tr": null,
"en": null
},
"slots": {
"access": "ok",
"price": "ok",
"shipping": "bad",
"returns": "bad"
},
"outcome": "eliminated",
"reason": "shipping_machine",
"competitors": [
{
"price": 9.69
},
{
"price": 10.39
}
]
},
"coverage": {
"pages": 2,
"measured": 23,
"unverifiable": 2,
"not_applicable": 2
},
"site_type": {
"type": "ecommerce",
"detected": "service",
"confidence": "low",
"evidence": [
"JSON-LD educationalorganization"
],
"source": "default"
},
"probes": [
{
"id": "1.2",
"status": "partial",
"note": "GPTBot: -"
},
{
"id": "1.3",
"status": "pass",
"note": "Google-Extended: default allow"
},
{
"id": "1.4",
"status": "fail",
"note": "none named"
},
{
"id": "1.10",
"status": "pass",
"note": "1407 ms"
},
{
"id": "1.13",
"status": "pass",
"note": "HTTP 404"
},
{
"id": "1.19",
"status": "pass",
"note": "https"
},
{
"id": "1.21",
"status": "pass",
"note": "viewport width=device-width, initial-scale=1, shr"
},
{
"id": "1.28",
"status": "pass",
"note": "lang en · hreflang 0"
},
{
"id": "1.29",
"status": "partial",
"note": "Cache-Control -"
},
{
"id": "2.20",
"status": "partial",
"note": "nav, footer"
},
{
"id": "2.28",
"status": "pass",
"note": "sameAs 2"
},
{
"id": "1.20",
"status": "pass",
"note": "product canonical same host"
},
{
"id": "1.22",
"status": "pass",
"note": "product snippet allowed"
},
{
"id": "1.26",
"status": "partial",
"note": "product h1 0 · skipped level"
},
{
"id": "1.27",
"status": "pass",
"note": "product title 47 · description 64"
},
{
"id": "2.26",
"status": "pass",
"note": "product JSON-LD 1/1"
},
{
"id": "2.11",
"status": "pass",
"note": "product JSON-LD 1"
},
{
"id": "2.22",
"status": "pass",
"note": "og:title, og:image, og:description"
},
{
"id": "2.21",
"status": "pass",
"note": "home yes · product yes"
},
{
"id": "2.7",
"status": "fail",
"note": "product FAQPage/QAPage"
},
{
"id": "2.8",
"status": "fail",
"note": "product BreadcrumbList"
},
{
"id": "2.13",
"status": "partial",
"note": "alt 4/8"
},
{
"id": "2.14",
"status": "fail",
"note": "/llms.txt missing"
},
{
"id": "2.23",
"status": "fail",
"note": "/AGENTS.md 404"
},
{
"id": "2.25",
"status": "fail",
"note": "/llms-full.txt 404"
},
{
"id": "4.4",
"status": "fail",
"note": "HTTP 404"
}
]
}
}Questions
Is this a real report?
Yes. Every number and sentence on this page is generated from the scan output in the JSON below; nothing was corrected by hand. The date and duration come from that output too.
Why this store?
We didn’t want to use a real brand’s site as an example without permission. This is a mock store published openly for testing crawlers, so we can show it without hiding anything.
If I re-run the test, will I get the same result?
If the rules and the site haven’t changed, yes: the score is rule-based and no AI grades it. If the site changes or the score model is updated, the result changes too; that’s why the report carries a date and a model version.