{
  "openapi": "3.0.1",
  "info": {
    "title": "Threads Scraper: Posts, Replies, Search & Profiles",
    "description": "Scrape Threads without login: posts from profiles, keyword and hashtag search, replies to any post, and profile info. Exact counts (hidden likes stay null, not 0), full media URLs, links, mentions, topic tags. No duplicates, limits respected. Export CSV, Excel, JSON.",
    "version": "0.1",
    "x-build-id": "6Po1hdatkXXHFJf0r"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sz022~threads-posts-replies-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sz022-threads-posts-replies-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/sz022~threads-posts-replies-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sz022-threads-posts-replies-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/sz022~threads-posts-replies-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sz022-threads-posts-replies-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": {
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "Threads profile URLs or handles, one per line: https://www.threads.com/@nasa, threads.net/@nasa, @nasa or nasa. Returns each profile's recent posts, newest first.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerProfile": {
            "title": "Max posts per profile",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Posts (threads) to return per profile, after the date, likes and language filters. Set 0 to return only the profile row (turn on Profile info below).",
            "default": 20
          },
          "searchQueries": {
            "title": "Search keywords or hashtags",
            "type": "array",
            "description": "Words to search Threads for, one per line. Start with # to search a topic tag (#coffee). Logged out, Threads shows about 20 results per search; see 'Combine search tabs' below to get about 50.",
            "items": {
              "type": "string"
            }
          },
          "searchMode": {
            "title": "Search tab",
            "enum": [
              "top",
              "recent"
            ],
            "type": "string",
            "description": "Top is what Threads ranks most relevant; Recent is newest first.",
            "default": "top"
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Posts to return per search, after the filters and after removing duplicates. Logged out, about 50 is the most Threads gives for one search term.",
            "default": 20
          },
          "mergeSearchVariants": {
            "title": "Combine search tabs for more results",
            "type": "boolean",
            "description": "Threads gives a logged-out search about 20 results and no next page. With this on, the other tab (Top or Recent) and the topic tag are searched too, and the results are combined without duplicates, which gives about 50. The tab each post came from is in searchVariant. Turn off to keep strictly to the tab chosen above.",
            "default": true
          },
          "postUrls": {
            "title": "Post URLs (for replies)",
            "type": "array",
            "description": "Threads post URLs, one per line: https://www.threads.com/@zuck/post/Ddt7cL5EfUG. Returns the replies to each post, in Threads' Top order.",
            "items": {
              "type": "string"
            }
          },
          "maxRepliesPerPost": {
            "title": "Max replies per post",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Replies to return per post URL, after the filters.",
            "default": 50
          },
          "includeNestedReplies": {
            "title": "Include replies to replies",
            "type": "boolean",
            "description": "Threads shows a short chain of replies under each reply. On: they are returned too, with parentPostCode and replyDepth. Off: direct replies only.",
            "default": true
          },
          "includeOriginalPost": {
            "title": "Include the post itself",
            "type": "boolean",
            "description": "Also return the post each URL points to, as its own row, with its view count. Charged as one post.",
            "default": true
          },
          "since": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Only posts from this date on. A date (2026-10-01), a date and time in UTC (2026-10-01T12:00:00Z), or a relative time such as '7 days' or '3 months'. Profiles stop paging once posts get older than this."
          },
          "until": {
            "title": "Posted on or before",
            "type": "string",
            "description": "Only posts up to this date. A bare date includes that whole day (UTC)."
          },
          "minLikes": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only posts with at least this many likes. Posts whose author hid the like count are skipped when this is set."
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Only posts in these languages, as two-letter codes (en, es, ja, zh, ko, pt...). The language is detected from the post text by this Actor; posts without readable text are skipped when this is set.",
            "items": {
              "type": "string"
            }
          },
          "includeReposts": {
            "title": "Include reposts on profiles",
            "type": "boolean",
            "description": "A profile's tab also shows posts it reposted from other accounts. They are marked isRepost. Turn off to keep only the account's own posts.",
            "default": true
          },
          "includeProfileInfo": {
            "title": "Profile info",
            "type": "boolean",
            "description": "Add one row per input profile: bio, bio links, exact follower count, verified badge, HD picture, profile tags. Read from the same page as the posts, so no extra requests. Charged as profile-scraped.",
            "default": false
          },
          "fetchViewCounts": {
            "title": "View counts",
            "type": "boolean",
            "description": "Threads shows view counts only on each post's own page. On: one extra request per post to read it, charged as view-count-fetched only when a count was found. Off: viewCount is null except on the posts given under Post URLs.",
            "default": false
          },
          "abortAfterConsecutiveFailures": {
            "title": "Stop after this many failed inputs in a row",
            "minimum": 0,
            "type": "integer",
            "description": "Ends the run early when Threads stops answering (blocked, login wall, unreadable pages). Inputs that do not exist do not count. 0 never stops early.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify's datacenter proxy, which reads Threads reliably. Residential and Google SERP groups are not used: the price per post is set for datacenter traffic, so a run that asks for them falls back to datacenter and notes it on each row. Your own proxy URLs are used as given.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}