Tableau

App · Analytics · 20 actions

Find and organise Tableau content - browse projects, workbooks, views and data sources, read the numbers behind a view, and refresh an extract.

Actions

ActionWhat it does
Create a projectCreate a project on the Tableau site, optionally nested inside an existing one.
Delete a projectDelete a project.
Get a data sourceRead one published data source, including whether it has an extract that can be refreshed.
Get a jobRead one background job's progress and outcome.
Get a viewRead one view's details, and optionally how many times it has been opened.
Get a view's dataRead the summary data behind a view - the same rows Tableau's own 'Download > Data' gives - as rows and as raw CSV.
Get a workbookRead one workbook's details, including its project, owner, tags and web page URL.
Get site settingsRead the settings of the Tableau site this connection is signed in to, including its state and storage.
List a workbook's viewsList the sheets and dashboards inside one workbook, with their ids for reading data or an image.
List background jobsList the site's background jobs - extract refreshes, flow runs and subscriptions - newest first.
List data sourcesList the published data sources on the Tableau site, optionally filtered by project, name or whether they have an extract.
List groupsList the groups on the Tableau site with how many users each holds.
List projectsList the projects on the Tableau site, optionally filtered by name, owner or parent project.
List usersList the users on the Tableau site with their site roles.
List viewsList every view on the Tableau site, across all workbooks, optionally filtered by workbook, project or name.
List workbooksList the workbooks on the Tableau site, optionally filtered by project, owner, name or tag.
Refresh a data source extractRebuild a published data source's extract and wait for it to finish.
Remove a workbook tagRemove a single tag from a workbook.
Tag a workbookAdd one or more tags to a workbook.
Update a projectRename a project, change its description, move it under another project, or change how its permissions are managed.

Create a project

Create a project on the Tableau site, optionally nested inside an existing one. Use the id this returns in the next step - Tableau takes a second or two to include a new project in a list, so listing to find it can come back empty.

Inputs

Project namenametextRequired
What to call the project. It has to be unique among the projects that share its parent.
Descriptiondescriptiontext
What the project is for. Shown on its card in Tableau.
Parent projectparent_project_idtext
Nest the project inside this one. Leave empty to create it at the top level. Creating a top-level project usually needs a Site Administrator role.
Permissions arecontent_permissionstext
Whether each item in the project keeps its own permissions or inherits the project's. Leave empty to keep Tableau's default.One of: ManagedByOwner (Managed by owner - each item's owner sets its permissions), LockedToProject (Locked to project - the project's permissions apply to everything in it), LockedToProjectWithoutNested (Locked to project, nested projects excluded).
Publish Tableau's sample workbooks into itpublish_samplestrue/false
Ask Tableau to publish its own sample workbooks into the new project. Useful for a scratch or demo project; leave off for a real one.Default: false.

Outputs

content_permissionstext
controlling_permissions_project_idtext
created_attext
descriptiontext
idtext
nametext
ownerobject
parent_project_idtext
top_level_projecttrue/false
updated_attext
writeabletrue/false
Example output
{
  "content_permissions": "ManagedByOwner",
  "controlling_permissions_project_id": null,
  "created_at": "2026-09-05T10:30:00Z",
  "description": "Dashboards for the quarterly review.",
  "id": "3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d",
  "name": "Quarterly reporting",
  "owner": {
    "email": "ada@example.com",
    "full_name": "Ada Lovelace",
    "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
    "name": "ada@example.com"
  },
  "parent_project_id": null,
  "top_level_project": true,
  "updated_at": "2026-09-05T10:30:00Z",
  "writeable": true
}

Delete a project

Delete a project. Everything published inside it - workbooks, views and data sources - is deleted with it, and Tableau offers no undo.

Inputs

Projectproject_idtextRequired
Which project to act on. Pick one, or paste the id of a project made earlier in this workflow.

Outputs

deletedtrue/false
idtext
Example output
{
  "deleted": true,
  "id": "3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d"
}

Get a data source

Read one published data source, including whether it has an extract that can be refreshed.

Inputs

Data source iddatasource_idtextRequired
The published data source's Tableau id (a GUID). List data sources returns it.

Outputs

