If you want Tableau to export a workbook or view to PDF on a recurring schedule, you have three practical routes. You can script tabcmd and run it from Windows Task Scheduler or cron. You can call Tableau's REST API through the Tableau Server Client (TSC) library. Or you can use a dedicated scheduler that handles filters, bursting, delivery and error handling for you. This guide walks through each route, shows where each one breaks down, and helps you pick the right one for your volume of reports.
TL;DR
tabcmd exportwith--pdfor--fullpdfis the quickest way to script a PDF export, and an operating-system scheduler can run it on a timer.- Scripts work well for a handful of reports. They get fragile with many filters, many recipients, expiring sign-in sessions or delivery beyond a file folder.
- The REST API and TSC give you more control than
tabcmd, but you own the code, the credentials and the monitoring. - A purpose-built scheduler such as our ATRS replaces the scripts with a point-and-click schedule, data-driven bursting and built-in delivery.
- Whatever you choose, test the PDF layout first. Page size and dashboard sizing cause most "it looks wrong" complaints.
Table of Contents
- What "scheduled PDF export" means in Tableau
- Option 1: tabcmd plus Windows Task Scheduler or cron
- Option 2: REST API and Tableau Server Client
- Option 3: A dedicated Tableau report scheduler
- Which route fits your situation
- How to apply filters in a scheduled export
- Delivering the PDF to the right people
- Fixing common problems
- Making recurring exports reliable and secure
- Our perspective
- Automate Tableau PDF delivery with ATRS
- FAQ
- Sources
What "scheduled PDF export" means in Tableau
People use the phrase for several different jobs. Some want a single dashboard saved to a shared folder every Monday at 6 a.m. Others want a filtered PDF for each of 200 regional managers, emailed individually. Others need a full workbook, with every sheet, packaged into one file for an executive pack.
These jobs have different requirements:
| Job | What it needs |
|---|---|
| One view, one folder, one schedule | A simple command and a timer |
| Full workbook in one PDF | Whole-workbook export options and sheets published as tabs |
| Filtered PDF per recipient | A loop over filter values, or data-driven bursting |
| PDF delivered by email, cloud storage or a database | Scripting for each destination, or a scheduler with those destinations built in |
| Auditable, monitored delivery | Logging, retries and alerts |
The first row is easy to do yourself. By the last row, most teams stop wanting to maintain the plumbing.
Option 1: tabcmd plus Windows Task Scheduler or cron
tabcmd is Tableau's command-line utility. Its export command logs into your server, requests a view or workbook as a PDF, and saves the file locally. Because it is just a command, anything that can run a command on a timer can schedule it.
The basic command
A typical example from a Tableau practitioner walkthrough follows this pattern: the export command, a site name, the workbook and view path, the PDF flag and an output location set with -f. The structure looks like this:
tabcmd export -t Sales "Sales/Sales_Analysis" --pdf -f "C:\Reports\Weekly\Sales_Analysis.pdf"
The parts that matter:
- Site (
-t): the site that holds the workbook. Leave it out for the default site. - View path: the workbook name, a slash, then the view name, exactly as it appears in the URL.
- Format flag:
--pdffor a single view. - Output (
-f): the file name and path to write.
Exporting a whole workbook
To put every sheet into one PDF, Tableau's support documentation says the --fullpdf option exports all views in a workbook into a single file. It also says you can set --pagesize (tabloid, for example) and name the output with -f. Two conditions catch people out. The workbook must have been published with Show Sheets as Tabs enabled, and you still have to include a view name in the command even when you want the full workbook. Tableau's support article on exporting all worksheets into one PDF covers both points.
If you then need to break that combined file into separate pieces, for instance one chapter per department, you can split PDFs on a Mac locally without uploading sensitive financial pages to a third-party site.

