Skip to main content

Quickstart Guide

This guide will walk you through setting up Reportr and generating your first AI-powered SEO report in under 10 minutes.
You’ll need a Google account and access to Google Search Console and Google Analytics 4 for the client website you want to report on.

Step 1: Sign Up & Authenticate

1

Create Your Account

Navigate to the Reportr homepage and click “Sign Up” or “Get Started”.
Reportr uses Google OAuth for authentication via NextAuth.js. Your refresh tokens are securely stored to enable automated data collection.
2

Choose Your Plan

Select a signup flow:
Start with the FREE plan (no credit card required):
  • 1 client
  • 5 reports per month
  • 14-day trial with full access
  • Email verification required
After signing up with Google, you’ll receive a verification email. Click the link to unlock your account and start your trial.
3

Sign In with Google

Click the “Sign in with Google” button. Reportr will request the following permissions:
  • Basic profile information (name, email)
  • Access to Google Search Console data
  • Access to Google Analytics 4 data
These permissions enable automated data collection for your reports.
4

Verify Your Email (Free Users Only)

If you chose the FREE plan, check your email for a verification link:
// Email verification is handled server-side
// Free users see a banner on the dashboard until verified
if (signupFlow === 'FREE' && !emailVerified) {
  // Show verification banner
  return <EmailVerificationBanner />;
}
You cannot add clients or generate reports until your email is verified (FREE plan only). Paid users skip this step.

Step 2: Add Your First Client

1

Navigate to Clients

From the dashboard, click “Manage Clients” or navigate to /dashboard/clients.
2

Create a New Client

Click “Add Client” and fill in the required information:
const clientSchema = z.object({
  name: z.string().min(2, 'Name must be at least 2 characters'),
  domain: z.string().url('Must be a valid URL'),
  contactName: z.string().optional(),
  contactEmail: z.string().email('Must be a valid email').optional(),
});
Required fields:
  • Client Name: Your client’s business name (min 2 characters)
  • Domain: Full website URL (e.g., https://example.com)
Optional fields:
  • Contact Name: Primary contact person
  • Contact Email: Client email for notifications
3

Connect Google Services

After creating the client, connect their Google accounts:
  1. Click “Connect Search Console”
  2. Select the property from the list (or enter manually)
  3. Reportr automatically detects available properties:
// Properties are fetched from the Search Console API
const sites = await searchconsole.sites.list();
// Returns: [{ siteUrl, permissionLevel }]
The system stores the gscSiteUrl for future data fetches.
Reportr uses your Google OAuth tokens to access these APIs. Tokens are automatically refreshed when they expire.

Step 3: Generate Your First Report

1

Navigate to Report Generation

Click “Generate New Report” from the dashboard or go to /generate-report.
2

Configure Report Settings

Select your report parameters:
  • Client: Choose from your connected clients
  • Date Range: Pick start and end dates (e.g., last 30 days)
  • Report Title: Give your report a descriptive name
  • Metrics: Select which metrics to include (default: users, sessions, bounceRate, conversions)
const reportData = {
  clientId: "client_abc123",
  title: "Monthly SEO Report - January 2026",
  data: {
    clientName: "Acme Corp",
    startDate: "2026-01-01",
    endDate: "2026-01-31",
    agencyName: "Your Agency", // From user.companyName
    agencyLogo: "https://...", // From user.logo
    gscData: { /* Search Console data */ },
    ga4Data: { /* Analytics data */ }
  }
};
3

Understand the Report Generation Pipeline

When you click “Generate Report”, here’s what happens:
1

API Validation

Your request is validated against plan limits:
// Check if user can generate another report
const limitCheck = await canGenerateReport(user.id);

if (!limitCheck.allowed) {
  return {
    error: limitCheck.reason,
    currentCount: limitCheck.currentCount,
    limit: limitCheck.limit,
    upgradeRequired: true
  };
}
2

Data Collection

Data is fetched in parallel from Google APIs:
const gscData = await getSearchConsoleData(
  clientId,
  startDate,
  endDate,
  siteUrl
);

// Returns:
{
  clicks: 12543,
  impressions: 156789,
  ctr: "8.00",
  position: "12.4",
  topQueries: [ /* top 25 queries */ ],
  topPages: [ /* top 25 pages */ ],
  dailyData: [ /* time-series data */ ]
}
3

AI Insights (Coming Soon)

Claude API analyzes the data:
// Future implementation
const insights = await generateAIInsights({
  gscData,
  ga4Data,
  previousPeriod // for comparison
});

// Stores:
{
  aiInsights: [ /* array of insight objects */ ],
  aiInsightsSource: "ai",
  aiTokensUsed: 1523,
  aiCostUsd: 0.02
}
4

PDF Generation

A branded PDF is created with React-PDF:
const pdf = await generatePDF({
  data: reportData,
  branding: {
    companyName: user.companyName,
    primaryColor: user.primaryColor,
    logo: user.logo
  }
});

// Upload to Vercel Blob
const pdfUrl = await uploadToBlob(pdf);
5

Report Saved

The report is saved to the database:
const report = await prisma.report.create({
  data: {
    title: "Monthly SEO Report - January 2026",
    status: "COMPLETED",
    data: reportData,
    pdfUrl: pdfUrl,
    processingStartedAt: new Date(),
    processingCompletedAt: new Date(),
    clientId: clientId,
    userId: user.id
  }
});
4

View Your Report

Once generation completes (typically < 3 minutes):
  • Navigate to /reports to see all your reports
  • Click on your new report to view details
  • Download the PDF by clicking the download button
  • Share the PDF link with your client
Reports are stored permanently and can be regenerated at any time (subject to plan limits).

Step 4: Customize Your Branding (Professional & Agency)

1

Access Settings

Navigate to your profile settings or /settings.
2

Configure White-Label Settings

Customize your agency branding:
// User model fields
{
  companyName: "Your Agency Name",       // Defaults to "{firstName}'s Agency"
  primaryColor: "#3B82F6",              // Hex color code
  logo: "https://blob.vercel.com/...", // Uploaded logo URL
  whiteLabelEnabled: true               // Professional/Agency plans
}
Your agency name appears on all generated reports.Default: {firstName}'s AgencyExample: “Digital Marketing Pros”
3

Preview Your Branding

Generate a test report to see how your branding looks on PDFs.
White-label features are only available on Professional and Agency plans, or as a $20/mo add-on to Starter.

Understanding Your Dashboard

Your dashboard at /dashboard shows:

Usage Statistics

Track clients used and reports generated this billing cycle:
// FREE: 1 client, 5 reports/month
// STARTER: 5 clients, 25 reports/month
// PROFESSIONAL: 15 clients, 75 reports/month
// AGENCY: 50 clients, 250 reports/month

Recent Reports

View your 5 most recent reports with status:
  • PENDING (queued)
  • PROCESSING (generating)
  • COMPLETED (ready)
  • FAILED (error occurred)

Active Clients

Quick access to your top 3 clients with report counts and setup status.

Quick Actions

One-click access to:
  • Manage Clients
  • Generate New Report
  • View All Reports

Billing Cycles

Reportr uses 30-day billing cycles:
// Billing cycle automatically resets every 30 days
const cycleInfo = await getBillingCycleInfo(userId);

// Returns:
{
  cycleStart: Date,
  cycleEnd: Date,
  daysRemaining: number
}

// Report limits reset at the start of each cycle
Your report limit resets every billing cycle (30 days from subscription start), not on the 1st of the month.

Next Steps

Authentication

Learn how Google OAuth works

API Reference

Integrate Reportr programmatically

White-Label Setup

Customize your agency branding

Troubleshooting

Issue: “Please verify your email before adding clients”Solution:
  1. Check your email for the verification link
  2. Click the link to verify your account
  3. Refresh the dashboard
  4. You can now add clients
// Free users must verify email first
const hasAccess = 
  paypalSubscriptionId || // Paid users
  (signupFlow === 'FREE' && emailVerified); // Free users (verified)
Issue: “Access denied to Search Console” or “Analytics property not found”Solution:
  1. Ensure you have access to the property in Google Search Console / Analytics
  2. Verify the property URL/ID is correct
  3. Reconnect your Google account from client settings
  4. Check that the property is verified in Search Console
Common errors:
  • 403: Access denied (you don’t have permission)
  • 404: Property not found (wrong URL/ID)
  • 401: Authentication failed (token expired, reconnect)
Issue: “You’ve reached your limit of X reports per month”Solution:
  1. Check your billing cycle end date on the dashboard
  2. Wait for the cycle to reset (automatic)
  3. Or upgrade to a higher plan for more reports
// Plan limits
FREE: 5 reports/month
STARTER: 25 reports/month
PROFESSIONAL: 75 reports/month
AGENCY: 250 reports/month

Build docs developers (and LLMs) love