{
  "openapi": "3.0.1",
  "info": {
    "title": "Facebook Page Reels Scraper — Facebook Reels API, Views, MP4",
    "description": "Facebook page reels as rows: paste a page link and get views, duration, description, music, post date and a playable MP4 link — with an opt-in transcript per reel. No login, no cookies, exact limit. A page with no reels, a private page and a reel we cannot transcribe are never charged.",
    "version": "1.0",
    "x-build-id": "TfXgxlYNdyfyFZjNd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~facebook-reels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-facebook-reels-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~facebook-reels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-facebook-reels-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~facebook-reels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-facebook-reels-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": {
          "pages": {
            "title": "Facebook pages",
            "type": "array",
            "description": "Facebook pages to list reels from, one to an entry, e.g. [\"ladbible\", \"https://www.facebook.com/ladbible\"] — a page name, a page slug or a full page link; \"_demo\" is the sample switch, not a page. Public Facebook Pages only: most personal profiles cannot be read and come back as page not found, never charged. A page with no reels, and a page Facebook will not show without a login, are delivered as labelled rows and are never charged. A reel link put here is routed to the reel box automatically, not refused, and a page's reels come back newest first. 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.",
            "default": [
              "_demo"
            ],
            "items": {
              "type": "string"
            }
          },
          "reelUrls": {
            "title": "Reel links",
            "type": "array",
            "description": "Individual reel links, one per line — https://www.facebook.com/reel/1234567890, https://www.facebook.com/share/r/abc123/, https://www.facebook.com/watch/?v=1234567890, https://fb.watch/abc123/ or https://www.facebook.com/<page>/videos/1234567890. Charged as one Reel lookup when the row lands; a link Facebook answers is gone costs nothing. Each link returns its own row with the like, comment, share and view counts a page listing does not carry.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (pages and reel links mixed)",
            "type": "array",
            "description": "One list for both kinds of link, for buyers moving over from another scraper — e.g. https://www.facebook.com/ladbible and https://www.facebook.com/reel/1234567890 in the same list. A page URL lists its reels; a reel, share, watch or fb.watch link returns that one reel, each line sorted into the right door before anything is bought. A line this actor cannot place is refused on an uncharged row naming the field or the sibling actor that does take it, so a wrong link never costs you anything.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeTranscript": {
            "title": "Include transcript",
            "type": "boolean",
            "description": "ON adds a transcript to every delivered reel — `transcript`, `transcriptLanguage` and timestamped `transcriptSegments` — e.g. {\"pages\": [\"ladbible\"], \"includeTranscript\": true}. Charged as one Reel transcript per transcript actually produced, on top of the row, at your plan's price: from $0.010 on paid plans, more on the Apify free plan. Never charged: a reel with no speech or no audio, and a reel longer than 180 seconds, which is delivered without a transcript and whose row names our Media Transcriber, which transcribes any length by the minute. Facebook reels run about two minutes on average. A reel your account already has whose transcript never came is handed back with the transcript bought for it — the transcript is charged, the reel is not. A reel already answered as having no speech, no audio or being over the ceiling is never asked again. OFF (default): rows carry the reel’s description and metadata only.",
            "default": false
          },
          "maxItems": {
            "title": "Max reels to return",
            "minimum": 1,
            "type": "integer",
            "description": "Hard ceiling, up to 2,000 reel rows per run — the run never delivers or bills more reel rows than this, across every page and every link, whatever else is set. With more than one page the limit is split evenly between them, so 60 across 3 pages collects 20 from each; a page that runs short leaves an uncharged row saying so rather than borrowing another page's share. Ask for more than 2,000 and the run still starts, at 2,000, with one uncharged row saying what you asked for and what bound it. Other reels scrapers call this `resultsLimit`, `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.",
            "default": 30
          },
          "newerThan": {
            "title": "Only reels posted after",
            "type": "string",
            "description": "A date like 2026-09-01, 1 Sep 2026 or 09/01/2026 (month first), or a span back from the run's start like 7 days, 2 weeks, 3 months, 48h, today or yesterday. Reels posted before it are dropped, uncharged, and the status line says how many. A date this actor cannot read, or a day that does not exist, stops the run before anything is read or charged. Page reels arrive newest first, so a daily run with the default limit catches everything posted since."
          },
          "olderThan": {
            "title": "Only reels posted before",
            "type": "string",
            "description": "A date like 2026-09-01, 1 Sep 2026 or 09/01/2026 (month first), or a span back from the run's start like 30 days, 2 weeks, 3 months, today or yesterday. Reels posted after it are dropped, uncharged, and counted on the status line. A date this actor cannot read, or a window whose \"posted after\" falls after it, stops the run before anything is read or charged."
          },
          "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: reels already in hand are always written out. With the transcript on, budget roughly 6-10 seconds per reel. Anything outside the actor's own range of 30 to 3,600 seconds still starts a run: the clock is set to the nearest end of that range and one uncharged row says so.",
            "default": 1800
          },
          "includeSeen": {
            "title": "Include reels you already have",
            "type": "boolean",
            "description": "OFF (default): a reel already delivered to your account is skipped — no row, no charge — and the next new reel takes its place, so you still get the number you asked for. A reel you pasted a LINK to always comes back, marked `repeat: true`, because there is no next reel behind it: with this OFF it is answered from memory with no result fee; with this ON it is read again fresh for its current counts, and that fresh re-read is charged as one Reel lookup. ON, for reels found in a page listing: they are delivered again anyway, marked `repeat: true`, without a transcript leg and still not charged. ONE EXCEPTION on both doors, and only with \"Include transcript\" on: a reel your account already has whose transcript it never got comes back with the transcript bought for it — the reel is still not charged, the transcript is, and the row says so. Reels older than 90 days in your account's memory count as new again either way.",
            "default": false
          },
          "resumeFromDatasetId": {
            "title": "Skip reels in this dataset",
            "type": "string",
            "description": "The dataset ID of a previous run of this actor. Reels already in it are treated as reels 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. With \"Include transcript\" on it is also read for what each row's transcript did, so reels in it whose transcript never came are handed back with the transcript bought and nothing else charged."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}