← Back to blog

Tableau Scheduled PDF Export: 3 Ways to Automate It

November 12, 2026
Tableau Scheduled PDF Export: 3 Ways to Automate It

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.

ChristianSteven Software
go.christiansteven.com
Automate Tableau PDF Delivery
ATRS automates Tableau report scheduling and delivery, helping replace scripts with a point-and-click approach for recurring exports.
Explore ATRS

TL;DR

  • tabcmd export with --pdf or --fullpdf is 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

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:

JobWhat it needs
One view, one folder, one scheduleA simple command and a timer
Full workbook in one PDFWhole-workbook export options and sheets published as tabs
Filtered PDF per recipientA loop over filter values, or data-driven bursting
PDF delivered by email, cloud storage or a databaseScripting for each destination, or a scheduler with those destinations built in
Auditable, monitored deliveryLogging, 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:

  1. Site (-t): the site that holds the workbook. Leave it out for the default site.
  2. View path: the workbook name, a slash, then the view name, exactly as it appears in the URL.
  3. Format flag: --pdf for a single view.
  4. 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.

Exporting a whole workbook

Putting it on a schedule

Once the command works by hand, wrap it in a script and hand the script to a scheduler:

  1. Save the login and export commands in a .bat, PowerShell or shell script. Log in first with tabcmd login, run each export, then tabcmd logout.
  2. Store credentials securely. A personal access token is better than a password in a plain-text file.
  3. On Windows, create a task in Task Scheduler that runs the script at your chosen time. On Linux or macOS, add a cron entry.
  4. Write output to a dated file name, so one run does not overwrite the last.
  5. 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: tabcmd saves 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

SituationLikely best fit
1 to 5 reports, one destination, one technical ownertabcmd with a task scheduler
Custom logic, in-house developers, unusual destinationsREST API with TSC
Dozens or thousands of reports, many recipients, strict deadlinesDedicated scheduler
Need for audit trail, governance and security reviewDedicated scheduler
Reports leave the company to external recipientsDedicated 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.

Three checks for secure PDF report delivery

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:

  1. Use a dedicated service account with the minimum permissions needed, not a person's login.
  2. Keep secrets out of scripts. Use tokens and a proper secrets store.
  3. Name files predictably, with date and recipient or region, so you can find a past report.
  4. Log every run with start time, end time and result.
  5. Run a heartbeat check: a report that must arrive by 8 a.m. should trigger an alert at 8:15 if it has not.
  6. Document the setup where more than one person can find it.
  7. Review access regularly, since people change roles and recipients leave.

Our perspective

Most teams we talk with start with tabcmd and 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.

ChristianSteven Software

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.

ChristianSteven Software
Discuss Your Tableau Export Needs
Contact ChristianSteven Software to discuss automating Tableau report schedules, filtered delivery, and recurring PDF exports.

Sources