# Truth Social Post Scraper

> Truth Social Post Scraper is a paid API for AI agents from api.scrapeforagents.tech, paid per call via x402, $0.025/call, status unknown (last checked 2026-10-02).

Fetches structured post data from public Truth Social profiles or specific post IDs, with filtering options for media, replies, and pagination.

## Facts

- Endpoint: POST https://api.scrapeforagents.tech/v1/truth?utm_source=zero.xyz
- Price: $0.025/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/truth-social-post-scraper-a12f8357
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_FdAw0YwfHNVmHYxt9tssb

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability truth-social-post-scraper-a12f8357 -d '<json body>'
```

Example prompt: Pull the last 20 posts from the Truth Social account @realDonaldTrump, skipping replies, and give me the clean text content and timestamps for each one.

## When to prefer this

Choose this endpoint when you need structured, paginated access to Truth Social post data without building your own scraper. It handles pagination, HTML cleaning, and incremental syncing via useLastPostId. Prefer it over generic web scrapers when you specifically need Truth Social timeline or post data in a clean JSON format, and over manual browsing when you need to process many posts programmatically.

## Known failure modes

- Private or suspended account returns empty items array with count 0 and no charge
- Invalid username format returns an error
- Combining startFromId and useLastPostId returns a validation error
- Non-existent post IDs in singlePostId return empty results
- Rate limiting or platform blocking may return a failed run, which is not charged
- maxPages cap reached before maxPosts satisfied returns partial results

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count of matched posts and an items array. Each item includes the post's numeric ID, URI, URL, title, cleaned text content, raw HTML content, creation timestamp, and last-edited timestamp. The product field confirms 'truth' as the data source.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "maxPages": {
   "type": "integer",
   "default": 100,
   "minimum": 1,
   "description": "Safety cap for timeline requests. Each page contains at most 20 posts; filtered results can be fewer."
  },
  "maxPosts": {
   "type": "integer",
   "default": 20,
   "minimum": 1,
   "description": "Maximum results from the profile timeline. Filtering may require reading more posts."
  },
  "username": {
   "type": "string",
   "description": "Public profile username, @username, or full profile URL. Omit when providing specific post IDs."
  },
  "onlyMedia": {
   "type": "boolean",
   "default": false,
   "description": "Return posts with image, video, or other media attachments."
  },
  "onlyReplies": {
   "type": "boolean",
   "default": false,
   "description": "Return only posts that reply to another post. By default, return posts that are not replies."
  },
  "startFromId": {
   "type": "string",
   "description": "Fetch older posts, excluding this post ID. Cannot be combined with useLastPostId."
  },
  "cleanContent": {
   "type": "boolean",
   "default": true,
   "description": "Remove HTML markup from content. The original markup is always available in rawContent."
  },
  "singlePostId": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Fetch these public posts directly. Accepts numeric IDs or post URLs. Overrides timeline settings."
  },
  "useLastPostId": {
   "type": "boolean",
   "default": false,
   "description": "Save the newest post ID for this username and stop at that ID on later runs using the same storage."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "id": null,
    "uri": null,
    "url": null,
    "title": null,
    "content": null,
    "editedAt": null,
    "createdAt": null,
    "rawContent": null
   }
  ],
  "product": "truth"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/truth-social-post-scraper-a12f8357/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scrapeforagents.tech](https://www.zero.xyz/host/api.scrapeforagents.tech/llms.txt)
