{"adoption": {"forks": 453, "observed_at": "2026-08-28T04:09:51.348805+00:00", "stars": 6915}, "canonical_url": "https://ross.abutalabs.com/products/llm-scraper", "card": {"archived": false, "artifact_type": "library", "description": "Turn any webpage into structured data using LLMs", "domain": ["artificial-intelligence", "large-language-models", "crawlers", "web-development", "developer-tools"], "enriched": true, "function": ["web-scraping", "llm-inference", "parser", "rag"], "health_score": 77, "homepage": null, "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["mishushakov/llm-scraper"], "name": "mishushakov/llm-scraper", "platform": ["cross-platform"], "pushed_at": "2026-08-02T02:49:24+00:00", "repo": "mishushakov/llm-scraper", "stars": 6915, "tags": ["playwright", "puppeteer", "zod", "vercel-ai-sdk", "structured-extraction", "browser-automation", "schema-validation", "nodejs", "typescript"], "topics": ["ai", "browser", "gpt", "langchain", "llm", "openai", "scraper", "browser-automation", "playwright", "puppeteer", "llama", "artificial-intelligence", "gpt-4"], "urls": [], "use_cases": ["extract structured data from webpages with an LLM", "scrape product listings into typed JSON objects", "parse news headlines from a site using GPT-4o", "convert HTML pages to markdown or text for LLM input", "generate scraping code from a schema", "stream structured extraction results from a live page"], "what_it_is": "A TypeScript library that turns any webpage into structured data using LLMs, built on Playwright and the Vercel AI SDK. It supports multiple LLM providers, Zod/JSON Schema definitions, streaming, and several page formatting modes including HTML, markdown, text, and screenshots.", "when_to_avoid": ["you need high-volume scraping without LLM API costs", "you only need simple static HTML parsing without AI", "your project is not in the Node.js/TypeScript ecosystem", "you need a no-code scraping service with a UI"], "when_to_choose": ["you need schema-validated structured extraction from web pages", "you want type-safe scraping with Zod schemas in TypeScript", "you need multi-modal extraction including page screenshots", "you want to swap between OpenAI, Anthropic, Google, Groq, or Ollama providers"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/llm-scraper", "repo": "mishushakov/llm-scraper", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:51.348805+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:41:27.553285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77b6bd03c255171c80100d434f0418aaaa67ffe6f19c4d9099145147894eb8a6", "fetched_at": "2026-08-28T04:09:51.348805+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mishushakov/llm-scraper"}, {"content_hash": "4845c19280d9249b6590b24fdca9f8ebc250f78a5aadaadcbdc5d1ac08377dcd", "fetched_at": "2026-08-29T08:37:31.427806+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/llm-scraper"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 61, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 865, "days_push": 31, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}