certification_notetext
content_urltext
created_attext
descriptiontext
encrypt_extractstext
has_extractstrue/false
idtext
is_certifiedtrue/false
nametext
ownerobject
projectobject
sizenumber
tagslist
typetext
updated_attext
use_remote_query_agenttrue/false
webpage_urltext
Example output
{
  "certification_note": "Owned by the data team.",
  "content_url": "Salesextract",
  "created_at": "2026-03-02T11:00:00Z",
  "description": "Nightly extract of the sales warehouse.",
  "encrypt_extracts": "false",
  "has_extracts": true,
  "id": "89a82d78-664f-45a1-8256-d4d2961a070b",
  "is_certified": true,
  "name": "Sales extract",
  "owner": {
    "email": "ada@example.com",
    "full_name": "Ada Lovelace",
    "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
    "name": "ada@example.com"
  },
  "project": {
    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
    "name": "Default"
  },
  "size": 41,
  "tags": [
    "certified"
  ],
  "type": "sqlserver",
  "updated_at": "2026-09-04T02:15:00Z",
  "use_remote_query_agent": false,
  "webpage_url": "https://10ax.online.tableau.com/#/site/acme/datasources/77"
}

Get a job

Read one background job's progress and outcome. While it is running there is no finish code; when it ends, '0' means it succeeded, '1' that it failed and '2' that it was cancelled.

Inputs

Job idjob_idtextRequired
The job's Tableau id (a GUID). Refresh a data source extract returns it, and so does List background jobs.

Outputs

completed_attext
created_attext
finish_codetext
idtext
modetext
noteslist
progressnumber
started_attext
status_noteslist
typetext
updated_attext
Example output
{
  "completed_at": "2026-09-05T10:31:22Z",
  "created_at": "2026-09-05T10:30:00Z",
  "finish_code": "0",
  "id": "5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
  "mode": "Asynchronous",
  "notes": [
    "Data source Sales extract refreshed."
  ],
  "progress": 100,
  "started_at": "2026-09-05T10:30:04Z",
  "status_notes": [],
  "type": "RefreshExtract",
  "updated_at": "2026-09-05T10:31:22Z"
}

Get a view

Read one view's details, and optionally how many times it has been opened.

Inputs

View idview_idtextRequired
The view's Tableau id (a GUID). List views or List a workbook's views returns it.
Include view countsinclude_usage_statisticstrue/false
Also return how many times each view has been opened. Tableau leaves this out unless it is asked for, because it costs an extra lookup.Default: false.

Outputs

content_urltext
created_attext
idtext
nametext
ownerobject
projectobject
tagslist
total_view_countnumber
updated_attext
view_url_nametext
workbook_idtext
Example output
{
  "content_url": "Superstore/sheets/Overview",
  "created_at": "2026-02-11T08:15:00Z",
  "id": "2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f",
  "name": "Overview",
  "owner": {
    "email": "ada@example.com",
    "full_name": "Ada Lovelace",
    "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
    "name": "ada@example.com"
  },
  "project": {
    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
    "name": "Default"
  },
  "tags": [],
  "total_view_count": 412,
  "updated_at": "2026-08-30T16:02:00Z",
  "view_url_name": "Overview",
  "workbook_id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e"
}

Get a view's data

Read the summary data behind a view - the same rows Tableau's own 'Download > Data' gives - as rows and as raw CSV.

Inputs

View idview_idtextRequired
The view's Tableau id (a GUID). List views or List a workbook's views returns it.
Filter the view firstview_filtersobject
Apply the view's own filters before reading it, as an object of field name to value - {"Region": "West"}. Give a list to select several values. Leave empty to read the view as it is.
Accept cached data up to (minutes)max_age_minutesnumber
How stale Tableau's cached copy may be before it recalculates. 0 forces a fresh read, which is slower. Leave empty to use the site's own caching.At least 0.
Maximum rowsmax_rowsnumber
How many rows to bring back. The result's 'truncated' field says whether the view had more.From 1 to 10000. Default: 500.

Outputs

columnslist
csvtext
row_countnumber
rowslist
truncatedtrue/false
view_idtext
Example output
{
  "columns": [
    "Region",
    "Sales"
  ],
  "csv": "Region,Sales\nWest,120450\nEast,98230\n",
  "row_count": 2,
  "rows": [
    {
      "Region": "West",
      "Sales": "120450"
    },
    {
      "Region": "East",
      "Sales": "98230"
    }
  ],
  "truncated": false,
  "view_id": "2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f"
}

