# Tool: Bulk Text Classifier & Tagger (`scrapers_lat/text-classifier-tool`) Actor

Classify bulk text into your own categories and add free-form tags using premium AI. Paid Apify plans only.

- **URL**: https://apify.com/scrapers\_lat/text-classifier-tool.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 75.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $64.00 / 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.
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 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

<!-- actor-banner -->
[![Tool: Bulk Text Classifier & Tagger](https://scrapers.lat/banners/text-classifier-tool.png)](https://console.apify.com/actors/text-classifier-tool)
<!-- /actor-banner -->

## Tool: Bulk Text Classifier & Tagger

> Sort any pile of text into your own categories. Define the labels, feed in the text and get back a clean label, confidence and free-form tags for every item.

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify&logoColor=white)
![Paid plan](https://img.shields.io/badge/Requires-Paid%20Apify%20plan-DE7356)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>Your categories</strong><br>you define the labels</td>
<td align="center"><strong>Labels + tags</strong><br>single or multi-label</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
</tr></table>

<br>

### What it does

Give it a list of texts and the categories you want to sort them into. For each text it returns a clean, structured record:

- **label**, the single best matching category
- **labels**, every category that applies when multi-label is on
- **confidence** from 0 to 1 for the best match
- **tags**, short free-form tags that describe the text beyond your fixed categories

Use it for support tickets, survey answers, product feedback, incoming leads or any text you need to route and count. Export to JSON, CSV or Excel, or pull it through the Apify API.

### Paid plans only

This tool runs on the latest, most reliable premium AI models. Because each run has a real model cost, it is available to paid Apify accounts only. A run started from a free account stops immediately with an upgrade message. Upgrade your Apify subscription to a paid plan and run it again.

### Who is it for

| Use case | Who benefits |
|---|---|
| Support ops | Routing tickets to the right queue automatically |
| Product teams | Bucketing feedback and survey answers |
| Sales | Tagging inbound messages by intent |
| Developers | A ready classification step for any data pipeline |

### Input

- **texts**: a list of texts, each a plain string or an object with a `text` field.
- **categories**: the label names to classify into. Define your own set.
- **multiLabel**: optional. When on, each text can carry every category that applies.
- **maxItems**: optional cap on how many texts to classify this run.

### Notes

- One classification is returned per text, so results line up one to one with your input.
- Very long texts are shortened before classification to keep runs fast and predictable.

<!-- example-tasks -->
### Example use cases

Ready-to-run example tasks, each preconfigured for a common scenario. Open one and press run, or use it as a template:

- [Classify Support Tickets by Topic](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-support-ticket-topic): Sort incoming support tickets into billing, technical or account topics so your team routes them to the right queue fast.
- [Classify Emails as Spam or Legitimate](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-email-as-spam-or-real): Label incoming emails as spam or legitimate so inboxes stay clean and important messages never get buried or lost in the noise.
- [Classify News Headlines by Section](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-news-headline-by-section): Assign news headlines to sections like sports, politics or tech so editors organize feeds and archives automatically.
- [Tag Product Reviews with Multiple Labels](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-product-review-multi-label): Tag a product review with several labels at once like price, quality and shipping so you spot recurring themes at scale.
- [Classify the Intent of a Chat Message](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-intent-of-chat-message): Detect whether a chat message is a question, complaint or purchase intent so bots and agents respond the right way.
- [Classify a Resume by Seniority Level](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-resume-by-seniority): Label a candidate summary as junior, mid or senior so recruiters shortlist the right experience level in seconds.
- [Classify Social Posts for Toxicity](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-social-post-toxicity): Flag social posts as safe or toxic so moderation teams protect communities and act on harmful content quickly.
- [Classify Sales Leads by Industry](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-lead-by-industry): Categorize a lead description by industry like healthcare, finance or retail so sales teams personalize outreach.
- [Classify Documents by Urgency](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-document-urgency): Rank incoming documents as low, medium or high urgency so operations teams handle the most time sensitive items first every day.
- [Multi Label Classify Employee Feedback](https://apify.com/scrapers_lat/text-classifier-tool/examples/tcls-classify-feedback-topics-multi-label): Apply multiple topic labels to employee survey answers like pay, culture and workload so HR reads the signal clearly.

<!-- /example-tasks -->

<!-- x402 -->
### Export, API and AI agents (x402 + MCP)

Export the scraped data to **JSON, CSV or Excel**, pull it as a **dataset** through the Apify **API**, or wire it into your app with **no code**. This web scraper and data extractor also works for bulk data extraction and scheduled runs.

For AI agents: this Actor is available on **x402**, Apify's agentic payment standard built with Coinbase. An AI agent can discover, pay for and run it on its own with a funded wallet and a single HTTP request: no account, no subscription, no API key and no human in the loop. It also runs as an **MCP** tool inside Claude, Cursor and other AI clients out of the box. Learn more about [x402 agentic payments on Apify](https://docs.apify.com/platform/integrations/x402).
<!-- /x402 -->

<!-- scrapers-lat-cta -->
Built by [scrapers.lat](https://scrapers.lat).
<!-- /scrapers-lat-cta -->

# Actor input Schema

## `texts` (type: `array`):

A list of texts to classify. Each item can be a plain string or an object with a text field. One classification is returned per text.
## `categories` (type: `array`):

The label names to classify each text into. Define your own set. Every text is placed into one of these (or several when multi-label is on).
## `multiLabel` (type: `boolean`):

When on, each text can be tagged with every category that applies, not just the single best one.
## `maxItems` (type: `integer`):

Cap how many texts to classify this run. Optional.

## Actor input object example

```json
{
  "texts": [
    "My invoice charged me twice this month and I need a refund for the duplicate payment.",
    "The app keeps crashing every time I try to upload a photo on Android."
  ],
  "categories": [
    "billing",
    "technical",
    "sales",
    "complaint"
  ],
  "multiLabel": false
}
````

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "texts": [
        "My invoice charged me twice this month and I need a refund for the duplicate payment.",
        "The app keeps crashing every time I try to upload a photo on Android."
    ],
    "categories": [
        "billing",
        "technical",
        "sales",
        "complaint"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/text-classifier-tool").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 = {
    "texts": [
        "My invoice charged me twice this month and I need a refund for the duplicate payment.",
        "The app keeps crashing every time I try to upload a photo on Android.",
    ],
    "categories": [
        "billing",
        "technical",
        "sales",
        "complaint",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/text-classifier-tool").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 '{
  "texts": [
    "My invoice charged me twice this month and I need a refund for the duplicate payment.",
    "The app keeps crashing every time I try to upload a photo on Android."
  ],
  "categories": [
    "billing",
    "technical",
    "sales",
    "complaint"
  ]
}' |
apify call scrapers_lat/text-classifier-tool --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tool: Bulk Text Classifier & Tagger",
        "description": "Classify bulk text into your own categories and add free-form tags using premium AI. Paid Apify plans only.",
        "version": "0.1",
        "x-build-id": "14k6opdCZovLWFejE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapers_lat~text-classifier-tool/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapers_lat-text-classifier-tool",
                "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/scrapers_lat~text-classifier-tool/runs": {
            "post": {
                "operationId": "runs-sync-scrapers_lat-text-classifier-tool",
                "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/scrapers_lat~text-classifier-tool/run-sync": {
            "post": {
                "operationId": "run-sync-scrapers_lat-text-classifier-tool",
                "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": [
                    "texts"
                ],
                "properties": {
                    "texts": {
                        "title": "Texts to classify",
                        "type": "array",
                        "description": "A list of texts to classify. Each item can be a plain string or an object with a text field. One classification is returned per text."
                    },
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "The label names to classify each text into. Define your own set. Every text is placed into one of these (or several when multi-label is on).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "multiLabel": {
                        "title": "Allow multiple labels",
                        "type": "boolean",
                        "description": "When on, each text can be tagged with every category that applies, not just the single best one.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max texts",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Cap how many texts to classify this run. Optional."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
