Tutorials
How to Send a Retool App as a PDF Using Workflows
If you've ever needed to send a Retool app as a PDF — say, emailing an order dashboard to stakeholders on a regular cadence — Retool Workflows gives you a practical path to get there. This guide walks through the full approach, including how to serialize your app page, which components to exclude, how to handle the sidebar and header, and what to do when you need fully automated scheduled PDF delivery.
Why Teams Want to Export Retool Dashboards as PDFs
Retool dashboards are great for internal use, but stakeholders who don't live in Retool still need access to the data. Sending a PDF snapshot of a dashboard via email is a low-friction way to close that gap — no logins, no permissions issues, just a clean file in their inbox. Use cases include order summaries, financial reports, operations snapshots, and weekly KPI digests.
The Core Approach: Serialize the Page, Then Email It
The workflow breaks into two main steps: capturing the app page as a serialized PDF payload, and then passing that to an email step inside a Retool Workflow. Here's how the process works at a high level:
- Build your dashboard in a Retool app as you normally would.
- Use a JavaScript query to call the built-in
utils.serializePage()method, which captures the current state of the page. - Pass the serialized output to a Retool Workflow that handles the PDF generation and email delivery.
Retool's product team has shared a working example with downloadable JSON templates for both the app (OrderDashboardApp.json) and the workflow (Dashboard_Notification_Workflow.json) that you can import directly and adapt to your own use case.
How to Exclude Components from the PDF
One of the most common issues teams run into is unwanted components showing up — or expected components not showing up — in the generated PDF. The utils.serializePage() method accepts a componentsToExclude parameter that lets you specify which components to omit by name.
If child components aren't rendering in your PDF, double-check that you haven't accidentally copied exclusion logic from the example app that's filtering them out. The example deliberately excludes certain components, so if you're templating off it, that logic carries over.
To discover all available parameters for serializePage(), hover over the method name inside the Retool JavaScript editor — the inline docs will surface the full parameter list without needing to dig through external documentation.
Hiding the Sidebar and Header Before Serialization
If you only want to capture the main content area — not the navigation sidebar or app header — you'll need to hide those elements before the serialize step runs. There's no direct parameter in serializePage() to strip layout chrome, but you can work around it with a couple of lines before your serialize call:
- Call
sidebarFrame.setHidden(true)before serializing to hide the sidebar. - Call
sidebarFrame.setHidden(false)after serializing to restore it for normal app use. - The app header is harder to suppress programmatically — most teams either keep it or use CSS overrides sparingly.
Fixing PDF Scale and Layout Issues
Wacky scaling in the generated PDF is another common complaint. This typically comes down to how the page is being serialized relative to your app's layout settings. A few things to check:
- Make sure your app canvas width matches what you expect to render — oversized canvases will produce compressed PDFs.
- Review the code inside your JavaScript query that calls
serializePage()and confirm no custom scale or zoom parameters are being set unexpectedly. - Test by exporting the app JSON and sharing it so others can reproduce — this makes debugging scale issues much faster.
Can You Send Retool PDFs on a Schedule Automatically?
This is where things get nuanced. As of now, you cannot trigger utils.serializePage() directly from inside a Retool Workflow — it's a client-side method that requires the app to be open and rendered in a browser. That means fully automated, unattended PDF snapshots of a live Retool app aren't natively supported on a schedule.
However, there are two solid workarounds:
- Use charting libraries inside Workflows: Retool Workflows support Python and JavaScript, and you can use libraries like
matplotlib,Chart.js, or similar tools to generate charts programmatically — no open browser required. These can be rendered to image or PDF and attached to a scheduled email. - Reuse app queries in Workflows: Any data query you've built in your Retool app can typically be replicated or reused inside a Workflow, letting you pull the same data and render it into a custom PDF layout server-side.
If your use case is a scheduled digest of charts and metrics, the Workflow-native approach with a charting library is the more reliable long-term path.
Step-by-Step: Sending a Dashboard PDF via Retool Workflow
- Step 1: Build your dashboard in Retool. Identify which components should appear in the PDF.
- Step 2: Add a JavaScript query to your app that calls
utils.serializePage({ componentsToExclude: ["componentName1", "componentName2"] }). - Step 3: If needed, call
sidebarFrame.setHidden(true)before serializing and restore it after. - Step 4: Pass the serialized page data to a Retool Workflow via a webhook or manual trigger.
- Step 5: Inside the Workflow, add a PDF generation block and connect it to an email step with the PDF as an attachment.
- Step 6: Test end-to-end, then set your trigger — manual, scheduled, or event-based.
Bottom Line
Sending a Retool app as a PDF through Workflows is achievable today, with some caveats around scheduling and layout control. For one-click or event-triggered delivery, the serializePage() approach works well. For fully automated scheduled reports, lean on Workflow-native charting libraries to generate the PDF content server-side. Either way, the downloadable JSON templates from Retool's team are the fastest way to get a working baseline.
Ready to build?
We scope, design, and ship your Retool app — fast.