{"adoption": {"forks": 205, "observed_at": "2026-08-28T04:07:09.139501+00:00", "stars": 2666}, "canonical_url": "https://ross.abutalabs.com/products/twitter-web-exporter", "card": {"archived": false, "artifact_type": "plugin", "description": "Export tweets, bookmarks, lists and much more from Twitter(X) web app. (推文/书签/收藏/列表导出工具)", "domain": ["social-media", "privacy"], "enriched": true, "function": ["web-scraping", "data-science", "developer-tools"], "health_score": 100, "homepage": null, "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["prinsss/twitter-web-exporter"], "name": "prinsss/twitter-web-exporter", "platform": ["browser", "browser-extension"], "pushed_at": "2026-08-24T04:38:13+00:00", "repo": "prinsss/twitter-web-exporter", "stars": 2666, "tags": ["userscript", "tampermonkey", "twitter", "data-export", "archiver", "bookmarks", "automation", "typescript"], "topics": ["twitter", "archiver", "exporter", "twitter-api", "tampermonkey", "typescript", "userscript", "violentmonkey"], "urls": [], "use_cases": ["export my twitter bookmarks to csv", "backup tweets from any twitter user", "download all images and videos from tweets in bulk", "export twitter following and followers list", "save twitter search results", "export twitter list members", "archive my twitter likes without api key"], "what_it_is": "A UserScript (for Tampermonkey/Violentmonkey) that exports tweets, bookmarks, lists, followers, search results, and media from the Twitter/X web app as JSON, CSV, or HTML. Everything runs in the browser with no developer account or API key required, and data never leaves the user's computer.", "when_to_avoid": ["you need a headless or server-side scraping solution rather than a browser userscript", "you want to export direct messages, which is currently broken", "you need a supported, guaranteed-stable tool - it may break whenever Twitter/X changes its web app", "you don't use a userscript manager like Tampermonkey or Violentmonkey"], "when_to_choose": ["you want to export Twitter/X data without paying for API access or a developer account", "you need to bypass the 800-bookmark limit when exporting bookmarks", "you prefer a privacy-friendly tool where data stays local in your browser", "you want bulk media downloads at original quality"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/twitter-web-exporter", "repo": "prinsss/twitter-web-exporter", "role": "main", "score": 86}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "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:07:09.139501+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.139501+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:18:16.585072+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f45e722441af847b4bed3fac3cb4055c73b10faceea359bdfd4bbd157abd040e", "fetched_at": "2026-08-28T04:07:09.139501+00:00", "kind": "readme", "missing": false, "url": "https://github.com/prinsss/twitter-web-exporter"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 77, "rhythm": 74}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1078, "days_push": 9, "days_rel": 14, "gap_med": 112.5, "n_releases_24m": 7}, "score": 86, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}