# TikTok Political Creator Intelligence MCP (`red.cars/tiktok-political-creator-intelligence-mcp`) Actor

MCP actor that enriches TikTok creator profiles with US political intelligence — political leaning inference, issue framing, narrative reach tracking, and audience demographic mapping for political comms workflows.

- **URL**: https://apify.com/red.cars/tiktok-political-creator-intelligence-mcp.md
- **Developed by:** [AutomateLab](https://apify.com/red.cars) (community)
- **Categories:** MCP servers, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## TikTok Political Creator Intelligence MCP

Enrich TikTok creator profiles with US political intelligence signals for political communications workflows. This MCP actor infers political leaning, tracks issue narratives, maps audience demographics, and surfaces creators by political positioning — all via the Apify PPE MCP protocol.

### What does this Actor do?

This Actorscrapes and analyzes TikTok creator profiles to build political intelligence dossiers. It answers questions like: Which creators are amplifying progressive or conservative narratives on immigration? What issues are trending in which political circles? Who are the highest-reach creators in a given political lane?

Use cases include opposition research, message testing, earned media planning, political ad targeting, and surrogate identification. The Actor runs as a standby MCP server on port 3000, accepting tool calls via HTTP and returning structured JSON intelligence.

**Try it:** Install via Apify, configure your PPE pricing, and call the MCP endpoint at `https://api.apify.com/v2/acts/<actor-id>/poc-mcp`.

### Why use this Actor?

Political communications firms, PACs, and advocacy groups need systematic TikTok intelligence. Manual creator research is slow, inconsistent, and doesn't scale. This Actor provides:

- **Political leaning inference** — classify creators as PROGRESSIVE, CONSERVATIVE, or MODERATE based on content signals
- **Narrative tracking** — monitor how specific issues (abortion, inflation, immigration) are framed across creator sets
- **Audience demographic mapping** — understand age, geography, and engagement patterns by political leaning
- **Creator discovery** — find high-reach creators by political position and issue focus
- **Creator comparison** — benchmark two creators side-by-side on political positioning

Runs on Apify's infrastructure with proxy rotation, automatic retries, and PPU/PPE billing.

### How to use this Actor

**1. Deploy the Actor**
```bash
cd tiktok-political-creator-intelligence-mcp
apify push
````

**2. Configure PPE pricing** via Apify Console or API (set all tool prices in one call — API allows only one modification per month).

**3. Call the MCP endpoint** with tool and parameters:

```bash
curl -X POST https://api.apify.com/v2/acts/<actor-id>/poc-mcp \
  -H "Content-Type: application/json" \
  -d '{"tool": "political_profile", "params": {"handle": "@creatorname"}}'
```

### Input

All tools accept a `tool` field plus tool-specific parameters:

| Field | Type | Description |
|-------|------|-------------|
| `tool` | string | Required. One of: `political_profile`, `narrative_track`, `creator_compare`, `creator_discover`, `audience_demo`, `issue_classify` |
| `handle` | string | TikTok handle (with or without @) |
| `handleA` / `handleB` | string | Two handles for comparison |
| `issueKeyword` | string | Political issue keyword for narrative tracking |
| `timeRange` | string | `7d`, `30d`, or `90d` (default: `30d`) |
| `minFollowers` | integer | Minimum follower count (default: 10000) |
| `politicalLeaning` | string | `PROGRESSIVE`, `CONSERVATIVE`, or `MODERATE` |
| `sortBy` | string | `followers`, `engagementRate`, or `views` (default: `followers`) |
| `limit` | integer | Max results 1-20 (default: 10) |
| `postCount` | integer | Posts to analyze 1-50 (default: 20) |
| `issues` | array | List of issue keywords for classification |

### Output

Each tool returns structured JSON:

```json
{
  "tool": "political_profile",
  "timestamp": "2026-05-09T12:00:00Z",
  "input": { "handle": "@creatorname" },
  "result": {
    "handle": "creatorname",
    "displayName": "Creator Name",
    "followers": 125000,
    "following": 3400,
    "likes": 8900000,
    "videoCount": 284,
    "politicalLeaning": "CONSERVATIVE",
    "confidence": 0.78,
    "signalTerms": ["MAGA", "BorderWall", "2A"],
    "issueFocus": ["immigration", "economy"],
    "bioLink": null,
    "recentHashtags": ["#MAGA", "#ImmigrationReform"],
    "lastUpdated": "2026-05-09T12:00:00Z"
  },
  "actorVersion": "1.0.0"
}
```

Results are pushed to the default dataset as structured records. Download in JSON, CSV, HTML, or Excel from Apify Console.

### Pricing

Uses Apify **Pay-per-event (PPE)** pricing. Each tool call counts as one event. Set per-tool prices via:

- **Apify Console**: Actor Settings → Pricing
- **API**: `PUT /v2/acts/{actorId}` with `pricingInfos`

Expected compute: ~0.1-0.3 CPEUs per profile scrape, ~0.05 CPEUs per narrative track query.

### Tips and Advanced Options

- **Batch discovery calls** — use `creator_discover` with `limit=20` to find creators, then pipe handles to `political_profile` in a follow-up call
- **Proxy rotation** — Apify handles proxy rotation automatically for TikTok scrapes
- **Time range** — use `7d` for real-time narrative tracking, `90d` for comprehensive political positioning
- **Minimum followers** — raise `minFollowers` to 100000+ for high-authority creators, lower to 5000 for emerging voices

### FAQ, Disclaimers, and Support

**Is TikTok scraping legal?** TikTok's ToS prohibits automated scraping. This Actor is intended for authorized political communications research. Use responsibly and in compliance with applicable terms and laws.

**What if TikTok blocks the scrape?** Apify's proxy network handles most blocking automatically. For persistent blocks, contact Apify support.

**Can I get historical data?** Yes — use `timeRange: "90d"` to capture the last 90 days of content signals.

**Known limitations:** TikTok's anti-bot measures may limit data completeness for some creator profiles. Confidence scores reflect signal strength, not political endorsement.

**Issues and feedback:** Open an issue at the GitHub repo or contact support via Apify Console.

# Actor input Schema

## `tool` (type: `string`):

Which tool to call

## `handle` (type: `string`):

TikTok handle (with or without @)

## `handleA` (type: `string`):

First TikTok handle for compare

## `handleB` (type: `string`):

Second TikTok handle for compare

## `issueKeyword` (type: `string`):

Political issue keyword for narrative tracking

## `timeRange` (type: `string`):

Time range for narrative tracking: 7d, 30d, or 90d

## `minFollowers` (type: `integer`):

Minimum follower count for narrative tracking results

## `politicalLeaning` (type: `string`):

Filter for political leaning: PROGRESSIVE, CONSERVATIVE, or MODERATE

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

Sort discover results by: followers, engagementRate, or views

## `limit` (type: `integer`):

Maximum number of results to return (1-20)

## `postCount` (type: `integer`):

Number of recent posts to analyze for issue classification (1-50)

## `issues` (type: `array`):

Specific political issues to check for in post classification

## `proxyGroups` (type: `string`):

Apify proxy groups to use (e.g. RESIDENTIAL for TikTok scraping)

## Actor input object example

```json
{
  "tool": "political_profile",
  "timeRange": "30d",
  "minFollowers": 10000,
  "sortBy": "followers",
  "limit": 10,
  "postCount": 20,
  "proxyGroups": "RESIDENTIAL"
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("red.cars/tiktok-political-creator-intelligence-mcp").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("red.cars/tiktok-political-creator-intelligence-mcp").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 '{}' |
apify call red.cars/tiktok-political-creator-intelligence-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=red.cars/tiktok-political-creator-intelligence-mcp",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Political Creator Intelligence MCP",
        "description": "MCP actor that enriches TikTok creator profiles with US political intelligence — political leaning inference, issue framing, narrative reach tracking, and audience demographic mapping for political comms workflows.",
        "version": "1.0",
        "x-build-id": "wClxmC8DbmqyrVoDV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/red.cars~tiktok-political-creator-intelligence-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-red.cars-tiktok-political-creator-intelligence-mcp",
                "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/red.cars~tiktok-political-creator-intelligence-mcp/runs": {
            "post": {
                "operationId": "runs-sync-red.cars-tiktok-political-creator-intelligence-mcp",
                "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/red.cars~tiktok-political-creator-intelligence-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-red.cars-tiktok-political-creator-intelligence-mcp",
                "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": [
                    "tool"
                ],
                "properties": {
                    "tool": {
                        "title": "Tool",
                        "enum": [
                            "political_profile",
                            "narrative_track",
                            "creator_compare",
                            "creator_discover",
                            "audience_demo",
                            "issue_classify"
                        ],
                        "type": "string",
                        "description": "Which tool to call",
                        "default": "political_profile"
                    },
                    "handle": {
                        "title": "TikTok Handle",
                        "type": "string",
                        "description": "TikTok handle (with or without @)"
                    },
                    "handleA": {
                        "title": "First TikTok Handle",
                        "type": "string",
                        "description": "First TikTok handle for compare"
                    },
                    "handleB": {
                        "title": "Second TikTok Handle",
                        "type": "string",
                        "description": "Second TikTok handle for compare"
                    },
                    "issueKeyword": {
                        "title": "Issue Keyword",
                        "type": "string",
                        "description": "Political issue keyword for narrative tracking"
                    },
                    "timeRange": {
                        "title": "Time Range",
                        "enum": [
                            "7d",
                            "30d",
                            "90d"
                        ],
                        "type": "string",
                        "description": "Time range for narrative tracking: 7d, 30d, or 90d",
                        "default": "30d"
                    },
                    "minFollowers": {
                        "title": "Minimum Followers",
                        "type": "integer",
                        "description": "Minimum follower count for narrative tracking results",
                        "default": 10000
                    },
                    "politicalLeaning": {
                        "title": "Political Leaning",
                        "enum": [
                            "PROGRESSIVE",
                            "CONSERVATIVE",
                            "MODERATE"
                        ],
                        "type": "string",
                        "description": "Filter for political leaning: PROGRESSIVE, CONSERVATIVE, or MODERATE"
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "followers",
                            "engagementRate",
                            "views"
                        ],
                        "type": "string",
                        "description": "Sort discover results by: followers, engagementRate, or views",
                        "default": "followers"
                    },
                    "limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of results to return (1-20)",
                        "default": 10
                    },
                    "postCount": {
                        "title": "Post Count",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Number of recent posts to analyze for issue classification (1-50)",
                        "default": 20
                    },
                    "issues": {
                        "title": "Issues",
                        "type": "array",
                        "description": "Specific political issues to check for in post classification",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyGroups": {
                        "title": "Proxy Groups",
                        "type": "string",
                        "description": "Apify proxy groups to use (e.g. RESIDENTIAL for TikTok scraping)",
                        "default": "RESIDENTIAL"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
