{"adoption": {"forks": 566, "observed_at": "2026-08-28T04:05:18.974387+00:00", "stars": 1677}, "canonical_url": "https://ross.abutalabs.com/products/openreply", "card": {"archived": false, "artifact_type": "application", "description": "Open-source ManyChat alternative: comment-dm automation + account analytics. NOTE: the link below will not allow you to OAuth; you must self-host with your own API keys.", "domain": ["social-media", "self-hosted", "web-development"], "enriched": true, "function": ["webhook", "workflow-automation", "api-framework", "analytics"], "health_score": 80, "homepage": "https://openreply.diwen.dev", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["diwenne/openreply"], "name": "diwenne/openreply", "platform": ["self-hosted"], "pushed_at": "2026-08-26T00:10:36+00:00", "repo": "diwenne/openreply", "stars": 1677, "tags": ["instagram", "comment-to-dm", "manychat-alternative", "social-media-automation", "meta-api", "nextjs", "lead-generation", "automation", "marketing", "web-server", "nodejs", "docker"], "topics": [], "urls": [], "use_cases": ["automatically DM users who comment a keyword on my Instagram reel", "replace ManyChat without paying a subscription", "send tracked links to commenters and measure click-through rates", "require users to follow my account before receiving a link", "trigger DMs from story replies with keyword matching", "track Instagram account analytics like views, reach, and follower growth", "self-host Instagram automation with my own Meta app credentials"], "what_it_is": "OpenReply is a self-hosted, open-source alternative to ManyChat for Instagram comment-to-DM automation. It watches post comments via Meta's official API, matches keywords, and sends automated private replies with tracked links, plus account analytics.", "when_to_avoid": ["you want a hosted, zero-setup service with no deployment work", "you need automation for platforms other than Instagram", "you cannot create and maintain your own Meta developer app and webhook domain", "you need multi-seat team features or enterprise support"], "when_to_choose": ["you want comment-to-DM automation without recurring subscription fees", "you need a self-hosted solution using only Meta's official API (no scraping or password sharing)", "you want full control over your automation infrastructure and data", "you need tracked links and click analytics for DM campaigns"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/openreply", "repo": "diwenne/openreply", "role": "main", "score": 57}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "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:18.974387+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:18.974387+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:41:36.182391+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc11dfbce0cf7d11d036729cd438e0fa457cbf2e47739fd0f8acda79ed93115f", "fetched_at": "2026-08-28T04:05:18.974387+00:00", "kind": "readme", "missing": false, "url": "https://github.com/diwenne/openreply"}, {"content_hash": "2d52c4ac82dd4ab853244a49531ed178d47bd454bfadab421d61f8305876516f", "fetched_at": "2026-08-29T11:15:17.044194+00:00", "kind": "homepage", "missing": false, "url": "https://openreply.diwen.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 3, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 48, "days_push": 8, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 57, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}