Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.14.0 · 2026-07-30 09:55 UTC

ScrapeGraphAI / Scrapegraph-ai

Python scraper based on AI

PythonMIT★ 28.790 estrellas⑂ 2807 forksdesde ene 2024Ver en GitHub ↗

ScrapeGraphAI/Scrapegraph-ai tiene un índice de salud de 81 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Community & Adoption (91/100) y la más baja, AI Readiness (55/100). Se actualizó por última vez hace 9 días. Una sola persona concentra la mayor parte del trabajo reciente.

81
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

81
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

ScrapeGraphAIOrganización
532 seguidores30 repositorios públicosdesde may 2024

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

89Excelente · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 9 días
25.6/36Cadencia de commits — 37/52 semanas con commits
18/18Volumen de commits — 134 commits en el último año
10/10OpenSSF Scorecard: Maintained — 24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year134
human_commit_share0,95
days_since_last_push9
active_weeks_last_year37
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 9 días
27/27Cadencia de publicación — una versión cada ~7,2 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tagv2.1.6
releases_from_tagsno
days_since_latest_release9
mean_days_between_releases7,2
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

91Excelente · 18% del índice global
Cómo se puntúa
60/60Estrellas — 28.790 estrellas
25/25Forks — 2807 forks
12.3/15Observadores — 166 observadores
Datos de entrada utilizados
forks2807
stars28.790
watchers166
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

70Bueno · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
10.8/22.5Distribución de commits — el principal contribuyente firma el 52% de los commits
13.5/13.5Amplitud de contribuyentes — 97 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 10 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled97
top_contributor_share0,521
Cómo se puntúa
46.1/46.8Resolución de issues — 99% de issues cerradas
33/38.3Aceptación de PR — 510/591 PR decididos fusionados
3/15OpenSSF Scorecard: Code-Review — Found 5/25 approved changesets -- score normalized to 2
Datos de entrada utilizados
merged_prs510
open_issues6
closed_issues430
issue_closed_ratio0,986
closed_unmerged_prs81
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
19.6/25Alcance del propietario — 532 seguidores de ScrapeGraphAI
15.2/25Trayectoria — 30 repos públicos, cuenta de ~2 años
Datos de entrada utilizados
followers532
owner_typeOrganization
is_verified
owner_loginScrapeGraphAI
public_repos30
account_age_days793
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 9 días
20/20Historial de versiones — 475 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesscrapegraphai
ecosystemspypi
any_deprecatedno
min_days_since_publish9

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

90Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 4 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter
9.6/9.6Hooks de pre-commit
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 12 out of 14 merged PRs checked by a CI test -- score normalized to 8
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_config

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://scrapegraphai.com
10/10Descripción del repositorio
10/10Topics — 20 topics
0/10Wiki
Datos de entrada utilizados
topicsscraping, scraping-python, llm, web-crawler, web-scraping, ai-scraping, crawler, markdown, rag, web-crawlers, ai-crawler, ai-search, large-language-model, web-data-extraction, web-search, web-scraper, data-extraction, web-data, webscraping, firecrawl-alternative
has_wikino
homepagehttps://scrapegraphai.com
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

65Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
2/2.5CI-Tests — 12 out of 14 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 5/25 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 10 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
2/5SAST — SAST tool is not run on all commits -- score normalized to 4
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 119 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate5,6
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages100
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de pypi:scrapegraphai@2.1.6 —lo que arrastra la instalación del paquete publicado—: 100 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

55Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 77 de 95 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,811
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato
0/11Verificación estática de tipos
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 19 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesuv.lock
has_dockerfile
typed_languageno
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,19
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — Python sin configuración de verificación de tipos
54.8/55Tamaños de archivo manejables — 1/263 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes76.219
source_files_sampled263
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples, notebooks
Datos de entrada utilizados
example_dirsexamples, notebooks
has_mcp_signalno
api_schema_files

Datos clave

28.790estrellas de GitHub
97contribuidores
134commits en los últimos 12 meses
9días desde el último push
100versiones publicadas
1factor bus
6issues abiertas
PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

Historial de estrellas y forks 0 ★ / 2807 ⇿
0Estrellas
2807Forks
32Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

Solo se muestra el historial más reciente: este repositorio supera la ventana de recopilación, por lo que no se captura el historial más antiguo.

15002000250030002807732025-112026-032026-07
Mayor 1Menor 12Parche 10
OpenSSF Scorecard 5.6 / 10
5.6agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-30 09:54 UTC

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during GetBranch(pre/beta): error during branchesHandler.query: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
8CI-Tests12 out of 14 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 5/25 approved changesets -- score normalized to 2
10Contributorsproject has 10 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
4SASTSAST tool is not run on all commits -- score normalized to 4
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities119 existing vulnerabilities detected
Dependencias directas 23
RegistroPaqueteRestricción de versiónManifiesto
PyPIlangchain>=1.2.0pyproject.toml
PyPIlangchain-classic>=1.0.0pyproject.toml
PyPIlangchain-openai>=1.1.6pyproject.toml
PyPIlangchain-mistralai>=1.1.1pyproject.toml
PyPIlangchain_community>=0.4.0pyproject.toml
PyPIlangchain-aws>=1.1.0pyproject.toml
PyPIlangchain-ollama>=1.0.1pyproject.toml
PyPIhtml2text>=2025.4.15pyproject.toml
PyPIbeautifulsoup4>=4.14.3pyproject.toml
PyPIpython-dotenv>=1.2.1pyproject.toml
PyPItiktoken>=0.12.0pyproject.toml
PyPItqdm>=4.67.1pyproject.toml
PyPIminify-html>=0.18.1pyproject.toml
PyPIfree-proxy>=1.1.3pyproject.toml
PyPIplaywright>=1.57.0pyproject.toml
PyPIundetected-playwright>=0.3.0pyproject.toml
PyPIsemchunk>=3.2.5pyproject.toml
PyPIasync-timeout>=4.0.0pyproject.toml
PyPIsimpleeval>=1.0.3pyproject.toml
PyPIjsonschema>=4.25.1pyproject.toml
PyPIddgs>=9.0.0pyproject.toml
PyPIpydantic>=2.12.5pyproject.toml
PyPIscrapegraph-py>=2.0.0pyproject.toml
Todas las dependencias 227

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 23 paquetes directos y 204 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
PyPIasync-timeout5.0.1directa
PyPIbeautifulsoup44.14.3directa
PyPIddgs9.14.4directa
PyPIfree-proxy1.1.3directa
PyPIhtml2text2025.4.15directa
PyPIjsonschema4.25.1directa
PyPIlangchain1.2.0directa
PyPIlangchain-aws1.1.0directa
PyPIlangchain-classic1.0.0directa
PyPIlangchain-community0.4.1directa
PyPIlangchain-mistralai1.1.1directa
PyPIlangchain-ollama1.0.1directa
PyPIlangchain-openai1.1.6directa
PyPIminify-html0.18.1directa
PyPIplaywright1.57.0directa
PyPIpydantic2.12.5directa
PyPIpython-dotenv1.2.1directa
PyPIscrapegraph-py2.1.0directa
PyPIsemchunk3.2.5directa
PyPIsimpleeval1.0.3directa
PyPItiktoken0.12.0directa
PyPItqdm4.67.1directa
PyPIundetected-playwright0.3.0directa
PyPIaiofiles25.1.0indirecta
PyPIaiohappyeyeballs2.6.1indirecta
PyPIaiohttp3.13.2indirecta
PyPIaiosignal1.4.0indirecta
PyPIaltair6.0.0indirecta
PyPIannotated-doc0.0.4indirecta
PyPIannotated-types0.7.0indirecta
PyPIanyio4.12.0indirecta
PyPIastroid4.0.2indirecta
PyPIasttokens3.0.1indirecta
PyPIattrs25.4.0indirecta
PyPIblack25.12.0indirecta
PyPIblinker1.9.0indirecta
PyPIboto31.42.13indirecta
PyPIbotocore1.42.13indirecta
PyPIbrotli1.2.0indirecta
PyPIbrotlicffi1.2.0.1indirecta
PyPIburr0.22.1indirecta
PyPIcachetools6.2.4indirecta
PyPIcertifi2025.11.12indirecta
PyPIcffi2.0.0indirecta
PyPIcfgv3.5.0indirecta
PyPIcharset-normalizer3.4.4indirecta
PyPIclick8.3.1indirecta
PyPIcolorama0.4.6indirecta
PyPIcomm0.2.3indirecta
PyPIcontourpy1.3.3indirecta
PyPIcoverage7.13.0indirecta
PyPIcycler0.12.1indirecta
PyPIdataclasses-json0.6.7indirecta
PyPIdecorator5.2.1indirecta
PyPIdill0.4.0indirecta
PyPIdistlib0.4.0indirecta
PyPIdistro1.9.0indirecta
PyPIeinops0.8.1indirecta
PyPIexecuting2.2.1indirecta
PyPIfake-useragent2.2.0indirecta
PyPIfastapi0.125.0indirecta
PyPIfastapi-pagination0.15.3indirecta
PyPIfilelock3.20.1indirecta
PyPIfiletype1.2.0indirecta
PyPIfonttools4.61.1indirecta
PyPIfrozenlist1.8.0indirecta
PyPIfsspec2025.12.0indirecta
PyPIgitdb4.0.12indirecta
PyPIgitpython3.1.45indirecta
PyPIgraphviz0.21indirecta
PyPIgreenlet3.3.0indirecta
PyPIh110.16.0indirecta
PyPIh24.3.0indirecta
PyPIhf-xet1.2.0indirecta
PyPIhpack4.1.0indirecta
PyPIhttpcore1.0.9indirecta
PyPIhttpx0.28.1indirecta
PyPIhttpx-sse0.4.3indirecta
PyPIhuggingface-hub0.36.0indirecta
PyPIhyperframe6.1.0indirecta
PyPIidentify2.6.15indirecta
PyPIidna3.11indirecta
PyPIiniconfig2.3.0indirecta
PyPIipython9.8.0indirecta
PyPIipython-pygments-lexers1.1.1indirecta
PyPIipywidgets8.1.8indirecta
PyPIisort7.0.0indirecta
PyPIjedi0.19.2indirecta
PyPIjinja23.1.6indirecta
PyPIjiter0.12.0indirecta
PyPIjmespath1.0.1indirecta
PyPIjsonpatch1.33indirecta
PyPIjsonpointer3.0.0indirecta
PyPIjsonschema-specifications2025.9.1indirecta
PyPIjupyterlab-widgets3.0.16indirecta
PyPIkiwisolver1.4.9indirecta
PyPIlangchain-core1.2.3indirecta
PyPIlangchain-nvidia-ai-endpoints1.0.0indirecta
PyPIlangchain-text-splitters1.1.0indirecta
PyPIlanggraph1.0.5indirecta
PyPIlanggraph-checkpoint3.0.1indirecta
PyPIlanggraph-prebuilt1.0.5indirecta
PyPIlanggraph-sdk0.3.1indirecta
PyPIlangsmith0.5.0indirecta
PyPIlibrt0.7.4indirecta
PyPIloguru0.7.3indirecta
PyPIlxml6.0.2indirecta
PyPImarkupsafe3.0.3indirecta
PyPImarshmallow3.26.1indirecta
PyPImatplotlib3.10.8indirecta
PyPImatplotlib-inline0.2.1indirecta
PyPImccabe0.7.0indirecta
PyPImpire2.10.2indirecta
PyPImpmath1.3.0indirecta
PyPImultidict6.7.0indirecta
PyPImultiprocess0.70.18indirecta
PyPImypy1.19.1indirecta
PyPImypy-extensions1.1.0indirecta
PyPInarwhals2.14.0indirecta
PyPInetworkx3.6.1indirecta
PyPInodeenv1.9.1indirecta
PyPInumpy2.3.5indirecta
PyPInvidia-cublas-cu1212.8.4.1indirecta
PyPInvidia-cuda-cupti-cu1212.8.90indirecta
PyPInvidia-cuda-nvrtc-cu1212.8.93indirecta
PyPInvidia-cuda-runtime-cu1212.8.90indirecta
PyPInvidia-cudnn-cu129.10.2.21indirecta
PyPInvidia-cufft-cu1211.3.3.83indirecta
PyPInvidia-cufile-cu121.13.1.3indirecta
PyPInvidia-curand-cu1210.3.9.90indirecta
PyPInvidia-cusolver-cu1211.7.3.90indirecta
PyPInvidia-cusparse-cu1212.5.8.93indirecta
PyPInvidia-cusparselt-cu120.7.1indirecta
PyPInvidia-nccl-cu122.27.5indirecta
PyPInvidia-nvjitlink-cu1212.8.93indirecta
PyPInvidia-nvshmem-cu123.3.20indirecta
PyPInvidia-nvtx-cu1212.8.90indirecta
PyPIollama0.6.1indirecta
PyPIopenai2.13.0indirecta
PyPIopencv-python-headless4.11.0.86indirecta
PyPIorjson3.11.5indirecta
PyPIormsgpack1.12.1indirecta
PyPIpackaging25.0indirecta
PyPIpandas2.3.3indirecta
PyPIparso0.8.5indirecta
PyPIpastel0.2.1indirecta
PyPIpathspec0.12.1indirecta
PyPIpexpect4.9.0indirecta
PyPIpillow10.4.0indirecta
PyPIplatformdirs4.5.1indirecta
PyPIpluggy1.6.0indirecta
PyPIpoethepoet0.38.0indirecta
PyPIpre-commit4.5.1indirecta
PyPIprimp1.3.1indirecta
PyPIprompt-toolkit3.0.52indirecta
PyPIpropcache0.4.1indirecta
PyPIprotobuf6.33.2indirecta
PyPIptyprocess0.7.0indirecta
PyPIpure-eval0.2.3indirecta
PyPIpyarrow22.0.0indirecta
PyPIpycparser3.0indirecta
PyPIpydantic-core2.41.5indirecta
PyPIpydantic-settings2.12.0indirecta
PyPIpydeck0.9.1indirecta
PyPIpyee13.0.0indirecta
PyPIpygments2.19.2indirecta
PyPIpylint4.0.4indirecta
PyPIpyparsing3.2.5indirecta
PyPIpypdfium24.30.0indirecta
PyPIpytest9.0.2indirecta
PyPIpytest-asyncio1.3.0indirecta
PyPIpytest-cov7.0.0indirecta
PyPIpytest-mock3.15.1indirecta
PyPIpytest-sugar1.1.1indirecta
PyPIpython-dateutil2.9.0.post0indirecta
PyPIpytokens0.3.0indirecta
PyPIpytz2025.2indirecta
PyPIpywin32311indirecta
PyPIpyyaml6.0.3indirecta
PyPIreferencing0.37.0indirecta
PyPIregex2025.11.3indirecta
PyPIrequests2.32.5indirecta
PyPIrequests-toolbelt1.0.0indirecta
PyPIrpds-py0.30.0indirecta
PyPIruff0.14.10indirecta
PyPIs3transfer0.16.0indirecta
PyPIsafetensors0.7.0indirecta
PyPIscrapegraphai2.2.0b3indirecta
PyPIsetuptools80.9.0indirecta
PyPIsf-hamilton1.89.0indirecta
PyPIsix1.17.0indirecta
PyPIsmmap5.0.2indirecta
PyPIsniffio1.3.1indirecta
PyPIsocksio1.0.0indirecta
PyPIsoupsieve2.8.1indirecta
PyPIsqlalchemy2.0.45indirecta
PyPIstack-data0.6.3indirecta
PyPIstarlette0.50.0indirecta
PyPIstreamlit1.52.2indirecta
PyPIsurya-ocr0.17.0indirecta
PyPIsympy1.14.0indirecta
PyPItenacity9.1.2indirecta
PyPItermcolor3.2.0indirecta
PyPItokenizers0.22.1indirecta
PyPItoml0.10.2indirecta
PyPItomlkit0.13.3indirecta
PyPItorch2.9.1indirecta
PyPItornado6.5.4indirecta
PyPItraitlets5.14.3indirecta
PyPItransformers4.57.3indirecta
PyPItriton3.5.1indirecta
PyPItypes-setuptools80.9.0.20250822indirecta
PyPItyping-extensions4.15.0indirecta
PyPItyping-inspect0.9.0indirecta
PyPItyping-inspection0.4.2indirecta
PyPItzdata2025.3indirecta
PyPIurllib32.6.2indirecta
PyPIuuid-utils0.12.0indirecta
PyPIuvicorn0.38.0indirecta
PyPIvirtualenv20.35.4indirecta
PyPIwatchdog6.0.0indirecta
PyPIwcwidth0.2.14indirecta
PyPIwidgetsnbextension4.0.15indirecta
PyPIwin32-setctime1.2.0indirecta
PyPIxxhash3.6.0indirecta
PyPIyarl1.22.0indirecta
PyPIzstandard0.25.0indirecta
Avisos de dependencias 0

