# $0.9/1k Toolify AI Tools Scraper (`architjn/toolify-scraper`) Actor

Scrape AI tool and website listings from Toolify.ai — new, most saved, most used, apps, and keyword search. Export names, URLs, categories, traffic, and collection stats.

- **URL**: https://apify.com/architjn/toolify-scraper.md
- **Developed by:** [Archit Jain](https://apify.com/architjn) (community)
- **Categories:** AI, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Toolify AI Tools Scraper

Collect AI tool and website listings from [Toolify.ai](https://www.toolify.ai)—the directory of AI apps, websites, and tools. Each row includes the tool name, website URL, Toolify profile link, categories, traffic stats, and whether the listing is free or sponsored.

You do **not** need a Toolify account. The actor reads public list API results only.

### Input

Configure these fields in the Apify Console **Input** tab before you click **Start**.

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| **List modes** | multi-select | Yes | New | Pick one or more lists: **New**, **Most saved**, **Most used**, or **Apps**. Each mode is scraped separately. |
| **Search keyword** | text | No | *(empty)* | Optional. Runs an extra keyword search pass and filters the **Apps** list. Does **not** filter New, Most saved, or Most used rankings. |
| **Max items per list mode** | number | Yes | `50` | How many tools to save **for each** list mode (and for the keyword search pass when a keyword is set). Maximum is **500**. |
| **Proxy configuration** | proxy | No | Residential on Apify | Apify residential proxy (on by default on Apify cloud). |

#### List mode options

- **New** — recently added tools  
- **Most saved** — tools users save most often  
- **Most used** — tools with highest usage  
- **Apps** — app listings (ordered by date added)  

When you set a **Search keyword**, the actor also runs a site-wide keyword search (separate from the ranking lists).

### Output

Results appear in the run **Dataset** tab—one row per tool per list mode (the same tool can appear in multiple modes).

| Field | What you get |
|-------|----------------|
| `listMode` | Which list this row came from (`new`, `most_saved`, `most_used`, `apps`, `search`) |
| `rank` | Position in that list (1 = first) |
| `keyword` | Your search keyword, if this row is from Apps (with keyword) or Search |
| `totalInList` | Total tools reported by Toolify for that list |
| `toolId`, `name`, `handle` | Tool identifiers |
| `toolifyUrl` | Link to the tool on Toolify.ai |
| `website`, `websiteName` | External product URL and display name |
| `description`, `summary` | Short descriptions from the listing |
| `imageUrl`, `logoUrl` | Cover image and logo URLs |
| `collectedCount`, `monthVisitedCount` | Save count and monthly visit estimate |
| `isFree`, `isAd` | Whether the tool is marked free or sponsored |
| `categoryNames`, `categoryHandles` | Comma-separated Toolify categories |
| `trafficTopRegion`, `trafficTopRegionValue` | Top traffic region and share, when available |
| `scrapedAt` | When this row was collected |

Download as **JSON**, **CSV**, or **Excel** from the dataset, or use the Apify API and integrations.

### Pricing Structure

**Pay per usage** — you are charged for compute units (CPU, memory, runtime) consumed during the run. If the actor falls back to a browser session to pass Cloudflare, runs may use more resources than a plain API call. Set a **spending limit** on the run before you start if you are testing.

### Examples

#### Example 1: Latest tools

**Input:**

```json
{
  "listModes": ["new"],
  "keyword": "",
  "maxItemsPerMode": 25
}
````

**Output:** Up to 25 rows from the New list.

#### Example 2: Compare rankings

**Input:**

```json
{
  "listModes": ["new", "most_used"],
  "maxItemsPerMode": 50
}
```

**Output:** Up to 50 rows per mode (up to 100 total). The same tool may appear twice with different `listMode` and `rank`.

#### Example 3: Search “video” and apps

**Input:**

```json
{
  "listModes": ["apps"],
  "keyword": "video",
  "maxItemsPerMode": 30
}
```

**Output:** Up to 30 apps matching “video”, plus up to 30 rows from the keyword search pass.

### Best Practices

1. **Start small** — use `maxItemsPerMode` of 10–25 while testing; each mode adds more rows and runtime.
2. **Keyword scope** — keywords filter Apps and the search pass only; use **Search** output (`listMode: search`) for keyword discovery, not ranking lists.
3. **Multi-mode runs** — selecting four modes with `maxItemsPerMode: 500` can produce up to 2,000 rows; watch dataset size and cost.
4. **Sponsored listings** — `isAd: true` rows are included by default; filter them in your export if you want organic-only lists.
5. **Cloudflare** — Toolify may block plain API requests; the actor automatically retries with a headless browser when needed (uses proxy when configured).
6. **Residential proxy** — leave proxy enabled on Apify cloud if you see empty results or blocks.

### Limitations

- List-only data (no full Toolify profile page scrape).
- Keyword search totals on Toolify may cap below your `maxItemsPerMode` for broad terms.
- Ranking lists (New, Most saved, Most used) ignore the keyword filter by design.

# Actor input Schema

## `listModes` (type: `array`):

One or more Toolify directory lists to scrape. Each selected mode is scraped separately up to max items per mode.

## `keyword` (type: `string`):

Optional. Runs an extra keyword search pass and filters the Apps list. Does not filter New, Most saved, or Most used rankings.

## `maxItemsPerMode` (type: `integer`):

Maximum tools to save for each list mode (and for the keyword search pass when a keyword is set). Hard cap is 500.

## `proxyConfiguration` (type: `object`):

Apify residential proxy on cloud (enabled by default). For local runs, use a .env file with APIFY\_TOKEN or proxy credentials, or enable Apify proxy in this field.

## Actor input object example

```json
{
  "listModes": [
    "new"
  ],
  "keyword": "",
  "maxItemsPerMode": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `tools` (type: `string`):

Scraped tools with list mode, rank, URLs, categories, and traffic stats.

## `dataset` (type: `string`):

All tool records from this run in JSON format.

## `runInput` (type: `string`):

Copy of the Actor input used for this run.

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("architjn/toolify-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("architjn/toolify-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call architjn/toolify-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=architjn/toolify-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "$0.9/1k Toolify AI Tools Scraper",
        "description": "Scrape AI tool and website listings from Toolify.ai — new, most saved, most used, apps, and keyword search. Export names, URLs, categories, traffic, and collection stats.",
        "version": "0.1",
        "x-build-id": "pGqu5A0kOWGvsuqgw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/architjn~toolify-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-architjn-toolify-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/architjn~toolify-scraper/runs": {
            "post": {
                "operationId": "runs-sync-architjn-toolify-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/architjn~toolify-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-architjn-toolify-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "listModes",
                    "maxItemsPerMode"
                ],
                "properties": {
                    "listModes": {
                        "title": "List modes",
                        "minItems": 1,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "One or more Toolify directory lists to scrape. Each selected mode is scraped separately up to max items per mode.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "new",
                                "most_saved",
                                "most_used",
                                "apps"
                            ],
                            "enumTitles": [
                                "New",
                                "Most saved",
                                "Most used",
                                "Apps"
                            ]
                        },
                        "default": [
                            "new"
                        ]
                    },
                    "keyword": {
                        "title": "Search keyword",
                        "type": "string",
                        "description": "Optional. Runs an extra keyword search pass and filters the Apps list. Does not filter New, Most saved, or Most used rankings.",
                        "default": ""
                    },
                    "maxItemsPerMode": {
                        "title": "Max items per list mode",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum tools to save for each list mode (and for the keyword search pass when a keyword is set). Hard cap is 500.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify residential proxy on cloud (enabled by default). For local runs, use a .env file with APIFY_TOKEN or proxy credentials, or enable Apify proxy in this field."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
