openvibers/openvibe.sources Commits

Sources: 18 more Steam review-signal seeds, the same kind as Portal 2's (#44)

OP OpenVibers committed 30 days ago · db375eaa94 · 2 files, +721 −0

OpenVibe.Reviews had one game. Its Steam source, `steam-reviews-portal-2`, has run since 2026-10-07 under a checked terms note, and Portal 2's page now shows its traced aggregate.

**This PR:** 18 more seeds of exactly the same kind.
- Same endpoint (`appreviews`, recent, English, 20 a run), same robots and terms notes, same mapping: signals only, review text never mapped.
- Same limits: 60 s between requests, a 6 h poll.
- The games: Portal, Stardew Valley, Terraria, Hollow Knight, Hades, Slay the Spire, The Witcher 3, Baldur's Gate 3, Counter-Strike 2, Dota 2, Elden Ring, Celeste, Dead Cells, Valheim, Half-Life 2, Vampire Survivors, Outer Wilds and Lethal Company.
- App ids were checked against Steam's `appdetails` (name, developer, release date) on 2026-10-14.
- The seeds are inserted only: no existing entry is reformatted.
- Seeds load disabled. Each is enabled on the host after the seed run, as the Portal 2 one was.

**Tests:** `seeds` passes (each validates, creates through the registry and stays disabled). Suite: 18/18.

Changes

ddiff --git a/README.md b/README.md
iindex ef61c5b..23f22cc 100644
---- a/README.md
++++ b/README.md
@@@ -194,6 +194,7 @@ person before enabling:
| `nasa-news-releases` | news | rss | nasa.gov news-release feed |
| `nodejs-blog` | blog | rss | nodejs.org blog feed |
| `steam-reviews-portal-2` | reviews | api | Steam `appreviews` for app 620 — signals only, review text not mapped |
++| `steam-reviews-<game>` (18 more, 2026-10-14) | reviews | api | The same Steam endpoint, terms and mapping for Portal, Stardew Valley, Terraria, Hollow Knight, Hades, Slay the Spire, The Witcher 3, Baldur's Gate 3, Counter-Strike 2, Dota 2, Elden Ring, Celeste, Dead Cells, Valheim, Half-Life 2, Vampire Survivors, Outer Wilds and Lethal Company (app ids checked against Steam's appdetails) |
| `dealnews-daily` | deals | rss | dealnews.com RSS (Crawl-delay 2) |
| `staff-coupon-codes` | coupons | manual | codes a merchant published itself, entered with the evidence URL |
| `sec-xbrl-filings` | trade | rss | SEC EDGAR XBRL filings RSS (`/cgi-bin` is robots-disallowed, so the getcurrent feed is not used) |
ddiff --git a/seeds/sources.json b/seeds/sources.json
iindex 4a606ed..77b7ae4 100644
---- a/seeds/sources.json
++++ b/seeds/sources.json
@@@ -64,6 +64,726 @@
"sensitivity": "none",
"default_indexability": "noindex"
},
++ {
++ "key": "steam-reviews-portal",
++ "name": "Steam user review signals: Portal (app 400)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/400/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/400?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-stardew-valley",
++ "name": "Steam user review signals: Stardew Valley (app 413150)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/413150/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/413150?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-terraria",
++ "name": "Steam user review signals: Terraria (app 105600)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/105600/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/105600?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-hollow-knight",
++ "name": "Steam user review signals: Hollow Knight (app 367520)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/367520/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/367520?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-hades",
++ "name": "Steam user review signals: Hades (app 1145360)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/1145360/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/1145360?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-slay-the-spire",
++ "name": "Steam user review signals: Slay the Spire (app 646570)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/646570/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/646570?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-the-witcher-3-wild-hunt",
++ "name": "Steam user review signals: The Witcher 3: Wild Hunt (app 292030)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/292030/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/292030?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-baldur-s-gate-3",
++ "name": "Steam user review signals: Baldur's Gate 3 (app 1086940)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/1086940/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/1086940?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-counter-strike-2",
++ "name": "Steam user review signals: Counter-Strike 2 (app 730)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/730/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/730?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-dota-2",
++ "name": "Steam user review signals: Dota 2 (app 570)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/570/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/570?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-elden-ring",
++ "name": "Steam user review signals: Elden Ring (app 1245620)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/1245620/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/1245620?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-celeste",
++ "name": "Steam user review signals: Celeste (app 504230)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/504230/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/504230?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-dead-cells",
++ "name": "Steam user review signals: Dead Cells (app 588650)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/588650/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/588650?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-valheim",
++ "name": "Steam user review signals: Valheim (app 892970)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/892970/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/892970?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-half-life-2",
++ "name": "Steam user review signals: Half-Life 2 (app 220)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/220/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/220?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-vampire-survivors",
++ "name": "Steam user review signals: Vampire Survivors (app 1794680)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/1794680/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/1794680?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-outer-wilds",
++ "name": "Steam user review signals: Outer Wilds (app 753640)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/753640/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/753640?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
++ {
++ "key": "steam-reviews-lethal-company",
++ "name": "Steam user review signals: Lethal Company (app 1966720)",
++ "type": "api",
++ "category": "reviews",
++ "homepage_url": "https://store.steampowered.com/app/1966720/",
++ "endpoints": [
++ {
++ "url": "https://store.steampowered.com/appreviews/1966720?json=1&filter=recent&language=english&purchase_type=all&num_per_page=20",
++ "format": "json",
++ "items_path": "reviews",
++ "item_kind": "review_signal",
++ "fields": {
++ "identity": "recommendationid",
++ "published_at_epoch": "timestamp_created",
++ "updated_at_epoch": "timestamp_updated"
++ },
++ "extra": {
++ "voted_up": "voted_up",
++ "votes_up": "votes_up",
++ "votes_funny": "votes_funny",
++ "weighted_vote_score": "weighted_vote_score",
++ "playtime_at_review_min": "author.playtime_at_review",
++ "language": "language",
++ "steam_purchase": "steam_purchase",
++ "received_for_free": "received_for_free",
++ "written_during_early_access": "written_during_early_access"
++ }
++ }
++ ],
++ "robots_note": "robots.txt checked 2026-09-22: /appreviews is not disallowed.",
++ "terms_note": "Documented store endpoint (partner.steamgames.com/doc/store/getreviews); Steam's terms apply. Review text belongs to its authors and is deliberately not mapped: signals only (recommendation, votes, playtime, dates). Verify terms before enabling.",
++ "min_interval_ms": 60000,
++ "poll_interval_sec": 21600,
++ "max_items": 20,
++ "enabled": false,
++ "review_required": true,
++ "sensitivity": "none",
++ "default_indexability": "noindex"
++ },
{
"key": "dealnews-daily",
"name": "DealNews daily deals",