{"adoption": {"forks": 347, "observed_at": "2026-08-28T04:04:14.102849+00:00", "stars": 1282}, "canonical_url": "https://ross.abutalabs.com/products/cryptocurrency-arbitrage", "card": {"archived": false, "artifact_type": "application", "description": "A cryptocurrency arbitrage opportunity calculator. Over 800 currencies and 50 markets.", "domain": ["fintech", "analytics"], "enriched": true, "function": ["trading", "data-science", "web-scraping", "developer-tools"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "maintenance", "member_repos": ["manu354/cryptocurrency-arbitrage"], "name": "manu354/cryptocurrency-arbitrage", "platform": ["cross-platform"], "pushed_at": "2022-05-15T19:06:22+00:00", "repo": "manu354/cryptocurrency-arbitrage", "stars": 1282, "tags": ["arbitrage", "cryptocurrency", "trading-bot", "altcoins", "price-comparison", "websockets", "nodejs", "web-server"], "topics": ["arbitrage-opportunity", "trading-bot", "cryptocurrency", "altcoins", "ethereum", "cryptocurrency-arbitrage", "bitcoin", "litecoin"], "urls": [], "use_cases": ["find cryptocurrency arbitrage opportunities across exchanges", "compare altcoin prices between 50 markets", "calculate profit margins for bitcoin and ethereum price differences", "monitor crypto price spreads in real time", "scan 800+ currencies for arbitrage pairs"], "what_it_is": "A Node.js cryptocurrency arbitrage opportunity calculator that scans over 800 currencies across 50 markets, comparing prices to find the highest profit margins between exchanges. It collects JSON price data from multiple markets, computes all price pair combinations per coin, and displays opportunities via a web frontend with WebSocket updates.", "when_to_avoid": ["you need an automated trading bot - the bot code is private and not included", "you need actively maintained software - the author has moved on and only reviews issues occasionally", "you need fee-aware, execution-ready arbitrage signals out of the box"], "when_to_choose": ["you want a ready-made scanner for cross-exchange crypto price differences", "you need broad market coverage with hundreds of coins and dozens of exchanges", "you prefer a simple Node.js tool you can configure via settings"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cryptocurrency-arbitrage", "repo": "manu354/cryptocurrency-arbitrage", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "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:14.102849+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.102849+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:57:42.930996+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ade96d8c9629214557a83a9b35193693c64e2c9a9dbc7951950515b35dae4141", "fetched_at": "2026-08-28T04:04:14.102849+00:00", "kind": "readme", "missing": false, "url": "https://github.com/manu354/cryptocurrency-arbitrage"}], "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": 3345, "days_push": 1571, "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}}