Get a workbook

Read one workbook's details, including its project, owner, tags and web page URL.

Inputs

Workbook idworkbook_idtextRequired
The workbook's Tableau id (a GUID). List workbooks returns it, and it also appears in the address bar when you open the workbook.

Outputs

content_urltext
created_attext
default_view_idtext
descriptiontext
idtext
nametext
ownerobject
projectobject
show_tabstrue/false
sizenumber
tagslist
updated_attext
webpage_urltext
Example output
{
  "content_url": "Superstore",
  "created_at": "2026-02-11T08:15:00Z",
  "default_view_id": "2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f",
  "description": "",
  "id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e",
  "name": "Superstore",
  "owner": {
    "email": "ada@example.com",
    "full_name": "Ada Lovelace",
    "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
    "name": "ada@example.com"
  },
  "project": {
    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
    "name": "Default"
  },
  "show_tabs": true,
  "size": 2,
  "tags": [
    "sales"
  ],
  "updated_at": "2026-08-30T16:02:00Z",
  "webpage_url": "https://10ax.online.tableau.com/#/site/acme/workbooks/1234"
}

Get site settings

Read the settings of the Tableau site this connection is signed in to, including its state and storage. Needs a Site Administrator role.

Inputs

None.

Outputs

admin_modetext
commenting_enabledtrue/false
content_urltext
guest_access_enabledtrue/false
idtext
nametext
num_userstext
revision_history_enabledtrue/false
revision_limittext
statetext
storagetext
storage_quotatext
subscribe_others_enabledtrue/false
time_zonetext
user_quotatext
Example output
{
  "admin_mode": "ContentAndUsers",
  "commenting_enabled": true,
  "content_url": "acme",
  "guest_access_enabled": false,
  "id": "9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d",
  "name": "Acme Analytics",
  "num_users": "18",
  "revision_history_enabled": true,
  "revision_limit": "25",
  "state": "Active",
  "storage": "4096",
  "storage_quota": "102400",
  "subscribe_others_enabled": true,
  "time_zone": "Europe/London",
  "user_quota": "100"
}

List a workbook's views

List the sheets and dashboards inside one workbook, with their ids for reading data or an image.

Inputs

Workbook idworkbook_idtextRequired
The workbook's Tableau id (a GUID). List workbooks returns it, and it also appears in the address bar when you open the workbook.
Include view countsinclude_usage_statisticstrue/false
Also return how many times each view has been opened. Tableau leaves this out unless it is asked for, because it costs an extra lookup.Default: false.

Outputs

countnumber
viewslist
workbook_idtext
Example output
{
  "count": 1,
  "views": [
    {
      "content_url": "Superstore/sheets/Overview",
      "created_at": "2026-02-11T08:15:00Z",
      "id": "2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f",
      "name": "Overview",
      "owner": {
        "email": "ada@example.com",
        "full_name": "Ada Lovelace",
        "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
        "name": "ada@example.com"
      },
      "project": {
        "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
        "name": "Default"
      },
      "tags": [],
      "total_view_count": 412,
      "updated_at": "2026-08-30T16:02:00Z",
      "view_url_name": "Overview",
      "workbook_id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e"
    }
  ],
  "workbook_id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e"
}

List background jobs

List the site's background jobs - extract refreshes, flow runs and subscriptions - newest first.

Inputs

