{"adoption": {"forks": 160, "observed_at": "2026-08-28T04:05:01.424607+00:00", "stars": 1544}, "canonical_url": "https://ross.abutalabs.com/products/headzoo-surf", "card": {"archived": false, "artifact_type": "library", "description": "Stateful programmatic web browsing in Go.", "domain": ["web-development", "crawlers", "developer-tools"], "enriched": true, "function": ["http-client", "web-scraping", "parser"], "health_score": 20, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["headzoo/surf"], "name": "headzoo/surf", "platform": ["go", "cross-platform"], "pushed_at": "2024-01-24T19:54:47+00:00", "repo": "headzoo/surf", "stars": 1544, "tags": ["virtual-browser", "goquery", "form-submission", "cookie-management", "stateful-browsing"], "topics": [], "urls": [], "use_cases": ["scrape websites with session and cookie state in Go", "programmatically log into sites and submit forms", "download pages and extract elements with CSS selectors", "simulate browser navigation with history and bookmarks", "spoof user agents when fetching web content"], "what_it_is": "Surf is a Go library that implements a stateful virtual web browser controlled programmatically. It supports cookies, history, bookmarks, user agent spoofing, form submission, and DOM traversal via jQuery-style CSS selectors.", "when_to_avoid": ["you need JavaScript rendering or a real browser engine", "you only need simple HTTP requests without state", "you need an actively developed project with frequent updates"], "when_to_choose": ["you need stateful, browser-like browsing (cookies, forms, history) rather than plain HTTP requests", "you want jQuery-style CSS selector scraping in Go", "you're building a crawler or automation script in Go"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/headzoo-surf", "repo": "headzoo/surf", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:01.424607+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:30:38.048460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c09117770ebf55895bbd0c1e7e297378e11d89036e7837831240efa6a9e9cd", "fetched_at": "2026-08-28T04:05:01.424607+00:00", "kind": "readme", "missing": false, "url": "https://github.com/headzoo/surf"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4391, "days_push": 952, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}