Technical limits

SaysData enforces these technical limits to keep the service secure, healthy and available to everyone. They are separate from your monthly allowances, which your plan sets on the Plans & Limits page, and a request refused under one of them never counts toward those allowances. The values below are the ones in force today.

Requests

Limit Value
Tool calls 60 per minute, per user
Search run time (search_datasets) 30 seconds per call
Feedback message (send_feedback) 4,000 characters

Queries

Queries for execute_sql and distinct_values run on shared query servers. A query runs in steps (for execute_sql: checking the statement, measuring each slice, preparing the slices and running the statement), and each step has its own run-time limit. The query part of a call, including any wait for a free slot, has a limit of its own; fetching a dataset the call needs first is not part of it (see Datasets). A query that cannot start in time because every slot is in use is refused as busy; retry shortly.

Limit Value
Queries running at once 3 per query server
Queries waiting for a free slot 12 per query server
Run time of each query step 40 seconds
Query part of a call, including waiting for a slot 60 seconds
Memory 3 GB per query
Temporary disk 2 GB per query

execute_sql

Limit Value
Result rows 5,000 per query
Result size 4 MB per query, estimated as the rows’ JSON
SQL statement length 10,000 characters
Opening brackets in a statement 500
Rows in one slice 1,995,840

distinct_values

Limit Value
Values returned 100 per call

When more values match, the result returns the first ones and says it was cut short.

Saved queries

Limit Value
Saved query name (save_query) 200 characters
Saved queries listed (find_saved_queries) 20 per call, the most recently saved

When more match, the result says so; the Saved queries page on saysdata.com lists every one.

Datasets

A request that needs a dataset SaysData does not hold up to date starts preparing it: SaysData fetches it from its provider, converts it and measures it in the background, and the dataset can be queried once that finishes. The request waits for the preparation up to the time below, except for a dataset predicted larger than the size below, which it does not wait for. A request that does not see the preparation finish answers that the dataset is being prepared, with an estimate of when it will be ready; the preparation carries on, and asking again later finds it ready. A request asking for a dataset someone else is already preparing waits for that same preparation and starts nothing. Waiting for a free preparation server or for a provider's download limit is part of a preparation, never a refusal.

Limit Value
Datasets being prepared at once 3 per user
Wait for a preparation during a request 150 seconds
Size of a dataset a request waits for 1 GB (predicted source size)
Time to prepare a dataset 3 hours per attempt; a dataset that takes longer is tried again after 24 hours

A user's fourth preparation while three are in progress is refused, naming the three and when to try again. A dataset whose preparation fails three times in a row is reported as unavailable, with the reason, for 24 hours; after that, asking for it again tries again. A dataset its provider has no data for is unavailable until the provider publishes a new version.

Provider downloads

OECD limits how often its data can be downloaded, so SaysData keeps its own downloads below OECD's limit. When the budget is used up, an OECD dataset being prepared waits until a download becomes available, and describe_dataset says so in its estimate.

Limit Value
OECD data downloads 45 download attempts per hour, shared by all SaysData users and SaysData’s own data refreshes
Pause after OECD turns a download away 1 hour

Website

Limit Value
Website API requests (/api/…) 100 per minute, per signed-in user, or per IP address when signed out