Filter onfilter_fieldtext
Which job field to filter on. Leave the field empty to list everything. Choosing a field means the value below is required.One of: args (Job arguments (args)), completedAt (Completed at (completedAt)), createdAt (Created at (createdAt)), jobType (Job type (jobType)), notes (Notes (notes)), priority (Priority (priority)), progress (Progress (progress)), startedAt (Started at (startedAt)), status (Status (status)), subtitle (Subtitle (subtitle)), title (Title (title)).
Filter operatorfilter_operatortext
How the filter value is compared. Ignored when no field is chosen. Which operators a field accepts depends on the field: name and the other text fields take 'is exactly', date fields such as Created at take the before/after comparisons, and Tags takes 'is any of'. Tableau refuses a pairing it does not support, and the error says so.One of: eq (is exactly), cieq (is exactly, ignoring case), gt (is after / greater than), gte (is at or after / greater than or equal to), lt (is before / less than), lte (is at or before / less than or equal to), has (contains), in (is any of - a bracketed list, [alpha,beta]), like (matches a pattern using * as the wildcard). Default: eq.
Filter valuefilter_valuetext
What to compare against. Dates are ISO-8601 (2026-01-31T00:00:00Z); a list for the 'is any of' operator is bracketed, like [alpha,beta].
Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
jobslist
page_numbernumber
page_sizenumber
total_availablenumber
Example output
{
  "count": 1,
  "jobs": [
    {
      "created_at": "2026-09-05T10:30:00Z",
      "ended_at": "2026-09-05T10:31:22Z",
      "id": "5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
      "job_type": "refresh_extracts",
      "priority": 50,
      "started_at": "2026-09-05T10:30:04Z",
      "status": "Success"
    }
  ],
  "page_number": 1,
  "page_size": 100,
  "total_available": 1
}

List data sources

List the published data sources on the Tableau site, optionally filtered by project, name or whether they have an extract.

Inputs

Filter onfilter_fieldtext
Which data source field to filter on. Leave the field empty to list everything. Choosing a field means the value below is required.One of: authenticationType (Authentication type (authenticationType)), connectedWorkbookType (Connected workbook type (connectedWorkbookType)), connectionTo (Connects to (connectionTo)), connectionType (Connection type (connectionType)), contentUrl (Content URL (contentUrl)), createdAt (Created at (createdAt)), databaseName (Database name (databaseName)), databaseUserName (Database user name (databaseUserName)), description (Description (description)), favoritesTotal (Times favourited (favoritesTotal)), and 20 more.
Filter operatorfilter_operatortext
How the filter value is compared. Ignored when no field is chosen. Which operators a field accepts depends on the field: name and the other text fields take 'is exactly', date fields such as Created at take the before/after comparisons, and Tags takes 'is any of'. Tableau refuses a pairing it does not support, and the error says so.One of: eq (is exactly), cieq (is exactly, ignoring case), gt (is after / greater than), gte (is at or after / greater than or equal to), lt (is before / less than), lte (is at or before / less than or equal to), has (contains), in (is any of - a bracketed list, [alpha,beta]), like (matches a pattern using * as the wildcard). Default: eq.
Filter valuefilter_valuetext
What to compare against. Dates are ISO-8601 (2026-01-31T00:00:00Z); a list for the 'is any of' operator is bracketed, like [alpha,beta].
Sort bysort_fieldtext
Which data source field to sort on. Leave empty for Tableau's order.One of: authenticationType (Authentication type (authenticationType)), connectedWorkbookType (Connected workbook type (connectedWorkbookType)), connectionTo (Connects to (connectionTo)), connectionType (Connection type (connectionType)), contentUrl (Content URL (contentUrl)), createdAt (Created at (createdAt)), databaseName (Database name (databaseName)), databaseUserName (Database user name (databaseUserName)), description (Description (description)), favoritesTotal (Times favourited (favoritesTotal)), and 20 more.
Sort directionsort_directiontext
Which way to sort. Ignored when no sort field is chosen.One of: asc (Ascending), desc (Descending). Default: asc.
Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
datasourceslist
page_numbernumber
page_sizenumber
total_availablenumber
Example output
{
  "count": 1,
  "datasources": [
    {
      "certification_note": "Owned by the data team.",
      "content_url": "Salesextract",
      "created_at": "2026-03-02T11:00:00Z",
      "description": "Nightly extract of the sales warehouse.",
      "encrypt_extracts": "false",
      "has_extracts": true,
      "id": "89a82d78-664f-45a1-8256-d4d2961a070b",
      "is_certified": true,
      "name": "Sales extract",
      "owner": {
        "email": "ada@example.com",
        "full_name": "Ada Lovelace",
        "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
        "name": "ada@example.com"
      },
      "project": {
        "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
        "name": "Default"
      },
      "size": 41,
      "tags": [
        "certified"
      ],
      "type": "sqlserver",
      "updated_at": "2026-09-04T02:15:00Z",
      "use_remote_query_agent": false,
      "webpage_url": "https://10ax.online.tableau.com/#/site/acme/datasources/77"
    }
  ],
  "page_number": 1,
  "page_size": 100,
  "total_available": 1
}

