{"adoption": {"forks": 199, "observed_at": "2026-08-28T04:04:27.872908+00:00", "stars": 1349}, "canonical_url": "https://ross.abutalabs.com/products/callerinfo", "card": {"archived": false, "artifact_type": "application", "description": "来电信息 - 一个获取号码归属地和其他信息（诈骗、骚扰等）的开源 Android 应用", "domain": ["android-tools", "privacy", "developer-tools"], "enriched": true, "function": ["gui", "search-engine", "plugin-system"], "health_score": 20, "homepage": null, "language": "Kotlin", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["xdtianyu/CallerInfo"], "name": "xdtianyu/CallerInfo", "platform": [], "pushed_at": "2023-02-13T21:30:56+00:00", "repo": "xdtianyu/CallerInfo", "stars": 1349, "tags": ["caller-id", "phone-number-lookup", "spam-blocking", "offline-database", "floating-window", "call-screening", "kotlin", "open-source-android-app", "android"], "topics": [], "urls": [], "use_cases": ["identify unknown callers on android", "show caller location in a floating window", "look up whether a number is spam or fraud", "query phone number info offline", "auto hang up on scam calls", "keep a history of recent calls with number info", "block calls from specific regions or prefixes"], "what_it_is": "CallerInfo is an open-source Android app that shows caller location and number information (spam, fraud, telemarketing) in a floating window during incoming calls. It supports offline lookup from a local database, online queries, customizable overlays, and an optional plugin for auto-hanging up on flagged calls.", "when_to_avoid": ["you need caller ID on iOS or non-Android platforms", "you rely on a large community-maintained spam database with frequent updates", "you need enterprise-grade call center features", "you require guaranteed ongoing maintenance, as the latest release dates to early 2023"], "when_to_choose": ["you want an open-source, ad-free caller ID app on Android", "you need offline number lookup without sending queries to the network", "you want customizable floating window display for incoming calls", "you need automatic call rejection based on fraud/spam tags or region"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/callerinfo", "repo": "xdtianyu/CallerInfo", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "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:04:27.872908+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:27.872908+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:42:24.057804+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c60ea39be74de0001cfafb714dd1035384c6aa4eb4b37c0bb9f3eec57145d89", "fetched_at": "2026-08-28T04:04:27.872908+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xdtianyu/CallerInfo"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3914, "days_push": 1297, "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}}