{
  "openapi": "3.0.1",
  "info": {
    "title": "Twitter (X) Scraper ✅ No Login or Cookies",
    "description": "Scrape X.com (Twitter) with no login and no cookies. Extract a profile's tweets, run advanced keyword search, pull single tweet details, or fetch full user profiles. Get likes, retweets, replies, quotes, views, media URLs, author, and conversation context as clean JSON. Add followers and comments.",
    "version": "1.0",
    "x-build-id": "E8ZN6BV3vUuvwjyv1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/atomus~twitter-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-atomus-twitter-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/atomus~twitter-scraper/runs": {
      "post": {
        "operationId": "runs-sync-atomus-twitter-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/atomus~twitter-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-atomus-twitter-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": [
          "searchType"
        ],
        "properties": {
          "searchType": {
            "title": "🎯 What to scrape (mode)",
            "enum": [
              "user-tweets",
              "search",
              "tweet-detail",
              "profile"
            ],
            "type": "string",
            "description": "Choose the mode. Each mode uses a different input field below and is billed per result: tweets are $4/1k → $2/1k by Apify plan; a profile is billed as one result. A run always bills at least 1 result.",
            "default": "user-tweets"
          },
          "handles": {
            "title": "👤 Usernames / profile URLs",
            "type": "array",
            "description": "Used by \"Profile timeline\" and \"User profile\". One or more X usernames — @openai, openai, or a full profile URL like https://x.com/openai.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "🔍 Search query",
            "type": "string",
            "description": "Used by \"Advanced search\". Free text to search for. You can also paste raw X advanced-search operators here (e.g. \"from:openai min_faves:5000 filter:videos\") — they work verbatim. Combine with the filters below."
          },
          "sortOrder": {
            "title": "↕️ Sort search by",
            "enum": [
              "Top",
              "Latest"
            ],
            "type": "string",
            "description": "Used by \"Advanced search\". \"Top\" ranks by relevance/engagement; \"Latest\" is reverse-chronological.",
            "default": "Top"
          },
          "fromUsers": {
            "title": "👤 From users",
            "type": "array",
            "description": "Search filter (free). Only tweets authored by these usernames.",
            "items": {
              "type": "string"
            }
          },
          "toUsers": {
            "title": "↩️ Replying to users",
            "type": "array",
            "description": "Search filter (free). Only tweets that are replies to these usernames.",
            "items": {
              "type": "string"
            }
          },
          "mentioning": {
            "title": "📣 Mentioning users",
            "type": "array",
            "description": "Search filter (free). Only tweets that mention these usernames.",
            "items": {
              "type": "string"
            }
          },
          "hashtags": {
            "title": "#️⃣ Hashtags",
            "type": "array",
            "description": "Search filter (free). Only tweets containing these hashtags (with or without the #).",
            "items": {
              "type": "string"
            }
          },
          "since": {
            "title": "📅 Since date",
            "type": "string",
            "description": "Search filter (free). Only tweets on/after this date, format YYYY-MM-DD."
          },
          "until": {
            "title": "📅 Until date",
            "type": "string",
            "description": "Search filter (free). Only tweets on/before this date, format YYYY-MM-DD."
          },
          "minRetweets": {
            "title": "🔁 Min retweets",
            "minimum": 0,
            "type": "integer",
            "description": "Search filter (free). Only tweets with at least this many retweets."
          },
          "minFaves": {
            "title": "❤️ Min likes",
            "minimum": 0,
            "type": "integer",
            "description": "Search filter (free). Only tweets with at least this many likes."
          },
          "minReplies": {
            "title": "💬 Min replies",
            "minimum": 0,
            "type": "integer",
            "description": "Search filter (free). Only tweets with at least this many replies."
          },
          "language": {
            "title": "🌍 Language",
            "type": "string",
            "description": "Search filter (free). Two-letter language code, e.g. en, es, pt, ja."
          },
          "onlyVerified": {
            "title": "✅ Only verified accounts",
            "type": "boolean",
            "description": "Search filter (free). Only tweets from Blue-verified accounts.",
            "default": false
          },
          "onlyMedia": {
            "title": "🖼️ Only tweets with media",
            "type": "boolean",
            "description": "Search filter (free). Only tweets that include an image or video.",
            "default": false
          },
          "onlyLinks": {
            "title": "🌐 Only tweets with links",
            "type": "boolean",
            "description": "Search filter (free). Only tweets that contain a link.",
            "default": false
          },
          "excludeReplies": {
            "title": "🚫 Exclude replies",
            "type": "boolean",
            "description": "Search filter (free). Drop reply tweets from the results.",
            "default": false
          },
          "excludeRetweets": {
            "title": "🚫 Exclude retweets",
            "type": "boolean",
            "description": "Search filter (free). Drop native retweets from the results.",
            "default": false
          },
          "tweetUrls": {
            "title": "🔗 Tweet URLs or IDs",
            "type": "array",
            "description": "Used by \"Tweet details\". Paste tweet URLs (https://x.com/openai/status/1846846285917131130) or bare numeric tweet IDs.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "💯 Max tweets per handle / query",
            "minimum": 1,
            "maximum": 3200,
            "type": "integer",
            "description": "Used by \"Profile timeline\" and \"Advanced search\". How many tweets to return per username (timeline) or per query (search). This is your main cost lever — those modes bill per tweet. X caps a profile timeline near ~100 tweets per pass (a platform limit every scraper shares). Default 20. Every run bills a minimum of 1 result, which covers the request even when a query returns nothing (a private or suspended account, or a search with no matches). Why there is a minimum: one request is one lookup, and that lookup does the same work whether it comes back with 50 results, with 1, or with none. The minimum covers the request itself, which is what keeps thin targets worth running instead of being refused outright. Requests that fail are free.",
            "default": 20
          },
          "maxFollowers": {
            "title": "👥 Followers to fetch per profile",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Add-on for \"User profile\" mode (paid plans). Also fetch up to this many of the profile's followers, delivered as separate follower records. Billed as follower-scraped. 0 = off.",
            "default": 0
          },
          "maxFollowing": {
            "title": "👥 Following to fetch per profile",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Add-on for \"User profile\" mode (paid plans). Also fetch up to this many accounts the profile follows, as separate following records. Billed as follower-scraped. 0 = off.",
            "default": 0
          },
          "maxRetweeters": {
            "title": "🔁 Retweeters to fetch per tweet",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Add-on for \"Tweet details\" mode (paid plans). Also fetch up to this many users who retweeted each tweet, as separate retweeter records. Billed as follower-scraped. 0 = off.",
            "default": 0
          },
          "maxComments": {
            "title": "💬 Comments to fetch per tweet",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Add-on for \"Tweet details\" mode (paid plans). Also fetch up to this many replies/comments under each tweet, as separate comment records. Billed as comment-scraped. 0 = off.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}