List groups

List the groups on the Tableau site with how many users each holds. Needs a Site Administrator role.

Inputs

Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
groupslist
page_numbernumber
page_sizenumber
total_availablenumber
Example output
{
  "count": 1,
  "groups": [
    {
      "domain_name": "local",
      "id": "7f8a9b0c-1d2e-3f4a-5b6c-7d8e9f0a1b2c",
      "minimum_site_role": null,
      "name": "All Users",
      "user_count": 18
    }
  ],
  "page_number": 1,
  "page_size": 100,
  "total_available": 1
}

List projects

List the projects on the Tableau site, optionally filtered by name, owner or parent project.

Inputs

Filter onfilter_fieldtext
Which project field to filter on. Leave the field empty to list everything. Choosing a field means the value below is required.One of: createdAt (Created at (createdAt)), name (Name (name)), ownerDomain (Owner domain (ownerDomain)), ownerEmail (Owner email (ownerEmail)), ownerName (Owner name (ownerName)), parentProjectId (Parent project id (parentProjectId)), topLevelProject (Is a top-level project (topLevelProject)), updatedAt (Updated at (updatedAt)).
Filter operatorfilter_operatortext
How the filter value is compared. Ignored when no field is chosen. Which operators a field accepts depends on the field: name and the other text fields take 'is exactly', date fields such as Created at take the before/after comparisons, and Tags takes 'is any of'. Tableau refuses a pairing it does not support, and the error says so.One of: eq (is exactly), cieq (is exactly, ignoring case), gt (is after / greater than), gte (is at or after / greater than or equal to), lt (is before / less than), lte (is at or before / less than or equal to), has (contains), in (is any of - a bracketed list, [alpha,beta]), like (matches a pattern using * as the wildcard). Default: eq.
Filter valuefilter_valuetext
What to compare against. Dates are ISO-8601 (2026-01-31T00:00:00Z); a list for the 'is any of' operator is bracketed, like [alpha,beta].
Sort bysort_fieldtext
Which project field to sort on. Leave empty for Tableau's order. Not every field that can be filtered can also be sorted on - Name works everywhere.One of: createdAt (Created at (createdAt)), name (Name (name)), ownerDomain (Owner domain (ownerDomain)), ownerEmail (Owner email (ownerEmail)), ownerName (Owner name (ownerName)), parentProjectId (Parent project id (parentProjectId)), topLevelProject (Is a top-level project (topLevelProject)), updatedAt (Updated at (updatedAt)).
Sort directionsort_directiontext
Which way to sort. Ignored when no sort field is chosen.One of: asc (Ascending), desc (Descending). Default: asc.
Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
page_numbernumber
page_sizenumber
projectslist
total_availablenumber
Example output
{
  "count": 1,
  "page_number": 1,
  "page_size": 100,
  "projects": [
    {
      "content_permissions": "ManagedByOwner",
      "controlling_permissions_project_id": null,
      "created_at": "2026-01-04T09:00:00Z",
      "description": "The default project that was automatically created by Tableau.",
      "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
      "name": "Default",
      "owner": {
        "email": "ada@example.com",
        "full_name": "Ada Lovelace",
        "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
        "name": "ada@example.com"
      },
      "parent_project_id": null,
      "top_level_project": true,
      "updated_at": "2026-01-04T09:00:00Z",
      "writeable": true
    }
  ],
  "total_available": 1
}

List users

List the users on the Tableau site with their site roles. Needs a Site Administrator role.

Inputs

