Building reports
Preview & export
Preview a report during authoring, export it to PDF, or share it as an embedded URL - all with explicit parameter values.
A report has three runtime modes: preview inside the editor, export to a downloadable file (typically PDF), and embed as a hosted URL that other applications can drop into a page or call from a backend. All three run the same template against the same data context - they differ only in how the output is delivered.
Preview in the editor
The fastest way to see your report rendered is to open the Preview from the top toolbar (⌘P).
What preview gives you:
- A live render with sample parameter values. If your report defines
invoiceIdandcurrency, the preview pane shows fields for both, with sensible defaults you can override. - The same engine as production. Queries run against your real data source (read-only, of course) and Liquid expressions evaluate against the actual result.
- The same rendering pipeline. Preview is what the export will look like - it's not a degraded view.
- Live re-render. Any change in the editor updates the preview in milliseconds.
Use preview to validate everything before exporting. Most "the PDF looks wrong" issues are visible in preview.
Export
Use Export from the toolbar when you want a file.
Format
The platform exports to PDF by default. PDF is the format we test against most heavily; pagination, headers/footers, page breaks, and font embedding are all designed to work correctly on PDF first.
Additional output formats - HTML bundle, image - may be available depending on your deployment. Check the Export menu for the current list.
Options
- Color scheme. Light or dark. PDF defaults to light (better on paper); embed defaults to system-following.
- Page range. Export all pages or a specific subset.
- Compression. Compressed PDF (smaller file) or uncompressed (better for archival).
How export runs
Caller ─▶ Platform ─▶ Resolves data context ─▶ Fetches data ─▶ Renders template ─▶ PDF
The whole pipeline is server-side. The caller never sees the data context's schema, never sees credentials, never sees intermediate fetches. They only see the final file (or an error).
Share via embed
A report can be embedded in another application using a hosted URL. From the editor, open Share → Embed.
The Manager produces an embed URL of the shape:
https://app.goldenreports.dev/embed/<reportId>?invoiceId=inv_42¤cy=EUR
Drop that in an <iframe>, a desktop WebView, or anywhere else that can load a URL. The platform handles authentication via signed embed tokens (covered in the Developer Portal - they're not visible to end users).
Embed-only behavior worth knowing:
- Parameter values come from the query string of the URL. Any parameter not in the URL takes its default value or prompts the user.
- Theme color scheme defaults to system-follow, so an embed inside a dark app feels native.
- Toolbars are minimal. Authors see the full editor toolbar; embeds get a clean reading surface.
- Auth is per-embed. A signed embed URL only grants access to that one report - it doesn't unlock the rest of the workspace.
For programmatic embedding (signed URLs, server-side requests, SDK usage), see the Developer Portal - these docs cover only the report-author-facing flow.
On-demand exports from a third-party system
Many customers integrate Golden Reports as the reporting plane behind their own product. The flow is:
- Your backend obtains an API token from Manager → Settings → API access.
- It calls the platform's export report API with the report ID and parameter values.
- The platform returns a download URL once the file is ready.
This is the same pipeline as in-editor export; the Manager simply hands the request off to the platform on your behalf. See the Developer Portal for request shapes, authentication, and rate limits.
Validation: when an export fails before rendering
The platform validates before running anything expensive:
| Check | Failure looks like |
|---|---|
| Required parameters are present | "Missing required parameter: invoiceId" |
| Parameter values are of the correct type | "Parameter total expected Float, got String" |
| Data context version still exists | "Data context Sales v3 has been retired" |
| The query is valid against the context | "Query references unknown field customerEmail" |
| Workspace has sufficient credits | "Insufficient credits to run this export" |
Validation errors are returned with structured error codes so your integration can react to them.
What's not (yet) in the product
A short note for honesty:
- Scheduling. The current platform does not include a built-in report scheduler. To produce a report on a cron, your system calls the export endpoint on the schedule you want. Native scheduling is on the roadmap.
- Email delivery. Same as above - the platform exposes file URLs; your system or your email tool handles delivery.
These are intentional. Reporting platforms historically tangle authoring, scheduling, and delivery together; we've kept the three layers separable so you can use the best tool for each.
Next
- Set up the data your reports run against: Data sources.
- Manage who can run or share what: Sharing & permissions.
- Embed reports in your product: see the Developer Portal.