# NetShort Search Scraper – Short Drama API & Export (`spider_studio/netshort-search`) Actor

Search NetShort short dramas by keyword. Extract titles, covers, descriptions, labels, and IDs, then export results via API, JSON, CSV, or Excel.

- **URL**: https://apify.com/spider\_studio/netshort-search.md
- **Developed by:** [NewLai](https://apify.com/spider_studio) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 search 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/actors/running/actors-in-store.md#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

### What does NetShort Search Scraper – Short Drama API & Export do?

**NetShort Search Scraper** is a keyword-based **NetShort scraper and short drama API** for discovering titles in the [NetShort](https://netshort.com/) app catalog. Search one or many phrases, collect matching short dramas or posts, and export structured results through Apify as JSON, CSV, Excel, HTML, or an API response.

This Actor focuses on NetShort search and discovery results. It is not a full-catalog crawler, video downloader, or account-data extractor. Every successful match becomes one Dataset row with useful fields plus the original decrypted result object.

### Why scrape NetShort short drama search results?

- **Content research:** discover short dramas by trope, title, theme, actor, or phrase.
- **Catalog intelligence:** collect NetShort IDs, titles, covers, descriptions, and labels for analysis.
- **Trend monitoring:** schedule repeated keyword searches and compare changing discovery results.
- **Editorial workflows:** build watchlists, research queues, and coverage plans from NetShort data.
- **Automation:** send results to Google Sheets, databases, webhooks, n8n, Make, Zapier, or AI agents.

The Actor accepts up to 1,000 keywords per run, removes duplicate keywords, paginates automatically, and preserves input order. Residential proxy rotation, run monitoring, API access, schedules, and integrations are handled through Apify.

### What NetShort data can the scraper extract?

| Field | Type | Description |
| --- | --- | --- |
| keyword | string | Search phrase that produced the result |
| search\_type | string | `1` for all results or `2` for posts |
| result\_id | string or null | NetShort short-play, post, content, or result ID |
| title | string or null | Short-drama or post title |
| cover\_url | string or null | NetShort cover image URL |
| description | string or null | Synopsis or result description |
| labels | array | Genres, themes, tropes, or other NetShort labels |
| result | object | Complete decrypted NetShort result object |

Only successful matches are written to the Dataset. Per-keyword page counts, fetched counts, saved counts, errors, and charge-budget stops are available in the `SEARCH_SUMMARY` output.

### How to search NetShort and export short dramas

1. Open the Actor Input tab.
2. Add one or more terms to `keywords`, such as `love`, `CEO`, or `revenge`.
3. Set `max_results`, which controls when the Actor stops requesting additional pages.
4. Choose all results or posts with `search_type`.
5. Click **Start** and download the Dataset, or call the Actor through the Apify API.

The runtime uses an isolated pool of pre-registered NetShort visitor devices. Device tokens, proxy credentials, and internal device identifiers are never included in public Dataset results.

### How much does the NetShort scraper cost?

NetShort Search Scraper uses pay-per-event pricing. You pay only for unique, successful search matches actually saved to the default Dataset:

- **Free Apify plan:** $0.003 per result, or $3 per 1,000 saved results.
- **Bronze, Silver, Gold, Platinum, and Diamond plans:** $0.002 per result, or $2 per 1,000 saved results.
- **Platform usage:** Apify runtime, residential proxy, storage, and transfer usage is paid separately by the user.

Empty searches, failed requests, retries, duplicates removed within the same keyword, and `SEARCH_SUMMARY` records are not charged. There is no separate Actor start fee. When a run has a maximum charge limit, the Actor saves and charges only the results that fit the remaining event budget, then stops.

### NetShort search scraper input

See the Input tab for full configuration options. `keywords` is required and accepts 1–1,000 strings. `max_results` and `search_type` apply to every keyword.

```json
{
  "keywords": [
    "love"
  ],
  "max_results": 50,
  "search_type": "1"
}
```

`max_results` is a paging threshold rather than a truncation boundary. The final fetched page is kept whole, so the fetched count can exceed the threshold. Once the threshold is reached, the Actor does not request another page. Requests use `h264`, `720p`, and normal submitted search mode (`searchFlag=0`).

### NetShort scraper output example

Every Dataset item represents one successfully saved NetShort search match:

```json
[
  {
    "keyword": "love",
    "search_type": "1",
    "result_id": "1894649306163933185",
    "title": "Example Romance Drama",
    "cover_url": "https://example.com/romance-cover.webp",
    "description": "A short-drama synopsis returned by NetShort search.",
    "labels": [
      "Romance",
      "Contract Marriage"
    ],
    "result": {
      "shortPlayId": "1894649306163933185"
    }
  },
  {
    "keyword": "love",
    "search_type": "1",
    "result_id": "1894648813714894850",
    "title": "Example Comeback Drama",
    "cover_url": "https://example.com/comeback-cover.webp",
    "description": "Another matching NetShort short drama.",
    "labels": [
      "Comeback",
      "Romance"
    ],
    "result": {
      "shortPlayId": "1894648813714894850"
    }
  }
]
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. JSON preserves the nested `result` object; spreadsheet exports make the top-level title, ID, cover, description, and labels easy to analyze.

### Can I use this as a NetShort search API?

Yes. Every Apify Actor can be called with HTTP, JavaScript, Python, CLI, OpenAPI, or MCP integrations. A synchronous HTTP request can run the search and return Dataset items directly:

```text
POST https://api.apify.com/v2/acts/spider_studio~netshort-search/run-sync-get-dataset-items
```

Pass the same JSON object shown in the input example and authenticate with your Apify API token. For scheduled or larger jobs, start an asynchronous run and read its default Dataset after completion.

### Tips for reliable NetShort data collection

- Start with a small `max_results` value to validate search intent and expected cost.
- Use distinct, specific keywords for cleaner discovery results.
- Keep IDs as strings because NetShort identifiers can exceed JavaScript's safe integer precision.
- Inspect `SEARCH_SUMMARY` when a keyword returns no rows or a run reaches its charge limit.
- Re-run scheduled searches to monitor changes; discovery results can evolve over time.

### FAQ, responsible use, and support

#### Why did I receive more rows than max\_results?

The Actor keeps the final upstream page intact. It stops requesting new pages after the accumulated count reaches or exceeds the threshold, so a keyword can return slightly more than `max_results`.

#### Why did a keyword produce no Dataset rows?

An empty search, exhausted charge budget, unavailable device pool, proxy failure, or upstream change can prevent saved results. Check `SEARCH_SUMMARY` and the run log for a sanitized explanation.

#### Does this Actor download NetShort videos?

No. It extracts search metadata and the raw search-result object; it does not download or redistribute video files.

Use this Actor only for data you are authorized to access and in accordance with NetShort's terms, copyright rules, privacy obligations, and applicable law. Do not process personal data without a legitimate basis. Report reproducible issues through the Actor Issues tab with credentials removed, and use the API tab for programmatic examples.

# Actor input Schema

## `keywords` (type: `array`):

Required list of search keywords. Shared result and search type settings apply to every keyword.

## `max_results` (type: `integer`):

Stop requesting more pages after the collected result count reaches or exceeds this value. Complete pages are preserved, so the final count can be higher.

## `search_type` (type: `string`):

Single-request field.

## Actor input object example

```json
{
  "keywords": [
    "love"
  ],
  "max_results": 50,
  "search_type": "1"
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "keywords": [
        "love"
    ],
    "max_results": 50,
    "search_type": "1"
};

// Run the Actor and wait for it to finish
const run = await client.actor("spider_studio/netshort-search").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 = {
    "keywords": ["love"],
    "max_results": 50,
    "search_type": "1",
}

# Run the Actor and wait for it to finish
run = client.actor("spider_studio/netshort-search").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 '{
  "keywords": [
    "love"
  ],
  "max_results": 50,
  "search_type": "1"
}' |
apify call spider_studio/netshort-search --silent --output-dataset

```

## MCP server setup

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

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/U5xDEBBoreaFry4mo/builds/5ksAa3Ix9GeOx4atj/openapi.json
