ipinternalpage
GuideUpdated

How to share a Jupyter HTML report privately.

Export the notebook as a finished HTML snapshot, remove sensitive output, and publish it behind Google sign-in so stakeholders can read the result without running Python or receiving another attachment.

Export notebooks with nbconvert
Share rendered charts and analysis in a browser
Protect the report with Google sign-in
Replace recurring reports without changing the URL

Run and review the notebook before export

A published notebook snapshot should represent a known execution state. Restart and run the notebook as appropriate for your workflow, review warnings and failed cells, and make the data timestamp visible in the output.

  • Confirm the notebook completed with the intended environment and inputs
  • Label the reporting period and generation time
  • Remove exploratory cells that do not belong in the shared report

Export the notebook to HTML

Jupyter nbconvert includes an HTML exporter for turning an .ipynb notebook into a browser-viewable document. The default HTML export commonly embeds figures in the output, making it suitable for a single-file review workflow.

Export to HTML
jupyter nbconvert --to html ./analysis.ipynb --output ./analysis-report.html

Remove secrets and unnecessary raw data

Notebook output can contain more than the final charts: credentials printed during debugging, query text, customer rows, local paths, stack traces, or hidden metadata. Inspect the exported HTML itself before publishing it.

  • Clear cells that print tokens, headers, or connection strings
  • Aggregate or redact personal and customer data
  • Check hover text and embedded chart payloads, not only visible tables
  • Open the exported file locally and search for known secret patterns

Private access reduces the audience; it does not sanitize the notebook or stop authorized viewers from inspecting its HTML source.

Publish the HTML report to a readable slug

Use the CLI to publish the exported file. A slug such as analytics/weekly-retention gives the report a recognizable destination and can receive later versions without changing the link.

Sign in once
npx @internalpage/cli login
Publish the export
npx @internalpage/cli publish ./analysis-report.html --slug analytics/weekly-retention

Match access to the analysis audience

Workspace access works for broadly shared operating metrics. Selected-email access is a better default for finance, customer-specific analysis, hiring exercises, security research, and reports under limited review.

  • Use a separate page when a report needs a different audience
  • Verify both an allowed and denied Google account
  • Review access again when the report begins including new data

Automate recurring notebook reports carefully

A scheduled job can execute the notebook, export HTML, validate that the file exists, and publish to the same slug. Fail closed when execution or data-quality checks fail so a broken or partial report does not replace the last good version.

  • Keep the publishing token in the scheduler or CI secret store
  • Do not publish when notebook execution fails
  • Include freshness and source information in the report
Publish after validation
npx @internalpage/cli publish ./analysis-report.html --slug analytics/weekly-retention --json
FAQ

Common questions

Do viewers need Jupyter installed?

No. They receive the exported HTML page in a browser after passing the configured Google access check.

Can I publish Plotly charts from a notebook?

Yes when the exported HTML includes everything the chart needs or references assets reachable by the viewer. Open the export locally and verify interactivity before publishing.

Can a scheduled notebook update the same URL?

Yes. Publish the new HTML file to the same slug after successful execution and validation.

Should I publish the .ipynb file directly?

Export to HTML when the goal is a polished read-only report. Keep the notebook source in your repository or notebook environment for reproducibility.