{
  "openapi": "3.0.1",
  "info": {
    "title": "Threads Scraper",
    "description": "Threads scraper with no login. Search any keyword or extract a profile's posts, replies, reposts and media. Returns text, author, engagement counts, timestamps and media URLs. Export JSON, CSV or Excel. Only-new mode for scheduled monitoring. $1.99 per 1,000 posts.",
    "version": "0.1",
    "x-build-id": "NcAs6nc5FdtHknYzE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/reportable_broth~threads-scraper-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-reportable_broth-threads-scraper-monitor",
        "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/reportable_broth~threads-scraper-monitor/runs": {
      "post": {
        "operationId": "runs-sync-reportable_broth-threads-scraper-monitor",
        "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/reportable_broth~threads-scraper-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-reportable_broth-threads-scraper-monitor",
        "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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keywords or #hashtags to search on Threads. Each = up to ~20 freshest public posts per sort mode. Leave empty if you only want profiles.",
            "items": {
              "type": "string"
            }
          },
          "usernames": {
            "title": "Usernames (profile scrape)",
            "type": "array",
            "description": "Threads usernames (with or without @) to scrape ALL public posts from, paginating through history. No login needed.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerProfile": {
            "title": "Max posts per profile",
            "minimum": 1,
            "type": "integer",
            "description": "Stop paginating a profile after this many posts. Each post is charged once.",
            "default": 100
          },
          "profileTabs": {
            "title": "Profile tabs to also scrape",
            "type": "array",
            "description": "Extra tabs to pull for each account in Usernames. Replies = posts this account wrote as replies. Reposts = what this account reposted. Media = their posts with images or video. Anonymous access returns the first page of each tab. An empty result is normal for accounts that simply do not repost or reply publicly.",
            "items": {
              "type": "string",
              "enum": [
                "replies",
                "reposts",
                "media"
              ],
              "enumTitles": [
                "Replies",
                "Reposts",
                "Media (image / video posts)"
              ]
            },
            "default": []
          },
          "modes": {
            "title": "Sort modes",
            "type": "array",
            "description": "recent = newest posts (best for monitoring). top = Threads' relevance ranking. tags = hashtag search.",
            "items": {
              "type": "string",
              "enum": [
                "recent",
                "top",
                "tags"
              ],
              "enumTitles": [
                "Recent (newest first)",
                "Top (relevance)",
                "Tags (#hashtag)"
              ]
            },
            "default": [
              "recent"
            ]
          },
          "searchLanguage": {
            "title": "Result language",
            "enum": [
              "en",
              "zh-TW",
              "zh-CN",
              "ja",
              "ko",
              "th",
              "vi",
              "id",
              "ms",
              "tl",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "ar",
              "ru",
              "tr",
              "hi"
            ],
            "type": "string",
            "description": "Which language the results should lean towards. Many keywords are used by people writing in several languages and Threads mixes them together; picking a language here biases the result set towards it.\n\nThis is a preference, not a hard filter — a keyword only one language uses will return that language whatever you pick. Every post also carries a detected `language` field in the output, which you can filter on.",
            "default": "en"
          },
          "findAccounts": {
            "title": "Also return the accounts talking about your keywords",
            "type": "boolean",
            "description": "Adds account records to the dataset, aggregated from the posts found: who posts about your keywords, how many matching posts each has, and their total engagement. Useful for finding creators, KOLs and prospects. These records are NOT charged separately - they are a summary of posts you already paid for. Look for items with _source = account.",
            "default": false
          },
          "onlyNew": {
            "title": "Only return posts not seen in previous runs",
            "type": "boolean",
            "description": "Keeps a per-task memory of post IDs (7 days). Turn on for scheduled monitoring so every run yields only NEW posts. Turn off to always get the full ~20 per keyword.",
            "default": true
          },
          "maxAgeHours": {
            "title": "Max post age (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop posts older than this. 0 = no limit.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Residential proxy recommended. Anonymous Threads pages are light (~50 KB per 20 posts), so proxy cost is negligible.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Parallel requests.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}