Filter onfilter_fieldtext
Which user field to filter on. Leave the field empty to list everything. Choosing a field means the value below is required.One of: domainName (Domain name (domainName)), friendlyName (Friendly name (friendlyName)), isLocal (Is a local user (isLocal)), lastLogin (Last login (lastLogin)), luid (User id (luid)), name (Name (name)), siteRole (Site role (siteRole)).
Filter operatorfilter_operatortext
How the filter value is compared. Ignored when no field is chosen. Which operators a field accepts depends on the field: name and the other text fields take 'is exactly', date fields such as Created at take the before/after comparisons, and Tags takes 'is any of'. Tableau refuses a pairing it does not support, and the error says so.One of: eq (is exactly), cieq (is exactly, ignoring case), gt (is after / greater than), gte (is at or after / greater than or equal to), lt (is before / less than), lte (is at or before / less than or equal to), has (contains), in (is any of - a bracketed list, [alpha,beta]), like (matches a pattern using * as the wildcard). Default: eq.
Filter valuefilter_valuetext
What to compare against. Dates are ISO-8601 (2026-01-31T00:00:00Z); a list for the 'is any of' operator is bracketed, like [alpha,beta].
Sort bysort_fieldtext
Which user field to sort on. Leave empty for Tableau's order.One of: domainName (Domain name (domainName)), friendlyName (Friendly name (friendlyName)), isLocal (Is a local user (isLocal)), lastLogin (Last login (lastLogin)), luid (User id (luid)), name (Name (name)), siteRole (Site role (siteRole)).
Sort directionsort_directiontext
Which way to sort. Ignored when no sort field is chosen.One of: asc (Ascending), desc (Descending). Default: asc.
Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
page_numbernumber
page_sizenumber
total_availablenumber
userslist
Example output
{
  "count": 1,
  "page_number": 1,
  "page_size": 100,
  "total_available": 1,
  "users": [
    {
      "auth_setting": "ServerDefault",
      "domain_name": "local",
      "email": "ada@example.com",
      "full_name": "Ada Lovelace",
      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
      "language": "en",
      "last_login": "2026-09-05T09:12:00Z",
      "locale": "en_GB",
      "name": "ada@example.com",
      "site_role": "SiteAdministratorCreator"
    }
  ]
}

List views

List every view on the Tableau site, across all workbooks, optionally filtered by workbook, project or name.

Inputs

Filter onfilter_fieldtext
Which view field to filter on. Leave the field empty to list everything. Choosing a field means the value below is required.One of: caption (Caption (caption)), contentUrl (Content URL (contentUrl)), createdAt (Created at (createdAt)), favoritesTotal (Times favourited (favoritesTotal)), fields (Fields used (fields)), hitsTotal (Total views (hitsTotal)), name (Name (name)), ownerDomain (Owner domain (ownerDomain)), ownerEmail (Owner email (ownerEmail)), ownerName (Owner name (ownerName)), and 9 more.
Filter operatorfilter_operatortext
How the filter value is compared. Ignored when no field is chosen. Which operators a field accepts depends on the field: name and the other text fields take 'is exactly', date fields such as Created at take the before/after comparisons, and Tags takes 'is any of'. Tableau refuses a pairing it does not support, and the error says so.One of: eq (is exactly), cieq (is exactly, ignoring case), gt (is after / greater than), gte (is at or after / greater than or equal to), lt (is before / less than), lte (is at or before / less than or equal to), has (contains), in (is any of - a bracketed list, [alpha,beta]), like (matches a pattern using * as the wildcard). Default: eq.
Filter valuefilter_valuetext
What to compare against. Dates are ISO-8601 (2026-01-31T00:00:00Z); a list for the 'is any of' operator is bracketed, like [alpha,beta].
Sort bysort_fieldtext
Which view field to sort on. Leave empty for Tableau's order.One of: caption (Caption (caption)), contentUrl (Content URL (contentUrl)), createdAt (Created at (createdAt)), favoritesTotal (Times favourited (favoritesTotal)), fields (Fields used (fields)), hitsTotal (Total views (hitsTotal)), name (Name (name)), ownerDomain (Owner domain (ownerDomain)), ownerEmail (Owner email (ownerEmail)), ownerName (Owner name (ownerName)), and 9 more.
Sort directionsort_directiontext
Which way to sort. Ignored when no sort field is chosen.One of: asc (Ascending), desc (Descending). Default: asc.
Include view countsinclude_usage_statisticstrue/false
Also return how many times each view has been opened. Tableau leaves this out unless it is asked for, because it costs an extra lookup.Default: false.
Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
page_numbernumber
page_sizenumber
total_availablenumber
viewslist
Example output
{
  "count": 1,
  "page_number": 1,
  "page_size": 100,
  "total_available": 1,
  "views": [
    {
      "content_url": "Superstore/sheets/Overview",
      "created_at": "2026-02-11T08:15:00Z",
      "id": "2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f",
      "name": "Overview",
      "owner": {
        "email": "ada@example.com",
        "full_name": "Ada Lovelace",
        "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
        "name": "ada@example.com"
      },
      "project": {
        "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
        "name": "Default"
      },
      "tags": [],
      "total_view_count": 412,
      "updated_at": "2026-08-30T16:02:00Z",
      "view_url_name": "Overview",
      "workbook_id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e"
    }
  ]
}

