[
  {
    "id": "gcd",
    "name": "Grand Comics Database",
    "domain": "comics.org",
    "country": "US",
    "supportedCountries": [
      "US",
      "GB",
      "CA",
      "FR",
      "DE",
      "IT",
      "ES",
      "NL",
      "SE",
      "JP",
      "BR"
    ],
    "languages": [
      "en",
      "fr",
      "de",
      "it",
      "es",
      "nl",
      "sv",
      "ja",
      "pt"
    ],
    "sourceType": "catalog",
    "categories": [
      "comics",
      "marvel_comics",
      "dc_comics",
      "independent_comics",
      "manga"
    ],
    "api": {
      "available": true,
      "docsUrl": "https://www.comics.org/api/",
      "auth": "none",
      "notes": "Django REST framework JSON API: /api/series/?page=N (50/page), /api/series/<id>/, /api/issue/<id>/, /api/publisher/<id>/. No filters honoured. Server-side throttle: HTTP 429 with Retry-After ≈ 1741 s after ~50 requests (verified live)."
    },
    "urls": {
      "search": "https://www.comics.org/api/series/?format=json&page=1",
      "product": "https://www.comics.org/issue/{id}/",
      "sold": null,
      "sitemap": null,
      "robots": "https://www.comics.org/robots.txt"
    },
    "data": {
      "liveListings": false,
      "soldResults": false,
      "auctionResults": false,
      "historical": "decades",
      "images": false,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": true,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "page_number",
      "jsRendering": false,
      "antiBot": "low",
      "cloudflare": true,
      "robots": "Allow / for * (Cloudflare content signals search=yes, ai-train=no). HTML pages and /download/ dumps are behind a Cloudflare managed challenge + account login → not fetched; API is open.",
      "rateLimit": "~60 requests/hour per client (429, Retry-After up to 1741 s) → 30 requests per hourly run, 2.5 s spacing",
      "preferredEngine": "api"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave1",
    "difficulty": "easy",
    "reliability": 0.9,
    "legal": "Data is CC-BY-SA (attribution kept in metadata + link to the issue page). SQL dumps require a GCD account → not used.",
    "status": "implemented",
    "connectors": [
      "gcd"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "232,658 series; catalog_item per issue with comics_org_id (deterministic key), publisher family → taxonomy slug, cover price → originalMsrp when ISO currency is printed."
  },
  {
    "id": "comiclink",
    "name": "ComicLink",
    "domain": "comiclink.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "auction_house",
    "categories": [
      "comics",
      "marvel_comics",
      "dc_comics",
      "independent_comics",
      "art"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": null
    },
    "urls": {
      "search": "https://www.comiclink.com/auctions/auctionschedule.asp",
      "product": "https://www.comiclink.com/auctions/item.asp?id={id}",
      "sold": "https://www.comiclink.com/results/generate_highlights.asp?output={code}",
      "sitemap": null,
      "robots": "https://www.comiclink.com/robots.txt"
    },
    "data": {
      "liveListings": false,
      "soldResults": true,
      "auctionResults": true,
      "historical": "decades",
      "images": true,
      "seller": false,
      "saleDate": true,
      "realizedPrice": true,
      "fees": false,
      "grading": true,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "none",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": true,
      "robots": "Allow / for * (Cloudflare content signals search=yes, ai-train=no).",
      "rateLimit": "3 s politeness, concurrency 1; ~1 Scrapfly credit per page",
      "preferredEngine": "scrapfly"
    },
    "currency": [
      "USD"
    ],
    "freshness": "weekly",
    "priority": "wave1",
    "difficulty": "medium",
    "reliability": 0.8,
    "legal": "Public results pages only; item pages hide prices behind login (never fetched). Sale dates carry month precision (session label).",
    "status": "implemented",
    "connectors": [
      "comiclink"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "~90 past sessions since 2015 (comics + comic art), 300–800 sold books each with title, CGC/CBCS grade and price. Cloudflare managed challenge for every non-browser client → Scrapfly without JS (1 credit/page)."
  },
  {
    "id": "mycomicshop",
    "name": "MyComicShop",
    "domain": "mycomicshop.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "comics",
      "marvel_comics",
      "dc_comics",
      "independent_comics",
      "manga"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": null
    },
    "urls": {
      "search": "https://www.mycomicshop.com/search?TID={tid}&mingr=0",
      "product": "https://www.mycomicshop.com/search?ItemID={id}",
      "sold": null,
      "sitemap": null,
      "robots": "https://www.mycomicshop.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": true,
      "historical": "none",
      "images": true,
      "seller": true,
      "saleDate": false,
      "realizedPrice": false,
      "fees": true,
      "grading": true,
      "certNumber": true,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "none",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": false,
      "robots": "/search allowed; /auctions, /newlistings, /restocked, /account, /cart, /wantlist disallowed (never fetched).",
      "rateLimit": "3 s politeness, concurrency 1; ~1 Scrapfly credit per title page (1–3 MB)",
      "preferredEngine": "scrapfly"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave1",
    "difficulty": "medium",
    "reliability": 0.85,
    "legal": "Imperva Incapsula interstitial for all non-browser clients; public listing pages read through Scrapfly. No sold data is published outside the (robots-disallowed) auction section; asking prices are listings.",
    "status": "implemented",
    "connectors": [
      "mycomicshop"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "Title pages expose schema.org/Product microdata per copy + 'Label #<cert>' for CGC/CBCS slabs, consignment 3% buyer's premium, Signature Series, paper quality. Seeds = title ids (homepage lists ~275 titles with stock counts)."
  },
  {
    "id": "shortboxed",
    "name": "Shortboxed",
    "domain": "shortboxed.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "marketplace",
    "categories": [
      "comics",
      "marvel_comics",
      "dc_comics",
      "independent_comics"
    ],
    "api": {
      "available": true,
      "docsUrl": null,
      "auth": "login",
      "notes": "Relay/Apollo GraphQL at https://graph.shortboxed.com/graphql (found in the public bundle). Public root queries of interest: auctionSearch, historicalSalesByLabel(labelId, grade), fmvByCertificationNumbers(input) (sales by CGC cert with source URLs), productsSoldByLabel. Live test 2026-09-08: __typename answers, introspection disabled, every data query returns 401 Unauthorized without a user token."
    },
    "urls": {
      "search": "https://shortboxed.com/shop",
      "product": "https://shortboxed.com/product/{id}",
      "sold": null,
      "sitemap": "https://site.shortboxed.com/sitemap.xml",
      "robots": "https://shortboxed.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": true,
      "auctionResults": true,
      "historical": "years",
      "images": true,
      "seller": true,
      "saleDate": true,
      "realizedPrice": true,
      "fees": false,
      "grading": true,
      "certNumber": true,
      "itemId": true,
      "gtin": true,
      "population": true,
      "catalog": true
    },
    "access": {
      "pagination": "cursor",
      "jsRendering": true,
      "antiBot": "medium",
      "cloudflare": true,
      "robots": "Allows the comics shop/auction paths; disallows /account*, /portfolio, /live, /sports, /tcg, /toys, /funko, /video-games, /pokemon … (non-comic verticals).",
      "rateLimit": null,
      "preferredEngine": "api"
    },
    "currency": [
      "USD"
    ],
    "freshness": "realtime",
    "priority": "wave2",
    "difficulty": "hard",
    "reliability": 0.85,
    "legal": "GraphQL requires an authenticated user (401) → login wall; SPA shell carries no data. Not circumvented.",
    "status": "gated",
    "connectors": [],
    "statusReason": "All GraphQL data queries (auctionSearch, historicalSalesByLabel, fmvByCertificationNumbers) return 401 without a Shortboxed user token; no public API key programme is documented. Re-evaluate if Shortboxed publishes a partner/API key.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "Would be a gold source: cert-number keyed sales (CGC label id) with source URLs and CGC census. api.shortboxed.com returns Cloudflare 'Attention Required' for GET."
  },
  {
    "id": "reeces",
    "name": "Reece's Rare Comics",
    "domain": "reecescomics.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "comics"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": null
    },
    "urls": {
      "search": null,
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": "https://www.reecescomics.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": true,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "unknown",
      "jsRendering": false,
      "antiBot": "blocking",
      "cloudflare": true,
      "robots": "robots.txt itself returned Cloudflare managed content (Allow /) but every page request from curl ended with a Cloudflare 'Attention Required' block (HTTP 000/403).",
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "unknown",
    "priority": "later",
    "difficulty": "very_hard",
    "reliability": 0.5,
    "legal": null,
    "status": "blocked",
    "connectors": [],
    "statusReason": "www.reecescomics.com: Cloudflare 'Attention Required' hard block for curl (bot and browser UA) and Scrapfly reports DNS_NAME_NOT_RESOLVED for the host on 2026-09-08 — site unreachable for automated access.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": null
  },
  {
    "id": "covrprice",
    "name": "CovrPrice",
    "domain": "covrprice.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "pricing_guide",
    "categories": [
      "comics"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "login",
      "notes": "Subscription price guide; values and sales history behind member login."
    },
    "urls": {
      "search": null,
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": "https://covrprice.com/robots.txt"
    },
    "data": {
      "liveListings": false,
      "soldResults": true,
      "auctionResults": false,
      "historical": "years",
      "images": true,
      "seller": false,
      "saleDate": true,
      "realizedPrice": true,
      "fees": false,
      "grading": true,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "unknown",
      "jsRendering": true,
      "antiBot": "medium",
      "cloudflare": false,
      "robots": null,
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "later",
    "difficulty": "very_hard",
    "reliability": 0.8,
    "legal": "Paywalled subscription data — login wall, never circumvented (SPEC §36).",
    "status": "blocked",
    "connectors": [],
    "statusReason": "Sales history and FMV are only shown to logged-in subscribers.",
    "verified": false,
    "verifiedAt": null,
    "notes": "GoCollect, hobbyDB/PopPriceGuide and Heritage were already blocked in earlier sessions and were not retried."
  },
  {
    "id": "comicspriceguide",
    "name": "ComicsPriceGuide.com",
    "domain": "comicspriceguide.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "pricing_guide",
    "categories": [
      "comics"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "login",
      "notes": "Community price guide (1.3M comics, 221M values); values shown to registered members."
    },
    "urls": {
      "search": "https://comicspriceguide.com/titles/{slug}/{id}",
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": "https://comicspriceguide.com/robots.txt"
    },
    "data": {
      "liveListings": false,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": true,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "unknown",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": true,
      "robots": "Allow / for * (Cloudflare content signals); plain HTTP gets a Cloudflare challenge, Scrapfly passes (1 credit).",
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "later",
    "difficulty": "hard",
    "reliability": 0.6,
    "legal": "Guide values are the site's product and are member-gated; public pages show navigation and catalogue only.",
    "status": "blocked",
    "connectors": [],
    "statusReason": "Issue pages fetched through Scrapfly render only the navigation/catalogue shell; values require login. Catalogue duplicates GCD (implemented).",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": null
  },
  {
    "id": "entertainment-earth",
    "name": "Entertainment Earth",
    "domain": "entertainmentearth.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "action_figures",
      "funko",
      "model_cars",
      "designer_toys"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": "No API; category tiles embed data-sku/name/price/company/theme attributes. Product sitemap index at /sitemap/sitemap_index.xml."
    },
    "urls": {
      "search": "https://www.entertainmentearth.com/s/action-figures/p?page={n}",
      "product": "https://www.entertainmentearth.com/product/{slug}/{sku}",
      "sold": null,
      "sitemap": "https://www.entertainmentearth.com/sitemap/sitemap_index.xml",
      "robots": "https://www.entertainmentearth.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "page_number",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": true,
      "robots": "Only /news/* admin paths disallowed; /s/ listings and /product/ allowed (robots fetched via Scrapfly — plain HTTP is challenged).",
      "rateLimit": "3 s politeness, concurrency 1, ~1 Scrapfly credit/page",
      "preferredEngine": "scrapfly"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave2",
    "difficulty": "medium",
    "reliability": 0.85,
    "legal": "Public listing pages only; Cloudflare managed challenge for non-browser clients passed by Scrapfly (public pages).",
    "status": "implemented",
    "connectors": [
      "entertainment-earth"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "60 tiles/page; action figures ≈ 73 pages. Manufacturer (data-company) and franchise (data-theme) are structured. Statues/model kits exist but the taxonomy has no slug for statues."
  },
  {
    "id": "tfsource",
    "name": "TFSource",
    "domain": "tfsource.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "action_figures"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": null
    },
    "urls": {
      "search": null,
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": "https://tfsource.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "unknown",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": true,
      "robots": "User-agent: * → Disallow: / (Crawl-delay 60); only Googlebot is allowed.",
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "later",
    "difficulty": "very_hard",
    "reliability": 0.7,
    "legal": "robots.txt forbids all crawling for generic agents → not crawled (SPEC §36).",
    "status": "blocked",
    "connectors": [],
    "statusReason": "robots.txt: `User-agent: *` Disallow: / (verified through Scrapfly on 2026-09-08 — the site also serves a Cloudflare challenge).",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": null
  },
  {
    "id": "sideshow",
    "name": "Sideshow Collectibles",
    "domain": "sideshow.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "action_figures"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": "Laravel/Livewire site. Product pages embed schema.org Product JSON-LD with gtin (EAN), sku, brand (Hot Toys, Sideshow…), franchise (isRelatedTo), category ('Sixth Scale Figure') and Offer."
    },
    "urls": {
      "search": "https://www.sideshow.com/collectibles?brand=marvel",
      "product": "https://www.sideshow.com/collectibles/{slug}-{sku}",
      "sold": null,
      "sitemap": "https://www.sideshow.com/sitemap.xml",
      "robots": "https://www.sideshow.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": true,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "infinite_scroll",
      "jsRendering": true,
      "antiBot": "medium",
      "cloudflare": false,
      "robots": "Allows /collectibles; disallows /cart, /account, /checkout, /search?keyword=, /feed/. Queue-it virtual waiting room intermittently redirects (queueittoken).",
      "rateLimit": null,
      "preferredEngine": "firecrawl"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave3",
    "difficulty": "hard",
    "reliability": 0.8,
    "legal": "Public product pages; JSON-LD Product with GTIN — clean to normalise.",
    "status": "planned",
    "connectors": [],
    "statusReason": "Not implemented this wave: the sitemap index has no product sitemap and listing pages are Livewire-rendered (product grid loaded client-side); needs Firecrawl rendering of /collectibles?… + JSON-LD product pages. Queue-it waiting room adds flakiness.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "Statues and sixth-scale figures: the taxonomy lacks a 'statues' slug (would fall under action_figures)."
  },
  {
    "id": "funko-shop",
    "name": "Funko (official shop)",
    "domain": "funko.com",
    "country": "US",
    "supportedCountries": [
      "US",
      "CA",
      "EU"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "manufacturer",
    "categories": [
      "funko"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": "Salesforce Commerce Cloud (Demandware). Product sitemap https://funko.com/csitemap_product.xml lists 27,711 product URLs with lastmod."
    },
    "urls": {
      "search": "https://funko.com/new-featured/pop/",
      "product": "https://funko.com/{slug}/{id}.html",
      "sold": null,
      "sitemap": "https://funko.com/csitemap_index.xml",
      "robots": "https://funko.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "sitemap",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": false,
      "robots": "Disallows *start=, *?sz=, *cgid, *prefn, *prefv, *Product-Variation, *Product-Detail, search — i.e. listing pagination is off-limits; product URLs via the sitemap are allowed.",
      "rateLimit": null,
      "preferredEngine": "scrapfly"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave3",
    "difficulty": "hard",
    "reliability": 0.85,
    "legal": "Only sitemap-listed product pages would be read (listing pagination params are robots-disallowed).",
    "status": "planned",
    "connectors": [],
    "statusReason": "Not implemented this wave: product pages return 403 to the honest bot UA (WAF) → needs Scrapfly per product page (27k pages, ~1 credit each) driven by the product sitemap; official MSRP catalog for Funko Pop.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": null
  },
  {
    "id": "mattel-creations",
    "name": "Mattel Creations",
    "domain": "creations.mattel.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "manufacturer",
    "categories": [
      "model_cars",
      "dolls",
      "action_figures"
    ],
    "api": {
      "available": true,
      "docsUrl": "https://shopify.dev/docs/api/ajax/reference/product",
      "auth": "none",
      "notes": "Shopify storefront products.json / collections.json (217 collections)."
    },
    "urls": {
      "search": "https://creations.mattel.com/collections/hot-wheels-collectors/products.json?limit=250&page=1",
      "product": "https://creations.mattel.com/products/{handle}",
      "sold": null,
      "sitemap": "https://creations.mattel.com/sitemap.xml",
      "robots": "https://creations.mattel.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "page_number",
      "jsRendering": false,
      "antiBot": "none",
      "cloudflare": false,
      "robots": "Shopify standard: products/collections crawlable; checkout/cart never touched.",
      "rateLimit": "1.5 s politeness, concurrency 2",
      "preferredEngine": "shopify"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave2",
    "difficulty": "trivial",
    "reliability": 0.9,
    "legal": "Official manufacturer shop; MSRP listings, never sales.",
    "status": "implemented",
    "connectors": [
      "mattel-creations"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "Hot Wheels Collectors (952 products), RLC, Elite 64, Car Culture, Matchbox Collectors, Barbie Signature (820), MOTU, WWE. Tags carry Brand:/Category:/Filter-AgeGrade:. Sold-out items kept as ended listings for MSRP history."
  },
  {
    "id": "gamevaluenow",
    "name": "GameValueNow",
    "domain": "gamevaluenow.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "pricing_guide",
    "categories": [
      "video_games",
      "nintendo_games",
      "sega_games",
      "playstation_games",
      "atari_retro_games"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": null
    },
    "urls": {
      "search": null,
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": "https://gamevaluenow.com/robots.txt"
    },
    "data": {
      "liveListings": false,
      "soldResults": false,
      "auctionResults": false,
      "historical": "years",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "unknown",
      "jsRendering": false,
      "antiBot": "blocking",
      "cloudflare": true,
      "robots": "Unreadable: robots.txt itself answers with a Cloudflare managed challenge to curl; Scrapfly (asp) gets 'upstream website error — connection refused'.",
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "later",
    "difficulty": "very_hard",
    "reliability": 0.6,
    "legal": null,
    "status": "blocked",
    "connectors": [],
    "statusReason": "Cloudflare challenge for plain HTTP and connection refused for Scrapfly (2026-09-08); robots.txt could not be read → not crawled. PriceCharting (implemented) covers loose/CIB/new retro game prices.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": null
  },
  {
    "id": "jjgames",
    "name": "JJGames",
    "domain": "jjgames.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "video_games",
      "nintendo_games",
      "sega_games",
      "playstation_games",
      "atari_retro_games"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "api_key",
      "notes": "Ecwid storefront (store 75878022) rendered client-side from app.ecwid.com/script.js; the Ecwid REST API needs a store token (public storefront token not exposed in the page)."
    },
    "urls": {
      "search": "https://www.jjgames.com/#!/Nintendo-Entertainment-System/c/134792507",
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": "https://www.jjgames.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "infinite_scroll",
      "jsRendering": true,
      "antiBot": "none",
      "cloudflare": false,
      "robots": "Allow / (Crawl-delay 10; admin paths disallowed).",
      "rateLimit": "Crawl-delay 10",
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "later",
    "difficulty": "hard",
    "reliability": 0.7,
    "legal": null,
    "status": "rejected",
    "connectors": [],
    "statusReason": "Ecwid SPA with no public product endpoint (storefront API 404 without token, REST API 403); JJGames is PriceCharting's sister store and PriceCharting is already implemented → not worth a rendered-crawl connector.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": null
  },
  {
    "id": "estarland",
    "name": "eStarland",
    "domain": "estarland.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "video_games",
      "nintendo_games",
      "sega_games",
      "playstation_games",
      "xbox_games",
      "atari_retro_games",
      "gaming_hardware"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": "Platform listing pages /platforms/<Name>/<id>?page=N (~44 cards/page, e.g. NES 302 items) with name, platform, New/Used, price; product pages /product-description/<platform>/<slug>/<id>."
    },
    "urls": {
      "search": "https://www.estarland.com/platforms/NintendoNES/37?page=1",
      "product": "https://www.estarland.com/product-description/{platform}/{slug}/{id}",
      "sold": null,
      "sitemap": "https://www.estarland.com/sitemap.xml",
      "robots": "https://www.estarland.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "page_number",
      "jsRendering": false,
      "antiBot": "high",
      "cloudflare": true,
      "robots": "Allow / except /login, /handler*, /checkout, /shopcart, /forgot-password*, /sandbox; sitemap declared.",
      "rateLimit": "~1 Scrapfly credit per page",
      "preferredEngine": "scrapfly"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave2",
    "difficulty": "medium",
    "reliability": 0.75,
    "legal": "Public listing pages; Cloudflare managed challenge for non-browser clients (Scrapfly passes at 1 credit).",
    "status": "implemented",
    "connectors": [
      "estarland"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "Main-grid cards: h4 name, platformName \"Nintendo / NES\", New/Used, priceProductHolder (unavailPrice = out of stock), product id in URL; 50 platform pages listed in the nav. Carousel/featured cards duplicate grid items and are ignored."
  },
  {
    "id": "videogametrader",
    "name": "Video Game Trader",
    "domain": "videogametrader.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "nintendo_games",
      "sega_games",
      "playstation_games",
      "xbox_games",
      "atari_retro_games",
      "pc_games",
      "gaming_hardware"
    ],
    "api": {
      "available": true,
      "docsUrl": "https://shopify.dev/docs/api/ajax/reference/product",
      "auth": "none",
      "notes": "Shopify storefront products.json / collections.json (183 collections; 20k+ games)."
    },
    "urls": {
      "search": "https://videogametrader.com/collections/nintendo-nes-games/products.json?limit=250&page=1",
      "product": "https://videogametrader.com/products/{handle}",
      "sold": null,
      "sitemap": "https://videogametrader.com/sitemap.xml",
      "robots": "https://videogametrader.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": true,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "page_number",
      "jsRendering": false,
      "antiBot": "none",
      "cloudflare": false,
      "robots": "Shopify standard: products/collections crawlable.",
      "rateLimit": "1.5 s politeness, concurrency 2",
      "preferredEngine": "shopify"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave2",
    "difficulty": "trivial",
    "reliability": 0.85,
    "legal": "Public storefront JSON; asking prices are listings.",
    "status": "implemented",
    "connectors": [
      "videogametrader"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "Titles carry platform + condition ('Used (Complete)', 'Used (Loose)', 'New'), tags Platform:/Condition:/Genre:; SKUs of CIB items embed the UPC. TCG singles/boosters sold on the same store are excluded (other groups cover TCG)."
  },
  {
    "id": "miniature-market",
    "name": "Miniature Market",
    "domain": "miniaturemarket.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "dealer",
    "categories": [
      "board_games"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": "Shopware 6 storefront (not Shopify/Magento); Store API would need a sw-access-key → HTML listing pages used instead."
    },
    "urls": {
      "search": "https://www.miniaturemarket.com/board-games.html?p=1",
      "product": "https://www.miniaturemarket.com/{slug}.html",
      "sold": null,
      "sitemap": "https://www.miniaturemarket.com/sitemap.xml",
      "robots": "https://www.miniaturemarket.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "none",
      "images": true,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": false
    },
    "access": {
      "pagination": "page_number",
      "jsRendering": false,
      "antiBot": "none",
      "cloudflare": false,
      "robots": "Crawl-delay 10; Allow ?p=; Disallow ?dir=, ?mode=, ?limit=, ?SID=, /search/, /checkout/, /account/, /wishlist/.",
      "rateLimit": "Crawl-delay 10 → 1 request / 10 s",
      "preferredEngine": "api"
    },
    "currency": [
      "USD"
    ],
    "freshness": "daily",
    "priority": "wave3",
    "difficulty": "easy",
    "reliability": 0.85,
    "legal": "Public listing pages, honest UA, crawl-delay honoured.",
    "status": "implemented",
    "connectors": [
      "miniature-market"
    ],
    "statusReason": null,
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "379 pages × 24 boxes of board games with retail list price vs. store price and SKU. Not Shopify, so implemented here rather than handed to g3."
  },
  {
    "id": "boardgameprices",
    "name": "BoardGamePrices (meeple.dk)",
    "domain": "boardgameprices.com",
    "country": "US",
    "supportedCountries": [
      "US",
      "GB",
      "DK"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "analytics_provider",
    "categories": [
      "board_games"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "none",
      "notes": "Retail price aggregator (meeple.dk). No public API documented."
    },
    "urls": {
      "search": "https://boardgameprices.com/",
      "product": null,
      "sold": null,
      "sitemap": "http://www.meeple.dk/sitemap.xml",
      "robots": "https://boardgameprices.com/robots.txt"
    },
    "data": {
      "liveListings": true,
      "soldResults": false,
      "auctionResults": false,
      "historical": "years",
      "images": true,
      "seller": true,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": false,
      "certNumber": false,
      "itemId": true,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "unknown",
      "jsRendering": false,
      "antiBot": "none",
      "cloudflare": false,
      "robots": "Disallows /item/history (price history), /item/search, /item/go, /item/random, /img/items/ → the price-history pages we would want are off-limits.",
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD",
      "GBP",
      "DKK"
    ],
    "freshness": "daily",
    "priority": "later",
    "difficulty": "medium",
    "reliability": 0.6,
    "legal": "Second-hand aggregation of retailer asks; robots disallows the history and search paths.",
    "status": "rejected",
    "connectors": [],
    "statusReason": "Aggregator of retailer asking prices (not a primary source) and robots.txt disallows /item/history and /item/search — the only pages with analytical value. Primary retailer (Miniature Market) implemented instead.",
    "verified": true,
    "verifiedAt": "2026-09-08",
    "notes": "boardgameoracle.com: robots disallows /api/ and /auth/ only, sitemap available — same aggregator profile, also not implemented (secondary data)."
  },
  {
    "id": "overstreet",
    "name": "Overstreet Price Guide",
    "domain": "gemstonepub.com",
    "country": "US",
    "supportedCountries": [
      "US"
    ],
    "languages": [
      "en"
    ],
    "sourceType": "pricing_guide",
    "categories": [
      "comics"
    ],
    "api": {
      "available": false,
      "docsUrl": null,
      "auth": "login",
      "notes": "Printed/paid guide; no public data."
    },
    "urls": {
      "search": null,
      "product": null,
      "sold": null,
      "sitemap": null,
      "robots": null
    },
    "data": {
      "liveListings": false,
      "soldResults": false,
      "auctionResults": false,
      "historical": "decades",
      "images": false,
      "seller": false,
      "saleDate": false,
      "realizedPrice": false,
      "fees": false,
      "grading": true,
      "certNumber": false,
      "itemId": false,
      "gtin": false,
      "population": false,
      "catalog": true
    },
    "access": {
      "pagination": "none",
      "jsRendering": false,
      "antiBot": "none",
      "cloudflare": false,
      "robots": null,
      "rateLimit": null,
      "preferredEngine": "none"
    },
    "currency": [
      "USD"
    ],
    "freshness": "static",
    "priority": "later",
    "difficulty": "very_hard",
    "reliability": 0.9,
    "legal": "Copyrighted paid publication.",
    "status": "rejected",
    "connectors": [],
    "statusReason": "Paid, copyrighted guide with no public data. Key Collector Comics (mobile app, subscription) rejected for the same reason.",
    "verified": false,
    "verifiedAt": null,
    "notes": null
  }
]
