DEV Community

Cover image for Sentiment Analysis API Tutorial: Build a Customer Review Dashboard
roberto degani
roberto degani

Posted on

Sentiment Analysis API Tutorial: Build a Customer Review Dashboard

Sentiment Analysis API Tutorial: Build a Customer Review Dashboard

Customer reviews are goldmines of insight. But manually reading hundreds of reviews to understand sentiment? That's a nightmare. What if you could automatically analyze every review in seconds?

In this tutorial, I'll show you how to build a real-time sentiment analysis dashboard using the AI Text Analyzer API from RapidAPI.

The Problem

Here's what typically happens with manual review analysis:

  • Manager A spends 2 hours reading reviews
  • Manager B manually categorizes them
  • Manager C tries to identify recurring complaints
  • By the time you've processed them, the data is stale

The solution? Automate it with AI.

Architecture

Customer Reviews (CSV/JSON/API)
         ↓
   [Sentiment Analyzer]
   ├─ Sentiment Score (-1 to 1)
   ├─ Emotion Detection
   ├─ Keyword Extraction
   └─ Language Detection
         ↓
   [Interactive Dashboard]
Enter fullscreen mode Exit fullscreen mode

Getting Started

  1. Visit RapidAPI.com and create a free account
  2. Subscribe to AI Text Analyzer API
  3. Copy your API key

Python Implementation

config.py:

import os
from dotenv import load_dotenv

load_dotenv()

class SentimentAnalyzerConfig:
    def __init__(self):
        self.api_key = os.getenv('RAPIDAPI_KEY')
        self.api_host = 'ai-text-analyzer-api.p.rapidapi.com'
        self.base_url = 'https://ai-text-analyzer-api.p.rapidapi.com'

    def get_headers(self):
        return {
            'x-rapidapi-key': self.api_key,
            'x-rapidapi-host': self.api_host,
            'Content-Type': 'application/json'
        }

config = SentimentAnalyzerConfig()
Enter fullscreen mode Exit fullscreen mode

sentiment_analyzer.py:

import requests
from config import config

class SentimentAnalyzer:
    def __init__(self):
        self.headers = config.get_headers()
        self.base_url = config.base_url

    def analyze_review(self, text):
        payload = {
            'text': text,
            'language': 'auto',
            'include_emotions': True,
            'include_keywords': True
        }
        response = requests.post(
            f'{self.base_url}/analyze',
            json=payload,
            headers=self.headers,
            timeout=10
        )
        if response.status_code == 200:
            data = response.json()
            return {
                'sentiment': data.get('sentiment', {}),
                'emotions': data.get('emotions', {}),
                'keywords': data.get('keywords', [])
            }
        return None

    def analyze_batch(self, reviews):
        results = []
        scores = []
        for review in reviews:
            result = self.analyze_review(review)
            if result:
                results.append(result)
                scores.append(result['sentiment'].get('score', 0))

        positive = sum(1 for s in scores if s > 0.1)
        negative = sum(1 for s in scores if s < -0.1)
        avg = sum(scores) / len(scores) if scores else 0

        return {
            'total': len(reviews),
            'avg_sentiment': avg,
            'positive': positive,
            'negative': negative,
            'neutral': len(scores) - positive - negative,
            'details': results
        }
Enter fullscreen mode Exit fullscreen mode

JavaScript Implementation

const axios = require('axios');

class SentimentAnalyzer {
  constructor(apiKey) {
    this.client = axios.create({
      baseURL: 'https://ai-text-analyzer-api.p.rapidapi.com',
      headers: {
        'x-rapidapi-key': apiKey,
        'x-rapidapi-host': 'ai-text-analyzer-api.p.rapidapi.com'
      }
    });
  }

  async analyzeReview(text) {
    const { data } = await this.client.post('/analyze', {
      text,
      language: 'auto',
      include_emotions: true,
      include_keywords: true
    });
    return data;
  }

  async analyzeBatch(reviews) {
    const results = [];
    for (const review of reviews) {
      const result = await this.analyzeReview(review);
      results.push(result);
    }
    return results;
  }
}

module.exports = SentimentAnalyzer;
Enter fullscreen mode Exit fullscreen mode

Real-World Results

Metric Before After
Review analysis time 4-6 hours/week 5 minutes
Issues caught 30-40% 95%+
Response to complaints 2-3 days Same day
Keywords identified Manual 50+ automated

Advanced Patterns

Alert System for Negative Reviews

const analyzeAndAlert = async (review) => {
  const result = await analyzer.analyzeReview(review);
  if (result.sentiment.score < -0.5) {
    await notifySlack({
      channel: '#customer-alerts',
      text: \`Negative review detected: Score \${result.sentiment.score}\`
    });
  }
};
Enter fullscreen mode Exit fullscreen mode

Pricing

  • Free Tier: 100 requests/day — perfect for startups
  • Pro ($9.99/mo): 10,000 requests/day — production use
  • Enterprise: Custom limits and SLA

Get Started

Ready to understand your customers better?

Drop a comment if you have questions about sentiment analysis or API integration!

Top comments (0)