Kaggle API: Search datasets
Finds public Kaggle datasets on a topic, with size, file formats, usability, popularity and license. Lists at most 100 results in Kaggle's order; files are not downloaded.
Unofficial. Not affiliated with or endorsed by Kaggle.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Sort optional
sort How Kaggle orders the results, for example most_votes.
recently_updated
One of
hottest,most_votes,newest,recently_updated,most_usable. Defaulthottest.- Query, required
query Topic to search for, for example house prices.
house prices
- File Type optional
file_type Only include datasets of this file format, for example csv.
csv
One of
any,csv,json,sqlite,bigquery,parquet. Defaultany.- Max Results optional
max_results Maximum number of datasets to return, for example 20.
25
Whole number from 1 to 100. Default
20.
Input as JSON
{ "sort": "recently_updated", "query": "house prices", "file_type": "csv", "max_results": 25}Output
{ "datasets": [ { "owner": "Thomas Gaehtgens", "title": "Real Estate Listings in Portugal", "votes": 37, "license": "MIT", "size_mb": 4.553, "downloads": 3066, "file_types": [ "CSV" ], "dataset_link": "https://www.kaggle.com/datasets/luvathoms/portugal-real-estate-2024" , "usability_score": 10, "last_updated_date": "2026-09-29" }, { "owner": "smartoddstenis", "title": "Tennis Closing Odds: Pinnacle vs 1xBet", "votes": 0, "license": "Attribution 4.0 International (CC BY 4.0)", "size_mb": 0.1621, "downloads": 4, "file_types": [ "CSV" ], "dataset_link": "https://www.kaggle.com/datasets/smartoddstenis/tennis-closing-odds-pinnacle-vs-1xbet" , "usability_score": 8.82, "last_updated_date": "2026-09-26" }, { "owner": "Richard (Ryszard) Cieplechowicz", "title": "Tampa Bay Owner Home Values by ZIP 2020-2024", "votes": 1, "license": "Attribution 4.0 International (CC BY 4.0)", "size_mb": 0.0375, "downloads": 10, "file_types": [ "MD", "PY", "JSON" ], "dataset_link": "https://www.kaggle.com/datasets/richardcieplechowicz/tampa-bay-owner-home-values-by-zcta-2020-2024" , "usability_score": 4.71, "last_updated_date": "2026-09-26" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"kaggle.com/search_datasets","input":{"sort":"recently_updated","query":"house prices","file_type":"csv","max_results":25}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "kaggle.com/search_datasets" , "input": { "sort": "recently_updated", "query": "house prices", "file_type": "csv", "max_results": 25 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "kaggle.com/search_datasets" , "input": { "sort": "recently_updated", "query": "house prices", "file_type": "csv", "max_results": 25 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run kaggle.com/search_datasets# with {"sort":"recently_updated","query":"house prices","file_type":"csv","max_results":25}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "sort": { "enum": [ "hottest", "most_votes", "newest", "recently_updated", "most_usable" ], "type": "string", "default": "hottest", "description": "How Kaggle orders the results, for example most_votes." }, "query": { "type": "string", "minLength": 1, "description": "Topic to search for, for example house prices." }, "file_type": { "enum": [ "any", "csv", "json", "sqlite", "bigquery", "parquet" ], "type": "string", "default": "any", "description": "Only include datasets of this file format, for example csv." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of datasets to return, for example 20." } }}Output schema
{ "type": "object", "required": [ "datasets" ], "properties": { "datasets": { "type": "array", "items": { "type": "object", "required": [ "title", "owner", "size_mb", "file_types", "usability_score", "votes", "downloads", "last_updated_date", "license", "dataset_link" ], "properties": { "owner": { "type": [ "string", "null" ], "description": "Dataset owner." }, "title": { "type": [ "string", "null" ], "description": "Dataset title." }, "votes": { "type": [ "integer", "null" ], "description": "Number of votes." }, "license": { "type": [ "string", "null" ], "description": "Dataset license." }, "size_mb": { "type": [ "number", "null" ], "description": "Dataset size in decimal megabytes." }, "downloads": { "type": [ "integer", "null" ], "description": "Number of downloads." }, "file_types": { "type": "array", "items": { "type": "string" }, "description": "File formats found in the dataset." }, "dataset_link": { "type": "string", "description": "Link to the dataset on Kaggle." }, "usability_score": { "type": [ "number", "null" ], "description": "Kaggle usability score from 0 to 10." }, "last_updated_date": { "type": [ "string", "null" ], "description": "Most recent update date (YYYY-MM-DD)." } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
kaggle.com/search_datasets- Returns
- title, owner, size, file types, usability, votes, downloads, last updated, license, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method kaggle.com/search_datasets with the inputs above.
Ask your agent
- Find me the most upvoted Kaggle datasets about credit card fraud detection, CSV only, top 30.
- I need recently updated datasets on electric vehicle charging stations — show sizes, licenses and how usable they are.
- What are the newest public datasets on Kaggle covering climate change temperature records? Give me 10.
- Looking for parquet-format datasets on NYC taxi trips, sorted by usability score, up to 50 results.
- Pull up the hottest datasets on mental health surveys right now, with download counts and file types.
See more
Finds public Hugging Face datasets by name or topic, ordered by downloads, likes, trending score or last update.
huggingface.co/search_datasetsFinds public Hugging Face models by search words, with an optional task and sort order. License is null when the model does not publish one.
huggingface.co/search_modelsFinds public Reddit posts by topic, optionally in one community, for a time window and sort order. Returns up to 100 posts in Reddit search order with score, comment count, text and link.
reddit.com/search_postsFinds public GitHub repositories by keywords, with an optional language filter and sort order. Returns up to 100 matches.
github.com/search_repositoriesSearches Kohl's products in site order and returns prices, offers, ratings and links for each result.
kohls.com/search_productsFinds Coursera courses, specializations, professional certificates, degrees and guided projects on a topic, in Coursera's search order.
coursera.org/search_coursesSearches public Bluesky posts for words, optionally ordered by latest or top and filtered by date, author or language. Search indexing may lag behind new posts.
bsky.app/search_postsSearch Chewy products by words, pet type, and sort order. Returns up to 72 products in Chewy's order, including listed and first-order Autoship prices when shown.
chewy.com/search_products