# Kaggle Datasets Scraper (`maximedupre/kaggle-datasets`) Actor

Search the public Kaggle dataset catalogue with one phrase. Save source-linked metadata for matching datasets, with optional full descriptions and version history.

- **URL**: https://apify.com/maximedupre/kaggle-datasets.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** AI, Developer tools, Education
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 dataset metadata

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 📚 Find Kaggle datasets for analysis and machine learning

Data analysts, students, and machine-learning teams can search Kaggle's public dataset catalogue with one phrase. Get source-linked metadata, owners, licenses, sizes, topics, and usage signals so you can compare datasets before you use them.

This Actor returns metadata and source links. It does not download, transform, or store the actual Kaggle files.

- Find public catalogue entries for **[free datasets](https://apify.com/maximedupre/kaggle-datasets/examples/free-datasets)** and review their source links and licenses.
- Explore **[open datasets](https://apify.com/maximedupre/kaggle-datasets/examples/open-datasets)** by phrase, then compare their published metadata before use.
- Use **[CSV file download](https://apify.com/maximedupre/kaggle-datasets/examples/csv-file-download)** to find Kaggle datasets with CSV file metadata before downloading from the source page.
- Use **[Kaggle Datasets Download](https://apify.com/maximedupre/kaggle-datasets/examples/kaggle-datasets-download)** to collect source links for datasets you may download after review.
- Find **[Free Datasets For Data Analysis](https://apify.com/maximedupre/kaggle-datasets/examples/free-datasets-for-data-analysis)** for analysis projects and filter matches by size, downloads, or topics.
- Find **[Free Datasets For Machine Learning](https://apify.com/maximedupre/kaggle-datasets/examples/free-datasets-for-machine-learning)** and compare owners, tags, licenses, and usage signals.

#### 🔎 Kaggle metadata in each saved row

Each saved row describes one matching public Kaggle dataset. It keeps the source page and the search phrase that found it, then adds identity, ownership, licensing, file, size, topic, activity, quality, and time fields.

When `includeDetails` is on, the row also includes the full source description and version history. Values that Kaggle does not publish can be absent from a row.

**Main value**

Use source-linked metadata to compare public Kaggle datasets before opening or downloading files from Kaggle.

#### ▶️ Run a focused Kaggle dataset search

Enter one non-empty phrase, choose any filters, and start the Actor. It reads current public Kaggle catalogue data at run time and can continue through all available results until the source is exhausted when no result limit is set.

**Run flow**

1. Enter one phrase in `searchQuery`.
2. Optionally choose a sort order, file format, license, topic tag IDs, size range, or minimum download count.
3. Set `maxItems`, or leave it empty to return all available results until the source is exhausted.
4. Turn on `includeDetails` when you need full descriptions and version history.
5. Open the `datasetUrl` output link to read the saved rows in the Apify dataset.

#### ⚙️ Input

The form accepts one required search phrase. All other fields are optional.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `searchQuery` | string, required | One non-empty phrase used to find public Kaggle datasets. |
| `sortBy` | string | Orders matches by `relevance`, `popularity`, `activity`, or `recency`. The prefilled value is `popularity`. |
| `fileType` | string | Filters by `csv`, `json`, or `sql`. Leave it empty to include every format. |
| `license` | string | Filters by `cc0`, `cc-by`, `cc-by-sa`, or `other`. Leave it empty to include every license. |
| `categoryIds` | array of strings | Adds one or more numeric Kaggle topic tag IDs. Leave the list empty to include every topic. |
| `minSize` | integer | Keeps datasets at least this large in bytes. Leave it empty to use no minimum size. |
| `maxSize` | integer | Keeps datasets no larger than this size in bytes. Leave it empty to use no maximum size. |
| `minDownloadCount` | integer | After Kaggle finds matches, keeps only datasets with at least this many downloads. Leave it empty to allow any count. |
| `maxItems` | integer | Sets how many matching datasets to return. It is prefilled with `10`; leave it empty to return all available results until the source is exhausted. |
| `includeDetails` | boolean | Adds each dataset's full description and version history when `true`. The default is `false`. |

**Example input**

This is the public input from a successful current-beta default-input run:

```json
{
  "searchQuery": "machine learning",
  "sortBy": "popularity",
  "maxItems": 10,
  "includeDetails": false
}
```

#### 🧾 Output

The Actor returns a `datasetUrl` link and saves matching dataset rows in the default Apify dataset. The rows have two materially different shapes: standard metadata, or enriched metadata when `includeDetails` is enabled. Optional source fields can be absent when Kaggle does not publish them.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `datasetUrl` | string URL | Links to the Apify dataset that stores this run's matching dataset records. |

**Standard metadata row**

| Field | Type | What it does |
| --- | --- | --- |
| `title` | string | Dataset title shown on Kaggle. |
| `datasetSlug` | string | Stable Kaggle dataset slug, such as `owner/dataset-name`. |
| `url` | string URL | Public Kaggle page for the dataset. |
| `searchQuery` | string | Search phrase that found this dataset. |
| `owner` | object | Kaggle account that owns the dataset. |
| `owner.username` | string | Owner's Kaggle username. |
| `owner.displayName` | string | Owner's public display name when shown. |
| `creator` | object | Kaggle account credited with creating the dataset. |
| `creator.username` | string | Creator's Kaggle username. |
| `creator.displayName` | string | Creator's public display name when shown. |
| `license` | string | License listed for the dataset on Kaggle. |
| `totalBytes` | integer | Combined size of the dataset files in bytes. |
| `fileCount` | integer | Number of files in the dataset when shown by Kaggle. |
| `fileFormats` | array of strings | File formats found in the dataset when shown by Kaggle. |
| `downloadCount` | integer | Number of downloads when shown by Kaggle. |
| `viewCount` | integer | Number of views of the dataset page when shown by Kaggle. |
| `voteCount` | integer | Number of votes for the dataset when shown by Kaggle. |
| `publicNotebookCount` | integer | Number of public notebooks that use the dataset when shown by Kaggle. |
| `usabilityRating` | number | Kaggle usability rating from `0` to `1` when available. |
| `tags` | array of strings | Kaggle topic tags linked to the dataset. |
| `categories` | array of strings | Dataset categories supplied by Kaggle when available. |
| `lastUpdatedAt` | date-time string | Time the dataset was last updated when available. |
| `createdAt` | date-time string | Time the dataset was created when available. |
| `currentVersionNumber` | integer | Current Kaggle dataset version when available. |

**Example standard row**

This is an unshortened row from a successful current-beta default-input run:

```json
{
  "title": "Credit Card Fraud Detection",
  "datasetSlug": "creditcardfraud",
  "url": "https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud",
  "searchQuery": "machine learning",
  "owner": {
    "username": "mlg-ulb",
    "displayName": "Machine Learning Group - ULB"
  },
  "creator": {
    "username": "timoboz",
    "displayName": "Timo Bozsolik"
  },
  "license": "DbCL",
  "tags": [
    "crime",
    "finance"
  ],
  "categories": [
    "crime",
    "finance"
  ],
  "fileCount": 1,
  "fileFormats": [
    "csv"
  ],
  "totalBytes": 69155672,
  "downloadCount": 1179300,
  "viewCount": 12796399,
  "voteCount": 13406,
  "publicNotebookCount": 6128,
  "currentVersionNumber": 3,
  "usabilityRating": 0.85294116,
  "lastUpdatedAt": "2018-03-23T01:17:27.913Z",
  "createdAt": "2016-11-03T13:21:36.757Z"
}
```

**Enriched metadata row**

This shape includes every standard field plus the full description and version history.

| Field | Type | What it does |
| --- | --- | --- |
| `title` | string | Dataset title shown on Kaggle. |
| `datasetSlug` | string | Stable Kaggle dataset slug, such as `owner/dataset-name`. |
| `url` | string URL | Public Kaggle page for the dataset. |
| `searchQuery` | string | Search phrase that found this dataset. |
| `owner` | object | Kaggle account that owns the dataset. |
| `owner.username` | string | Owner's Kaggle username. |
| `owner.displayName` | string | Owner's public display name when shown. |
| `creator` | object | Kaggle account credited with creating the dataset. |
| `creator.username` | string | Creator's Kaggle username. |
| `creator.displayName` | string | Creator's public display name when shown. |
| `license` | string | License listed for the dataset on Kaggle. |
| `totalBytes` | integer | Combined size of the dataset files in bytes. |
| `fileCount` | integer | Number of files in the dataset when shown by Kaggle. |
| `fileFormats` | array of strings | File formats found in the dataset when shown by Kaggle. |
| `downloadCount` | integer | Number of downloads when shown by Kaggle. |
| `viewCount` | integer | Number of views of the dataset page when shown by Kaggle. |
| `voteCount` | integer | Number of votes for the dataset when shown by Kaggle. |
| `publicNotebookCount` | integer | Number of public notebooks that use the dataset when shown by Kaggle. |
| `usabilityRating` | number | Kaggle usability rating from `0` to `1` when available. |
| `tags` | array of strings | Kaggle topic tags linked to the dataset. |
| `categories` | array of strings | Dataset categories supplied by Kaggle when available. |
| `lastUpdatedAt` | date-time string | Time the dataset was last updated when available. |
| `createdAt` | date-time string | Time the dataset was created when available. |
| `currentVersionNumber` | integer | Current Kaggle dataset version when available. |
| `description` | string | Full dataset description when full details are requested. |
| `versionHistory` | array of objects | Version history when full details are requested. |
| `versionHistory[].versionNumber` | integer | Kaggle version number. |
| `versionHistory[].updatedAt` | date-time string | Time that version was updated. |
| `versionHistory[].totalBytes` | integer | Combined size of that version's files when shown by Kaggle. |
| `versionHistory[].fileCount` | integer | Number of files in that version when shown by Kaggle. |

**Example enriched row**

This is an unshortened row from a successful current-beta run with details enabled:

```json
{
  "title": "Breast Cancer Wisconsin (Diagnostic) Data Set",
  "datasetSlug": "breast-cancer-wisconsin-data",
  "url": "https://www.kaggle.com/datasets/uciml/breast-cancer-wisconsin-data",
  "searchQuery": "machine learning",
  "owner": {
    "username": "uciml",
    "displayName": "UCI Machine Learning"
  },
  "creator": {
    "username": "overratedgman",
    "displayName": "Ovsen"
  },
  "license": "CC BY-NC-SA 4.0",
  "tags": [
    "cancer",
    "healthcare"
  ],
  "categories": [
    "healthcare",
    "cancer"
  ],
  "fileCount": 1,
  "fileFormats": [
    "csv"
  ],
  "totalBytes": 49796,
  "downloadCount": 554230,
  "viewCount": 2620709,
  "voteCount": 4076,
  "publicNotebookCount": 3914,
  "currentVersionNumber": 2,
  "usabilityRating": 0.85294116,
  "lastUpdatedAt": "2016-09-25T10:49:04.067Z",
  "createdAt": "2016-09-19T20:27:05.273Z",
  "description": "Features are computed from a digitized image of a fine needle aspirate (FNA) of a breast mass. They describe characteristics of the cell nuclei present in the image. \nn the 3-dimensional space is that described in: [K. P. Bennett and O. L. Mangasarian: \"Robust Linear Programming Discrimination of Two Linearly Inseparable Sets\", Optimization Methods and Software 1, 1992, 23-34]. \n\nThis database is also available through the UW CS ftp server: \nftp ftp.cs.wisc.edu \ncd math-prog/cpo-dataset/machine-learn/WDBC/\n\nAlso can be found on UCI Machine Learning Repository: https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29\n\nAttribute Information:\n\n1) ID number \n2) Diagnosis (M = malignant, B = benign) \n3-32) \n\nTen real-valued features are computed for each cell nucleus: \n\na) radius (mean of distances from center to points on the perimeter) \nb) texture (standard deviation of gray-scale values) \nc) perimeter \nd) area \ne) smoothness (local variation in radius lengths) \nf) compactness (perimeter^2 / area - 1.0) \ng) concavity (severity of concave portions of the contour) \nh) concave points (number of concave portions of the contour) \ni) symmetry \nj) fractal dimension (\"coastline approximation\" - 1)\n\nThe mean, standard error and \"worst\" or largest (mean of the three\nlargest values) of these features were computed for each image,\nresulting in 30 features.  For instance, field 3 is Mean Radius, field\n13 is Radius SE, field 23 is Worst Radius.\n\nAll feature values are recoded with four significant digits.\n\nMissing attribute values: none\n\nClass distribution: 357 benign, 212 malignant",
  "versionHistory": [
    {
      "versionNumber": 2,
      "updatedAt": "2016-09-25T10:49:04.067Z"
    },
    {
      "versionNumber": 1,
      "updatedAt": "2016-09-19T20:27:05.273Z"
    }
  ]
}
```

#### 💳 Pricing

**Charged event**

You pay once for each public Kaggle dataset whose metadata is saved. The exact tiered rate depends on your Apify plan and is shown in the pricing panel.

| Apify tier | Price per saved dataset's metadata |
| --- | ---: |
| FREE | $0.0018 |
| BRONZE | $0.0016 |
| SILVER | $0.0015 |
| GOLD | $0.0014 |
| PLATINUM | $0.00135 |
| DIAMOND | $0.00125 |

**What counts**

The configured paid event covers saved metadata, not the Kaggle file itself. There is no separate Actor-start event in this pricing setup.

#### 🔌 Integrations

**Apify access**

Read the returned dataset through the `datasetUrl` output field or the Apify API. Use the saved rows in your analysis tool or data workflow.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can one run use more than one search phrase?

No. Each run accepts one non-empty `searchQuery`. Start another run for a different phrase.

##### Does this download Kaggle dataset files?

No. It returns public metadata and the Kaggle source URL. Open the source page to review or download a file yourself.

##### What does Include full descriptions and version history do?

When it is `true`, matching rows can include the full Kaggle description and version history. Leave it `false` when you only need catalogue metadata.

##### What happens when I leave Maximum datasets to return empty?

The Actor returns all available results until the source is exhausted. Use a number when you want to limit the amount of work returned by a run.

##### Can I filter by file format, license, topic, size, or downloads?

Yes. Use the matching input fields to filter file format, license group, Kaggle topic tag IDs, byte size, or minimum download count.

##### Do I need a Kaggle login or API key?

No. The Actor reads public Kaggle dataset metadata through credential-free public access.

##### Is this a Google dataset search?

No. It searches Kaggle's public dataset catalogue. It does not search Google datasets or another catalogue.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~kaggle-datasets/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [arXiv Papers Scraper](https://apify.com/maximedupre/arxiv-papers-scraper) — Search public research papers to compare datasets with related machine-learning work.
- [World Bank Projects Scraper](https://apify.com/maximedupre/world-bank-projects-scraper) — Find public project and indicator data for broader data research.
- [Kaggle Datasets Scraper](https://apify.com/parseforge/kaggle-scraper) — Extract additional Kaggle metadata when you need fields beyond this Actor's catalogue rows.
- [Kaggle Datasets Scraper - Dataset Search Data](https://apify.com/benthepythondev/kaggle-datasets-scraper) — Compare Kaggle search titles, owners, scores, and URLs in a lighter search export.
- [Kaggle Scraper](https://apify.com/crawlerbros/kaggle-scraper) — Explore Kaggle datasets alongside other public Kaggle entities when that wider scope fits.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `searchQuery` (type: `string`):

Enter one phrase to find matching public Kaggle datasets.

## `sortBy` (type: `string`):

Choose how to order matching Kaggle datasets.

## `fileType` (type: `string`):

Keep datasets with one Kaggle file format. Leave this empty to include every format.

## `license` (type: `string`):

Keep datasets in one Kaggle license group. Leave this empty to include every license.

## `categoryIds` (type: `array`):

Add one or more Kaggle topic tag IDs to narrow the search. Leave this list empty to include every topic.

## `minSize` (type: `integer`):

Return only datasets at least this large. Leave this empty to use no minimum size.

## `maxSize` (type: `integer`):

Return only datasets no larger than this size. Leave this empty to use no maximum size.

## `minDownloadCount` (type: `integer`):

After Kaggle finds matches, keep only datasets with at least this many downloads. Leave this empty to allow any count.

## `maxItems` (type: `integer`):

Set how many matching datasets to return. Leave this empty to return all available results until the source is exhausted.

## `includeDetails` (type: `boolean`):

Add each dataset's full description and version history.

## Actor input object example

```json
{
  "searchQuery": "machine learning",
  "sortBy": "popularity",
  "maxItems": 10,
  "includeDetails": false
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

Link to the Apify dataset that stores this run's matching dataset records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "machine learning",
    "sortBy": "popularity",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/kaggle-datasets").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "machine learning",
    "sortBy": "popularity",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/kaggle-datasets").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "machine learning",
  "sortBy": "popularity",
  "maxItems": 10
}' |
apify call maximedupre/kaggle-datasets --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/kaggle-datasets"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zeM63D9AaSj8Lyytc/builds/A5UPG6Lteq0sMVDA8/openapi.json