Putting it on a schedule
Once the command works by hand, wrap it in a script and hand the script to a scheduler:
- Save the login and export commands in a
.bat, PowerShell or shell script. Log in first withtabcmd login, run each export, thentabcmd logout. - Store credentials securely. A personal access token is better than a password in a plain-text file.
- On Windows, create a task in Task Scheduler that runs the script at your chosen time. On Linux or macOS, add a cron entry.
- Write output to a dated file name, so one run does not overwrite the last.
- Send the script's output to a log file, and check it.
Where tabcmd scripts start to hurt
This route is free in license terms and fine for a few reports. The costs show up later:
- Filters: each filtered version is another line in your script. Hundreds of recipients means hundreds of lines, or a loop and a data source you have to maintain.
- Delivery:
tabcmdsaves a file. Emailing it, copying it to cloud storage or loading it into a database needs more code. - Machine dependency: the task runs on one machine. If that machine is patched, rebooted or retired, your reports stop.
- Silent failures: if the sign-in expires or a view is renamed, the job can fail without anyone noticing until a manager asks where the report is.
- Knowledge risk: one person usually wrote the script. When they leave, nobody knows how it works.
We cover this scripting approach in more depth in our post on streamlining Tableau workflows with tabcmd and the TSC API, and collect related posts under tabcmd scripting.
Option 2: REST API and Tableau Server Client
If you are comfortable with Python, the Tableau Server Client library wraps Tableau's REST API. It lets you sign in with a token, find a view by name, apply a filter, request a PDF and write the bytes to disk, all inside one program. Compared with tabcmd, you get:
- Cleaner error handling, since you can catch a failed request and retry or alert.
- Looping over a list of filter values pulled from a database or spreadsheet.
- The freedom to send the resulting file anywhere your code can reach: SMTP, an object store, a collaboration tool.
The tradeoff is ownership. You write, test, secure and monitor the program. You also decide where it runs, how it is scheduled and how credentials rotate. For a data engineering team that likes this kind of work, it is a reasonable choice. For a BI team whose job is analysis, it becomes a side project that never ends.
Option 3: A dedicated Tableau report scheduler
The third route is software designed for this exact job. Our ATRS (Advanced Tableau Report Scheduler) is built to schedule, personalize, export, package and deliver Tableau reports without custom scripting. In practice, that means the pieces you would otherwise code are settings:
- Schedules: run on a time-based schedule, on a data-driven schedule, or when an event occurs.
- Formats: export views and workbooks to PDF and Excel, among other formats.
- Filters and bursting: produce a personalized version for each recipient from a list or database query.
- Destinations: deliver by email, to cloud storage, to a database or to collaboration tools.
- Error handling: automated handling of failed runs rather than silent gaps.
You can read the details on our Tableau PDF report automation page, and a walkthrough in automating Tableau reports with ATRS. If you are comparing it with scripts, our piece on replacing tabcmd scripts lays out what an admin stops maintaining.
Which route fits your situation
| Situation | Likely best fit |
|---|---|
| 1 to 5 reports, one destination, one technical owner | tabcmd with a task scheduler |
| Custom logic, in-house developers, unusual destinations | REST API with TSC |
| Dozens or thousands of reports, many recipients, strict deadlines | Dedicated scheduler |
| Need for audit trail, governance and security review | Dedicated scheduler |
| Reports leave the company to external recipients | Dedicated scheduler |
A useful rule of thumb: count the number of distinct PDFs produced per run and the number of places they must go. When either number passes what one person can comfortably keep in their head, move off hand-built scripts.
How to apply filters in a scheduled export
A PDF that shows the wrong region is worse than no PDF. The approach depends on the route:
- tabcmd: filters are passed as URL parameters on the view path, so each filter value is a separate command. Make sure the field name and value match what Tableau expects, including capitalization and encoded spaces.
- TSC: set the filter on the request options, then loop over your list of values.
- Scheduler: point the schedule at a list or query, and let it create one file per value.
Whichever you use, run one filtered export by hand first and open the PDF. Confirm the filter applied, the title shows the right value and nothing is cut off.
Delivering the PDF to the right people
A saved file is only half the job. Think through three questions before you build anything.
Who is allowed to see it? The account running the export needs permission to the workbook. Row-level security can also change what that account sees, so confirm the PDF contains what the recipient should receive, not what the service account happens to see.
Where does it go? A shared network folder, email attachment, cloud bucket or collaboration channel each need their own credentials and handling. We have written about the Tableau to S3 export path and Tableau to Excel exports at scale if cloud storage or spreadsheets are your destination.
What happens when delivery fails? Decide who is told, and how, if a run does not complete.

