Steam Review Agent Lab is an upgraded, agentic Steam review analyzer. The original direction was extracting top positive and negative aspects. This version expands that into a free-form review intelligence system where a user enters a Steam App ID, asks a natural-language question, and gets a structured answer built from live Steam reviews.
The project is deliberately interview-friendly:
- No paid APIs
- No OpenAI API
- No Claude API
- Ollama only for local LLM inference
- Steam Reviews API integration
- Mock analysis mode for deterministic local analysis without Ollama
Users can ask questions like:
- What are the top positive and negative aspects?
- What are players most frustrated about?
- If the studio only has one week, what should they fix first?
- Are complaints mostly about performance, gameplay, pricing, bugs, or multiplayer?
- What would a product manager conclude from these reviews?
- What should the developer tell the community?
- Which issue would create the biggest player satisfaction improvement if fixed?
The app then:
- Fetches recent English-language reviews from Steam by App ID
- Uses an
IntentPlannerto classify the user question - Runs only the relevant specialist agents
- Produces a final, action-oriented answer plus structured outputs
- Lets the user choose how many reviews to analyze, up to 10,000
If Steam has no reviews for the app, the app returns a clean no reviews found result. If Steam cannot be reached, the app returns an empty result with a fetch warning instead of inventing data.
- Backend: Node.js + Express
- Frontend: React + Vite
- Local LLM: Ollama
- Validation: Zod
- Database: none for MVP
React + Vite
-> POST /api/analyze
Express Backend
-> Steam fetch
-> IntentPlanner
-> Selected agents
-> SummaryAgent
-> Response JSON
External services:
- Steam Reviews API:
https://store.steampowered.com/appreviews/{appId} - Ollama:
http://localhost:11434/api/generate
Planner goals:
aspect_extractionsentiment_overviewpain_point_detectiongameplay_analysisproduct_prioritizationcommunity_responsegeneral_summary
Agents:
SentimentAgent: estimates sentiment distribution and overall moodAspectAgent: extracts top positive and negative themesIssueAgent: detects recurring complaints and issue categoriesGameplayAgent: interprets gameplay, balance, bugs, performance, and multiplayer signalsProductAgent: turns findings into product priorities and short-term actionsCommunityAgent: drafts player-facing communicationSummaryAgent: answers the user question directly and combines agent outputs
This project uses Steam's reviews endpoint:
https://store.steampowered.com/appreviews/{appId}
Parameters used:
json=1filter=recentlanguage=englishpurchase_type=allreview_type=allnum_per_page=100cursor=*
Steam also supports review_type=positive and review_type=negative. Cursor pagination is handled in the backend and encoded safely with URLSearchParams. The fetcher uses Steam's num_per_page=100 maximum and keeps paginating until it reaches the user-selected reviewLimit, capped at 10,000 reviews.
steam-review-agent-lab/
backend/
src/
server.js
routes/
analyzeRoutes.js
steamRoutes.js
services/
steamService.js
llm/
ollamaClient.js
mockClient.js
llmRouter.js
planner/
intentPlanner.js
agents/
sentimentAgent.js
aspectAgent.js
issueAgent.js
gameplayAgent.js
productAgent.js
communityAgent.js
summaryAgent.js
tools/
reviewTools.js
aggregationTools.js
schemas/
analysisSchemas.js
frontend/
src/
main.jsx
App.jsx
api.js
components/
SteamAppInput.jsx
QuestionBox.jsx
ResultDashboard.jsx
AgentReportCard.jsx
README.md
.gitignore
Fetches Steam reviews.
Optional query parameters:
reviewLimit=1..10000
Request body:
{
"appId": "730",
"question": "What are the top positive and negative aspects?",
"provider": "ollama",
"reviewLimit": 1000,
"reviews": ["optional manual reviews"]
}Response shape:
{
"game": {
"appId": "730",
"source": "steam",
"requestedReviewCount": 1000,
"reviewCount": 0
},
"question": "What are the top positive and negative aspects?",
"plan": ["aspect_extraction", "sentiment_overview"],
"answer": "...",
"sentiment": {
"positive": 0,
"negative": 0,
"neutral": 0,
"mixed": 0
},
"positiveAspects": [],
"negativeAspects": [],
"issues": [],
"gameplayInsights": [],
"recommendedActions": [],
"communityMessage": "",
"agentReports": [],
"generatedBy": "ollama"
}Mock mode works immediately without Ollama. It still uses real Steam reviews, but the analysis itself is deterministic and keyword-based instead of LLM-generated.
Positive cues:
funaddictivebeautifulsmoothgreatloveexcellentimmersiveworth itreplayable
Negative cues:
bugcrashlagboringrepetitiveexpensiveservermatchmakingpay to wintoxicunbalancedstutterfps
Issue categories:
performancebugsmultiplayergameplaypricingcontentbalancecommunity
- Install Ollama.
- Start the Ollama service.
- Pull a local model:
ollama pull llama3.1- Keep Ollama available at:
http://localhost:11434
The backend calls:
POST http://localhost:11434/api/generate
It uses:
OLLAMA_MODELfrom.env- default model
llama3.1 stream: false- JSON-only prompts
- safe JSON parsing with automatic fallback to mock analysis
If Ollama is unavailable or returns invalid JSON, the app still works by keeping the same Steam reviews and switching only the analysis layer to mock mode.
cd backend
npm install
cp .env.example .env
npm run devcd frontend
npm install
npm run dev730Counter-Strike 2570Dota 2440Team Fortress 2
This MVP demonstrates:
- local LLM inference
- agent workflow design
- dynamic agent selection
- Steam API integration
- structured JSON outputs
- review analysis
- product and action recommendations
- Supabase history storage
- charts
- CSV export
- n8n scheduled weekly reports
- webhook alerts
- GitHub issue creation
- comparison before and after game updates
- trend analysis