Truth Social logo

Social media · Live on Apify

Truth Social Scraper: Posts and Profiles

Get public Truth Social posts and profiles by username. Each row has the text, media, counts and author followers. No login is needed.

About $1.50 for 1,000 posts$0.0015 per post + $0 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

typepost
urlhttps://truthsocial.com/@realDonaldTrump/117435353994630003
inputHandlerealDonaldTrump

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: realDonaldTrump in Usernames or profile URLs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Scrape public Truth Social posts and profiles by username with no login, and get clean JSON rows with post text, media, link cards, quotes, ReTruths, reply/ReTruth/like counts and the author's follower count.

Good for

  • Follow what a list of public accounts posted today or in the last week.
  • Build a dataset of posts with text, media links and engagement counts.
  • Get follower counts, bios and join dates of many accounts at once.
  • Feed fresh posts to an AI agent, a spreadsheet or a news alert flow.

Not a good fit

  • No search, trends, groups, comments by other people, followers lists or DMs: only posts and profiles of the usernames you give.
  • Only public accounts. Private (locked) accounts are reported as private with no posts.
  • Truth Social allows only a few requests per minute, and the Actor respects that limit. It saves about 60–100 posts per minute, so 1,000 posts take about 14 minutes.
  • At most 100 usernames per run and 2,000 posts per account. 100 accounts with 20 posts each take about 40 minutes.

Who uses it

Journalists

Follow what a list of public accounts posted this week.

Researchers

Build a post dataset with engagement counts.

Alert builders

Send fresh posts to a sheet or an AI agent.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Post$0.0015 (from $0.00125 on paid Apify plans)One Truth Social post row saved to the Dataset.
Account checked$0.0025One username that Truth Social answered about: found, not found or private. In profiles mode, the profile row. Invalid usernames are free.

Examples

  • One post: about $0.0015.
  • 1,000 posts: about $1.50.
  • Every day 100 posts, for 30 days: about $4.50 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 3,300 posts.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Why is it slow?

Truth Social allows only a few requests per minute. The tool stays under that limit.

Can I search posts by keyword?

No. It gets posts and profiles of the usernames you add.

How many accounts can I add?

Up to 100 usernames per run and up to 2,000 posts per account.

What about private accounts?

They are marked as private, with no posts.

Do I need a Truth Social account or cookies?

No. The Actor reads only public data that Truth Social shows to logged-out visitors.

Why can't it go faster?

Truth Social limits how often a visitor can ask for data. The Actor stays under that limit, about 5 requests (up to 100 posts) per minute, and waits when Truth Social asks.

Are the counts live?

Likes, ReTruths, replies and follower counts are as they were at fetchedAt. Run again to refresh them.

Is this data complete?

It is what the public API returns for the account's timeline, newest first, up to 2,000 posts. Deleted posts and posts of private accounts are not available.

Is scraping Truth Social allowed?

The Actor reads only public pages without login, at the rate Truth Social allows, and does not bypass any login or CAPTCHA. Truth Social's terms restrict automated collection and commercial use; you are responsible for how you collect, store and reuse the content, including personal data and authors' rights.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Add one or more usernames to Usernames or profile URLs (handles), for example realDonaldTrump.
  3. Keep Max posts per account (maxPostsPerUser) at 20, or set a higher number.
  4. Click Start.
  5. Open the Output tab: the Posts view shows date, author, text, link and counts.
Use cases
TaskInputYou getKey fieldsNext step
Daily monitoring of a few accountshandles + since: "1 day"postcreatedAt, text, url, mediaSchedule + webhook, Google Sheets
Engagement researchhandles + maxPostsPerUserpostfavouritesCount, reblogsCount, repliesCountCSV / Excel export
Account directorymode: "profiles"profilefollowersCount, postsCount, bio, createdAtAPI, spreadsheet
AI agent contexthandles (small)posttext, createdAt, urlMCP
Tips for better results
  • Use the date filter to get only recent posts.
  • Turn off replies and ReTruths to keep original posts only.
  • Plan time: about 60 to 100 posts are saved per minute.
Limits and good to know

If you set a maximum cost per run, the Actor stops before it goes over it: rows already saved stay in the Dataset, the run ends as SUCCEEDED with PARTIAL / CHARGE_LIMIT in RUN_SUMMARY, and the rest of the accounts are skipped.

  • Up to 100 usernames per run, up to 2,000 posts per account (20 posts per request). 100 usernames with 20 posts each take about 40 minutes, within the default 1-hour timeout
  • About 5 requests per minute, as Truth Social allows; the Actor waits when Truth Social asks it to slow down
  • The default run timeout is 1 hour, enough for about 3,000–4,000 posts. If the timeout comes first, saved rows stay and the run is PARTIAL / TIME_LIMIT

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "type": "post",
  "id": "117435353994630003",
  "url": "https://truthsocial.com/@realDonaldTrump/117435353994630003",
  "inputHandle": "realDonaldTrump",
  "account": {
    "id": "107780257626128497",
    "username": "realDonaldTrump",
    "displayName": "Donald J. Trump",
    "url": "https://truthsocial.com/@realDonaldTrump",
    "followersCount": 13111621,
    "followingCount": 69,
    "postsCount": 37168,
    "verified": true,
    "avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg"
  },
  "createdAt": "2026-10-13T19:54:55.085Z",
  "editedAt": null,
  "text": "Don’t ever mess with nature! President DJT",
  "contentHtml": "<p>Don’t ever mess with nature! President DJT</p>",
  "language": "en",
  "repliesCount": 791,
  "reblogsCount": 1825,
  "favouritesCount": 7100,
  "isReply": false,
  "inReplyToId": null,
  "inReplyToAccountId": null,
  "isReblog": false,
  "reblog": null,
  "isQuote": false,
  "quoteId": null,
  "quote": null,
  "sensitive": false,
  "spoilerText": null,
  "visibility": "public",
  "pinned": false,
  "mentions": [],
  "hashtags": [],
  "media": [
    {
      "id": "117435345857080951",
      "type": "video",
      "url": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/435/345/857/080/951/original/98bf6e8266e6ae0a.mp4",
      "previewUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/thumbnails/117/435/345/857/080/951/original/72433ae574eb1d6c.jpg",
      "width": 1078,
      "height": 1148,
      "durationSecs": 41.563719,
      "description": null
    }
  ],
  "card": null,
  "poll": null,
  "source": "truthsocial.com",
  "fetchedAt": "2026-10-14T03:59:02Z"
}

Use it from code

Actor ID: cliqtomedia/truth-social-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/truth-social-scraper").call(run_input={
    "handles": [
        "realDonaldTrump"
    ],
    "mode": "posts"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~truth-social-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"handles": ["realDonaldTrump"], "mode": "posts"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/truth-social-scraper")
result = tool.invoke({"run_input": {"handles": ["realDonaldTrump"], "mode": "posts"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (6)
FieldTypeMeaning
typestringpost (posts mode) or profile (profiles mode).
idstringTruth Social post or account ID.
urlstringPublic URL of the post or profile.
inputHandlestringThe username the row was fetched for, as normalized from the input.
fetchedAtstringWhen the run fetched the data (UTC).
sourcestringAlways truthsocial.com.
Input settings (6)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Usernames or profile URLs requiredhandlesarray["realDonaldTrump"]
What to scrapemodestring"posts"
Max posts per accountmaxPostsPerUserinteger20
Only posts sincesincestring
Include repliesincludeRepliesbooleanfalse
Include ReTruthsincludeReblogsbooleantrue

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure