# There's An AI For That Scraper (`crawlerbros/theresanaiforthat-scraper`) Actor

Scrape There's An AI For That (theresanaiforthat.com) - the #1 AI tool directory. Browse AI tools by category, most-saved, just-released, popular, or by maker company, plus fetch full tool detail pages with descriptions, pricing, and stats.

- **URL**: https://apify.com/crawlerbros/theresanaiforthat-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## There's An AI For That Scraper

Scrape [There's An AI For That](https://theresanaiforthat.com) (TAAFT) — the web's largest AI tool directory, used by 90M+ people to discover AI tools for any task. Browse tools by category, most-saved, just-released, popular, or by maker company, and fetch full tool detail pages with descriptions, pricing, and engagement stats. No login, no API key, no cookies required.

### What this actor does

- **Seventeen modes:** `category`, `mostSaved`, `justReleased`, `popular`, `trending`, `featured`, `agentsHub`, `company`, `discontinued`, `deals`, `list`, `leaderboard`, `miniTools`, `feature`, `timeline`, `characters`, `toolDetail`
- **70+ curated categories** (writing, chatbots, images, video, audio, code, SEO, marketing, and more), plus a free-text override for any of the site's 1,000+ granular task slugs
- **6 sort orders for `category` mode** — Default, Latest, Top rated, Most saved, Popular, Price — and automatic pagination through as many result pages as needed to reach `maxItems`
- **Full tool profiles** — name, description, pricing, category, website link, icon, view/save counts, average rating, release date
- **Empty fields are omitted** — every record only contains what's actually available for that tool

### Output per AI tool

- `toolId` — TAAFT's internal numeric ID for the tool (listing modes)
- `name`, `toolUrl` — TAAFT detail-page URL (always present)
- `slug` — only present when `toolUrl` is a genuine `/ai/<slug>/` tool page; TAAFT also lists user-submitted "mini tools" under `/@username/...` and `/gpt/...` paths, which omit `slug` since it isn't a valid input for `mode=toolDetail` on those
- `shortDescription` (listing modes) or `description` (detail mode, full overview)
- `category`, `categorySlug`, `categoryPath[]` (detail mode — full breadcrumb, e.g. `Creativity > Text > Writing`)
- `applicationCategory` (detail mode — schema.org software-application category TAAFT publishes in the page's structured data, e.g. `"Multimedia"`, only when present)
- `pricingSummary` (e.g. `"100% Free"`, `"Free + from $8/mo"`, `"From $19/mo"`)
- `websiteUrl` — the tool's actual website (outbound link)
- `iconUrl`, `screenshotUrl` (detail mode)
- `viewsCount`, `savesCount`, `averageRating`, `reviewsCount` (detail mode `reviewsCount`/`averageRating` only when the tool has reviews) — TAAFT community engagement stats
- `commentsCount` (detail mode — number of user comments on the tool page, only present when the tool has at least one)
- `rank` (mode=`popular`/`trending` only — integer leaderboard position, 1 = top)
- `releasedRelative` (e.g. `"2y ago"`, listing modes only), `dateCreated`, `dateModified` (detail mode)
- `sponsored` (listing modes — `true` if the card is a paid placement; always `true` in mode=`featured`)
- `verified` (listing modes — `true` if the tool has been claimed by its owner), `hasVideo` (listing modes — `true` if the card has a video demo)
- `discontinued`, `discontinuedMonth` (mode=`discontinued` only — `true`, and the `YYYY-MM` month TAAFT recorded the tool as shut down, e.g. `"2023-10"`)
- `dealOffer` (mode=`deals`, and occasionally other listing modes for a sponsored card — the special-offer badge text, e.g. `"🏷️ 20% OFF"`, `"💰 $500 CREDITS"`, `"🎁 Save $60"`)
- `listName`, `listAuthor` (mode=`list` only — the curated list's title and the TAAFT username who made it)
- `version` (mode=`leaderboard` only — the tool's version tag shown on the ranking, e.g. `"v2.0"`, only when TAAFT tracks one)
- `netVotes`, `upvotes`, `downvotes` (mode=`leaderboard` only — the community leaderboard's vote counts for that tool)
- `usersCount`, `topCommentAuthor`, `topCommentText`, `topCommentUpvotes`, `topCommentDownvotes` (mode=`miniTools` only — usage count and the tool's top user comment, when it has one)
- `featureSlug` (mode=`feature` only — the feature/capability being browsed, e.g. `"api"`, `"mcp"`)
- `date`, `taskName`, `taskSlug`, `toolName`, `toolWebsiteUrl` (mode=`timeline` only — the AI Capabilities Timeline's task/tool pairings; `recordType: "timelineEntry"` instead of `"aiTool"`)
- `characterUrl`, `authorSlug`, `tagline`, `totalChats` (mode=`characters` only — the user-submitted AI companion/roleplay character's own page, its creator's TAAFT username, its one-line tagline, and its total chat count; `recordType: "aiCharacter"` instead of `"aiTool"`)
- `tags[]` (detail mode — keyword/use-case tags TAAFT assigns to the tool)
- `features[]` (detail mode — TAAFT's "Supported features" capability chips, e.g. `["Realism", "Memory", "Web browsing"]`, only when the tool has this widget)
- `companyName`, `companySlug`, `country`, `countryCode` (detail mode — the maker company and where it's based, only when TAAFT has this on file)
- `domainRating`, `monthlyTraffic` (detail mode — the tool's own website's SEO domain rating (0-100) and estimated monthly traffic, e.g. `"759.8M"`, only when TAAFT has this on file)
- `inputModalities[]`, `outputModalities[]` (detail mode — e.g. `["Text"]` / `["Image", "Video"]`, only when TAAFT documents the tool's input/output types)
- `pricingModel`, `priceFrom`, `billingFrequency`, `refundPolicy` (detail mode — TAAFT's structured pricing breakdown, e.g. `"Freemium"`, `"$20/month"`, `"Monthly"`, `"No Refunds"`)
- `recordType: "aiTool"` (or `"miniTool"` for mode=`miniTools`, `"timelineEntry"` for mode=`timeline`, `"aiCharacter"` for mode=`characters`), `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `category` | `category` / `mostSaved` / `justReleased` / `popular` / `trending` / `featured` / `agentsHub` / `company` / `discontinued` / `deals` / `list` / `leaderboard` / `miniTools` / `feature` / `timeline` / `characters` / `toolDetail` |
| `categorySlug` | select | `writing` | Category to browse (mode=category); pick `custom` + fill `customCategorySlug` for any other category |
| `customCategorySlug` | string | – | Exact category slug, e.g. `text-to-speech` (used when `categorySlug=custom`) |
| `sortBy` | select | `default` | Sort order within the category (mode=category only): `default` / `latest` / `top-rated` / `most-saved` / `popular` / `price` |
| `companySlug` | string | `nvidia` | Maker/company slug (mode=company), e.g. `nvidia` from `theresanaiforthat.com/company/nvidia/` |
| `listUrl` | string | – | URL of a user-curated tool list/collection page (mode=list), e.g. `https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/` (a bare `@user/list-slug` path also works) |
| `leaderboardYear` | select | `current` | Yearly cohort of the AI Tool Rankings leaderboard to fetch (mode=leaderboard): `current` / `2024` / `2025` / `2026` |
| `miniToolsSort` | select | `all` | Ranking of the free, embedded Mini Tools to fetch (mode=miniTools): `all` / `topRated` / `new` |
| `featureSlug` | select | `api` | Feature/capability to browse (mode=feature), e.g. `api`, `mcp`, `no-signup`, `run-locally` — cards span every task category |
| `characterCategory` | select | `all` | Mood/category quick-filter for browsing AI Characters (mode=characters): `all` / `battle` / `cry` / `friend` / `teacher` / `wildcard` |
| `toolSlugs` | array | `["canva-magic-write"]` | Tool slugs to fetch full detail for (mode=toolDetail) |
| `maxItems` | int | `30` | Hard cap on emitted records (1–500) |

#### Example: browse the SEO category

```json
{
  "mode": "category",
  "categorySlug": "seo-content",
  "maxItems": 50
}
```

#### Example: most-saved AI tools right now

```json
{
  "mode": "mostSaved",
  "maxItems": 100
}
```

#### Example: trending AI tools right now

```json
{
  "mode": "trending",
  "maxItems": 50
}
```

#### Example: featured (paid-placement) AI tools

```json
{
  "mode": "featured",
  "maxItems": 30
}
```

#### Example: tools made by a specific company

```json
{
  "mode": "company",
  "companySlug": "nvidia",
  "maxItems": 50
}
```

#### Example: full detail for specific tools

```json
{
  "mode": "toolDetail",
  "toolSlugs": ["alphawriter", "canva-magic-write", "photo-ai"]
}
```

#### Example: tools in a user-curated list

```json
{
  "mode": "list",
  "listUrl": "https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/",
  "maxItems": 30
}
```

#### Example: discontinued / shut-down AI tools

```json
{
  "mode": "discontinued",
  "maxItems": 30
}
```

#### Example: AI tools with an active special deal/discount

```json
{
  "mode": "deals",
  "maxItems": 50
}
```

#### Example: top-rated writing tools, paginated up to 200 results

```json
{
  "mode": "category",
  "categorySlug": "writing",
  "sortBy": "top-rated",
  "maxItems": 200
}
```

#### Example: browse a category not in the curated list

```json
{
  "mode": "category",
  "categorySlug": "custom",
  "customCategorySlug": "text-to-speech",
  "maxItems": 40
}
```

#### Example: community-voted AI Tool Rankings leaderboard

```json
{
  "mode": "leaderboard",
  "leaderboardYear": "current",
  "maxItems": 50
}
```

#### Example: AI Capabilities Timeline

```json
{
  "mode": "timeline",
  "maxItems": 100
}
```

### Use cases

- **Market research** — track which AI tools are trending in a given category
- **Competitive intelligence** — monitor pricing and positioning of AI tools in your niche
- **Content curation** — build "best AI tools for X" roundups with fresh, real engagement data
- **Lead generation** — find AI tool makers (via `company` mode) for partnership or outreach
- **AI landscape mapping** — bulk-export categories to understand the shape of the AI tool ecosystem
- **Directory/aggregator sites** — mirror or cross-reference TAAFT listings
- **Risk/churn analysis** — see which AI tools have shut down (`discontinued` mode) and when, to avoid recommending dead tools

### FAQ

**What's There's An AI For That?**  A directory of AI tools spanning thousands of use cases, used by 90M+ people to find the right AI tool for a task. See [theresanaiforthat.com](https://theresanaiforthat.com).

**Do I need a proxy or login?**  No. The actor works out of the box on the free Apify plan. It uses the free `AUTO` datacenter proxy group automatically only if it ever hits a temporary block — most runs never need it.

**Why do some tools have `sponsored: true`?**  TAAFT sells featured placements within category listings. These are flagged so you can filter them out if you only want organic listings.

**What's mode=`featured`?**  It scrapes `theresanaiforthat.com/featured/`, TAAFT's dedicated paid-placement showcase — every record in this mode has `sponsored: true` by definition.

**What's the difference between `shortDescription` and `description`?**  Listing modes (`category`, `mostSaved`, `justReleased`, `popular`, `company`) return the short teaser shown on cards. `toolDetail` mode fetches the full tool page and returns the complete overview paragraph.

**Why is `categorySlug` a dropdown with a "custom" option?**  TAAFT has 1,000+ granular task categories (e.g. `academic-writing`, `resume-optimization`, `sheet-music`). The dropdown covers the ~70 most common top-level categories; pick `custom` and supply any exact slug from a `theresanaiforthat.com/task/<slug>/` URL to browse the rest.

**How fresh is the data?**  Real-time — every run fetches the live page directly from theresanaiforthat.com.

**Are pricing figures accurate?**  `pricingSummary` reflects the pricing badge TAAFT itself displays (self-reported by the tool's maker), not independently verified pricing.

**Does this scrape more than one results page?**  For `mode=category`, `mode=feature`, `mode=timeline`, and `mode=characters`, yes — the actor pages through `/page/2/`, `/page/3/`, etc. automatically until it hits `maxItems` or the listing runs out of entries. The other listing modes (`mostSaved`, `justReleased`, `popular`, `trending`, `featured`, `company`, `discontinued`, `deals`, `leaderboard`, `miniTools`) each render their entire result set on a single TAAFT page, so raising `maxItems` beyond what that page contains simply returns everything available.

**What's mode=`feature`?**  It scrapes `theresanaiforthat.com/feature/<slug>/`, TAAFT's cross-category browse-by-capability pages (e.g. "API", "MCP", "No Signup", "Run Locally") — unlike `mode=category`, cards here span many different task categories, all sharing the chosen feature. Set `featureSlug` to pick which of the 24 tracked features to browse.

**What's mode=`timeline`?**  It scrapes `theresanaiforthat.com/timeline/`, TAAFT's chronological "AI Capabilities Timeline" — a reverse-dated feed pairing each task category with the tool that came to represent it, going back to late 2022. Each record carries `date` (the day it was added, ISO `YYYY-MM-DD`), `taskName`/`taskSlug`, and `toolName`/`toolWebsiteUrl`. Useful for tracking how fast new AI task categories emerge over time.

**What's mode=`miniTools`?**  It scrapes `theresanaiforthat.com/mini-tools/` (or its `top-rated`/`new` sort via `miniToolsSort`), TAAFT's own free, embedded AI-generation micro-utilities hosted directly on the site (e.g. an in-browser image generator) rather than links out to third-party tools. Each record carries usage stats (`savesCount`, `averageRating`, `usersCount`) and, where present, the tool's top user comment (`topCommentAuthor`/`topCommentText`/`topCommentUpvotes`/`topCommentDownvotes`).

**What's mode=`characters`?**  It scrapes `theresanaiforthat.com/characters/` (optionally filtered by `characterCategory`, TAAFT's mood tabs: `battle`/`cry`/`friend`/`teacher`/`wildcard`), a distinct content type from the main AI tool directory — user-submitted AI companion/roleplay characters, each living under its own `/@user/c/<slug>/` page. Records carry `tagline`, `tags[]` (personality traits), `shortDescription`, and `totalChats` (usage count) instead of the AI-tool stat set.

**What's mode=`list`?**  TAAFT lets any signed-in user publish a curated collection of tools at a URL like `theresanaiforthat.com/@username/list-slug/` (browsable from [theresanaiforthat.com/lists/](https://theresanaiforthat.com/lists/)). Pass any such URL as `listUrl` to scrape the tools inside it, tagged with `listName`/`listAuthor`.

**What's mode=`leaderboard`?**  It scrapes `theresanaiforthat.com/leaderboard/`, TAAFT's community-voted "AI Tool Rankings" — a single yearly cohort (`leaderboardYear`) of up to ~100 tools ranked by net upvotes, each carrying `upvotes`/`downvotes`/`netVotes` and, where TAAFT tracks one, a `version` tag. `leaderboardYear=current` always tracks whichever year the site's own default shows.

**What's mode=`deals`?**  It scrapes `theresanaiforthat.com/deals/`, TAAFT's page of AI tools currently running a special partner discount or credit deal (typically unlocked with code `TAAFT` at checkout on the tool's own site). Every record carries `dealOffer` with the badge text TAAFT shows, e.g. `"🏷️ 20% OFF"` or `"💰 $500 CREDITS"`.

**What does `sortBy` change?**  It controls the order TAAFT returns tools within a category — `latest` (newest first), `top-rated`, `most-saved`, `popular`, or `price`. It only applies to `mode=category`; other modes have their own fixed ordering (e.g. `popular`/`trending` are already ranked, `mostSaved` is already sorted by saves).

# Actor input Schema

## `mode` (type: `string`):

Which listing / lookup to run.

## `categorySlug` (type: `string`):

AI tool category/task to browse. Pick `Custom / other category slug` and fill `customCategorySlug` below to use any of the site's 1000+ granular task slugs not listed here.

## `customCategorySlug` (type: `string`):

Exact category slug from a theresanaiforthat.com URL, e.g. `text-to-speech` from `theresanaiforthat.com/task/text-to-speech/`.

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

How to order tools within the chosen category. Only applies to mode=category.

## `companySlug` (type: `string`):

Maker/company slug from a theresanaiforthat.com URL, e.g. `nvidia` from `theresanaiforthat.com/company/nvidia/`.

## `listUrl` (type: `string`):

URL of a user-curated tool list/collection page, e.g. `https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/` (a bare `@user/list-slug` path also works).

## `leaderboardYear` (type: `string`):

Which yearly cohort of the AI Tool Rankings leaderboard to fetch. `current` always tracks whatever year theresanaiforthat.com/leaderboard/ currently shows (its default).

## `miniToolsSort` (type: `string`):

Which ranking of the free, embedded Mini Tools (in-site AI generators under `/@user/<slug>/`) to browse.

## `featureSlug` (type: `string`):

Cross-category feature/capability to browse, e.g. tools with an API, MCP support, or no-signup access. Cards can belong to any task category.

## `toolSlugs` (type: `array`):

AI tool slugs from theresanaiforthat.com/ai/<slug>/ URLs, e.g. `canva-magic-write`.

## `characterCategory` (type: `string`):

Quick-filter mood tab for browsing AI Characters. `all` browses every character.

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

Hard cap on emitted records (ignored for mode=toolDetail, which is capped by the number of tool slugs given). mode=category, mode=feature, mode=timeline, and mode=characters paginate through additional result pages automatically until this cap is reached or the listing runs out of entries; other listing modes are backed by a single page on theresanaiforthat.com.

## Actor input object example

```json
{
  "mode": "category",
  "categorySlug": "writing",
  "sortBy": "default",
  "companySlug": "nvidia",
  "listUrl": "https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/",
  "leaderboardYear": "current",
  "miniToolsSort": "all",
  "featureSlug": "api",
  "toolSlugs": [
    "canva-magic-write"
  ],
  "characterCategory": "all",
  "maxItems": 30
}
```

# Actor output Schema

## `aiTools` (type: `string`):

Dataset containing all scraped AI tool 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 = {
    "mode": "category",
    "categorySlug": "writing",
    "sortBy": "default",
    "companySlug": "nvidia",
    "listUrl": "https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/",
    "leaderboardYear": "current",
    "miniToolsSort": "all",
    "featureSlug": "api",
    "toolSlugs": [
        "canva-magic-write"
    ],
    "characterCategory": "all",
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/theresanaiforthat-scraper").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 = {
    "mode": "category",
    "categorySlug": "writing",
    "sortBy": "default",
    "companySlug": "nvidia",
    "listUrl": "https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/",
    "leaderboardYear": "current",
    "miniToolsSort": "all",
    "featureSlug": "api",
    "toolSlugs": ["canva-magic-write"],
    "characterCategory": "all",
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/theresanaiforthat-scraper").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 '{
  "mode": "category",
  "categorySlug": "writing",
  "sortBy": "default",
  "companySlug": "nvidia",
  "listUrl": "https://theresanaiforthat.com/@ytdescriptionextractor/saved-for-later/",
  "leaderboardYear": "current",
  "miniToolsSort": "all",
  "featureSlug": "api",
  "toolSlugs": [
    "canva-magic-write"
  ],
  "characterCategory": "all",
  "maxItems": 30
}' |
apify call crawlerbros/theresanaiforthat-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/2VSwlMcKuWcZhmOAw/builds/AbKOCRMky6x36JAW3/openapi.json
