{
  "openapi": "3.0.1",
  "info": {
    "title": "Threads Scraper — Instagram Threads API, Posts, Replies, Videos",
    "description": "Instagram Threads posts by handle: the latest posts as rows — text, date, likes, replies, reposts, quotes, image and video links — or paste a post link for its exact counts and top replies. Optional profile row: followers, bio, links. No login, no start fee. Threads shows 15 posts per profile.",
    "version": "1.0",
    "x-build-id": "15NqAVkVzF0DZakgb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~threads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-threads-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/steadyfetch~threads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-threads-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/steadyfetch~threads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-threads-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",
        "required": [
          "handles"
        ],
        "properties": {
          "handles": {
            "title": "Threads handles",
            "type": "array",
            "description": "Threads handles, one per line — \"natgeo\", \"@natgeo\" or a profile link (https://www.threads.com/@natgeo). Threads shows the last 15 posts of a profile to a logged-out reader, so 15 is the most any handle can return and a bigger limit delivers 15 and says so, uncharged. Leave this empty and the run returns built-in sample rows instead of collecting anything, so you can see the output shape at no result fee. A post link put here is routed to the post box automatically, not refused.",
            "default": [
              "_demo"
            ],
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post links",
            "type": "array",
            "description": "Individual Threads post links, one per line — https://www.threads.com/@zuck/post/ABC123 (threads.net links are read too). A pasted post link is a first-class input here, not a workaround: each one returns its own row carrying the post's view count and its top replies (about twenty, as Threads serves them — there is no page 2 of replies), which a profile listing does not have. Charged as one \"Post lookup\" when the row lands; a link Threads answers is gone costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (profiles and post links mixed)",
            "type": "array",
            "description": "One list for both kinds of link, for buyers moving over from another scraper. A profile link or bare handle lists that profile's posts; a post link returns that one post with its replies. Each line is sorted into the right door before anything is bought, so a post link never costs a profile read and a profile link never costs a lookup.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeProfile": {
            "title": "Include a profile row per handle",
            "type": "boolean",
            "description": "OFF (default): only post rows. ON: each handle also gets one `rowType: profile` row with `followerCount`, `fullName`, `biography`, `bioLinks`, `isVerified` and `profilePicUrl`, at $0.005 on the Business plan ($0.012 on the Apify free plan) on top of the post rows.",
            "default": false
          },
          "maxItems": {
            "title": "Max rows to return",
            "type": "integer",
            "description": "Hard ceiling for the WHOLE run — it never delivers or bills more rows than this, across every handle, every post link and the profile rows, whatever else is set. Other scrapers call this `limit` or `count`; those names are read as this field too and the smallest of them wins, with one uncharged note row saying which was read. The per-handle cap is the separate \"Max posts per handle\" below. Accepted range 1 to 2,000; a number outside it is moved to the nearest value in range and one uncharged note row says so, rather than the run being refused.",
            "default": 500
          },
          "resultsLimit": {
            "title": "Max posts per handle",
            "type": "integer",
            "description": "How many posts to take from each handle, at most 15 — Threads publishes no more than that to a logged-out reader and there is no way to page further. Set 30 and the run delivers 15 and adds one uncharged note per handle saying the cap is Threads', not ours. Set 5 and you get exactly 5. Other Threads scrapers call this `max_posts` or `maxPosts`; both names are read as this field. Accepted range 1 to 1,000 — higher than the 15 Threads serves on purpose, so the ask you typed is the ask this run reports against.",
            "default": 15
          },
          "newerThan": {
            "title": "Only posts published after",
            "type": "string",
            "description": "A date, YYYY-MM-DD, or a relative window like \"7 days\". Posts published before it are dropped, uncharged, and the status line says how many."
          },
          "olderThan": {
            "title": "Only posts published before",
            "type": "string",
            "description": "A date, YYYY-MM-DD, or a relative window like \"30 days\". Posts published after it are dropped, uncharged, and counted on the status line."
          },
          "maxRunSeconds": {
            "title": "Max run seconds",
            "type": "integer",
            "description": "The run stops cleanly before this many seconds and reports what is left, instead of being killed by a timeout. A time limit ends the collecting, never the delivering: rows already in hand are always written out. Accepted range 30 to 3,600 seconds; a number outside it is moved to the nearest value in range and one uncharged note row says so, rather than the run being refused.",
            "default": 900
          },
          "includeSeen": {
            "title": "Include posts you already have",
            "type": "boolean",
            "description": "OFF (default): a post already delivered to your account is skipped — no row, no charge. ON: those posts are delivered again anyway, marked `repeat: true`, and still not charged. Posts older than 90 days in your account's memory count as new again either way.",
            "default": false
          },
          "resumeFromDatasetId": {
            "title": "Skip posts in this dataset",
            "type": "string",
            "description": "The dataset ID of a previous run of this actor. Posts already in it are treated as posts you already have and are skipped, so a follow-up run collects only what is new even from a different Apify account. Selecting it here is what grants this run permission to read it."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}