# Truth Social Profile Scraper (`scrapie/scrape-truth-social-profile-feed`) Actor

Fast and reliable scraper for Truth Social user profiles. Extracts posts, engagement metrics (replies, re-truths, likes), high-resolution media, and precise timestamps using stealth browser technology to bypass anti-bot protections.

- **URL**: https://apify.com/scrapie/scrape-truth-social-profile-feed.md
- **Developed by:** [scrapie manchem](https://apify.com/scrapie) (community)
- **Categories:** Social media, SEO tools, News
- **Stats:** 5 total users, 1 monthly users, 95.2% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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

## Truth Social Profile Scraper

### What does Truth Social Profile Scraper do?
The Truth Social Scraper is a robust, automated tool that extracts posts and engagement data directly from Truth Social user profiles. Built on the professional Apify platform using Playwright and Camoufox, it seamlessly interacts with Truth Social's backend API (Mastodon-based) to capture the richest possible JSON structured data while avoiding common bot-blocking challenges. 

It extracts posts, texts, interactions (replies, re-truths, likes), and connected media. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. This tool is ideal for political monitoring, market research, and trend analysis.

### Why use Truth Social Profile Scraper?
Due to Truth Social lacking a public API, manual data tracking is slow and error-prone. This actor runs stealthily to fetch precise numbers directly from the internal API in real-time. Whether you are tracking Donald Trump's posts or monitoring specific political figures, this scraper offers:
- **Speed**: Harnessing Playwright with hidden API interception guarantees incredibly fast scraping.
- **Reliability**: Employs Camoufox stealth technology to bypass fingerprinting.
- **Thoroughness**: Gathers exact timestamps, high-res media links, and interaction metrics.

### How to use Truth Social Scraper

1. **Create a free Apify account** if you haven't already.
2. Open your Actor on your Apify Console.
3. In the input tab, insert the Truth Social profile URL(s) you wish to scrape (e.g., `https://truthsocial.com/@realDonaldTrump`) in the Start URLs.
4. (Optional) Adjust the **Max posts per profile** to restrict the number of extracted posts.
6. Click **Start** to run the actor.
7. Once the run completes, click on the **Storage** tab to view your data or export it in various formats.

### Input

The scraper accepts the following input settings:
* **Start URLs (`startUrls`)**: An array of URLs pointing to the target Truth Social profiles (e.g., `https://truthsocial.com/@realDonaldTrump`).
* **Max posts per profile (`maxPostsPerProfile`)**: Limits how many posts will be extracted per profile. Set to `0` for unlimited extraction.

### Output Structure

The scraper outputs rich JSON data for every post encountered on the user's profile feed:

```json
{
  "id": "112233445566778899",
  "authorUsername": "realDonaldTrump",
  "authorId": "107780283083693356",
  "created_at": "2024-03-01T12:00:00.000Z",
  "url": "https://truthsocial.com/@realDonaldTrump/112233445566778899",
  "contentRawHtml": "<p>MAKE AMERICA GREAT AGAIN!</p>",
  "contentPlainText": "MAKE AMERICA GREAT AGAIN!",
  "replies_count": 3450,
  "reblogs_count": 12000,
  "favourites_count": 55000,
  "media_attachments": [
    "https://static-assets.truthsocial.com/.../video.mp4"
  ],
  "type": "post",
  "rebloggedId": null
}
````

### Data table

Below is a brief overview of the main data fields to expect:

| Field | Description |
| ---- | ---- |
| `id` | The unique Mastodon/Truth Social ID of the post. |
| `authorUsername` | The username of who authored the post. |
| `created_at` | The exact ISO-8601 timestamp the post was created. |
| `url` | A link back to the specific post. |
| `contentPlainText` | The cleaned plain-text content of the post. |
| `replies_count` | Number of replies. |
| `reblogs_count` | Number of re-truths (shares). |
| `favourites_count` | Number of likes. |
| `type` | Designates if the item was an original `post` or a `re-truth`. |

### Pricing / Cost estimation

This scraper is highly efficient. Running it to collect a few hundred posts typically takes only a few seconds or a minute at most, which ensures it consumes a minute fraction of Apify Compute Units. This means it's extremely affordable to run and testing it will fall well under the free tier limits on Apify.

### Tips or Advanced options

- **Wait for Network Idle:** The actor is specially configured to auto-scroll to the bottom of the feed and pause in order to give Truth Social enough time to respond to API fetches.
- Try to run this scraper on standard resident proxies if you process massive queues to maintain stealth.

### FAQ, disclaimers, and support

**Is it legal to scrape Truth Social?**
Extracting public data using automated tools is generally permissible for public research, but you should always review local regulations and the platform's Terms of Service. Be mindful not to overload servers by utilizing massive concurrencies.

If you find any bugs or limitations, please file an issue in the **Issues** tab.

# Actor input Schema

## `startUrls` (type: `array`):

Truth Social profile or hashtag URLs to scrape posts from. E.g. https://truthsocial.com/@realDonaldTrump

## `maxPostsPerProfile` (type: `integer`):

Maximum number of posts to scrape per user profile. (0 for unlimited)

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

Select proxies to be used by your scraper. Residential proxies are highly recommended to avoid 403 blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://truthsocial.com/@realDonaldTrump"
    }
  ],
  "maxPostsPerProfile": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "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 = {
    "startUrls": [
        {
            "url": "https://truthsocial.com/@realDonaldTrump"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapie/scrape-truth-social-profile-feed").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 = {
    "startUrls": [{ "url": "https://truthsocial.com/@realDonaldTrump" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapie/scrape-truth-social-profile-feed").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 '{
  "startUrls": [
    {
      "url": "https://truthsocial.com/@realDonaldTrump"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapie/scrape-truth-social-profile-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapie/scrape-truth-social-profile-feed",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Truth Social Profile Scraper",
        "description": "Fast and reliable scraper for Truth Social user profiles. Extracts posts, engagement metrics (replies, re-truths, likes), high-resolution media, and precise timestamps using stealth browser technology to bypass anti-bot protections.",
        "version": "0.0",
        "x-build-id": "28UDG9hlNvJSDWuDh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapie~scrape-truth-social-profile-feed/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapie-scrape-truth-social-profile-feed",
                "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/scrapie~scrape-truth-social-profile-feed/runs": {
            "post": {
                "operationId": "runs-sync-scrapie-scrape-truth-social-profile-feed",
                "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/scrapie~scrape-truth-social-profile-feed/run-sync": {
            "post": {
                "operationId": "run-sync-scrapie-scrape-truth-social-profile-feed",
                "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",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Truth Social profile or hashtag URLs to scrape posts from. E.g. https://truthsocial.com/@realDonaldTrump",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxPostsPerProfile": {
                        "title": "Max posts per profile",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of posts to scrape per user profile. (0 for unlimited)",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Select proxies to be used by your scraper. Residential proxies are highly recommended to avoid 403 blocks.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
