Tools
Tables Query
Query any table in the data model with BigQuery Standard SQL syntax. Always prefix tables with "catalog." (ex: catalog.crawl_pages_20251201).
Query any data-model table with BigQuery Standard SQL syntax. Always prefix tables with "catalog." (for example, catalog.crawl_pages_20251201). The following query-string functions are supported: - query_string_keys(input): returns ARRAY<STRING> with query-string keys. - query_string_params(input): returns ARRAY<STRUCT<key STRING, value STRING>> with query-string key/value pairs. - remove_query_string(url, keys): removes URL query-string parameters whose keys are in an ARRAY<STRING>. It removes the "?" when no parameter remains. The parsing functions accept a raw query string with or without a leading "?", or a complete URL. They preserve parameter order and duplicate keys, ignore empty keys, and do not URL-decode values. remove_query_string accepts a complete URL. For example: SELECT query_string_params(url) FROM catalog.crawl_pages_20251201 SELECT remove_query_string(url, ['bar']) FROM catalog.crawl_pages_20251201
Playground
Your organization, project and token stay in this browser's local storage and are sent straight to the API — this page never sees them.
Billing
Fixed cost per item requested, plus the data the query scans. Analytical queries are billed on how much data they read, not on how many rows come back, so a narrow filter over a large table can still scan the whole of it. Restricting the columns and the date range you ask for is what keeps this down.
These usage SKUs can be charged on a call.
| SKU | Credits | Description |
|---|---|---|
| Tool call | 1 per request | Charged once per successful item, on top of any usage below. |
| Data scanned | 6,250 per TiB scanned | Analytical queries are billed on the volume of data the query reads, not on the rows it returns: a narrow filter over a large table can still scan the whole table. |
Schemas
item is what you send, config how the tool behaves,
and the response is what you get back.
Item
objectquery
string
required
BigQuery SQL query to execute
max_results
integer
Maximum number of results to return
{
"query": "string",
"max_results": 10000
}
Response
objectfields
array
required
Field definitions with name and type
results
array
required
Query execution results as list of lists
{
"fields": [
{}
],
"results": [
{}
]
}
Endpoints
http://agents.botify.com/{organization}/{project}/tables_query/process
http://agents.botify.com/{organization}/{project}/tables_query/batch_process
http://agents.botify.com/{organization}/{project}/tables_query/async_process
http://agents.botify.com/{organization}/{project}/tables_query/async_batch_process
See running a long job in the background for the polling flow.
cURL
curl -X POST "http://agents.botify.com/{organization}/{project}/tables_query/process" \
-H "Authorization: Bearer $BOTIFY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"item": {
"query": "<query>"
}
}'
Over MCP
This tool is exposed as the MCP tool tables_query. An MCP client passes
organization, project and item as tool arguments.
Set up MCP →
Raw metadata
- GET /agents/tables_query — this page as JSON.
- /agents/tables_query/skill.md — Markdown for coding agents.