My Agent Keeps Pulling Stale Tableau Data Even Though the View Is Up to Date — How Do I Fix It?
Last updated: May 14, 2026
When your agent fetches Tableau view data via
get_view_dataand keeps returning old results, the most common cause is Tableau Server's query-result cache serving a stale snapshot. Passmax_age: 1in the tool call to force Tableau to re-render the view with fresh data on every fetch.
Symptoms
Your agent calls
tableau__get_view_dataand the CSV it returns contains dates or values from days or weeks ago, even though the Tableau dashboard shows current data in the browser.The agent may claim that "Gumloop is caching the file" or "Gumloop is returning a stored copy" — this is an LLM hallucination. Gumloop's Tableau integration has no caching layer and overwrites the file on every call.
Multiple runs return byte-identical CSV files (exact same file size and content), even though the underlying data source has been updated.
The
get_view_datacall still takes several minutes per run (consistent with a real Tableau download), ruling out a local cache hit.
Cause
Tableau Server maintains a server-side query-result cache for rendered views. When the Gumloop Tableau integration calls Tableau's REST API endpoint (/views/{view_id}/data), Tableau may serve a cached result instead of re-executing the query against the underlying data source.
The max_age parameter controls how old a cached result can be (in minutes) before Tableau discards it and re-renders. When max_age is not passed, Tableau defaults to caching results as long as possible — potentially indefinitely. This means if your agent pauses for days or weeks and then resumes, Tableau may still serve the last cached snapshot.
This is a Tableau Server behavior, not a Gumloop issue. Gumloop's integration calls Tableau directly with no HTTP-level cache, and the storage layer that holds the CSV overwrites the file on every upload — there is no content hashing, dedup, or "return the old file" path.
How to Fix It
Option 1: Pass max_age: 1 in the agent's system prompt (recommended)
The simplest fix is to instruct your agent to always include max_age: 1 when calling tableau__get_view_data. This tells Tableau Server that any cached result older than 1 minute should be discarded and the view should be re-rendered from the live data source.
Example prompts you can try right now:
"Fetch the latest data from my Tableau view, and make sure you pass max_age: 1 so Tableau doesn't return a stale cached version."
"Pull fresh data from Tableau view [view_id] with max_age set to 1."
To make this automatic, tell your agent in the same chat:
Update your system prompt to include this instruction:
When calling tableau__get_view_data, always pass max_age: 1 to force Tableau to return a fresh server-side render. Never omit max_age — the default allows Tableau to serve indefinitely cached results.Or: "Create a skill called 'tableau-fresh-fetch' with the above behavior."
If your agent has the self-updating toggle turned off, add the instruction manually in the system prompt field.
Option 2: Check for Tableau parameters anchoring the date range
If passing max_age: 1 doesn't resolve the issue, check whether your Tableau workbook uses parameters (not filters) to control date ranges. Tableau parameters store static values — they hold whatever the view was last published or saved with. The REST API renders the view using the saved parameter values, not whatever you see interactively in the browser.
To check:
Open your workbook in Tableau and look for any parameters used in calculated fields that control date ranges (e.g.,
Start Date,End Date).If you find parameters, switch to calculated fields that use dynamic date expressions like
TODAY(),NOW(), orDATEADD('day', -N, TODAY())instead.Republish the workbook after making changes.
Run the agent again with
max_age: 1to verify the data is now current.
Parameters work fine when someone is updating them interactively or via a separate automation, but for API-based scheduled fetches, dynamic date calculations are the more robust pattern.
Option 3: Switch from get_view_data to query_datasource
If view-level caching continues to cause problems, the Gumloop Tableau integration also exposes tableau__query_datasource, which queries a published data source directly via Tableau's VizQL Data Service. This bypasses view-level caching entirely because it queries the raw data source rather than rendering a saved view.
To use this approach:
Ask your agent to call
tableau__list_datasourcesto find the datasource LUID.Define the fields and aggregations you need in the
query_datasourcecall.Note: the output format will be raw datasource records rather than the pre-formatted view CSV, so you may need to adjust how your agent processes the data.
Validation
After applying the fix, run your agent and check:
The CSV returned by
get_view_datacontains dates through yesterday (or the expected latest date).The file size is different from the previous stale runs (stale caching produces byte-identical files across runs).
On subsequent scheduled runs, the data continues to update daily.
Related Docs
Still Need Help?
If this didn't resolve your issue, reach out to support at support@gumloop.com.