{
  "openapi": "3.0.1",
  "info": {
    "title": "Truth Social Scraper | Profiles, Posts & Search",
    "description": "Scrape public Truth Social profiles, posts, media, metrics, author data, and complete source objects using profile URLs, post URLs, or search queries.",
    "version": "1.0",
    "x-build-id": "PXH3qlR2k5lwKkb96"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~truthsocial-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-truthsocial-com-scraper",
        "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/abotapi~truthsocial-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-truthsocial-com-scraper",
        "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/abotapi~truthsocial-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-truthsocial-com-scraper",
        "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": "Profile or post URLs",
            "type": "array",
            "description": "Public Truth Social profile, group or post URLs, any shape the site itself links to: a profile (https://truthsocial.com/@handle), its posts-and-replies or media tab (.../with_replies, .../media), a public group (https://truthsocial.com/group/<name>, returns the group's posts), or a post (.../@handle/posts/<id>, .../@handle/<id>, .../users/<handle>/statuses/<id>, or a group post .../group/<name>/posts/<id>). A leading www. is accepted, but the https:// (or http://) scheme itself is required here -- Apify's own URL validator rejects a pasted link with no scheme before this Actor ever sees it. For a bare handle with no scheme at all, use Usernames below instead. Tag, search and trending pages, the groups directory and short links (links.truthsocial.com) need a signed-in account or a redirect and are skipped with a warning -- see the README's URL shapes table.",
            "default": [
              {
                "url": "https://truthsocial.com/@realDonaldTrump"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "usernames": {
            "title": "Usernames (alternative to pasting URLs)",
            "type": "array",
            "description": "Optional. Plain Truth Social handles, with or without a leading \"@\" (for example realDonaldTrump or @realDonaldTrump). Each one is turned into a profile fetch and merged into the same run as Profile or post URLs above -- use whichever is more convenient, or both. If Profile or post URLs holds only the example profile, it is skipped and just your usernames are scraped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "profileContentType": {
            "title": "Profile content",
            "enum": [
              "profileOnly",
              "postsOnly",
              "repliesOnly",
              "postsAndReplies"
            ],
            "type": "string",
            "description": "For profile URLs, choose whether to return profile metadata only, posts only, replies only, or both posts and replies. A /with_replies or /media URL tab in the input overrides this setting. Ignored for post and group URLs (a group URL always returns the group's posts).",
            "default": "postsAndReplies"
          },
          "maxPostsPerProfile": {
            "title": "Max posts/replies per profile",
            "minimum": 0,
            "type": "integer",
            "description": "Leave 0 for no per-profile cap; the run stops at Max items. Fewer rows are returned when the profile has fewer public matching records.",
            "default": 0
          },
          "onlyMedia": {
            "title": "Only posts with media",
            "type": "boolean",
            "description": "Keep only posts and replies that carry their own image or video, like the profile's Media tab. Reposts are left out, as on the site.",
            "default": false
          },
          "includeReblogs": {
            "title": "Include reposts (ReTruths)",
            "type": "boolean",
            "description": "On by default. Turn off to drop reposts of other people's posts and keep only the profile's own posts and replies.",
            "default": true
          },
          "postsNewerThan": {
            "title": "Posts newer than",
            "type": "string",
            "description": "Optional. Keep only posts published on or after this date (for example 2026-10-01), or within a period counted back from the run start (for example 7 days). The run stops paging a profile as soon as it reaches older posts, so you only pay for what you keep. A repost counts from the moment it was reposted."
          },
          "startFromId": {
            "title": "Start from post ID",
            "type": "string",
            "description": "Optional. Return only posts OLDER than this post, to continue backwards through a long history. Paste a post ID (the number at the end of a post URL) or the post URL itself."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "The only finite default cap. Maximum matching rows to save across the whole run; fewer rows are returned when selected inputs have fewer public matches.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 0,
            "type": "integer",
            "description": "No page limit by default. Leave 0 for unlimited; the run stops at Max items.",
            "default": 0
          },
          "includeRaw": {
            "title": "Include source objects",
            "type": "boolean",
            "description": "Keep complete source account/status objects so no nested public field is dropped.",
            "default": true
          },
          "countryCode": {
            "title": "Residential country code",
            "type": "string",
            "description": "Preferred proxy country. US is recommended for Truth Social.",
            "default": "US"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxies are recommended. Basic shared or no-proxy runs can be blocked more often.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large profile pull without returning or charging for posts already collected there. Use this after an interrupted run, or when continuing a pull in another run. For recurring monitoring of the same profiles, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching posts as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED posts. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those posts returned (and billed). State is kept separately for each startUrls/profile content setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the profile/post URLs and content type settings -- different profile sets then never mix state with each other."
          },
          "peek": {
            "title": "Peek (incremental mode only)",
            "type": "boolean",
            "description": "Preview what changed since the last incremental run without saving the new baseline: the next run reports the same changes again. Off by default. Has no effect unless Incremental changes for scheduled runs is on.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Emit unchanged posts (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return posts that have not changed since the last run, marked UNCHANGED. This returns -- and bills -- extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired posts (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return posts that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked profile -- not when Max items capped it or when Resume was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Field names to exclude from UPDATED change detection, in addition to the built-in handling (a poll's vote/voter tallies, each poll option's own vote count, and a closed poll's expired flag never trigger a false UPDATED by themselves -- they drift on their own as people keep voting, not because the post changed; the author's avatar and verified badge and the start URL a row came from are also left out of the diff). Matches a field name at any nesting depth (for example inside poll or inside each item of media). Ignored fields are still returned in the output. Use this if another field in your setup turns out to be noisy.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into apps",
            "type": "array",
            "description": "Optionally send a compact summary into configured MCP connectors. The full dataset remains in Apify."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page",
            "type": "string",
            "description": "Required only when exporting to Notion."
          },
          "maxNotifyListings": {
            "title": "Max connector items",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum items sent to each connector. Does not affect the Apify dataset.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}