Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.14.0 · 2026-07-30 09:55 UTC

ScrapeGraphAI / Scrapegraph-ai

Python scraper based on AI

PythonMIT★ 28.790 Sterne⑂ 2.807 Forksseit Jan. 2024Auf GitHub ansehen ↗

ScrapeGraphAI/Scrapegraph-ai erreicht einen Gesundheitsindex von 81 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Community & Adoption (91/100) ab, am schwächsten bei AI Readiness (55/100). Zuletzt vor 9 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

81
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

81
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

ScrapeGraphAIOrganisation
532 Follower30 öffentliche Reposseit Mai 2024

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

89Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 9 Tagen
25.6/36Commit-Rhythmus — 37/52 Wochen mit Commits
18/18Commit-Volumen — 134 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 24 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year134
human_commit_share0,95
days_since_last_push9
active_weeks_last_year37

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 9 Tagen
27/27Release-Rhythmus — ein Release etwa alle 7,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv2.1.6
releases_from_tagsnein
days_since_latest_release9
mean_days_between_releases7,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

91Exzellent · 18 % des Gesamtindex
Wie die Bewertung erfolgt
60/60Stars — 28.790 Stars
25/25Forks — 2.807 Forks
12.3/15Watcher — 166 Watcher
Verwendete Eingangsdaten
forks2.807
stars28.790
watchers166
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

70Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
10.8/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 52 % der Commits
13.5/13.5Breite der Beitragenden — 97 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 10 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled97
top_contributor_share0,521
Wie die Bewertung erfolgt
46.1/46.8Issue-Lösungsquote — 99 % der Issues geschlossen
33/38.3PR-Annahme — 510/591 entschiedene PRs gemergt
3/15OpenSSF Scorecard: Code-Review — Found 5/25 approved changesets -- score normalized to 2
Verwendete Eingangsdaten
merged_prs510
open_issues6
closed_issues430
issue_closed_ratio0,986
closed_unmerged_prs81
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
19.6/25Reichweite des Inhabers — 532 Follower von ScrapeGraphAI
15.2/25Kontohistorie — 30 öffentliche Repos, Kontoalter ca. 2 Jahre
Verwendete Eingangsdaten
followers532
owner_typeOrganization
is_verified
owner_loginScrapeGraphAI
public_repos30
account_age_days793

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 9 Tagen
20/20Versionshistorie — 475 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesscrapegraphai
ecosystemspypi
any_deprecatednein
min_days_since_publish9

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

90Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 4 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration
9.6/9.6Pre-Commit-Hooks
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 12 out of 14 merged PRs checked by a CI test -- score normalized to 8
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_configja

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://scrapegraphai.com
10/10Repository-Beschreibung
10/10Topics — 20 Topics
0/10Wiki
Verwendete Eingangsdaten
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_wikinein
homepagehttps://scrapegraphai.com
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

65Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
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.5Lizenz — 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 — keine Daten
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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 119 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate5,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages100
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von pypi:scrapegraphai@2.1.6 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 100 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

55Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 77 von 95 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,811
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
10/10Belegte Agentenpraxis — 19 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesuv.lock
has_dockerfileja
typed_languagenein
bootstrap_filesMakefile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,19
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Python ohne Typprüfungs-Konfiguration
54.8/55Handhabbare Dateigrößen — 1/263 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes76.219
source_files_sampled263
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples, notebooks
Verwendete Eingangsdaten
example_dirsexamples, notebooks
has_mcp_signalnein
api_schema_files

Eckdaten

28.790GitHub-Sterne
97Mitwirkende
134Commits, letzte 12 Monate
9Tage seit letztem Push
100Releases
1Bus-Faktor
6offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 2.807 ⇿
0Sterne
2.807Forks
32Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

Es wird nur die jüngste Historie angezeigt — dieses Repository überschreitet das Erfassungsfenster, sodass die früheste Historie nicht erfasst wird.

1.5002.0002.5003.0002.807732025-112026-032026-07
Major 1Minor 12Patch 10
OpenSSF Scorecard 5.6 / 10
5.6Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-30 09:54 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-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
k. A.Packagingpackaging 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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities119 existing vulnerabilities detected
Direkte Abhängigkeiten 23
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten 227

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 23 direkte und 204 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

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

Die Installation von pypi:scrapegraphai@2.1.6 zieht 100 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.14.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.