Skip to main content

Overview

Reportr automatically generates professional PDF reports by pulling data from multiple Google APIs, processing it with AI-powered insights, and compiling it into a branded PDF document. The entire process takes under 3 minutes.
Report Limits by Plan: Free (5/month) | Starter (25/month) | Professional (100/month) | Agency (Unlimited)Limits reset at the start of your billing cycle.

Report Generation Process

When you generate a report, Reportr follows this pipeline:
1

Data Collection

Fetches data in parallel from:
  • Google Search Console (clicks, impressions, keywords, pages)
  • Google Analytics 4 (sessions, users, traffic trends)
  • PageSpeed Insights (mobile & desktop performance scores)
2

Data Processing

  • Cross-references Search Console keywords with Analytics landing pages
  • Calculates period-over-period changes
  • Aggregates daily metrics for charts
  • Generates time-series data for trend visualization
3

AI Insights Generation

Uses Claude API to analyze data and generate 5 strategic recommendations with:
  • Specific, data-driven insights
  • Priority levels (high/medium/low)
  • Expected impact estimates
  • Actionable next steps
4

PDF Creation

Renders the report using React-PDF with:
  • Your white-label branding (if enabled)
  • Professional charts and visualizations
  • Executive summary
  • Detailed metrics and insights
5

Storage & Delivery

  • Uploads PDF to Vercel Blob storage
  • Updates database with report metadata
  • Makes PDF available for download
  • Increments client’s report counter

Starting a Report

Navigate to the Clients page and click Generate Report on any fully configured client.
The client must have both Google Search Console and GA4 configured before you can generate reports.

Report Configuration Options

Date Range Selection

Choose the time period for your report:
Pulls data from 30 days ago to yesterday. Best for monthly client reports.
Quick weekly snapshot of recent performance.
Quarterly view with longer-term trends and seasonal patterns.
Select any start and end date. Maximum range is 16 months (Google Search Console API limit).

Report Types

Reportr offers three report formats:

Executive

High-level overview
  • Key metrics summary
  • AI insights only
  • 3-5 pages
  • Perfect for C-suite

Standard

Comprehensive analysis
  • Full metrics breakdown
  • Top keywords & pages
  • Traffic trends
  • AI insights
  • 8-12 pages
  • Best for stakeholders

Custom

Tailored reporting
  • Choose specific sections
  • Include/exclude metrics
  • Add custom commentary
  • Variable page count
  • For special requests

Report Data Sources

Google Search Console

The Search Console API provides organic search performance data:
Search Console Data Structure
{
  totalClicks: 1234,
  totalImpressions: 45678,
  averagePosition: 12.3,
  averageCTR: 2.7,
  topKeywords: [
    {
      keyword: "best seo tools",
      clicks: 234,
      impressions: 5432,
      position: 3.2,
      ctr: 4.3
    }
    // ... top 10 keywords
  ],
  topPages: [
    {
      page: "https://example.com/blog/seo-guide",
      clicks: 543,
      impressions: 12345,
      position: 5.6,
      ctr: 4.4
    }
    // ... top 10 pages
  ],
  dailyData: [
    {
      date: "2025-01-15",
      clicks: 42,
      impressions: 987,
      position: 12.1,
      ctr: 4.3
    }
    // ... daily time series
  ]
}

Google Analytics 4

GA4 provides organic traffic and user behavior metrics:
Analytics Data Structure
{
  organicSessions: 2345,
  sessionsDelta: 15.3, // % change from previous period
  bounceRate: 42.5,
  averageSessionDuration: 145.2, // seconds
  topLandingPages: [
    {
      page: "/blog/seo-guide",
      sessions: 432,
      users: 387,
      bounceRate: 38.2,
      averageSessionDuration: 187.4
    }
    // ... top 10 landing pages
  ],
  trafficTrend: [
    {
      date: "2025-01-15",
      sessions: 78,
      users: 65
    }
    // ... daily traffic data
  ]
}

PageSpeed Insights

Performance scores and Core Web Vitals:
PageSpeed Data Structure
{
  url: "https://example.com",
  mobileScore: 78,
  desktopScore: 92,
  coreWebVitals: {
    lcp: 2400,  // Largest Contentful Paint (ms)
    fid: 85,    // First Input Delay (ms)
    cls: 0.08   // Cumulative Layout Shift (score)
  },
  opportunities: [
    {
      title: "Properly size images",
      description: "Serve images that are appropriately-sized...",
      savings: 1200, // milliseconds
      impact: "high"
    }
    // ... top 10 optimization opportunities
  ]
}

AI-Powered Insights

Reportr uses Claude 4.5 Sonnet to analyze your data and generate strategic recommendations.

Insight Categories

Recommendations for keyword optimization:
  • Page 2 ranking opportunities (positions 11-20)
  • Low-CTR keywords to optimize
  • Keyword cannibalization issues
  • Seasonal keyword opportunities

AI Prompt Engineering

The system sends structured data to Claude with specific instructions:
AI Insight Generation (from source)
const prompt = `
Generate exactly 5 strategic recommendations based on this SEO data.

Each recommendation MUST be:
1. SPECIFIC to this client's actual data (reference keywords, pages, metrics)
2. ACTIONABLE with clear next steps  
3. PRIORITIZED based on potential impact

DATA TO ANALYZE:
- Domain: ${domain}
- Total Clicks: ${clicks} (${clicksChange}% change)
- Average Position: ${position}
- Top Keywords: ${topKeywords.join(', ')}
- Mobile Score: ${mobileScore}/100

Return JSON with exactly 5 recommendations:
{
  "insights": [
    {
      "title": "Action-oriented title",
      "description": "2-3 sentences with specific data references",
      "priority": "high|medium|low",
      "category": "keyword|technical|content|performance",
      "expectedImpact": "Quantified expected outcome",
      "actionItems": ["Step 1", "Step 2", "Step 3"]
    }
  ]
}
`;