Instalar pypi:scrapegraphai@2.1.6 arrastra 100 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "scraping",
        "scraping-python",
        "llm",
        "web-crawler",
        "web-scraping",
        "ai-scraping",
        "crawler",
        "markdown",
        "rag",
        "web-crawlers",
        "ai-crawler",
        "ai-search",
        "large-language-model",
        "web-data-extraction",
        "web-search",
        "web-scraper",
        "data-extraction",
        "web-data",
        "webscraping",
        "firecrawl-alternative"
      ],
      "is_fork": false,
      "size_kb": 16891,
      "has_wiki": false,
      "homepage": "https://scrapegraphai.com",
      "languages": {
        "Python": 819958,
        "Makefile": 954,
        "Dockerfile": 266
      },
      "pushed_at": "2026-07-20T14:22:20Z",
      "created_at": "2024-01-27T16:54:38Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-30T09:45:12Z",
      "description": "Python scraper based on AI",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://scrapegraphai.com/",
      "name": "ScrapeGraphAI",
      "type": "Organization",
      "login": "ScrapeGraphAI",
      "company": null,
      "location": "United States of America",
      "followers": 532,
      "avatar_url": "https://avatars.githubusercontent.com/u/171017415?v=4",
      "created_at": "2024-05-28T08:31:44Z",
      "is_verified": null,
      "public_repos": 30,
      "account_age_days": 793
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.1.6",
          "kind": "patch",
          "published_at": "2026-07-20T14:22:25Z"
        },
        {
          "tag": "v2.1.5",
          "kind": "patch",
          "published_at": "2026-07-08T15:42:43Z"
        },
        {
          "tag": "v2.1.4",
          "kind": "patch",
          "published_at": "2026-06-23T09:00:27Z"
        },
        {
          "tag": "v2.2.0-beta.5",
          "kind": "prerelease",
          "published_at": "2026-06-23T08:55:02Z"
        },
        {
          "tag": "v2.2.0-beta.4",
          "kind": "prerelease",
          "published_at": "2026-06-11T09:18:00Z"
        },
        {
          "tag": "v2.1.3",
          "kind": "patch",
          "published_at": "2026-06-02T08:37:26Z"
        },
        {
          "tag": "v2.2.0-beta.3",
          "kind": "prerelease",
          "published_at": "2026-06-01T16:33:45Z"
        },
        {
          "tag": "v2.2.0-beta.2",
          "kind": "prerelease",
          "published_at": "2026-06-01T16:30:12Z"
        },
        {
          "tag": "v2.1.2",
          "kind": "patch",
          "published_at": "2026-06-01T16:28:37Z"
        },
        {
          "tag": "v2.2.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-05-16T19:38:54Z"
        },
        {
          "tag": "v2.1.1",
          "kind": "patch",
          "published_at": "2026-05-10T13:56:17Z"
        },
        {
          "tag": "v2.1.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-04-19T08:04:35Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2026-04-19T08:02:24Z"
        },
        {
          "tag": "v1.76.0",
          "kind": "minor",
          "published_at": "2026-04-09T09:41:07Z"
        },
        {
          "tag": "v1.76.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-04-07T06:33:54Z"
        },
        {
          "tag": "v1.75.1",
          "kind": "patch",
          "published_at": "2026-03-24T18:08:54Z"
        },
        {
          "tag": "v1.75.0",
          "kind": "minor",
          "published_at": "2026-03-18T23:54:54Z"
        },
        {
          "tag": "v1.74.0",
          "kind": "minor",
          "published_at": "2026-03-15T04:58:34Z"
        },
        {
          "tag": "v1.60.0-beta.3",
          "kind": "prerelease",
          "published_at": "2026-03-15T04:58:19Z"
        },
        {
          "tag": "v1.60.0-beta.2",
          "kind": "prerelease",
          "published_at": "2026-02-24T23:29:39Z"
        },
        {
          "tag": "v1.73.1",
          "kind": "patch",
          "published_at": "2026-02-16T14:01:50Z"
        },
        {
          "tag": "v1.73.0",
          "kind": "minor",
          "published_at": "2026-01-30T15:47:25Z"
        },
        {
          "tag": "v1.72.0",
          "kind": "minor",
          "published_at": "2026-01-20T13:02:38Z"
        },
        {
          "tag": "v1.71.0",
          "kind": "minor",
          "published_at": "2026-01-05T13:44:01Z"
        },
        {
          "tag": "v1.70.0",
          "kind": "minor",
          "published_at": "2026-01-03T15:04:37Z"
        },
        {
          "tag": "v1.69.0",
          "kind": "minor",
          "published_at": "2025-12-24T07:30:22Z"
        },
        {
          "tag": "v1.68.0",
          "kind": "minor",
          "published_at": "2025-12-23T07:29:06Z"
        },
        {
          "tag": "v1.67.0",
          "kind": "minor",
          "published_at": "2025-12-19T09:03:14Z"
        },
        {
          "tag": "v1.66.0",
          "kind": "minor",
          "published_at": "2025-12-13T00:25:08Z"
        },
        {
          "tag": "v1.65.0",
          "kind": "minor",
          "published_at": "2025-12-08T16:19:37Z"
        },
        {
          "tag": "v1.64.2",
          "kind": "patch",
          "published_at": "2025-12-04T16:10:35Z"
        },
        {
          "tag": "v1.64.1",
          "kind": "patch",
          "published_at": "2025-12-03T23:10:27Z"
        },
        {
          "tag": "v1.64.0",
          "kind": "minor",
          "published_at": "2025-11-06T21:08:01Z"
        },
        {
          "tag": "v1.63.1",
          "kind": "patch",
          "published_at": "2025-10-24T02:13:09Z"
        },
        {
          "tag": "v1.63.0",
          "kind": "minor",
          "published_at": "2025-10-22T16:47:20Z"
        },
        {
          "tag": "v1.62.0",
          "kind": "minor",
          "published_at": "2025-08-13T09:50:58Z"
        },
        {
          "tag": "v1.61.0",
          "kind": "minor",
          "published_at": "2025-07-03T09:51:54Z"
        },
        {
          "tag": "v1.60.0",
          "kind": "minor",
          "published_at": "2025-06-26T18:36:24Z"
        },
        {
          "tag": "v1.60.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-06-24T15:31:52Z"
        },
        {
          "tag": "v1.59.0",
          "kind": "minor",
          "published_at": "2025-06-24T07:49:51Z"
        },
        {
          "tag": "v1.58.0",
          "kind": "minor",
          "published_at": "2025-06-21T11:10:57Z"
        },
        {
          "tag": "v1.57.0",
          "kind": "minor",
          "published_at": "2025-06-13T10:42:32Z"
        },
        {
          "tag": "v1.56.0",
          "kind": "minor",
          "published_at": "2025-06-13T09:13:44Z"
        },
        {
          "tag": "v1.55.0",
          "kind": "minor",
          "published_at": "2025-06-07T14:57:22Z"
        },
        {
          "tag": "v1.54.1",
          "kind": "patch",
          "published_at": "2025-06-06T18:43:35Z"
        },
        {
          "tag": "v1.54.0",
          "kind": "minor",
          "published_at": "2025-06-06T18:03:16Z"
        },
        {
          "tag": "v1.54.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-06-06T10:47:47Z"
        },
        {
          "tag": "v1.53.0",
          "kind": "minor",
          "published_at": "2025-06-04T15:05:38Z"
        },
        {
          "tag": "v1.52.0-beta.2",
          "kind": "prerelease",
          "published_at": "2025-06-04T08:15:59Z"
        },
        {
          "tag": "v1.52.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-05-30T12:26:51Z"
        },
        {
          "tag": "v1.52.0",
          "kind": "minor",
          "published_at": "2025-05-23T10:26:59Z"
        },
        {
          "tag": "v1.51.0",
          "kind": "minor",
          "published_at": "2025-05-13T15:25:42Z"
        },
        {
          "tag": "v1.50.0",
          "kind": "minor",
          "published_at": "2025-04-29T08:06:57Z"
        },
        {
          "tag": "v1.50.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-04-29T08:06:31Z"
        },
        {
          "tag": "v1.49.0",
          "kind": "minor",
          "published_at": "2025-04-29T08:03:18Z"
        },
        {
          "tag": "v1.49.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-04-29T07:48:16Z"
        },
        {
          "tag": "v1.48.0",
          "kind": "minor",
          "published_at": "2025-04-15T13:14:36Z"
        },
        {
          "tag": "v1.48.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-04-15T13:09:55Z"
        },
        {
          "tag": "v1.47.0-beta.2",
          "kind": "prerelease",
          "published_at": "2025-04-15T13:06:57Z"
        },
        {
          "tag": "v1.47.0",
          "kind": "minor",
          "published_at": "2025-04-15T13:00:02Z"
        },
        {
          "tag": "v1.47.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-04-15T12:58:42Z"
        },
        {
          "tag": "v1.44.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-04-14T07:16:26Z"
        },
        {
          "tag": "v1.46.0",
          "kind": "minor",
          "published_at": "2025-03-27T16:26:28Z"
        },
        {
          "tag": "v1.45.0",
          "kind": "minor",
          "published_at": "2025-03-27T16:24:34Z"
        },
        {
          "tag": "v1.44.0",
          "kind": "minor",
          "published_at": "2025-03-26T07:45:33Z"
        },
        {
          "tag": "v1.43.1",
          "kind": "patch",
          "published_at": "2025-03-21T08:26:24Z"
        },
        {
          "tag": "v1.43.1-beta.1",
          "kind": "prerelease",
          "published_at": "2025-03-21T08:19:10Z"
        },
        {
          "tag": "v1.43.0",
          "kind": "minor",
          "published_at": "2025-03-13T13:37:23Z"
        },
        {
          "tag": "v1.42.1",
          "kind": "patch",
          "published_at": "2025-03-12T15:41:32Z"
        },
        {
          "tag": "v1.42.0",
          "kind": "minor",
          "published_at": "2025-03-10T10:28:56Z"
        },
        {
          "tag": "v1.41.0",
          "kind": "minor",
          "published_at": "2025-03-09T14:10:30Z"
        },
        {
          "tag": "v1.41.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-03-07T18:59:56Z"
        },
        {
          "tag": "v1.40.1",
          "kind": "patch",
          "published_at": "2025-02-27T08:41:43Z"
        },
        {
          "tag": "v1.40.0",
          "kind": "minor",
          "published_at": "2025-02-25T11:46:43Z"
        },
        {
          "tag": "v1.40.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-02-25T11:12:41Z"
        },
        {
          "tag": "v1.39.0-beta.2",
          "kind": "prerelease",
          "published_at": "2025-02-25T09:29:11Z"
        },
        {
          "tag": "v1.39.0",
          "kind": "minor",
          "published_at": "2025-02-17T15:36:55Z"
        },
        {
          "tag": "v1.39.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-02-17T11:13:09Z"
        },
        {
          "tag": "v1.38.1",
          "kind": "patch",
          "published_at": "2025-02-15T09:00:38Z"
        },
        {
          "tag": "v1.38.1-beta.1",
          "kind": "prerelease",
          "published_at": "2025-02-13T11:41:18Z"
        },
        {
          "tag": "v1.38.0",
          "kind": "minor",
          "published_at": "2025-02-09T14:10:21Z"
        },
        {
          "tag": "v1.37.1",
          "kind": "patch",
          "published_at": "2025-01-30T10:58:52Z"
        },
        {
          "tag": "v1.37.1-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-22T18:58:56Z"
        },
        {
          "tag": "v1.37.0",
          "kind": "minor",
          "published_at": "2025-01-21T20:20:17Z"
        },
        {
          "tag": "v1.36.1-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-21T19:21:27Z"
        },
        {
          "tag": "v1.36.0",
          "kind": "minor",
          "published_at": "2025-01-12T12:22:58Z"
        },
        {
          "tag": "v1.36.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-12T12:07:39Z"
        },
        {
          "tag": "v1.35.1-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-12T11:52:09Z"
        },
        {
          "tag": "v1.35.0",
          "kind": "minor",
          "published_at": "2025-01-06T18:00:07Z"
        },
        {
          "tag": "v1.35.0-beta.4",
          "kind": "prerelease",
          "published_at": "2025-01-06T17:52:35Z"
        },
        {
          "tag": "v1.35.0-beta.3",
          "kind": "prerelease",
          "published_at": "2025-01-06T15:38:34Z"
        },
        {
          "tag": "v1.35.0-beta.2",
          "kind": "prerelease",
          "published_at": "2025-01-06T14:37:47Z"
        },
        {
          "tag": "v1.35.0-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-06T14:17:57Z"
        },
        {
          "tag": "v1.34.3-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-06T08:59:47Z"
        },
        {
          "tag": "v1.34.2-beta.2",
          "kind": "prerelease",
          "published_at": "2025-01-06T08:53:49Z"
        },
        {
          "tag": "v1.34.2",
          "kind": "patch",
          "published_at": "2025-01-06T03:47:05Z"
        },
        {
          "tag": "v1.34.2-beta.1",
          "kind": "prerelease",
          "published_at": "2025-01-06T03:46:50Z"
        },
        {
          "tag": "v1.34.0-beta.16",
          "kind": "prerelease",
          "published_at": "2025-01-06T03:38:50Z"
        },
        {
          "tag": "v1.34.1",
          "kind": "patch",
          "published_at": "2025-01-04T08:29:54Z"
        },
        {
          "tag": "v1.34.0-beta.15",
          "kind": "prerelease",
          "published_at": "2025-01-03T13:03:53Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "27d9d289f964844a28006f6d7d1518e293fd49ff",
          "body": "## [2.1.6](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.5...v2.1.6) (2026-07-20)\n\n### Bug Fixes\n\n* update MiniMax model metadata and endpoints ([#1103](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1103)) ([e5f8f2b](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e5f8f2bf008cd7ce7f3d5980bf6f98e6153b2264))",
          "is_bot": false,
          "headline": "ci(release): 2.1.6 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-20T14:22:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5f8f2bf008cd7ce7f3d5980bf6f98e6153b2264",
          "body": "* fix: update MiniMax model metadata and endpoints\n\nKeep context limits, tiered costs, and regional endpoint configuration aligned with current provider documentation.\n\n* Remove documentation file per review\n\n---------\n\nCo-authored-by: octo-patch <266937838+octo-patch@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: update MiniMax model metadata and endpoints (#1103)",
          "author_name": "Octopus",
          "author_login": "octo-patch",
          "committed_at": "2026-07-20T14:20:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85b3d1beec19252b7b6d09705f7e75db45392773",
          "body": null,
          "is_bot": false,
          "headline": "Add Atlas Cloud OpenAI-compatible model wrapper (#1104)",
          "author_name": "nb213",
          "author_login": "binyangzhu000-sudo",
          "committed_at": "2026-07-15T11:58:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9e0bd036a1f5def8ac92759cda90ba52e3b35e5",
          "body": "## [2.1.5](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.4...v2.1.5) (2026-07-08)\n\n### Bug Fixes\n\n* pop model_tokens so it is not forwarded to the model client ([#1100](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1100)) ([d2b970c](https://github.com/ScrapeGraphAI/Scrapegrap\n[…]\n Test Suite workflow ([#1095](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1095)) ([037a42e](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/037a42ed73354c8b3eabd9dcc28236152602ef9e))",
          "is_bot": false,
          "headline": "ci(release): 2.1.5 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-07-08T15:42:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d2b970ca77da64b6b6b91fa2353f2e41b9cfe105",
          "body": "On the plain llm-config path, _create_llm read model_tokens but never\nremoved it from llm_params, so it was splatted into init_chat_model and\nforwarded to the client. With ChatOpenAI (any OpenAI-compatible base_url)\nthis surfaced as: Completions.create() got an unexpected keyword argument\n'model_tokens'. Pop the key after consuming it, matching the model_instance\npath which already returns before the key can leak.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: pop model_tokens so it is not forwarded to the model client (#1100)",
          "author_name": "Dylan Firn",
          "author_login": "dylanpfirn",
          "committed_at": "2026-07-08T15:41:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9ad7e8496ae2f9f399392cab80118d5c74dc41bc",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-25T07:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef3523b1e1c62052b5c0e6b14cebe7933441a7e5",
          "body": "Add a comparison table and guidance clarifying the difference between\nthe open-source library and the managed cloud API (Python/JS SDKs),\nso users can pick the right option.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): add Open Source vs Managed API comparison (#1091)",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-25T07:50:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "037a42ed73354c8b3eabd9dcc28236152602ef9e",
          "body": "The Unit Tests job ran the entire tests/ tree, which includes provider\ngraph tests (tests/graphs/*), integration tests and browser/network\nsuites. Without API keys these fail, and tests/test_chromium.py launches\na real headless browser that hangs forever — the last run was killed at\nGitHub's 6h limi\n[…]\nture hang can't burn the full runner budget. The excluded suites\nshould be re-added once mocked or gated behind markers + secrets.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: run only deterministic unit suites in Test Suite workflow (#1095)",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-25T07:50:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7fc9c57a0bb861d829f38ed672e35c5ba0e6c79c",
          "body": "## [2.1.4](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.3...v2.1.4) (2026-06-23)\n\n### Bug Fixes\n\n* lazy imports to prevent torchcodec FFmpeg DLL crash on Windows ([#1089](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1089)) ([#1092](https://github.com/ScrapeGraphAI/Scrapegra\n[…]\nafb14197ec6c))\n\n### Docs\n\n* swap Integrations infographic for new API banner; fix CTA links ([71ab440](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/71ab4406867ef02c22349c2dedc18c57d8bdfdec))",
          "is_bot": false,
          "headline": "ci(release): 2.1.4 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-23T09:00:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5c2a4292174bae948731379c88aafb14197ec6c",
          "body": "…#1089) (#1092)\n\nRemove BaseLoader inheritance from ChromiumLoader and use lazy imports\nfor PyPDFLoader and AsyncChromiumLoader to avoid triggering the\nsentence_transformers -> torchcodec -> FFmpeg native DLL loading chain\nat import time, which crashes on systems where FFmpeg DLLs are not\navailable.\n[…]\nasmateLoader\n- fetch_node.py: lazy PyPDFLoader import\n- robots_node.py: lazy AsyncChromiumLoader import\n- conftest.py: torchcodec module mock\n\nCo-authored-by: Ege BULUT <egebulut.iletisim@outlook.com>",
          "is_bot": false,
          "headline": "fix: lazy imports to prevent torchcodec FFmpeg DLL crash on Windows (…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-23T08:58:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71ab4406867ef02c22349c2dedc18c57d8bdfdec",
          "body": "Replace the sgai-hero infographic with the rebuilt API banner (linked\nto scrapegraphai.com) and point the CTA links at scrapegraphai.com.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: swap Integrations infographic for new API banner; fix CTA links",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-09T07:28:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cfb815fb0bba3dfc8262a24a7ddab28e22e13893",
          "body": "## [2.1.3](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.2...v2.1.3) (2026-06-02)\n\n### Bug Fixes\n\n* **search:** restore SearchGraph by migrating DuckDuckGo backend to ddgs ([#1083](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1083)) ([2139e37](https://github.com/ScrapeGraphA\n[…]\nh-ai/commit/2139e37c0addfb9039e3b985bb33801f20e4e05b)), closes [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082) [#1082](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1082)",
          "is_bot": false,
          "headline": "ci(release): 2.1.3 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-02T08:37:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2139e37c0addfb9039e3b985bb33801f20e4e05b",
          "body": "…dgs (#1083)\n\nThe 'duckduckgo-search' package was renamed to 'ddgs'. Recent\nlangchain-community releases import 'from ddgs import DDGS' in their\nDuckDuckGoSearchResults tool, so with the old dependency installed the\ndefault SearchGraph path raised ImportError and returned no results\n(GH #1082).\n\nRep\n[…]\n 'href' field instead of regex-parsing a formatted string.\nSwap the 'duckduckgo-search' dependency for 'ddgs>=9.0.0'.\n\nFixes #1082\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(search): restore SearchGraph by migrating DuckDuckGo backend to d…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-02T08:36:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bdf69f6ce0d76fcca98e00c4005546294710c67d",
          "body": "* feat: add OpenAI Batch API support for SmartScraperMultiGraph (#1036)\n\nAdd SmartScraperMultiBatchGraph that uses the OpenAI Batch API for LLM\ncalls, providing ~50% cost savings when real-time results aren't needed.\n\nKey features:\n- SmartScraperMultiBatchGraph: 3-phase pipeline (fetch/parse → batch\n[…]\nl.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>\nCo-authored-by: Gabriele Maria Bellavia <gabriele.bellavia.m@gmail.com>\nCo-authored-by: Octopus <liyuan851277048@icloud.com>",
          "is_bot": false,
          "headline": "Pre/beta (#1081)",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-06-02T08:26:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "210c99280048863774fa27053412185a5c18150d",
          "body": "## [2.1.2](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.1...v2.1.2) (2026-06-01)\n\n### Bug Fixes\n\n* **nodes:** update outdated ChatOllama import path to langchain_ollama ([#1076](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1076)) ([e6054cb](https://github.com/ScrapeGraphAI/\n[…]\ns translated READMEs ([#1074](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/1074)) ([458d36a](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/458d36a6b83f4a412206cdbe9935a059e9d47f57))",
          "is_bot": false,
          "headline": "ci(release): 2.1.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-06-01T16:28:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e6054cbf19a7fe940899ea70b30706f676f86fa7",
          "body": "…a (#1076)\n\nCo-authored-by: bond <DELL@DESKTOP-KF74FPE>",
          "is_bot": false,
          "headline": "fix(nodes): update outdated ChatOllama import path to langchain_ollam…",
          "author_name": "wangjianjun",
          "author_login": "handsome-bond",
          "committed_at": "2026-06-01T16:27:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "458d36a6b83f4a412206cdbe9935a059e9d47f57",
          "body": "* docs: add Spanish documentation, update links, and add hero image to docs\n\n- Add new `spanish.md` documentation file inside `docs/`.\n- Update the \"[Español]\" link in all markdown files (including main `README.md`) to point to the new Spanish doc.\n- Add a hero image snippet after line 37 in all REA\n[…]\nks\n\n---------\n\nCo-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>\nCo-authored-by: EmiGM-noobsaibot <182028823+EmiGM-noobsaibot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: 📚 Standardize and fix links across translated READMEs (#1074)",
          "author_name": "Emiliano García",
          "author_login": "EmiGM-noobsaibot",
          "committed_at": "2026-05-21T16:40:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ebbf0e088b04b3d39121fc3fa1578ba84a86bd9c",
          "body": "* feat: add OpenAI Batch API support for SmartScraperMultiGraph (#1036)\n\nAdd SmartScraperMultiBatchGraph that uses the OpenAI Batch API for LLM\ncalls, providing ~50% cost savings when real-time results aren't needed.\n\nKey features:\n- SmartScraperMultiBatchGraph: 3-phase pipeline (fetch/parse → batch\n[…]\net>\nCo-authored-by: khadyottakale <khadyottakale@gmail.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>\nCo-authored-by: Gabriele Maria Bellavia <gabriele.bellavia.m@gmail.com>",
          "is_bot": false,
          "headline": "Add Italian README translation and fix outdated links (#1070) (#1071)",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-05-17T07:07:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4dea92ed73f8e118668f647b84710b330cb3a9e5",
          "body": "## [2.1.1](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.1.0...v2.1.1) (2026-05-10)\n\n### Bug Fixes\n\n* **ci:** clean stale dist artifacts before semantic-release publish ([fe5b818](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/fe5b818cfe9f8d5d26d5043c55c0e66a6ed392de))",
          "is_bot": false,
          "headline": "ci(release): 2.1.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-05-10T13:56:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe5b818cfe9f8d5d26d5043c55c0e66a6ed392de",
          "body": "The release job restored a cached ./dist from the build job (built with\nthe pre-bump version) and then semantic-release-pypi rebuilt the package\nwith the new version into the same directory. Twine then attempted to\nupload both versions; PyPI rejected the older (deleted) filename and the\nwhole upload\n[…]\n after restoring the cache and before semantic-release runs,\nso semantic-release-pypi builds and uploads only the current version.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): clean stale dist artifacts before semantic-release publish",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-05-10T13:54:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8c0abaf1988d4f46cfd0b5f28821e411c55177b2",
          "body": "## [2.1.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v2.0.0...v2.1.0) (2026-05-10)\n\n### Features\n\n* **models:** add OpenAI gpt-5.4 and gpt-5.5 family support ([c2c436d](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/c2c436d25c2f4dcad539ea1ab6dcda48e98a31c6))\n\n### chore\n\n* **docs:** drop Sphinx/RTD setup, point doc links to docs.scrapegraphai.com ([efe336e](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/efe336ec3f88da90dcc4923776e7da088278147b))",
          "is_bot": false,
          "headline": "ci(release): 2.1.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-05-10T13:48:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2c436d25c2f4dcad539ea1ab6dcda48e98a31c6",
          "body": "Add token-context entries for the latest OpenAI frontier models in both\nopenai and azure_openai registries:\n- gpt-5.5, gpt-5.5-pro (1.05M ctx) + dated snapshots (2026-04-23)\n- gpt-5.4, gpt-5.4-pro (1.05M ctx) + dated snapshots (2026-03-05)\n- gpt-5.4-mini, gpt-5.4-nano (400K ctx) + dated snapshots (2026-03-17)\n- gpt-5.3-codex (400K ctx)\n- gpt-5.3-chat-latest (128K ctx)\n- gpt-5-2025-08-07 dated snapshot\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(models): add OpenAI gpt-5.4 and gpt-5.5 family support",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-05-10T13:47:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d4b8f69dbd61234e794f2d2e127cbe56cd8666e0",
          "body": "chore(docs): drop Sphinx/RTD setup, point links to docs.scrapegraphai.com",
          "is_bot": false,
          "headline": "Merge pull request #1067 from ScrapeGraphAI/chore/remove-sphinx-docs",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-05-04T15:55:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efe336ec3f88da90dcc4923776e7da088278147b",
          "body": "…phai.com\n\nDocumentation has moved to https://docs.scrapegraphai.com/introduction. This\nremoves the now-unused Sphinx source tree, ReadTheDocs configs, and the\ntop-level requirements*.txt files (which only held Sphinx build deps), drops\nthe `docs` extra from pyproject.toml, and updates every documentation link\nin the README, translated READMEs, examples and test docs to the new URL.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(docs): drop Sphinx/RTD setup, point doc links to docs.scrapegra…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-05-04T15:39:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "af1229e12ce04f7cea6aee7fb1a15e085ade4f3f",
          "body": "## [2.0.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.76.0...v2.0.0) (2026-04-19)\n\n### ⚠ BREAKING CHANGES\n\n* requires scrapegraph-py v2.0.0+\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n### Features\n\n* add scrapegraph-py PR [#84](https://github.com/ScrapeGra\n[…]\napeGraphAI/scrapegraph-py/issues/82)\n\n### CI\n\n* bump min Python to 3.12 and trim test suite ([5fda03f](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/5fda03fb6bd774dee4e89661dd1eaa0ef2d2c4ed))",
          "is_bot": false,
          "headline": "ci(release): 2.0.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-04-19T08:02:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "90de842b1089dfe877358da7eb5b104af22f87eb",
          "body": "…ph-py-v2\n\nfeat!: migrate to scrapegraph-py v2 API surface",
          "is_bot": false,
          "headline": "Merge pull request #1058 from ScrapeGraphAI/feat/migrate-to-scrapegra…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-19T08:01:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39b2152ea4a454ef418417148825b1adb541c6c2",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add banner image to README",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-19T08:00:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "629fabc67180e984127ab2668ae50cfc7fe8559b",
          "body": "Removed the hero image section from the README.",
          "is_bot": false,
          "headline": "Remove hero image from README",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-19T07:58:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4a451278b5840a105ff8d1f2d6206be3ad5c792",
          "body": "Removed CodeQL badge from the README.",
          "is_bot": false,
          "headline": "Remove CodeQL badge from README",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-19T07:57:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3958e3ddf0062c5419a0c8f2dd633ac2b8553cd7",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-19T07:55:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fda03fb6bd774dee4e89661dd1eaa0ef2d2c4ed",
          "body": "scrapegraph-py 2.0.0 requires Python >=3.12, so bump the project's\nrequires-python to match. Simplify the test workflow to a single\nunit-test job on Python 3.12 / ubuntu-latest.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: bump min Python to 3.12 and trim test suite",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-19T07:54:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "69035c6b46dcf18bcf346d4d7956713799677e87",
          "body": null,
          "is_bot": false,
          "headline": "update images",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-17T08:17:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8b2a28f4708882ca6cedfdd979b37dda26ef6c2",
          "body": "Support both the v2 Client API (PR #82) and the newer ScrapeGraphAI API\n(PR #84) which uses Pydantic request models and ApiResult[T] wrappers.\n\n- Add scrapegraph_py_compat helper with runtime API detection\n- Route smart_scraper_graph through the compat layer\n- Add v3-style examples for extract, search, and scrape\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add scrapegraph-py PR #84 SDK compatibility",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-17T07:55:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c0f5fd592395f7f0e54bdf7367f3aff46bb6e420",
          "body": "- Pass output_schema to extract() so Pydantic schemas are forwarded to the v2 API\n- Use context manager pattern (with Client(...) as client) for proper resource cleanup\n- Simplify examples to match the v2 SDK style from scrapegraph-py\n- Remove unused sgai_logger import (v2 client handles its own logging)\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: align with scrapegraph-py v2 API surface from PR #82",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-09T09:46:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e56a156f4eb12505958c23bb08bd57b6d98bd0d3",
          "body": "## [1.76.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.75.1...v1.76.0) (2026-04-09)\n\n### Features\n\n* add PlasmateLoader as lightweight scraping backend (no Chrome needed) ([9dd1fb5](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/9dd1fb54ed2ad08e968444cde0cd052f0c32f60a)), clo\n[…]\npeGraphAI/Scrapegraph-ai/issues/1055)\n\n### CI\n\n* reduce GitHub Actions costs by ~85% on PRs ([403080a](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/403080ad82c2097b111d3472cc0c6d4ee709c6fe))",
          "is_bot": false,
          "headline": "ci(release): 1.76.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-04-09T09:40:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1238738baf069d18d1bca8a24c401a21b087bc75",
          "body": "feat: add PlasmateLoader as lightweight scraping backend (no Chrome needed)",
          "is_bot": false,
          "headline": "Merge pull request #1062 from dbhurley/feat/plasmate-loader",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-04-09T09:39:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dd1fb54ed2ad08e968444cde0cd052f0c32f60a",
          "body": "…eeded)\n\nCloses #1055\n\nPlasmate (https://github.com/plasmate-labs/plasmate) is an open-source\nRust browser engine that outputs Structured Object Model (SOM) instead\nof raw HTML. It requires no Chrome process, uses ~64MB RAM per session\nvs ~300MB, and delivers 10-100x fewer tokens per page.\n\nChanges:\n[…]\ndocs = loader.load()\n\n  # Or via FetchNode config:\n  graph_config = {\n      'plasmate': {\n          'output_format': 'text',\n          'timeout': 30,\n          'fallback_to_chrome': False,\n      }\n  }",
          "is_bot": false,
          "headline": "feat: add PlasmateLoader as lightweight scraping backend (no Chrome n…",
          "author_name": "David Hurley",
          "author_login": "dbhurley",
          "committed_at": "2026-04-08T10:58:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd23bb0544b3bb867c34b009ed7bcecda86e3ac5",
          "body": "Update all SDK usage to match the new v2 API from ScrapeGraphAI/scrapegraph-py#82:\n- smartscraper() → extract(url=, prompt=)\n- searchscraper() → search(query=)\n- markdownify() → scrape(url=)\n- Bump dependency to scrapegraph-py>=2.0.0\n\nBREAKING CHANGE: requires scrapegraph-py v2.0.0+\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat!: migrate to scrapegraph-py v2 API surface",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-31T16:41:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7b5733daec918c8087b09b6282a52bb41e138956",
          "body": "ci: reduce GitHub Actions costs by ~85% on PRs",
          "is_bot": false,
          "headline": "Merge pull request #1054 from ScrapeGraphAI/ci/reduce-actions-costs",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-24T18:21:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "403080ad82c2097b111d3472cc0c6d4ee709c6fe",
          "body": "- Limit OS matrix to ubuntu-only on PRs (macOS/Windows on push only)\n- Reduce Python matrix from 3.10/3.11/3.12 to 3.10/3.12\n- Run benchmarks only on push to main\n- Run code-quality checks only on push events\n- Remove Playwright install from benchmark job\n- Delete duplicate code-quality.yml workflow\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: reduce GitHub Actions costs by ~85% on PRs",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-24T18:20:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed8685d4de332c56f574fb7440b612d1f1286a61",
          "body": "## [1.75.1](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.75.0...v1.75.1) (2026-03-24)\n\n### Bug Fixes\n\n* replace print() statements with proper logging across codebase ([1d9551a](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/1d9551aaf20be6aa39ee4f8ddd93215faae183c0))",
          "is_bot": false,
          "headline": "ci(release): 1.75.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-03-24T18:08:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7208bff89c6beb84621bcc6e03770046df8d53d5",
          "body": "…logging\n\nfix: replace print() statements with proper logging across codebase",
          "is_bot": false,
          "headline": "Merge pull request #1053 from Vikrant-Khedkar/fix/replace-print-with-…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-24T18:07:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d9551aaf20be6aa39ee4f8ddd93215faae183c0",
          "body": "  Library code should never write directly to stdout. Migrated all 13\n  print() calls to use the existing get_logger() infrastructure with\n  appropriate log levels (debug/info/warning).",
          "is_bot": false,
          "headline": "fix: replace print() statements with proper logging across codebase",
          "author_name": "Vikrant-Khedkar",
          "author_login": "Vikrant-Khedkar",
          "committed_at": "2026-03-24T10:02:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf9b87e942beedf6e9b0141600a2654e70b43239",
          "body": "## [1.75.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.74.0...v1.75.0) (2026-03-18)\n\n### Features\n\n* upgrade MiniMax default model to M2.7 ([f47be50](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/f47be507e642f00f94a0ac6300c0142b81c57371))",
          "is_bot": false,
          "headline": "ci(release): 1.75.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-03-18T23:54:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b17e76beb44428a68d870e7888c3406a7a2b79d4",
          "body": "feat: upgrade MiniMax default model to M2.7",
          "is_bot": false,
          "headline": "Merge pull request #1047 from octo-patch/feature/upgrade-minimax-m27",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-18T23:53:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f47be507e642f00f94a0ac6300c0142b81c57371",
          "body": "- Add MiniMax-M2.7 and MiniMax-M2.7-highspeed to model list\n- Set MiniMax-M2.7 as default model (first in list)\n- Keep all previous models as alternatives\n- Add unit tests for MiniMax model configuration",
          "is_bot": false,
          "headline": "feat: upgrade MiniMax default model to M2.7",
          "author_name": "octo-patch",
          "author_login": "octo-patch",
          "committed_at": "2026-03-18T09:32:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c21e5a836f00d44fc45ef000c7063bcafa47a2e",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-17T16:21:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a264b4170d0d2c051c85cee59c2217b5496b4e4e",
          "body": "## [1.74.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.73.1...v1.74.0) (2026-03-15)\n\n### Features\n\n* add MiniMax as a supported LLM provider ([6a2f8ec](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/6a2f8ecc7bdd271bc7da7bfec552c80f0e78f379))",
          "is_bot": false,
          "headline": "ci(release): 1.74.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-03-15T04:58:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d83ec571438b5a9a174d99ce20b632c080e6f4a7",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #1046 from octo-patch/feature/add-minimax-provider",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-03-15T04:57:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a2f8ecc7bdd271bc7da7bfec552c80f0e78f379",
          "body": "MiniMax provides an OpenAI-compatible API, making integration\nstraightforward. This adds:\n\n- MiniMax model wrapper class (OpenAI-compatible)\n- Model token mappings for MiniMax-M1, M2, and M2.5 models\n- Provider routing in abstract_graph factory\n- README update listing MiniMax as a supported provider",
          "is_bot": false,
          "headline": "feat: add MiniMax as a supported LLM provider",
          "author_name": "octo-patch",
          "author_login": "octo-patch",
          "committed_at": "2026-03-14T14:54:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09fa945144b409fd1fcaa324bb6caa1ef7222d5e",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #1042 from ramanathnk/agentic-bench-recigcdpkcukczsgs",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-02-24T23:28:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4390214f7748bfb2440ecc6702aa455d37f2914",
          "body": null,
          "is_bot": false,
          "headline": "Add initial test file",
          "author_name": "ramanathnk",
          "author_login": "ramanathnk",
          "committed_at": "2026-02-23T00:10:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6fef1f2afe0c4a2ff68e362dded63ccd191867a",
          "body": "## [1.73.1](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.73.0...v1.73.1) (2026-02-16)\n\n### Bug Fixes\n\n* handle list content in telemetry event validation ([b17b154](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/b17b154bff044f0042d9982eb3408a98fe9aed98))",
          "is_bot": false,
          "headline": "ci(release): 1.73.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-02-16T14:01:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abfa8f1fe77cf56375440c15a1919514d05b5e67",
          "body": "…point\n\nuse custom api for tracing",
          "is_bot": false,
          "headline": "Merge pull request #1038 from Vikrant-Khedkar/feat/custom-tracing-end…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-02-16T13:30:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96dc59c7971a9cdad6de4d677d016f1882cd7f60",
          "body": null,
          "is_bot": false,
          "headline": "remove client side validation to save cpu usage for user",
          "author_name": "Vikrant-Khedkar",
          "author_login": "Vikrant-Khedkar",
          "committed_at": "2026-02-16T10:11:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b17b154bff044f0042d9982eb3408a98fe9aed98",
          "body": null,
          "is_bot": false,
          "headline": "fix: handle list content in telemetry event validation",
          "author_name": "Vikrant-Khedkar",
          "author_login": "Vikrant-Khedkar",
          "committed_at": "2026-02-16T09:50:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "518945dd75ed98d86c1c1706c4383123c5e24974",
          "body": null,
          "is_bot": false,
          "headline": "use custom api for tracing",
          "author_name": "Vikrant-Khedkar",
          "author_login": "Vikrant-Khedkar",
          "committed_at": "2026-02-16T07:54:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dc19567c379ba17eb468e511753dbbb5a9ee023",
          "body": "## [1.73.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.72.0...v1.73.0) (2026-01-30)\n\n### Features\n\n* update model tokens ([9c24ecc](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/9c24ecc180926d3cb035d8c29463b63d8b7e5439))",
          "is_bot": false,
          "headline": "ci(release): 1.73.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-01-30T15:47:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c24ecc180926d3cb035d8c29463b63d8b7e5439",
          "body": null,
          "is_bot": false,
          "headline": "feat: update model tokens",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-30T15:45:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3041bba4c662361bcbc1b9d86c1fd34bc90149b",
          "body": "## [1.72.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.71.0...v1.72.0) (2026-01-20)\n\n### Features\n\n* add new tests ([f315f3a](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/f315f3a8c085892dd010fc1152b70f9b6a165671))",
          "is_bot": false,
          "headline": "ci(release): 1.72.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-01-20T13:02:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f315f3a8c085892dd010fc1152b70f9b6a165671",
          "body": null,
          "is_bot": false,
          "headline": "feat: add new tests",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-20T13:01:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "909a0c9873ec4e417a4dcdeecadfa7a2fce42b8a",
          "body": null,
          "is_bot": false,
          "headline": "add new readme",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-08T15:11:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb9029548ad1999f118031b810c7560386617cc9",
          "body": "Add format key to LLM configuration, solve bug.",
          "is_bot": false,
          "headline": "Merge pull request #1034 from adrienpacifico/patch-1",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-08T15:03:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ea2cbf7cc9aa8df059f18b26c1d8a1fc50e4b18",
          "body": "Example does not work with current configuration.\r\nAdding json format solve the issue for llama3.2.\r\n\r\n\r\nExemple is also curently long (1m26), small mods give the same results down to 10 sec on a M4 macbook.\r\n\r\n----\r\nError with  scrapegraphai v1.71.0, langchain-ollama v1.0.1 and langchain v1.2.1\r\n\r\n\n[…]\nmmunities, where users can find more information about ScrapeGraphAI and its community.\r\nFor troubleshooting, visit: https://docs.langchain.com/oss/python/langchain/errors/OUTPUT_PARSING_FAILURE \r\n```",
          "is_bot": false,
          "headline": "Add format key to LLM configuration, solve bug.",
          "author_name": "adrienpacifico",
          "author_login": "adrienpacifico",
          "committed_at": "2026-01-07T15:12:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95e430be966e6f75acc1eb5107f307929882628a",
          "body": "## [1.71.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.70.0...v1.71.0) (2026-01-05)\n\n### Features\n\n* add langchain v1.0 ([2673c26](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/2673c26b3406dcc04ac9d7797e55b1df55cc4c67))\n\n### Bug Fixes\n\n* update langchain imports for v1.0+ co\n[…]\nwer_node_k_level ([ebd909a](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/ebd909ad7442e24bc3c8f49b8c56736672d4d9fb)), closes [#995](https://github.com/ScrapeGraphAI/Scrapegraph-ai/issues/995)",
          "is_bot": false,
          "headline": "ci(release): 1.71.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-01-05T13:43:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2673c26b3406dcc04ac9d7797e55b1df55cc4c67",
          "body": null,
          "is_bot": false,
          "headline": "feat: add langchain v1.0",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-05T13:42:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ca0e950d588198a901800e14e57cc50670d8eeb",
          "body": "fix: update langchain imports for v1.0+ compatibility",
          "is_bot": false,
          "headline": "Merge pull request #1033 from majiayu000/fix/langchain-v1-compatibility",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-05T13:41:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebd909ad7442e24bc3c8f49b8c56736672d4d9fb",
          "body": "The PromptTemplate expects 'content' variable but the code was passing\n'context', causing KeyError during graph execution.\n\nFixes #995\n\nSigned-off-by: majiayu000 <1835304752@qq.com>",
          "is_bot": false,
          "headline": "fix: use 'content' instead of 'context' in generate_answer_node_k_level",
          "author_name": "majiayu000",
          "author_login": "majiayu000",
          "committed_at": "2026-01-04T12:23:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "621d3a5bba6c48937e1f654b793d7316597e86c2",
          "body": "- Change ResponseSchema and StructuredOutputParser imports to use\n  langchain_classic.output_parsers instead of langchain_core.output_parsers\n- Change create_extraction_chain import to use langchain_classic.chains\n  instead of langchain.chains\n- Add langchain-classic>=1.0.0 as explicit dependency\n- Relax async-timeout requirement to >=4.0.0 for compatibility\n\nFixes #1017\n\nSigned-off-by: majiayu000 <1835304752@qq.com>",
          "is_bot": false,
          "headline": "fix: update langchain imports for v1.0+ compatibility",
          "author_name": "majiayu000",
          "author_login": "majiayu000",
          "committed_at": "2026-01-04T12:18:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3dbbcaee2983de87ff05fbfc9f9c93d2404d028",
          "body": "## [1.70.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.69.0...v1.70.0) (2026-01-03)\n\n### Features\n\n* add tests ([ab0da22](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/ab0da2203a725c4218bdc142914fdf1c49fd22d8))",
          "is_bot": false,
          "headline": "ci(release): 1.70.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2026-01-03T15:04:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab0da2203a725c4218bdc142914fdf1c49fd22d8",
          "body": null,
          "is_bot": false,
          "headline": "feat: add tests",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2026-01-03T15:03:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ef88261f3ab90e34a91ea957f0cf85d4fe4c957",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-26T08:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0849e298ef3966daf047a18d8fc7ba49727aef11",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of https://github.com/ScrapeGraphAI/Scrapegraph-ai",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-24T07:37:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b711b44d3499616c63a3bcd72519cf52475fde2",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-24T07:31:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e6e06a7a0ea143fab55203655f94fe00896fe82",
          "body": "## [1.69.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.68.0...v1.69.0) (2025-12-24)\n\n### Features\n\n* add new banner ([e6c6060](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/e6c6060b2895d5448cf3c44a6a3dffef70499ca2))",
          "is_bot": false,
          "headline": "ci(release): 1.69.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-24T07:30:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1eb77e442167c399f7796a08ebd89679844f156e",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of https://github.com/ScrapeGraphAI/Scrapegraph-ai",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-24T07:29:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6c6060b2895d5448cf3c44a6a3dffef70499ca2",
          "body": null,
          "is_bot": false,
          "headline": "feat: add new banner",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-24T07:28:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "118b92a951f9f7c612b83c0b67b6685b0df09a27",
          "body": "## [1.68.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.67.0...v1.68.0) (2025-12-23)\n\n### Features\n\n* update of the dependencies ([484e6d7](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/484e6d7142a702227d877c7d3d75cbe02ec453f7))",
          "is_bot": false,
          "headline": "ci(release): 1.68.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-23T07:28:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "484e6d7142a702227d877c7d3d75cbe02ec453f7",
          "body": "🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: update of the dependencies",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-23T07:27:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "54b77f0f0f977b9d44d153ffec06f9b48198b421",
          "body": "Updates dependencies",
          "is_bot": false,
          "headline": "Merge pull request #1032 from jesse-peters/Updates-dependencies",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-23T07:26:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85b0a2cfe51328e5c5352d795c0a5ab85e320be5",
          "body": "## [1.67.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.66.0...v1.67.0) (2025-12-19)\n\n### Features\n\n* add benchmark ([da112db](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/da112dbe1425c27035f5a1ce18758094d97c38de))",
          "is_bot": false,
          "headline": "ci(release): 1.67.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-19T09:03:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da112dbe1425c27035f5a1ce18758094d97c38de",
          "body": null,
          "is_bot": false,
          "headline": "feat: add benchmark",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-19T09:01:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e81db730a2ef762442b2a801479fdabb2c81c756",
          "body": null,
          "is_bot": false,
          "headline": "Updates dependencies",
          "author_name": "Jesse Peters",
          "author_login": "jesse-peters",
          "committed_at": "2025-12-19T00:34:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "212f5df3a3b43da266b18b699aa9d4e5f8c4a325",
          "body": "## [1.66.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.65.0...v1.66.0) (2025-12-13)\n\n### Features\n\n* add openai gpt 5.2 ([2cd3c8c](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/2cd3c8c6d07224d1bc05ff24cf95cfa96fcf0c78))",
          "is_bot": false,
          "headline": "ci(release): 1.66.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-13T00:25:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b70afdfcec072883a7f86e6d4e1af294d29e11f2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of https://github.com/ScrapeGraphAI/Scrapegraph-ai",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-13T00:23:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cd3c8c6d07224d1bc05ff24cf95cfa96fcf0c78",
          "body": null,
          "is_bot": false,
          "headline": "feat: add openai gpt 5.2",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-13T00:23:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d121e357c5235610e0a15b2fd3f69ab5bd0dd3af",
          "body": "## [1.65.0](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.64.2...v1.65.0) (2025-12-08)\n\n### Features\n\n* empty commit ([5f07858](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/5f0785892f4ba33d31408ab200e5b002d98a8a4b))",
          "is_bot": false,
          "headline": "ci(release): 1.65.0 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-08T16:19:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f0785892f4ba33d31408ab200e5b002d98a8a4b",
          "body": null,
          "is_bot": false,
          "headline": "feat: empty commit",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-08T16:17:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f7e533e9eed86e64f30739490af58db16462c03",
          "body": "added posthog proxy",
          "is_bot": false,
          "headline": "Merge pull request #1031 from ScrapeGraphAI/posthog-proxy-implement",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-08T16:16:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e230856fbef3693307ca28f0a1bf81c5cb7cdafa",
          "body": null,
          "is_bot": false,
          "headline": "added posthog proxy",
          "author_name": "mohammadehsanansari",
          "author_login": "mdehsan873",
          "committed_at": "2025-12-08T08:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f038ca1596b2797885c9830f5d61634bf65005ff",
          "body": "## [1.64.2](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.64.1...v1.64.2) (2025-12-04)\n\n### Bug Fixes\n\n* trigger build ([c582303](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/c58230319c936a519a0e659f93ebac2fdab80947))",
          "is_bot": false,
          "headline": "ci(release): 1.64.2 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-04T16:10:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c58230319c936a519a0e659f93ebac2fdab80947",
          "body": null,
          "is_bot": false,
          "headline": "fix: trigger build",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-04T16:08:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ece2bb4fa3c9fc35875b083f0ea35ef3f6979d7d",
          "body": "…ssues\n\nFix E402 import ordering in smart_scraper_graph.py",
          "is_bot": false,
          "headline": "Merge pull request #1029 from ScrapeGraphAI/copilot/fix-e402-import-i…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-04T16:07:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bf719834dfde26541e626858e30fac68214da6d",
          "body": "…rmatting-errors\n\nFix whitespace formatting errors (W291, W292, W293)",
          "is_bot": false,
          "headline": "Merge pull request #1028 from ScrapeGraphAI/copilot/fix-whitespace-fo…",
          "author_name": "Marco Vinciguerra",
          "author_login": "VinciGit00",
          "committed_at": "2025-12-03T23:39:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ced037395140c8e164cb62d0d42a8c618f700e0f",
          "body": "Co-authored-by: VinciGit00 <88108002+VinciGit00@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Fix E402 errors in smart_scraper_graph.py by moving imports to top",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2025-12-03T23:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fc5187c66931206d9eeeeeddd96280941e328da",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2025-12-03T23:30:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6deac76bec3fd304ce1f4e8052725614bb23a258",
          "body": "Co-authored-by: VinciGit00 <88108002+VinciGit00@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Apply black and isort formatting to modified files",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2025-12-03T23:17:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cb49e450ae7e3b4c211b88fa853548d55b7df7e",
          "body": "Co-authored-by: VinciGit00 <88108002+VinciGit00@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Fix whitespace formatting errors (W291, W292, W293)",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2025-12-03T23:15:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45534125ae94635f2a9632abce37a466570a331d",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2025-12-03T23:12:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "518d1b0bcc1879f7d75c4713f67a1679bd83669a",
          "body": "## [1.64.1](https://github.com/ScrapeGraphAI/Scrapegraph-ai/compare/v1.64.0...v1.64.1) (2025-12-03)\n\n### Bug Fixes\n\n* add null check for document.body when reading scrollHeight ([6c5f7bb](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/6c5f7bb1558e378adb5acd07b81635118db711b0))\n\n### chore\n\n* \n[…]\n6ec6f7743a86355ca2d320bcfdfaa8e868101))\n* update semantic commit guide to use feat(timeout) ([dcd4f9c](https://github.com/ScrapeGraphAI/Scrapegraph-ai/commit/dcd4f9cd1a07f212b681e5f044253580adf157a7))",
          "is_bot": false,
          "headline": "ci(release): 1.64.1 [skip ci]",
          "author_name": "semantic-release-bot",
          "author_login": "semantic-release-bot",
          "committed_at": "2025-12-03T23:10:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 134,
      "latest_release_at": "2026-07-20T14:22:25Z",
      "latest_release_tag": "v2.1.6",
      "releases_from_tags": false,
      "days_since_last_push": 9,
      "active_weeks_last_year": 37,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 7.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "scrapegraphai",
          "exists": true,
          "license": null,
          "keywords": [
            "ai",
            "artificial intelligence",
            "gpt",
            "graph",
            "langchain",
            "llm",
            "machine learning",
            "natural language processing",
            "nlp",
            "openai",
            "rag",
            "scrapegraph",
            "scrapegraphai",
            "scraping",
            "web scraping",
            "web scraping library",
            "web scraping tool",
            "webscraping",
            "Intended Audience :: Developers",
            "Operating System :: OS Independent",
            "Programming Language :: Python :: 3",
            "Topic :: Software Development :: Libraries :: Python Modules"
          ],
          "ecosystem": "pypi",
          "matches_repo": null,
          "registry_url": "https://pypi.org/project/scrapegraphai/",
          "is_deprecated": false,
          "latest_version": "2.1.6",
          "repository_url": null,
          "versions_count": 475,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2024-02-17T13:46:48.054687Z",
          "latest_published_at": "2026-07-20T14:22:23.575432Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 2807,
      "stars": 28790,
      "watchers": 166,
      "fork_history": {
        "days": [
          {
            "date": "2025-11-12",
            "count": 2
          },
          {
            "date": "2025-11-13",
            "count": 3
          },
          {
            "date": "2025-11-14",
            "count": 2
          },
          {
            "date": "2025-11-15",
            "count": 1
          },
          {
            "date": "2025-11-18",
            "count": 3
          },
          {
            "date": "2025-11-19",
            "count": 2
          },
          {
            "date": "2025-11-20",
            "count": 2
          },
          {
            "date": "2025-11-23",
            "count": 1
          },
          {
            "date": "2025-11-24",
            "count": 1
          },
          {
            "date": "2025-11-26",
            "count": 3
          },
          {
            "date": "2025-11-28",
            "count": 3
          },
          {
            "date": "2025-11-29",
            "count": 1
          },
          {
            "date": "2025-12-03",
            "count": 2
          },
          {
            "date": "2025-12-08",
            "count": 4
          },
          {
            "date": "2025-12-09",
            "count": 2
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2025-12-13",
            "count": 1
          },
          {
            "date": "2025-12-14",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 2
          },
          {
            "date": "2025-12-17",
            "count": 2
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-19",
            "count": 1
          },
          {
            "date": "2025-12-21",
            "count": 1
          },
          {
            "date": "2025-12-28",
            "count": 1
          },
          {
            "date": "2025-12-29",
            "count": 1
          },
          {
            "date": "2026-01-01",
            "count": 3
          },
          {
            "date": "2026-01-02",
            "count": 2
          },
          {
            "date": "2026-01-04",
            "count": 2
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-06",
            "count": 2
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-01-13",
            "count": 3
          },
          {
            "date": "2026-01-15",
            "count": 2
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-01-18",
            "count": 4
          },
          {
            "date": "2026-01-19",
            "count": 2
          },
          {
            "date": "2026-01-20",
            "count": 3
          },
          {
            "date": "2026-01-21",
            "count": 1
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-01-23",
            "count": 3
          },
          {
            "date": "2026-01-25",
            "count": 1
          },
          {
            "date": "2026-01-26",
            "count": 3
          },
          {
            "date": "2026-01-29",
            "count": 2
          },
          {
            "date": "2026-01-30",
            "count": 1
          },
          {
            "date": "2026-01-31",
            "count": 1
          },
          {
            "date": "2026-02-01",
            "count": 3
          },
          {
            "date": "2026-02-02",
            "count": 2
          },
          {
            "date": "2026-02-04",
            "count": 2
          },
          {
            "date": "2026-02-05",
            "count": 3
          },
          {
            "date": "2026-02-06",
            "count": 2
          },
          {
            "date": "2026-02-09",
            "count": 2
          },
          {
            "date": "2026-02-10",
            "count": 1
          },
          {
            "date": "2026-02-12",
            "count": 3
          },
          {
            "date": "2026-02-13",
            "count": 7
          },
          {
            "date": "2026-02-14",
            "count": 3
          },
          {
            "date": "2026-02-15",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 1
          },
          {
            "date": "2026-02-20",
            "count": 2
          },
          {
            "date": "2026-02-21",
            "count": 1
          },
          {
            "date": "2026-02-22",
            "count": 2
          },
          {
            "date": "2026-02-23",
            "count": 2
          },
          {
            "date": "2026-02-24",
            "count": 3
          },
          {
            "date": "2026-02-25",
            "count": 3
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 2
          },
          {
            "date": "2026-02-28",
            "count": 3
          },
          {
            "date": "2026-03-01",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 2
          },
          {
            "date": "2026-03-05",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-03-10",
            "count": 2
          },
          {
            "date": "2026-03-11",
            "count": 2
          },
          {
            "date": "2026-03-12",
            "count": 2
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-03-15",
            "count": 11
          },
          {
            "date": "2026-03-16",
            "count": 4
          },
          {
            "date": "2026-03-17",
            "count": 3
          },
          {
            "date": "2026-03-18",
            "count": 3
          },
          {
            "date": "2026-03-20",
            "count": 2
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 3
          },
          {
            "date": "2026-03-30",
            "count": 2
          },
          {
            "date": "2026-04-02",
            "count": 2
          },
          {
            "date": "2026-04-03",
            "count": 2
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-08",
            "count": 2
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 3
          },
          {
            "date": "2026-04-15",
            "count": 2
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-04-19",
            "count": 2
          },
          {
            "date": "2026-04-21",
            "count": 2
          },
          {
            "date": "2026-04-22",
            "count": 2
          },
          {
            "date": "2026-04-23",
            "count": 2
          },
          {
            "date": "2026-04-26",
            "count": 2
          },
          {
            "date": "2026-04-27",
            "count": 2
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-02",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 44
          },
          {
            "date": "2026-05-06",
            "count": 73
          },
          {
            "date": "2026-05-07",
            "count": 29
          },
          {
            "date": "2026-05-08",
            "count": 17
          },
          {
            "date": "2026-05-09",
            "count": 11
          },
          {
            "date": "2026-05-10",
            "count": 14
          },
          {
            "date": "2026-05-11",
            "count": 13
          },
          {
            "date": "2026-05-12",
            "count": 23
          },
          {
            "date": "2026-05-13",
            "count": 16
          },
          {
            "date": "2026-05-14",
            "count": 11
          },
          {
            "date": "2026-05-15",
            "count": 9
          },
          {
            "date": "2026-05-16",
            "count": 11
          },
          {
            "date": "2026-05-17",
            "count": 5
          },
          {
            "date": "2026-05-18",
            "count": 6
          },
          {
            "date": "2026-05-19",
            "count": 11
          },
          {
            "date": "2026-05-20",
            "count": 9
          },
          {
            "date": "2026-05-21",
            "count": 4
          },
          {
            "date": "2026-05-22",
            "count": 3
          },
          {
            "date": "2026-05-23",
            "count": 4
          },
          {
            "date": "2026-05-24",
            "count": 27
          },
          {
            "date": "2026-05-25",
            "count": 5
          },
          {
            "date": "2026-05-26",
            "count": 21
          },
          {
            "date": "2026-05-27",
            "count": 24
          },
          {
            "date": "2026-05-28",
            "count": 8
          },
          {
            "date": "2026-05-29",
            "count": 11
          },
          {
            "date": "2026-05-30",
            "count": 6
          },
          {
            "date": "2026-05-31",
            "count": 8
          },
          {
            "date": "2026-06-01",
            "count": 4
          },
          {
            "date": "2026-06-02",
            "count": 4
          },
          {
            "date": "2026-06-03",
            "count": 2
          },
          {
            "date": "2026-06-04",
            "count": 2
          },
          {
            "date": "2026-06-05",
            "count": 4
          },
          {
            "date": "2026-06-06",
            "count": 6
          },
          {
            "date": "2026-06-07",
            "count": 17
          },
          {
            "date": "2026-06-08",
            "count": 7
          },
          {
            "date": "2026-06-09",
            "count": 10
          },
          {
            "date": "2026-06-10",
            "count": 11
          },
          {
            "date": "2026-06-11",
            "count": 7
          },
          {
            "date": "2026-06-12",
            "count": 7
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 11
          },
          {
            "date": "2026-06-15",
            "count": 5
          },
          {
            "date": "2026-06-16",
            "count": 7
          },
          {
            "date": "2026-06-17",
            "count": 5
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-19",
            "count": 6
          },
          {
            "date": "2026-06-20",
            "count": 5
          },
          {
            "date": "2026-06-21",
            "count": 2
          },
          {
            "date": "2026-06-22",
            "count": 3
          },
          {
            "date": "2026-06-23",
            "count": 3
          },
          {
            "date": "2026-06-24",
            "count": 18
          },
          {
            "date": "2026-06-25",
            "count": 9
          },
          {
            "date": "2026-06-26",
            "count": 11
          },
          {
            "date": "2026-06-27",
            "count": 12
          },
          {
            "date": "2026-06-28",
            "count": 10
          },
          {
            "date": "2026-06-29",
            "count": 7
          },
          {
            "date": "2026-06-30",
            "count": 3
          },
          {
            "date": "2026-07-01",
            "count": 6
          },
          {
            "date": "2026-07-02",
            "count": 7
          },
          {
            "date": "2026-07-03",
            "count": 5
          },
          {
            "date": "2026-07-04",
            "count": 3
          },
          {
            "date": "2026-07-05",
            "count": 6
          },
          {
            "date": "2026-07-06",
            "count": 15
          },
          {
            "date": "2026-07-07",
            "count": 9
          },
          {
            "date": "2026-07-08",
            "count": 6
          },
          {
            "date": "2026-07-09",
            "count": 7
          },
          {
            "date": "2026-07-10",
            "count": 4
          },
          {
            "date": "2026-07-11",
            "count": 6
          },
          {
            "date": "2026-07-12",
            "count": 5
          },
          {
            "date": "2026-07-13",
            "count": 13
          },
          {
            "date": "2026-07-14",
            "count": 4
          },
          {
            "date": "2026-07-15",
            "count": 3
          },
          {
            "date": "2026-07-16",
            "count": 4
          },
          {
            "date": "2026-07-17",
            "count": 5
          },
          {
            "date": "2026-07-18",
            "count": 4
          },
          {
            "date": "2026-07-19",
            "count": 3
          },
          {
            "date": "2026-07-20",
            "count": 8
          },
          {
            "date": "2026-07-21",
            "count": 6
          },
          {
            "date": "2026-07-22",
            "count": 5
          },
          {
            "date": "2026-07-23",
            "count": 4
          },
          {
            "date": "2026-07-25",
            "count": 1
          },
          {
            "date": "2026-07-26",
            "count": 1
          },
          {
            "date": "2026-07-27",
            "count": 2
          },
          {
            "date": "2026-07-28",
            "count": 6
          },
          {
            "date": "2026-07-29",
            "count": 10
          },
          {
            "date": "2026-07-30",
            "count": 1
          }
        ],
        "complete": false,
        "collected": 1000,
        "total_forks": 2807
      },
      "star_history": null,
      "open_issues_and_prs": 13
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples",
        "notebooks"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 76219,
      "source_files_sampled": 263,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 100,
        "malicious_count": 0,
        "assessed_package": "pypi:scrapegraphai@2.1.6",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "langchain",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.2.0"
        },
        {
          "name": "langchain-classic",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langchain-openai",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.6"
        },
        {
          "name": "langchain-mistralai",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.1"
        },
        {
          "name": "langchain_community",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.0"
        },
        {
          "name": "langchain-aws",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.0"
        },
        {
          "name": "langchain-ollama",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.1"
        },
        {
          "name": "html2text",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2025.4.15"
        },
        {
          "name": "beautifulsoup4",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.14.3"
        },
        {
          "name": "python-dotenv",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.2.1"
        },
        {
          "name": "tiktoken",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.12.0"
        },
        {
          "name": "tqdm",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.67.1"
        },
        {
          "name": "minify-html",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.18.1"
        },
        {
          "name": "free-proxy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.3"
        },
        {
          "name": "playwright",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.57.0"
        },
        {
          "name": "undetected-playwright",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.3.0"
        },
        {
          "name": "semchunk",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.2.5"
        },
        {
          "name": "async-timeout",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0"
        },
        {
          "name": "simpleeval",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.3"
        },
        {
          "name": "jsonschema",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.25.1"
        },
        {
          "name": "ddgs",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=9.0.0"
        },
        {
          "name": "pydantic",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.12.5"
        },
        {
          "name": "scrapegraph-py",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "async-timeout",
            "direct": true,
            "version": "5.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "beautifulsoup4",
            "direct": true,
            "version": "4.14.3",
            "ecosystem": "pypi"
          },
          {
            "name": "ddgs",
            "direct": true,
            "version": "9.14.4",
            "ecosystem": "pypi"
          },
          {
            "name": "free-proxy",
            "direct": true,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "html2text",
            "direct": true,
            "version": "2025.4.15",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": true,
            "version": "4.25.1",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain",
            "direct": true,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-aws",
            "direct": true,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-classic",
            "direct": true,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-community",
            "direct": true,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-mistralai",
            "direct": true,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-ollama",
            "direct": true,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-openai",
            "direct": true,
            "version": "1.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "minify-html",
            "direct": true,
            "version": "0.18.1",
            "ecosystem": "pypi"
          },
          {
            "name": "playwright",
            "direct": true,
            "version": "1.57.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": true,
            "version": "2.12.5",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dotenv",
            "direct": true,
            "version": "1.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "scrapegraph-py",
            "direct": true,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "semchunk",
            "direct": true,
            "version": "3.2.5",
            "ecosystem": "pypi"
          },
          {
            "name": "simpleeval",
            "direct": true,
            "version": "1.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "tiktoken",
            "direct": true,
            "version": "0.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": true,
            "version": "4.67.1",
            "ecosystem": "pypi"
          },
          {
            "name": "undetected-playwright",
            "direct": true,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "aiofiles",
            "direct": false,
            "version": "25.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohappyeyeballs",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohttp",
            "direct": false,
            "version": "3.13.2",
            "ecosystem": "pypi"
          },
          {
            "name": "aiosignal",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "altair",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-doc",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "astroid",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "asttokens",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": false,
            "version": "25.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "black",
            "direct": false,
            "version": "25.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "blinker",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "boto3",
            "direct": false,
            "version": "1.42.13",
            "ecosystem": "pypi"
          },
          {
            "name": "botocore",
            "direct": false,
            "version": "1.42.13",
            "ecosystem": "pypi"
          },
          {
            "name": "brotli",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "brotlicffi",
            "direct": false,
            "version": "1.2.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "burr",
            "direct": false,
            "version": "0.22.1",
            "ecosystem": "pypi"
          },
          {
            "name": "cachetools",
            "direct": false,
            "version": "6.2.4",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2025.11.12",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cfgv",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "comm",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "contourpy",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cycler",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "dataclasses-json",
            "direct": false,
            "version": "0.6.7",
            "ecosystem": "pypi"
          },
          {
            "name": "decorator",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "dill",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "distlib",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "distro",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "einops",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "pypi"
          },
          {
            "name": "executing",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "fake-useragent",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi",
            "direct": false,
            "version": "0.125.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi-pagination",
            "direct": false,
            "version": "0.15.3",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.20.1",
            "ecosystem": "pypi"
          },
          {
            "name": "filetype",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fonttools",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "pypi"
          },
          {
            "name": "frozenlist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fsspec",
            "direct": false,
            "version": "2025.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gitdb",
            "direct": false,
            "version": "4.0.12",
            "ecosystem": "pypi"
          },
          {
            "name": "gitpython",
            "direct": false,
            "version": "3.1.45",
            "ecosystem": "pypi"
          },
          {
            "name": "graphviz",
            "direct": false,
            "version": "0.21",
            "ecosystem": "pypi"
          },
          {
            "name": "greenlet",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h2",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hf-xet",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hpack",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx-sse",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "huggingface-hub",
            "direct": false,
            "version": "0.36.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hyperframe",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "identify",
            "direct": false,
            "version": "2.6.15",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.11",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipython",
            "direct": false,
            "version": "9.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipython-pygments-lexers",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "ipywidgets",
            "direct": false,
            "version": "8.1.8",
            "ecosystem": "pypi"
          },
          {
            "name": "isort",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jedi",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jiter",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jmespath",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpatch",
            "direct": false,
            "version": "1.33",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpointer",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": false,
            "version": "2025.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jupyterlab-widgets",
            "direct": false,
            "version": "3.0.16",
            "ecosystem": "pypi"
          },
          {
            "name": "kiwisolver",
            "direct": false,
            "version": "1.4.9",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-core",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-nvidia-ai-endpoints",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-text-splitters",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph-checkpoint",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph-prebuilt",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph-sdk",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "langsmith",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "librt",
            "direct": false,
            "version": "0.7.4",
            "ecosystem": "pypi"
          },
          {
            "name": "loguru",
            "direct": false,
            "version": "0.7.3",
            "ecosystem": "pypi"
          },
          {
            "name": "lxml",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "marshmallow",
            "direct": false,
            "version": "3.26.1",
            "ecosystem": "pypi"
          },
          {
            "name": "matplotlib",
            "direct": false,
            "version": "3.10.8",
            "ecosystem": "pypi"
          },
          {
            "name": "matplotlib-inline",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mccabe",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mpire",
            "direct": false,
            "version": "2.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mpmath",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "multidict",
            "direct": false,
            "version": "6.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "multiprocess",
            "direct": false,
            "version": "0.70.18",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": "1.19.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "narwhals",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "networkx",
            "direct": false,
            "version": "3.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cublas-cu12",
            "direct": false,
            "version": "12.8.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cuda-cupti-cu12",
            "direct": false,
            "version": "12.8.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cuda-nvrtc-cu12",
            "direct": false,
            "version": "12.8.93",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cuda-runtime-cu12",
            "direct": false,
            "version": "12.8.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cudnn-cu12",
            "direct": false,
            "version": "9.10.2.21",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cufft-cu12",
            "direct": false,
            "version": "11.3.3.83",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cufile-cu12",
            "direct": false,
            "version": "1.13.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-curand-cu12",
            "direct": false,
            "version": "10.3.9.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cusolver-cu12",
            "direct": false,
            "version": "11.7.3.90",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cusparse-cu12",
            "direct": false,
            "version": "12.5.8.93",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-cusparselt-cu12",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nccl-cu12",
            "direct": false,
            "version": "2.27.5",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nvjitlink-cu12",
            "direct": false,
            "version": "12.8.93",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nvshmem-cu12",
            "direct": false,
            "version": "3.3.20",
            "ecosystem": "pypi"
          },
          {
            "name": "nvidia-nvtx-cu12",
            "direct": false,
            "version": "12.8.90",
            "ecosystem": "pypi"
          },
          {
            "name": "ollama",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "openai",
            "direct": false,
            "version": "2.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "opencv-python-headless",
            "direct": false,
            "version": "4.11.0.86",
            "ecosystem": "pypi"
          },
          {
            "name": "orjson",
            "direct": false,
            "version": "3.11.5",
            "ecosystem": "pypi"
          },
          {
            "name": "ormsgpack",
            "direct": false,
            "version": "1.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "25.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pandas",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "parso",
            "direct": false,
            "version": "0.8.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pastel",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pexpect",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": "10.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "poethepoet",
            "direct": false,
            "version": "0.38.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pre-commit",
            "direct": false,
            "version": "4.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "primp",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": false,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "propcache",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "protobuf",
            "direct": false,
            "version": "6.33.2",
            "ecosystem": "pypi"
          },
          {
            "name": "ptyprocess",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pure-eval",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyarrow",
            "direct": false,
            "version": "22.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": false,
            "version": "2.41.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-settings",
            "direct": false,
            "version": "2.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydeck",
            "direct": false,
            "version": "0.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyee",
            "direct": false,
            "version": "13.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pyparsing",
            "direct": false,
            "version": "3.2.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pypdfium2",
            "direct": false,
            "version": "4.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-asyncio",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-cov",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-mock",
            "direct": false,
            "version": "3.15.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-sugar",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytokens",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": "2025.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pywin32",
            "direct": false,
            "version": "311",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": false,
            "version": "0.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2025.11.3",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.5",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-toolbelt",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": false,
            "version": "0.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": "0.14.10",
            "ecosystem": "pypi"
          },
          {
            "name": "s3transfer",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "safetensors",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "scrapegraphai",
            "direct": false,
            "version": "2.2.0b3",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": false,
            "version": "80.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sf-hamilton",
            "direct": false,
            "version": "1.89.0",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "smmap",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "sniffio",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "socksio",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sqlalchemy",
            "direct": false,
            "version": "2.0.45",
            "ecosystem": "pypi"
          },
          {
            "name": "stack-data",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "starlette",
            "direct": false,
            "version": "0.50.0",
            "ecosystem": "pypi"
          },
          {
            "name": "streamlit",
            "direct": false,
            "version": "1.52.2",
            "ecosystem": "pypi"
          },
          {
            "name": "surya-ocr",
            "direct": false,
            "version": "0.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sympy",
            "direct": false,
            "version": "1.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tenacity",
            "direct": false,
            "version": "9.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "termcolor",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tokenizers",
            "direct": false,
            "version": "0.22.1",
            "ecosystem": "pypi"
          },
          {
            "name": "toml",
            "direct": false,
            "version": "0.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tomlkit",
            "direct": false,
            "version": "0.13.3",
            "ecosystem": "pypi"
          },
          {
            "name": "torch",
            "direct": false,
            "version": "2.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tornado",
            "direct": false,
            "version": "6.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "traitlets",
            "direct": false,
            "version": "5.14.3",
            "ecosystem": "pypi"
          },
          {
            "name": "transformers",
            "direct": false,
            "version": "4.57.3",
            "ecosystem": "pypi"
          },
          {
            "name": "triton",
            "direct": false,
            "version": "3.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "types-setuptools",
            "direct": false,
            "version": "80.9.0.20250822",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspect",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzdata",
            "direct": false,
            "version": "2025.3",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "uuid-utils",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "uvicorn",
            "direct": false,
            "version": "0.38.0",
            "ecosystem": "pypi"
          },
          {
            "name": "virtualenv",
            "direct": false,
            "version": "20.35.4",
            "ecosystem": "pypi"
          },
          {
            "name": "watchdog",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.2.14",
            "ecosystem": "pypi"
          },
          {
            "name": "widgetsnbextension",
            "direct": false,
            "version": "4.0.15",
            "ecosystem": "pypi"
          },
          {
            "name": "win32-setctime",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xxhash",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "yarl",
            "direct": false,
            "version": "1.22.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zstandard",
            "direct": false,
            "version": "0.25.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 227,
        "direct_count": 23,
        "indirect_count": 204
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 7,
        "merged_prs": 510,
        "open_issues": 6,
        "closed_ratio": 0.986,
        "closed_issues": 430,
        "closed_unmerged_prs": 81
      },
      "bus_factor": 1,
      "bot_contributors": 3,
      "top_contributors": [
        {
          "type": "User",
          "login": "VinciGit00",
          "commits": 1473,
          "avatar_url": "https://avatars.githubusercontent.com/u/88108002?v=4"
        },
        {
          "type": "User",
          "login": "semantic-release-bot",
          "commits": 456,
          "avatar_url": "https://avatars.githubusercontent.com/u/32174276?v=4"
        },
        {
          "type": "User",
          "login": "itsperini",
          "commits": 378,
          "avatar_url": "https://avatars.githubusercontent.com/u/19621159?v=4"
        },
        {
          "type": "User",
          "login": "f-aguzzi",
          "commits": 122,
          "avatar_url": "https://avatars.githubusercontent.com/u/62149513?v=4"
        },
        {
          "type": "User",
          "login": "vedovati-matteo",
          "commits": 64,
          "avatar_url": "https://avatars.githubusercontent.com/u/68272450?v=4"
        },
        {
          "type": "User",
          "login": "lurenss",
          "commits": 52,
          "avatar_url": "https://avatars.githubusercontent.com/u/38807022?v=4"
        },
        {
          "type": "User",
          "login": "shenghongtw",
          "commits": 17,
          "avatar_url": "https://avatars.githubusercontent.com/u/91253936?v=4"
        },
        {
          "type": "User",
          "login": "epage480",
          "commits": 16,
          "avatar_url": "https://avatars.githubusercontent.com/u/33439407?v=4"
        },
        {
          "type": "User",
          "login": "LorenzoPaleari",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/100212108?v=4"
        },
        {
          "type": "User",
          "login": "DiTo97",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/40361744?v=4"
        }
      ],
      "contributors_sampled": 97,
      "top_contributor_share": 0.521
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "codeql.yml",
        "dependency-review.yml",
        "release.yml",
        "test-suite.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "uv.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during GetBranch(pre/beta): error during branchesHandler.query: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "12 out of 14 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 5/25 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 10 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 4,
            "reason": "SAST tool is not run on all commits -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "119 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "27d9d289f964844a28006f6d7d1518e293fd49ff",
        "ran_at": "2026-07-30T09:54:38Z",
        "aggregate_score": 5.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T20:05:28Z",
      "oldest_open_prs": [
        {
          "number": 1087,
          "created_at": "2026-06-15T12:50:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1105,
          "created_at": "2026-07-13T14:30:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1111,
          "created_at": "2026-07-13T15:20:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1112,
          "created_at": "2026-07-13T16:06:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1113,
          "created_at": "2026-07-13T16:26:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1117,
          "created_at": "2026-07-28T08:34:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1119,
          "created_at": "2026-07-28T08:34:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-20T14:20:55Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 1102,
          "created_at": "2026-07-10T17:26:25Z",
          "last_comment_at": "2026-07-16T19:27:37Z",
          "last_comment_author": "sahilkanger"
        },
        {
          "number": 1115,
          "created_at": "2026-07-19T01:50:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1116,
          "created_at": "2026-07-28T08:33:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1118,
          "created_at": "2026-07-28T08:34:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1120,
          "created_at": "2026-07-28T16:56:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1121,
          "created_at": "2026-07-28T16:56:52Z",
          "last_comment_at": "2026-07-28T16:59:25Z",
          "last_comment_author": "dosubot"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ScrapeGraphAI/Scrapegraph-ai",
    "host": "github.com",
    "name": "Scrapegraph-ai",
    "owner": "ScrapeGraphAI"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 81,
      "inputs": {
        "security": 65,
        "vitality": 89,
        "community": 91,
        "governance": 70,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 89,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "commits_last_year": 134,
              "human_commit_share": 0.95,
              "days_since_last_push": 9,
              "active_weeks_last_year": 37
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 9 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "37/52 weeks with commits",
                "points": 25.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 37
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "134 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 134
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v2.1.6",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 7.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~7.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 12,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 12 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 12
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "excellent",
        "name": "Community & Adoption",
        "value": 91,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "forks": 2807,
              "stars": 28790,
              "watchers": 166,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "28,790 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 28790
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2,807 forks",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2807
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "166 watchers",
                "points": 12.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 166
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 70,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 97,
              "top_contributor_share": 0.521
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 52% of commits",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 52
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "97 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 97
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 510,
              "open_issues": 6,
              "closed_issues": 430,
              "issue_closed_ratio": 0.986,
              "closed_unmerged_prs": 81
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "99% of issues closed",
                "points": 46.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "510/591 decided PRs merged",
                "points": 33,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 510,
                      "decided": 591
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 5/25 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "followers": 532,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ScrapeGraphAI",
              "public_repos": 30,
              "account_age_days": 793
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "532 followers of ScrapeGraphAI",
                "points": 19.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 532,
                      "login": "ScrapeGraphAI"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "30 public repos, account ~2 yr old",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 30
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "scrapegraphai"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "475 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 475
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "12 out of 14 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "scraping",
                "scraping-python",
                "llm",
                "web-crawler",
                "web-scraping",
                "ai-scraping",
                "crawler",
                "markdown",
                "rag",
                "web-crawlers",
                "ai-crawler",
                "ai-search",
                "large-language-model",
                "web-data-extraction",
                "web-search",
                "web-scraper",
                "data-extraction",
                "web-data",
                "webscraping",
                "firecrawl-alternative"
              ],
              "has_wiki": false,
              "homepage": "https://scrapegraphai.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://scrapegraphai.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 65,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 5.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during GetBranch(pre/beta): error during branchesHandler.query: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "12 out of 14 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 5/25 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 4",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "119 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:scrapegraphai@2.1.6 runtime dependency closure — what installing the published package pulls in — 100 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "pypi:scrapegraphai@2.1.6",
                  "assessed": 100
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 100,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 100,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 10
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 55,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.811,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "77 of 95 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 77,
                      "sampled": 95
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "uv.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.19,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "19 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 19,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 76219,
              "source_files_sampled": 263,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/263 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 263,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples",
                "notebooks"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples, notebooks",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples, notebooks"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.14.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-30T09:55:02.659868Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/ScrapeGraphAI/Scrapegraph-ai.svg",
  "full_name": "ScrapeGraphAI/Scrapegraph-ai",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.14.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasPyPI.