{
  "openapi": "3.0.1",
  "info": {
    "title": "Pornhub and RedTube Scraper: Videos and Trends",
    "description": "Scrape the Pornhub and RedTube video catalogs from their webmaster feeds. Get titles, views, ratings, duration, tags, categories, performers and embed links, plus trend tables by tag, category or performer. No video files are downloaded. Filter by period, views or rating. Export to CSV or Excel.",
    "version": "1.0",
    "x-build-id": "iXgRsRNVWkK2TwQhk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parselab~pornhub-redtube-catalog-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parselab-pornhub-redtube-catalog-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/parselab~pornhub-redtube-catalog-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parselab-pornhub-redtube-catalog-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/parselab~pornhub-redtube-catalog-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parselab-pornhub-redtube-catalog-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": {
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000."
          },
          "mode": {
            "title": "What to collect",
            "enum": [
              "videos",
              "trends",
              "performers",
              "categories"
            ],
            "type": "string",
            "description": "Videos returns the catalog entries that match your search. Trends counts which tags, categories or performers appear in the most viewed videos of a period. Performers returns the performer directory. Categories returns the category list.",
            "default": "videos"
          },
          "sources": {
            "title": "Sites",
            "type": "array",
            "description": "Which catalogs to read. Leave both to read both. The Pornhub feed answers only some networks and regions, so its requests use the connection settings below. If it still redirects, the Actor shows a warning and continues with RedTube.",
            "items": {
              "type": "string",
              "enum": [
                "pornhub",
                "redtube"
              ]
            }
          },
          "proxyConfiguration": {
            "title": "Connection settings for Pornhub",
            "type": "object",
            "description": "Network used to read the Pornhub feed. Pornhub answers some countries and exit addresses and redirects others, so you may need to try another country or group. RedTube does not use it."
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Words searched in the video titles and tags. Each term is a separate search.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Category names as shown in the category list, for example amateur or hd.",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Tags that the video must have.",
            "items": {
              "type": "string"
            }
          },
          "performers": {
            "title": "Performers",
            "type": "array",
            "description": "Performer names exactly as in the performer directory.",
            "items": {
              "type": "string"
            }
          },
          "ordering": {
            "title": "Order",
            "enum": [
              "newest",
              "mostviewed",
              "rating",
              "featured"
            ],
            "type": "string",
            "description": "Newest videos, most viewed, best rated or featured. Featured is only available for the first site.",
            "default": "newest"
          },
          "period": {
            "title": "Period for most viewed and best rated",
            "enum": [
              "weekly",
              "monthly",
              "alltime"
            ],
            "type": "string",
            "description": "Only used with the most viewed and best rated order.",
            "default": "alltime"
          },
          "pagesPerQuery": {
            "title": "Pages per search",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many pages to read for each search and site. Pornhub gives 30 videos per page and RedTube 20.",
            "default": 3
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Keep videos with at least this many views."
          },
          "minRating": {
            "title": "Minimum rating (percent)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep videos rated at least this percent, from 0 to 100."
          },
          "minDurationMinutes": {
            "title": "Minimum duration (minutes)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep videos at least this long."
          },
          "maxDurationMinutes": {
            "title": "Maximum duration (minutes)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep videos at most this long."
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep videos published on or after this date, in the form 2026-09-30."
          },
          "includeThumbnails": {
            "title": "Add thumbnail links",
            "type": "boolean",
            "description": "Adds the link of the preview image of each video or performer. The images are explicit, so this is off by default.",
            "default": false
          },
          "groupBy": {
            "title": "Trends grouped by",
            "enum": [
              "tags",
              "categories",
              "performers"
            ],
            "type": "string",
            "description": "Trends mode. Count tags, categories or performers.",
            "default": "tags"
          },
          "performerGender": {
            "title": "Performer gender",
            "type": "string",
            "description": "Performers mode. For example female, male or transgender. Leave empty for all."
          },
          "minVideoCount": {
            "title": "Minimum videos",
            "minimum": 0,
            "type": "integer",
            "description": "Performers mode: performers with at least this many videos. Trends mode: groups that appear in at least this many videos of the sample."
          },
          "nameContains": {
            "title": "Performer name contains",
            "type": "string",
            "description": "Performers mode. Part of a performer name."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}