Connector for Claude

Official statistics, with the groundwork done.

SaysData does for Claude what a careful analyst does before quoting a number:

  1. 1

    Search the tables at the source. Each result says what the table measures, where, over what period and how it’s broken down.

  2. 2

    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.

  3. 3

    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.

  4. 4

    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? …

  1. 1

    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. …

  2. 2

    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.

  3. 3

    A checked query execute_sql

    GEO REF_DATE VALUE STATUS
    Canada2026-0793091415A
    Ontario2026-0748720214A
    Quebec2026-0715656042B
    Alberta2026-0710320572A
    … 4 of 14 rows shown
  4. 4

    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

The groundwork, not the answer.

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.

Dataset discovery

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.

Dataset profiling

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.

Query guardrails

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.

Data from the primary source

Tables are downloaded from the publishing agency with every published row and column kept, and values changed only in the three documented ways below.

Interpretation metadata

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.

Query history and data dates

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

The checks run before Claude sees a number.

Two messages SaysData returned on 7 October 2026, word for word.

Refused Nothing runs. Claude gets the fix.

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 series

A query for national currency only, with each scale and currency kept as its own series, ran.

  • A category the query selects by id that doesn’t exist in the dataset
  • A breakdown the query never says how to handle
  • Rows mixing the units, scales or currencies the dataset declares, without saying how to keep them apart
  • Rows or columns made up from typed-in numbers instead of read from the data
Warned It runs. The risk comes back measured.

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
  • A total summed with its own parts
  • A total the agency’s hierarchy places over its parts, or flags as an aggregate, returned beside them from a breakdown the query keeps whole, where adding up or ranking the rows would count it twice
  • Selections with different numbers of periods joined, such as annual against quarterly
  • Suppressed or missing values a total or average silently skips
  • Series ending in different years compared as “latest”
  • Averages of rates or percentages, recognized by their unit codes
  • Selections in different declared units compared as like
  • Rows in different units, scales or currencies added up, averaged, ranked or picked from as one
  • A date range chosen for a query that some series don’t fill, such as “the 2000–2024 average” over a series that starts in 2005
  • A date filter in the query’s SQL written in a different period format than the data’s, such as a year bound on monthly data

Traceable

Every call behind an answer leaves a trail.

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.

Request history for the calls behind the refusal example
ToolDatasetOutcomeDetails
execute_sqlRevenue Statistics in Africa - Comparative tax and non-tax revenuesAnsweredWarnings: comparing-rows
execute_sqlRevenue Statistics in Africa - Comparative tax and non-tax revenuesRefused — failed a query checkRefusal: mixed-units
describe_datasetRevenue Statistics in Africa - Comparative tax and non-tax revenuesAnswered

The calls behind the refusal example above.

Set up in three steps.

  1. 01

    Create your account

    Sign up, then open Getting Started for your connection address.

  2. 02

    Connect Claude

    Add SaysData to Claude with that address and sign in when asked. No API keys.

  3. 03

    Ask in your own words

    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

Published by the agencies. Every row and column kept.

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.

What preparation changes

Every published row and column is kept. Values change in only three ways:

  • Each column is typed as numbers or text; an empty cell or a literal “NaN” becomes null.
  • A cell the agency flags as suppressed or not available becomes null — the flag itself is kept.
  • Codes stay as the agency wrote them; their labels come with the dataset’s profile.

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

Give Claude the official numbers — and the groundwork behind them.

Sign up, add the connector, and ask your first question.