Truth Social

How to scrape Truth Social data with an API

Pull Truth Social profiles and posts as JSON via Social Fetch's /v1/truthsocial routes, with pagination and credit billing.

Social FetchUpdated

This guide covers Truth Social profile and post lookups via /v1/truthsocial/**: profile by handle, cursor-paginated profile posts, and single post by URL. Truth Social's app is for posting and account management, not backend enrichment; DIY HTTP clients work for scripts but you own auth, pagination, and field drift. See Social Fetch vs DIY scraping for the broader comparison.

The shortest path is a single request:

Request
curl -sS \
  -H "x-api-key: $SOCIALFETCH_API_KEY" \
  "https://api.socialfetch.dev/v1/truthsocial/profiles/realDonaldTrump"

You'll need an API key and curl or the TypeScript SDK. New to the API? Start with the Quickstart.

Using the Social Fetch API

Social Fetch exposes Truth Social under documented /v1/truthsocial/** routes. One header authenticates every call; responses share the same data + meta envelope as Instagram or Telegram.

  1. Open the Playground and select Truth Social, then Profile.
  2. Enter realDonaldTrump in handle.
  3. Click Send, then check Response. Playground requests spend credits, just like calls from your code.
Truth Social profile lookup in the dark Playground, with the public handle and found outcome annotated.
Enter a public handle, then check lookupStatus before reading the profile.

Get a profile

Switch tabs for cURL, TypeScript or Python:

Request
const response = await fetch(
  "https://api.socialfetch.dev/v1/truthsocial/profiles/realDonaldTrump",
  {
    headers: {
      "x-api-key": process.env.SOCIALFETCH_API_KEY,
    },
  }
);

const body = await response.json();

console.log(response.status, body);

Truth Social profile lookups are credit-metered when the lookup completes (including not_found outcomes that still return HTTP 200). Trust meta.creditsCharged on every response. Pass the public username with or without @.

List a profile's posts

Request
const response = await fetch(
  "https://api.socialfetch.dev/v1/truthsocial/profiles/realDonaldTrump/posts",
  {
    headers: {
      "x-api-key": process.env.SOCIALFETCH_API_KEY,
    },
  }
);

const body = await response.json();

console.log(response.status, body);

Full parameters: Get Truth Social profile and Profile posts. Each completed page is a separate credit charge.

In the Playground, select Profile posts, keep the same handle, and set limit to 5. Leave cursor empty for the first page, then click Send.

Truth Social Profile posts in the Playground, with the limit input and posts response field annotated.
The limit controls the maximum posts returned on this page. The response also includes the profile.

limit accepts 1 to 20 and defaults to 20. Replies are excluded by default. Set includeReplies=true if you need them; that costs 4 credits per completed page instead of 2.

Get a single post by URL

When you already have a public post link, pass it as the url parameter:

Request
const params = new URLSearchParams({"url":"https://truthsocial.com/@realDonaldTrump/posts/114000000000000000"});

const response = await fetch(
  `https://api.socialfetch.dev/v1/truthsocial/posts?${params.toString()}`,
  {
    headers: {
      "x-api-key": process.env.SOCIALFETCH_API_KEY,
    },
  }
);

const body = await response.json();

console.log(response.status, body);

Docs: Get Truth Social post.

Paginate through posts

Profile post list endpoints return one page plus an opaque cursor. Pass the cursor back verbatim until hasMore is false:

Request
typescript

Stop when data.page.hasMore is false or data.page.nextCursor is null. Pass nextCursor back as the next request's cursor, without changing it. Keep the same handle and reply setting across pages. Each page costs credits; the loop above stops after two pages even if more are available. Save post IDs if you need to remove duplicates across repeated collections.

Reading the response

A successful response wraps the payload alongside billing metadata. This is an excerpt from a real profile response captured on 21 October 2026. Counts can change:

Request
json

An HTTP 200 does not guarantee that data was found. Check data.lookupStatus before using profile or post. A missing profile returns not_found and profile: null, and still costs credits.

A real missing-handle lookup in the Playground, with lookupStatus not_found annotated despite HTTP 200.
A completed lookup can return no profile. Branch on lookupStatus in your code.

Keep meta.requestId with your logs so support can trace a lookup. Read meta.creditsCharged for the actual charge. Profile and single-post lookups cost 2 credits; profile-posts pages cost 2, or 4 with replies included. See Errors and Credits.

What you can build

  • Save public posts from selected accounts for a news research archive.
  • Record profile metrics alongside the date you collected them.
  • Feed public profile and post data into an MCP workflow.

For vendor shopping without implementation detail, see Best Truth Social APIs & scrapers in 2026. For listening dashboards across networks, see Social listening dashboard.

FAQ

It depends on your jurisdiction, what data you collect, and how you use it. You remain responsible for Truth Social's terms, applicable privacy law, and your own contracts. This is a technical guide, not legal advice. Talk to counsel if you're collecting at scale.

Can't I just use Truth Social's app or scrape the site myself?

Use the official app for posting and account management. DIY HTTP or browser clients can work for personal scripts, but you own maintenance. For public enrichment in a multi-platform backend, a data API is the usual fit.

How fresh is the data?

Treat each response as a snapshot at lookup time. Save the collection time with your data. If a number looks off, meta.requestId lets support trace that lookup.

What happens if a profile doesn't exist?

Check data.lookupStatus. Don't treat a 200 alone as "data is present": a missing handle returns 200 with not_found. Details in Errors.

How are credits charged?

Credits charge when a lookup completes, including 200 outcomes like not_found. Each Truth Social profile, profile-posts page, and post lookup is credit-metered. Validation failures and lookup_failed / temporary unavailability do not bill the same way: see Credits. Always reconcile against meta.creditsCharged.

How does this compare to other providers?

See Best Truth Social APIs & scrapers in 2026, plus vs Apify, vs Bright Data, and the full compare hub.

Share this article