Use Case

BI Dashboard to PDF Report Export

Export Grafana, Metabase, Looker, and custom BI dashboards as pixel-perfect PDF or PNG reports with CSS selector targeting.

Overview

This use case focuses on the technical challenge of turning BI tool dashboards into polished, distributable report documents. Unlike SaaS metrics reporting (which is about capturing simple dashboards for investor updates), BI report export involves rendering complex chart libraries, targeting individual panels, and composing multi-panel PDF documents.

Grafana, Metabase, Looker, and custom dashboards built with Chart.js, D3, or Highcharts require a delay parameter so the renderer waits for async data fetching and chart animation to complete before capture. Use CSS selectors to target individual panels — capture just the revenue chart or the user funnel, not the entire dashboard. Compose multiple panel captures into a single PDF document for formal distribution.

Export as PNG for Slack and presentations, or PDF for compliance and finance teams. The key technical differentiator is the delay and selector parameters: without them, you get half-rendered charts and loading spinners. Screenshotly waits for the page to reach visual stability before capture, producing pixel-perfect output even from the most complex data visualizations.

Key Benefits

Pixel-perfect chart rendering with delay parameter
Target individual panels via CSS selectors
Compose multi-panel PDF reports
No BI tool access needed for report recipients

Results You Can Expect

Scheduled
automated delivery
Authenticated
dashboard access
Zero
manual export needed

How It Works

1

Authenticate into the BI tool (Grafana, Metabase, Looker) with session cookies

2

Use the delay parameter (3-10s) to wait for chart libraries to render

3

Target individual panels with CSS selectors for focused captures

4

Export as PNG for chat/presentations or PDF for formal distribution

5

Schedule recurring captures and auto-distribute via email or Slack

Code Example

// Capture authenticated dashboard for reporting
const captureDashboard = async (dashboardUrl, sessionCookie) => {
  const report = await fetch('https://api.screenshotly.app/screenshot', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      url: dashboardUrl,
      device: 'desktop',
      format: 'png',
      fullPage: true,
      cookies: [{ name: 'session', value: sessionCookie, domain: 'dashboard.company.com' }],
      delay: 3000, // Wait for charts to render
    }),
  });
  
  // Distribute to stakeholders
  await sendToSlack('#executive-updates', report);
  await sendEmail('exec-team@company.com', report);
  
  return report;
};

Frequently Asked Questions

How do I automate daily or weekly report screenshot distribution?

Use a cron job or serverless function (AWS Lambda, Vercel Cron) to trigger API calls on a schedule. Capture each dashboard URL, then distribute via email, Slack, or Teams using their respective APIs.

How do I handle dashboards with charts that take time to render?

Use the delay parameter (3-5 seconds) to wait for chart libraries like Chart.js, D3, or Highcharts to finish rendering. For complex dashboards, use waitForSelector targeting a specific chart element.

Can I capture multiple dashboard panels into a single report?

Use fullPage: true to capture the entire dashboard in one image. Alternatively, capture individual panels using the selector or clip parameter and combine them into a composite report image or PDF.

What's the best format for stakeholder reports — PNG or PDF?

PDF is best for formal reports distributed via email since it includes metadata and prints well. PNG works better for Slack/Teams messages and embedding in presentations. Capture both formats for maximum flexibility.

Want a step-by-step walkthrough?

Read: Invoice & Report Generation Guide

Ready to automate report generation?

Get started with 100 free screenshots. No credit card required.

Related Use Cases