{
  "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": "pqQeAtMDpwruh8iU8"
  },
  "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/1,000 (Free) → $2/1,000 (Gold+); 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"
            }
          },
          "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"
            }
          },
          "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"
          },
          "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.",
            "default": 20
          },
          "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
          },
          "maxFollowers": {
            "title": "👥 Followers to add ($)",
            "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 add ($)",
            "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
          },
          "maxComments": {
            "title": "💬 Comments to add ($)",
            "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
          },
          "maxRetweeters": {
            "title": "🔁 Retweeters to add ($)",
            "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
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}