List workbooks

List the workbooks on the Tableau site, optionally filtered by project, owner, name or tag.

Inputs

Filter onfilter_fieldtext
Which workbook field to filter on. Leave the field empty to list everything. Choosing a field means the value below is required.One of: contentUrl (Content URL (contentUrl)), createdAt (Created at (createdAt)), displayTabs (Shows tabs (displayTabs)), favoritesTotal (Times favourited (favoritesTotal)), hasAlerts (Has alerts (hasAlerts)), hasExtracts (Has extracts (hasExtracts)), name (Name (name)), ownerDomain (Owner domain (ownerDomain)), ownerEmail (Owner email (ownerEmail)), ownerName (Owner name (ownerName)), and 6 more.
Filter operatorfilter_operatortext
How the filter value is compared. Ignored when no field is chosen. Which operators a field accepts depends on the field: name and the other text fields take 'is exactly', date fields such as Created at take the before/after comparisons, and Tags takes 'is any of'. Tableau refuses a pairing it does not support, and the error says so.One of: eq (is exactly), cieq (is exactly, ignoring case), gt (is after / greater than), gte (is at or after / greater than or equal to), lt (is before / less than), lte (is at or before / less than or equal to), has (contains), in (is any of - a bracketed list, [alpha,beta]), like (matches a pattern using * as the wildcard). Default: eq.
Filter valuefilter_valuetext
What to compare against. Dates are ISO-8601 (2026-01-31T00:00:00Z); a list for the 'is any of' operator is bracketed, like [alpha,beta].
Sort bysort_fieldtext
Which workbook field to sort on. Leave empty for Tableau's order.One of: contentUrl (Content URL (contentUrl)), createdAt (Created at (createdAt)), displayTabs (Shows tabs (displayTabs)), favoritesTotal (Times favourited (favoritesTotal)), hasAlerts (Has alerts (hasAlerts)), hasExtracts (Has extracts (hasExtracts)), name (Name (name)), ownerDomain (Owner domain (ownerDomain)), ownerEmail (Owner email (ownerEmail)), ownerName (Owner name (ownerName)), and 6 more.
Sort directionsort_directiontext
Which way to sort. Ignored when no sort field is chosen.One of: asc (Ascending), desc (Descending). Default: asc.
Results per pagepage_sizenumber
How many results to return, between 1 and 1000. Tableau's own default is 100.From 1 to 1000. Default: 100.
Pagepage_numbernumber
Which page to return, starting at 1. Compare the result's count with its total available to know whether there is another one.At least 1. Default: 1.

Outputs

countnumber
page_numbernumber
page_sizenumber
total_availablenumber
workbookslist
Example output
{
  "count": 1,
  "page_number": 1,
  "page_size": 100,
  "total_available": 1,
  "workbooks": [
    {
      "content_url": "Superstore",
      "created_at": "2026-02-11T08:15:00Z",
      "default_view_id": "2c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f",
      "description": "",
      "id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e",
      "name": "Superstore",
      "owner": {
        "email": "ada@example.com",
        "full_name": "Ada Lovelace",
        "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
        "name": "ada@example.com"
      },
      "project": {
        "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",
        "name": "Default"
      },
      "show_tabs": true,
      "size": 2,
      "tags": [
        "sales"
      ],
      "updated_at": "2026-08-30T16:02:00Z",
      "webpage_url": "https://10ax.online.tableau.com/#/site/acme/workbooks/1234"
    }
  ]
}

Refresh a data source extract

Rebuild a published data source's extract and wait for it to finish. Tableau only queues a refresh when asked, so this follows the job to completion and fails if the rebuild failed - a refresh that cannot reach the underlying data still starts cleanly and reports the failure only on the job afterwards. The data source has to have an extract; a live connection queries its source directly and has nothing to rebuild.