Fixing common problems
The PDF looks different from the dashboard
The usual causes are page size, orientation, fixed versus automatic dashboard sizing, and tables that spill across pages. Set the page size explicitly, for example with --pagesize on tabcmd, and test with the longest dataset you expect. Our guide on why a Tableau PDF looks different from the dashboard goes through layout and missing rows.
The export is slow or times out
Large dashboards with many marks take time to render, and a PDF is rendered on the server. Reduce what each export has to draw: trim unused sheets, aggregate where you can, and stagger heavy jobs so they do not all start at the same minute.
The full-workbook export fails
Check the two conditions above: sheets published as tabs, and a view name included in the command.
The data is stale
A PDF only reflects the data Tableau holds when the export runs. If the dashboard uses an extract, schedule the export after the refresh finishes. When refreshes misbehave, see our note on extract refresh failing or greyed out.
The job ran but nobody got anything
This is the classic script failure. Add logging, check the log on a schedule and send an alert on non-zero exit codes. Or use a tool that does this for you.
Making recurring exports reliable and secure
A few habits apply to every approach:
- Use a dedicated service account with the minimum permissions needed, not a person's login.
- Keep secrets out of scripts. Use tokens and a proper secrets store.
- Name files predictably, with date and recipient or region, so you can find a past report.
- Log every run with start time, end time and result.
- Run a heartbeat check: a report that must arrive by 8 a.m. should trigger an alert at 8:15 if it has not.
- Document the setup where more than one person can find it.
- Review access regularly, since people change roles and recipients leave.
Our perspective
Most teams we talk with start with
tabcmdand a task on someone's server, and that is a sensible start. The trouble comes when the reporting demand grows: more recipients, more filters, more destinations, and executives who expect the report at the same minute every week.We built ATRS because we believe report delivery should be a configured process, not a pile of scripts that only one person understands. Scheduling, personalization, formatting, delivery and error handling belong together in one place, where an administrator can see what ran, what failed and who received what.
That is also why we pay attention to security and governance. We hold SOC 2 Type II certification, and our software is designed to run on your own infrastructure so report data stays under your control. If you are spending hours each week exporting dashboards by hand or fixing broken scripts, that time is better spent on analysis.
Christian Ofori-Boateng
Automate Tableau PDF delivery with ATRS
If your scheduled PDF exports have outgrown a single script, ATRS is built for that stage. It schedules Tableau reports, applies filters per recipient, exports to PDF and Excel, and delivers to email, cloud, database and collaboration destinations, with automated error handling.

See how it works on the ATRS Tableau report scheduler page, or start from our home page to look at the full product line, including PBRS for Power BI and SSRS and CRD for Crystal Reports. Both subscription and perpetual licenses are available.
FAQ
Can Tableau schedule a PDF export by itself?
Tableau's own scheduling features are aimed mainly at refreshing data and sending subscriptions to licensed users. If you need more control, such as filtered files per recipient, saving to a folder or cloud storage, or delivery to people outside your Tableau site, you typically add tabcmd scripts, the REST API or a dedicated scheduler.
How do I export a whole workbook to one PDF?
Use tabcmd export with the --fullpdf option, a view name, a page size such as tabloid and an output file with -f. The workbook must have been published with Show Sheets as Tabs enabled, or the command will not export every sheet.
How do I run tabcmd on a schedule?
Put your login, export and logout commands in a script, then run that script from Windows Task Scheduler or cron at the time you want. Use a token rather than a stored password, write dated file names and log the output so you notice failures.
Can I send a different filtered PDF to each person?
Yes. With scripts you loop over filter values, one export per value. With a scheduler that supports data-driven bursting, you point the schedule at a list or query and it generates and delivers one file per recipient.
Why does my exported PDF look different from the dashboard?
Page size, orientation and dashboard sizing are the usual reasons. Set the page size explicitly, check the layout with realistic data and review each page before you schedule the job.
Sources
- Export All Worksheets Into One PDF Using tabcmd (Tableau support)
- Commanding Tableau Server to create PDFs (The Data School)
