Overview
SENTi-radar allows you to export comprehensive sentiment analysis reports in two formats: CSV (for spreadsheet analysis) and PDF (for presentations and sharing). Exports include all dashboard data: topics, emotions, timelines, live feed, and statistics.Exported reports capture a snapshot of your current dashboard state at the moment of export.
Accessing the Export Menu
Locate the Export button
The Export button is located in the top-right corner of the dashboard, near the theme toggle and other controls. It has a download icon (⬇) and the text “Export”.
Click the Export button
A popover menu appears with two options:
- Export as CSV (spreadsheet icon)
- Export as PDF (document icon)
CSV Export Format
The CSV export is structured into five sections, each with its own header and table:Section 1: Dashboard Summary
Basic statistics about your current monitoring session.- Posts Analyzed: Total number of posts/comments/headlines processed
- Active Topics: Number of topics currently in the dashboard
- Active Alerts: Number of active crisis alerts
Section 2: Topics Overview
Detailed information about each topic being monitored.- Title: Topic name
- Hashtag: Associated hashtag
- Sentiment: positive, negative, or mixed
- Volume: Total mention count
- Change %: Hourly change percentage (+ or -)
- Crisis Level: none, low, medium, or high
- Volatility: Score from 0-100
- Summary: AI-generated summary (CSV-escaped for commas/quotes)
CSV Escaping Rules
CSV Escaping Rules
SENTi-radar automatically escapes special characters:
- Fields with commas are wrapped in double quotes
- Double quotes are escaped as
"" - Newlines are preserved within quoted fields
Section 3: Emotion Breakdown
Emotion percentages and counts for each topic.- Topic: Topic title
- Emotion: fear, anger, sadness, joy, surprise, or disgust
- Percentage: Emotion’s percentage of total (0-100)
- Count: Absolute keyword match count
Section 4: Sentiment Timeline
Historical sentiment data points (if available).- Time: Timestamp (HH:MM format)
- Positive %: Percentage of positive sentiment
- Negative %: Percentage of negative sentiment
- Neutral %: Percentage of neutral sentiment
- Volume: Conversation volume at this time point
Section 5: Live Feed
Recent social media posts captured by the monitoring system.- Platform: x, youtube, reddit, or web
- User: Username/handle (CSV-escaped)
- Emotion: Detected emotion
- Time: Relative timestamp (“2m ago”, “5m ago”)
- Text: Full post text (CSV-escaped)
PDF Export Format
The PDF export creates a professional landscape-oriented report with multiple tables and sections:Page 1: Overview & Topics
Header Section:- Title: “Sentiment Analysis Report” (20pt bold)
- Generated timestamp: “Generated: 3/12/2026, 10:30:45 AM” (10pt gray)
- 3-row table with purple header (
#4F46E5) - Columns: Metric, Value
- Striped theme for readability
- 7-column table with purple header
- Columns: Title, Hashtag, Sentiment, Volume, Change, Crisis, Volatility
- Change column shows
+42%or-15%formatting - 9pt font for compact display
Page 2: Emotion Breakdown
Emotion Breakdown Table:- 4-column table
- Columns: Topic, Emotion, Percentage, Count
- One row per emotion per topic (typically 6 emotions × N topics)
- Percentage column formatted as
35% - Striped theme
Page 3+: AI Summaries
Detailed Summaries Section:- Each topic gets its own summary block
- Topic header (10pt purple): “AI Regulation Debate (#AIRegulation)”
- Summary text (9pt dark gray): Full AI-generated summary with automatic text wrapping
- Auto-pagination if summaries exceed page height
PDFs are generated using
jsPDF with the autoTable plugin for professional table formatting.Implementation Details
The export functionality is powered by two utility functions insrc/lib/exportUtils.ts:
CSV Export Function
PDF Export Function
Export Data Interface
Export Data Interface
useTopics()hook → Real-time topic data from SupabaseuseSentimentTimeline()hook → Historical sentiment datauseLiveFeed()hook → Recent social media postsuseStats()hook → Aggregate statistics
trendingTopics, generateTrendData()).Data Sources in Exports
TheExportMenu component (src/components/ExportMenu.tsx) determines data sources:
- With Database
- Without Database
If Supabase is configured and contains data:
- Topics: Live data from
topicstable - Timeline: Historical sentiment data from
sentiment_timelinetable - Feed: Recent posts from
feedtable - Stats: Real-time aggregated counts
Use Cases
CSV Exports Are Best For:
- Data Analysis: Import into Excel, Google Sheets, or R/Python for advanced analytics
- Custom Visualizations: Create your own charts and graphs
- Database Import: Load into SQL databases or data warehouses
- Trend Tracking: Compare exports over time to identify long-term patterns
- API Integration: Parse CSV in automated workflows
PDF Exports Are Best For:
- Executive Reports: Share with stakeholders who need visual summaries
- Client Deliverables: Professional-looking reports for external clients
- Presentations: Embed in slide decks or print for meetings
- Documentation: Archive snapshots of sentiment at key moments
- Email Sharing: Send to non-technical team members
Troubleshooting
Export button is grayed out or doesn't work
Export button is grayed out or doesn't work
CSV opens with garbled text or encoding issues
CSV opens with garbled text or encoding issues
The CSV is exported with UTF-8 encoding. If you see garbled characters:In Excel:
- Don’t double-click the CSV
- Open Excel → Data tab → Get Data → From Text/CSV
- Select the file → Choose UTF-8 encoding → Load
- File → Import → Upload → Select file
- Import location: Replace spreadsheet
- Separator type: Comma
- Character encoding: UTF-8
PDF tables are cut off or overlap
PDF tables are cut off or overlap
This can happen with very long topic titles or summaries.Workarounds:
- Export as CSV instead and create custom PDF from Excel/Sheets
- Edit topic titles to be shorter before exporting
- Use landscape orientation (already default)
jsPDF automatic text wrapping (splitTextToSize()) which should handle most cases, but extremely long single words may cause issues.Export doesn't include my latest topics
Export doesn't include my latest topics
The export captures the current state of the dashboard when you click Export.Check:
- Are the topics visible on your dashboard?
- Have you analyzed them (not just searched)?
- Are they stored in the database or just in component state?
Automating Exports
While SENTi-radar doesn’t currently support scheduled exports, you can build automation using the existing code:Create an API endpoint
Add a Supabase Edge Function or API route that calls
exportCSV() or exportPDF() server-side.Schedule with cron
Use a service like GitHub Actions, Vercel Cron, or AWS EventBridge to trigger the endpoint:
- Daily at midnight
- Hourly during crisis monitoring
- On-demand via webhook
Custom Export Fields
To add custom fields to exports, modifysrc/lib/exportUtils.ts:
Adding a New CSV Section
Adding a New PDF Table
Related Resources
- Analyzing Topics - How to generate data to export
- Understanding Metrics - Interpret exported emotion and sentiment data
- Adding Data Sources - Improve export quality with more data sources