Fallback Insights

If AI generation fails, rule-based insights are used:
  • Mobile performance alerts (score < 75)
  • Page 2 keyword opportunities (position 8-20)
  • Content expansion strategies
  • Technical SEO foundations
  • Performance tracking recommendations

Report Sections

Standard Report Structure

1

Cover Page

  • Report title and type
  • Client name and domain
  • Report period dates
  • Your agency branding (white-label)
2

Executive Summary

  • Key metrics at a glance
  • Period-over-period changes
  • Quick wins and opportunities
  • High-priority insights
3

Search Console Metrics

  • Total clicks and impressions
  • Average position and CTR
  • Top 10 performing keywords
  • Top 10 performing pages
  • Daily trend charts
4

Analytics Metrics

  • Organic sessions and users
  • Bounce rate and session duration
  • Top landing pages
  • Traffic trend visualization
5

PageSpeed Insights

  • Mobile and desktop scores
  • Core Web Vitals breakdown
  • Performance opportunities
  • Technical optimization priorities
6

AI Strategic Recommendations

  • 5 data-driven insights
  • Priority levels and expected impact
  • Specific action items for each
  • Data sources referenced

White-Label Branding

If you have white-label enabled, reports include your custom branding:

Cover Page

  • Your agency logo
  • Company name
  • Website URL
  • Primary brand color accents

Throughout Report

  • Headers use primary color
  • Charts match brand colors
  • Footer with agency info
  • No Reportr branding

Branding Implementation

PDF Branding (from CoverPage.tsx)
const getLogoUrl = () => {
  const defaultReportrLogo = 'data:image/svg+xml;base64,...';
  
  // Use agency logo if white-label enabled
  if (data.branding.whiteLabelEnabled && data.branding.logo) {
    return data.branding.logo;
  }
  
  // Otherwise use Reportr logo
  return defaultReportrLogo;
};

const brandedStyles = createBrandedStyles(data.branding.primaryColor);

Accessing Generated Reports

After generation completes:
  1. Reports Page: View all generated reports in the Reports dashboard
  2. Client Card: See report count and last generated date on each client
  3. Direct Download: Click the PDF icon to download any report
  4. Share Link: Get a shareable link to send to clients

Report Metadata

Report Record
{
  id: "clx123...",
  title: "SEO Report - January 2025",
  status: "COMPLETED",
  pdfUrl: "https://blob.vercel-storage.com/...",
  pdfSize: 245678, // bytes
  processingStartedAt: "2025-01-15T10:30:00Z",
  processingCompletedAt: "2025-01-15T10:32:45Z",
  generationTimeMs: 165000, // 2.75 minutes
  
  // AI Insights metadata
  aiInsights: [...], // Array of insight objects
  aiInsightsSource: "ai", // or "fallback"
  aiTokensUsed: 2847,
  aiCostUsd: 0.0085,
  
  // Report data snapshot
  data: {
    clientName: "Acme Corp",
    startDate: "2025-01-01",
    endDate: "2025-01-31",
    agencyName: "Your Agency",
    gscData: {...},
    ga4Data: {...},
    pageSpeedData: {...}
  }
}

Error Handling

Error: “Rate limit exceeded. Please try again in a few minutes.”Solution: Reportr implements automatic retry with exponential backoff. Wait 5-10 minutes and try again. The system retries up to 3 times automatically.
Error: “Invalid credentials” or “Token expired”Solution: Reportr automatically refreshes expired tokens. If this fails, disconnect and reconnect the client’s Google account.
Error: “Not enough data for the selected period”Solution: Choose a longer date range or verify the client has traffic data in Google Search Console and Analytics for the selected period.
Error: “Failed to generate AI insights”Solution: The report will still be generated with rule-based insights. This doesn’t affect report quality significantly.

Performance Targets

Data Fetching
timing
30-45 seconds - Parallel API calls to Google Search Console, Analytics, and PageSpeed
AI Insights
timing
15-30 seconds - Claude API analysis and insight generation
PDF Generation
timing
20-30 seconds - React-PDF rendering and file creation
Total Time
timing
Target: Under 3 minutes end-to-endAverage: 2-2.5 minutes for standard reports

Billing & Limits

Report Counting

Each successful report generation counts against your monthly limit:
Limit Check (from source)
const limitCheck = await canGenerateReport(user.id);

if (!limitCheck.allowed) {
  return res.status(403).json({
    error: limitCheck.reason,
    currentCount: limitCheck.currentCount,
    limit: limitCheck.limit,
    upgradeRequired: true,
    billingCycle: {
      start: cycleStart,
      end: cycleEnd,
      daysRemaining: daysLeft
    }
  });
}

Upgrade Prompts

Free users see upgrade warnings after 4+ reports:
You’ve used 4 of your 5 free reports this billing cycle. Upgrade to Starter for 25 reports per cycle!

Best Practices

Consistent Scheduling

Generate reports on the same day each month (e.g., 1st of the month for previous month’s data)

Standard Date Ranges

Use consistent periods (30 days) for month-over-month comparisons

Review Before Sending

Always download and review the PDF before sharing with clients

Client Context

Add custom commentary explaining significant changes or insights

AI Insights

Deep dive into how AI recommendations work

Google Integrations

Configure Search Console and Analytics connections

White-Label Branding

Customize reports with your agency branding

Build docs developers (and LLMs) love