Connector for Claude
SaysData does for Claude what a careful analyst does before quoting a number:
Search the tables at the source. Each result says what the table measures, where, over what period and how it’s broken down.
Learn how each is built. Units, scale and missing cells are measured from the file, and its breakdowns checked against the agency’s published structure, before it can be queried.
Check the query. Queries with a defect SaysData checks for are refused before they run, with what to fix; those with a risk it checks for run and come back warned.
Keep the receipts. Results come back with their units, notes and citation, and each call’s arguments and outcome are kept for 60 days.
Data from Statistics Canada, Eurostat, and OECD. Works in Claude desktop and Claude on the web — no API keys.
The question
According to Statistics Canada's latest figures, what were wholesale sales in each of the ten Canadian provinces in July 2026, seasonally adjusted, … excluding petroleum … and excluding oilseed and grain? …
Finding the table search_datasets
… "externalId":"20100074","name":"Wholesale trade, sales","description":"… Data are monthly, with unadjusted and seasonally adjusted from 1993-01 to 2026-07. …
The dataset’s profile describe_dataset
VALUE SCALE: every value is scaled "thousands": report it in that scale, or multiply by 1,000 to report base units — not both. …
Dimension "Geography" includes total members ("Canada"); summing across this dimension without excluding them double counts.
A checked query execute_sql
| GEO | REF_DATE | VALUE | STATUS |
|---|---|---|---|
| Canada | 2026-07 | 93091415 | A |
| Ontario | 2026-07 | 48720214 | A |
| Quebec | 2026-07 | 15656042 | B |
| Alberta | 2026-07 | 10320572 | A |
| … 4 of 14 rows shown | |||
What comes back to read the numbers
… [measured] Values for "Seasonally adjusted" are in Dollars, scale thousands (×1000), 0 decimal(s). …
… [published] Quality indicator: Code A=Excellent. Code B=Very good. Code C=Good. …
Adapted from Statistics Canada, Table 20-10-0074-01 Wholesale trade, sales, 1993-01 to 2026-07. …
Excerpts from SaysData’s responses to calls made for this question through the Claude connector on 7 October 2026, quoted as returned; “…” marks a cut. Claude writes the answer; SaysData gives it the evidence.
What SaysData does
Claude writes the answer, and whether it gets the numbers right is up to Claude. SaysData makes the official numbers easier to get, harder to get wrong and easier to interpret correctly.
Search thousands of official tables in plain language. Each result says what the table measures, where, over what period and how it’s broken down — so Claude can pick the right one, not just the first one.
Before a dataset can be queried, SaysData measures its file (units and scale, time format, missing and suppressed cells) and checks it against the agency’s published structure, its breakdowns and their members. Totals come from that structure where it marks them, and are otherwise recognised by their labels. A dataset whose file holds a breakdown or member that structure doesn’t declare, or that couldn’t be measured, is refused with a reason. Where a check has nothing to measure, the result says so.
Queries with a defect from the Refused list below are refused before they run, with what to fix. Those with a risk from the Warned list run, and come back with a warning and the measured numbers.
Tables are downloaded from the publishing agency with every published row and column kept, and values changed only in the three documented ways below.
Dataset descriptions and query results carry what it takes to read the numbers: units and scale, how missing cells read, the members recognised as totals, data-quality flags, warnings such as a total sitting beside its own parts, reading notes, the agency’s own footnotes, and the citation its licence asks for.
Every call is recorded with its exact arguments and outcome and kept for 60 days, so you can see how an analysis was done. Running it again reads each table as SaysData holds it then — only the current copy is kept, so the numbers can differ. Each dataset’s profile states the period the table covers, measured from the file; results carry the agency’s last-update date when it is available.
Guardrails
Two messages SaysData returned on 7 October 2026, word for word.
A query for Niger’s tax revenue that held every unit of measure the table publishes — rows in CFA francs beside rows with no currency, at two different scales:
The query was refused and nothing ran:
- slice "ner", UNIT_MULT [mixed-units]: slice ner holds 2 values in UNIT_MULT ("0", "6") and UNIT_MULT is neither pinned nor set to varying Fix: put UNIT_MULT in the slice's attributes: pin one value ({"values": ["0"]}) or set it to {"varying": true} and keep each value as its own series
- slice "ner", CURRENCY [mixed-units]: slice ner holds 2 values in CURRENCY ("_Z", "XOF") and CURRENCY is neither pinned nor set to varying Fix: put CURRENCY in the slice's attributes: pin one value ({"values": ["_Z"]}) or set it to {"varying": true} and keep each value as its own seriesA query for national currency only, with each scale and currency kept as its own series, ran.
The wholesale query above returned Canada beside its provinces — right for a table, wrong for a sum or a ranking:
slice ws, GEO_ID (varying, 14 members in the slice): 1 (Canada) is an aggregate of other members held here — summed or ranked with them, an aggregate is counted twice or ranked among its own parts
Traceable
Your history keeps each call Claude made for 60 days — the search, the dataset, the exact query — with its outcome, including anything refused or warned. Where the agency’s last-update date is available, it comes back with the result, so you know what to re-check when it publishes again.
| Tool | Dataset | Outcome | Details |
|---|---|---|---|
| execute_sql | Revenue Statistics in Africa - Comparative tax and non-tax revenues | Answered | Warnings: comparing-rows |
| execute_sql | Revenue Statistics in Africa - Comparative tax and non-tax revenues | Refused — failed a query check | Refusal: mixed-units |
| describe_dataset | Revenue Statistics in Africa - Comparative tax and non-tax revenues | Answered |
The calls behind the refusal example above.
Sign up, then open Getting Started for your connection address.
Add SaysData to Claude with that address and sign in when asked. No API keys.
Ask Claude about official statistics. With SaysData connected it can search the catalog, read a dataset’s profile and query the data — and the results it gets back carry their units, notes and citation.
Sources
Thousands of datasets. Each is profiled before it is queried, with its units, its licence citation, and the agency’s footnotes and flags where it publishes them.
Every published row and column is kept. Values change in only three ways:
When a query reads a table, rows with no date and no value — placeholders some agencies publish for series without observations — are left out. If such a row ever carried a value, the result warns.
Their data is used under each agency’s open-data terms. SaysData is independent and is not endorsed by or affiliated with any of them. Data sources and licences
Sign up, add the connector, and ask your first question.