How to Connect LLM Pulse to Tableau
You can build Tableau dashboards on your LLM Pulse data without writing any code. The LLM Pulse API returns a plain table on request, and Tableau reads it through the REST API Connector that Tableau publishes on the Tableau Exchange.
Why there is no LLM Pulse connector for Tableau
Unlike Looker Studio and Power BI, Tableau no longer supports the kind of custom connector a data provider can ship. The Web Data Connector framework is deprecated and is being removed, and the Tableau Exchange only accepts database drivers. Tableau's own recommendation is to use its generic REST API Connector for APIs like ours, which is exactly what this guide does.
The practical difference for you is small: you install one connector from Tableau instead of one from us, and you paste a URL.
What you need
- An LLM Pulse API key. API keys require the Scale plan or above. Create one in Settings > API Keys.
- Tableau Desktop 2023.3 or later.
- Tableau's REST API Connector, installed from the Tableau Exchange. It also installs a driver, so follow Tableau's own installation notes.
Step 1: Build your data URL
Every LLM Pulse read endpoint accepts an output parameter. Add output=csv and the response becomes a flat table that Tableau can read directly.
The most common starting point is the time series of your visibility metrics:
https://api.llmpulse.ai/api/v1/metrics/timeseries?project_id=YOUR_PROJECT_ID&range=90&granularity=week&metrics=mentions,visibility,citation_rate,ai_visibility_score&competitors=ALL_COMPETITOR_IDS&output=csv
You can find your project ID in the URL of any project page, and your competitor IDs through Competitors or the /dimensions/competitors endpoint.
Step 2: Connect from Tableau
- In Tableau Desktop, open Data > New Data Source and pick REST API Connector.
- Paste the URL from step 1.
- Set authentication to Bearer token and paste your LLM Pulse API key.
- Set the response format to CSV.
- Load the data.
Tableau creates an extract with one row per date, actor and metric.
Step 3: Build the views
The time series table has these columns:
| Column | Meaning |
|---|---|
date |
Start of the day, week or month, depending on the granularity you asked for |
actor_type |
project for your brand, competitor for a tracked competitor |
actor_name, actor_domain, actor_id |
Who the row is about |
metric |
Which metric the row holds |
value |
The number, on the same scale the app shows |
Because the table is in long format, one worksheet can chart any metric: put date on columns, value on rows, actor_name on color, and filter on metric. Add a second filter on metric and you have a whole dashboard from a single data source.
Other useful tables
Swap the endpoint in the URL and keep output=csv:
| What you want | Endpoint |
|---|---|
| Share of Voice over time | /metrics/sov |
| Share of Voice snapshot, ranked | /metrics/sov with view=current |
| Top 4 competitors plus Others | /metrics/sov with view=breakdown |
| Per-prompt performance | /metrics/prompt_summary |
| Most cited domains | /metrics/top_sources |
| Individual mentions and citations | /dimensions/mentions, /dimensions/citations |
| Google Search Console data | /search_console/timeseries, /search_console/queries, /search_console/pages |
Full parameter reference: see the REST API overview or the API documentation.
Good to know
- Refreshes are extracts, not live. Tableau's REST API Connector loads data into an extract, so schedule a refresh at the cadence you need. Prompts run weekly, so a daily refresh is more than enough.
- Compare brands on non-brand prompts. Add
brand_kind=non_brandto any metrics URL for a fair brand-versus-competitor comparison. Prompts that name a brand naturally favor that brand. This is what the in-app Overview does by default. - Paginated endpoints return one page at a time.
/metrics/prompt_summary,/metrics/top_sources, the/dimensions/*lists and the Search Console endpoints return up to 100 rows per request. The total row count comes back in theX-Total-Countresponse header, so increaseper_pageor step throughpageto load everything. - Very large pulls are capped. A single request returns at most 200,000 rows. If you hit that, shorten the date range, ask for fewer metrics, or use
granularity=week. - Text cells are escaped for spreadsheets. A prompt that starts with
=or-comes back with a leading apostrophe so it is never treated as a formula.
Troubleshooting
Tableau shows one column with everything in it. The response format is set to JSON. Change it to CSV in the connector settings.
401 or 403 error. Check the token is sent as a Bearer token, that the key is active in Settings > API Keys, and that your plan includes API access (Scale and above). Search Console endpoints additionally need Growth or above and a connected property.
422 error mentioning output. That endpoint has no table version. The list above covers every endpoint that does.
Empty table. Confirm the project ID is right and that the date range covers a period with executions. New projects need their first weekly run to complete before there is anything to chart.
Tableau reports no columns. The time series, summary and Share of Voice tables always return their header row, even for an empty period. The other endpoints build their columns from the rows themselves, so a date range with no data returns an empty file with no header and Tableau has no schema to read. Point the connection at a range that has data, then refresh.