Inputs

Data source iddatasource_idtextRequired
The published data source's Tableau id (a GUID). List data sources returns it.
Wait for the refresh to finishwait_for_completiontrue/false
Keep the step running until Tableau reports the extract rebuilt, and fail if it did not. Turn this off only if you want to start the refresh and follow it yourself with Get a job - Tableau accepts the request and answers with a queued job either way, so with this off the step cannot tell you whether the rebuild worked.Default: true.
Give up waiting after (seconds)timeout_secondsnumber
How long to wait for the rebuild before returning. A big extract can take longer than this; if it does, the result comes back with 'timed_out' set and the refresh carries on in Tableau - follow it with Get a job.From 1 to 3600. Default: 300.

Outputs

completed_attext
created_attext
finish_codetext
idtext
modetext
noteslist
progressnumber
started_attext
status_noteslist
timed_outtrue/false
typetext
updated_attext
Example output
{
  "completed_at": "2026-09-05T10:31:22Z",
  "created_at": "2026-09-05T10:30:00Z",
  "finish_code": "0",
  "id": "5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
  "mode": "Asynchronous",
  "notes": [
    "Finished refresh of extracts."
  ],
  "progress": 100,
  "started_at": "2026-09-05T10:30:04Z",
  "status_notes": [],
  "timed_out": false,
  "type": "RefreshExtract",
  "updated_at": "2026-09-05T10:31:22Z"
}

Remove a workbook tag

Remove a single tag from a workbook.

Inputs

Workbook idworkbook_idtextRequired
The workbook's Tableau id (a GUID). List workbooks returns it, and it also appears in the address bar when you open the workbook.
TagtagtextRequired
The tag to remove, spelled exactly as it appears.

Outputs

deletedtrue/false
tagtext
workbook_idtext
Example output
{
  "deleted": true,
  "tag": "reviewed",
  "workbook_id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e"
}

Tag a workbook

Add one or more tags to a workbook. Tags it already has are kept, and the result lists the full set.

Inputs

Workbook idworkbook_idtextRequired
The workbook's Tableau id (a GUID). List workbooks returns it, and it also appears in the address bar when you open the workbook.
TagstagslistRequired
The tags to add. Give a list, or separate them with commas.

Outputs

countnumber
tagslist
workbook_idtext
Example output
{
  "count": 2,
  "tags": [
    "sales",
    "reviewed"
  ],
  "workbook_id": "6b7c8d9e-0f1a-2b3c-4d5e-6f7a8b9c0d1e"
}

Update a project

Rename a project, change its description, move it under another project, or change how its permissions are managed. Anything left empty keeps the value it already has.

Inputs

Projectproject_idtextRequired
Which project to act on. Pick one, or paste the id of a project made earlier in this workflow.
New namenametext
Rename the project. Leave empty to keep its name.
New descriptiondescriptiontext
Replace the project's description. Leave empty to keep the current one.
Parent projectparent_project_idtext
Nest the project inside this one. Leave empty to create it at the top level. Creating a top-level project usually needs a Site Administrator role.
Permissions arecontent_permissionstext
Whether each item in the project keeps its own permissions or inherits the project's. Leave empty to keep Tableau's default.One of: ManagedByOwner (Managed by owner - each item's owner sets its permissions), LockedToProject (Locked to project - the project's permissions apply to everything in it), LockedToProjectWithoutNested (Locked to project, nested projects excluded).

Outputs

content_permissionstext
controlling_permissions_project_idtext
created_attext
descriptiontext
idtext
nametext
ownerobject
parent_project_idtext
top_level_projecttrue/false
updated_attext
writeabletrue/false
Example output
{
  "content_permissions": "LockedToProject",
  "controlling_permissions_project_id": "3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d",
  "created_at": "2026-09-05T10:30:00Z",
  "description": "Dashboards for the quarterly review.",
  "id": "3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d",
  "name": "Quarterly reporting (FY26)",
  "owner": {
    "email": "ada@example.com",
    "full_name": "Ada Lovelace",
    "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90",
    "name": "ada@example.com"
  },
  "parent_project_id": null,
  "top_level_project": true,
  "updated_at": "2026-09-05T10:45:00Z",
  "writeable": true
}

On this page