Facebook Video Search Scraper avatar

Facebook Video Search Scraper

Pricing

Pay per event

Go to Apify Store
Facebook Video Search Scraper

Facebook Video Search Scraper

Find public Facebook Watch and Reel videos by keyword, with clean deduplicated records for social listening and creator research.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

Discover public Facebook Watch and Reel videos by keyword.

Use it for social listening, creator research, campaign discovery, and trend tracking.

This actor collects only public anonymous search results.

What does it do?

  • Searches Facebook's public video search pages.
  • Saves one deduplicated row per public video.
  • Keeps the originating keyword on every row.
  • Does not require Facebook credentials.

Who is it for?

  • Social-listening analysts monitoring topics.
  • Creator agencies researching video formats.
  • Brand teams tracking public campaigns.
  • Researchers building repeatable discovery datasets.

Why use it?

  • Turn manual Watch searches into a dataset.
  • Deduplicate by video ID and clean URL.
  • Retain visible metadata with the search context.
  • Export to CSV, JSON, Google Sheets, or an API workflow.

What public data do I get?

FieldMeaning
queryKeyword that found the video
videoIdFacebook public reel/watch ID
urlClean public video URL
titleVisible video caption or title
creatorVisible page or creator label
thumbnailUrlPublic thumbnail URL where rendered
durationVisible duration where rendered
engagement fieldsVisible views, reactions, comments, shares

Quick start

  1. Add one or more search keywords.
  2. Keep the first maxItems value low.
  3. Run the actor.
  4. Export the default dataset.
  5. Repeat on a schedule for monitoring.

Input: video search keywords

searchQueries accepts a list of public Facebook video topics.

Use clear phrases such as marketing, sustainable fashion, or creator economy.

Each resulting row contains the query that discovered it.

Input: maximum videos

maxItems caps all output rows across your queries.

Start with 10 to validate your workflow.

Increase the value only after reviewing sample output.

The maximum supported value is 500.

Input: sorting

Choose TOP for Facebook's default public ordering.

Choose RECENT when Facebook exposes its public recent ordering.

Facebook can change its user-interface filters at any time.

Input: advanced scrolling

maxScrolls bounds result-page scrolling per query.

Lower values reduce request time and cost.

Use a higher value only when you need more results.

Output: identity and deduplication

The actor deduplicates public results by videoId and clean url.

Tracking both prevents duplicate cards from entering your dataset.

Use videoId as a stable key in downstream systems.

Use url for human review and linking.

Output: visible metadata

Facebook may omit or vary fields by video, region, or UI experiment.

Unavailable public fields are returned as null.

Engagement values are preserved as visible text instead of guessed numbers.

This prevents accidental conversion of abbreviated UI values.

Social listening workflow

  • Search a campaign keyword every day.
  • Store the dataset in your warehouse.
  • Deduplicate on videoId.
  • Compare new IDs against the prior run.
  • Alert your team about newly discovered videos.

Creator research workflow

  • Search a niche or competitor topic.
  • Sort public results as needed.
  • Review creator labels and thumbnails.
  • Group titles by hook or content pattern.
  • Build a shortlist for manual analysis.

Campaign discovery workflow

Search brand names, slogans, and campaign phrases.

Retain the original query for attribution.

Use the public URL to open the video for a human review.

Do not use this actor to access non-public content.

Integrations

Send results to Google Sheets for a lightweight tracker.

Use Make, Zapier, or webhooks to notify analysts about new IDs.

Call the actor API from a data pipeline for daily snapshots.

Connect the dataset to an LLM only after applying your own review rules.

API usage: Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/facebook-video-search-scraper').call({
searchQueries: ['marketing'], maxItems: 10
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage: Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/facebook-video-search-scraper").call(run_input={
"searchQueries": ["marketing"], "maxItems": 10
})
print(list(client.dataset(run["defaultDatasetId"]).iterate_items()))

API usage: cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~facebook-video-search-scraper/runs?token=$APIFY_TOKEN" \
-H 'content-type: application/json' \
-d '{"searchQueries":["marketing"],"maxItems":10}'

MCP

Use the scoped Apify MCP HTTP endpoint so your assistant exposes this actor's tools:

https://mcp.apify.com?tools=automation-lab/facebook-video-search-scraper

Claude Code

claude mcp add --transport http apify-facebook-videos \
"https://mcp.apify.com?tools=automation-lab/facebook-video-search-scraper"

Claude Desktop, Cursor, or VS Code

Add this HTTP server to your MCP configuration, then restart or reload your client:

{
"mcpServers": {
"apify-facebook-videos": {
"type": "http",
"url": "https://mcp.apify.com?tools=automation-lab/facebook-video-search-scraper"
}
}
}

Example prompts: “Find 25 public Facebook videos about sustainable fashion.” and “Create a deduplicated public Facebook marketing-video dataset.”

Reliability notes

Facebook controls the public UI and may change selectors or available fields.

The actor uses a browser session and conservative collection limits.

A result page with no visible public rows completes with no output.

It never attempts to defeat a login, checkpoint, or CAPTCHA.

Legality and responsible use

Only collect public information you are entitled to access.

Respect Facebook terms, applicable laws, and your internal privacy policy.

Do not use output to identify, profile, or contact individuals unlawfully.

Do not use this actor for private or authenticated content.

Troubleshooting

Why are some fields null?

Facebook does not show every metadata field on every public result card.

The actor returns null rather than fabricate a value.

Why did I get fewer results than requested?

Public search availability varies by keyword, region, and Facebook UI changes.

Try a more specific keyword or lower the requested number.

Why did a run return zero rows?

Facebook may not expose anonymous results for that query at that time.

The actor does not log in or bypass access controls.

FAQ

Does it need a Facebook account?

No. It is designed for anonymous public Watch/Reel search pages.

Can I scrape private groups or private profiles?

No. This actor intentionally excludes private and authenticated content.

Are engagement numbers guaranteed?

No. They are included only when Facebook visibly renders them.

For public Facebook advertising workflows, see related tools at Automation Lab.

For other social research tasks, browse Automation Lab actors.

Choose a source-specific actor when your workflow needs a different public surface.

Pricing: How much does it cost to scrape Facebook videos?

This actor uses pay-per-event pricing.

Each run has a small start charge and each saved public video is charged separately.

Tier discounts are applied by Apify account tier.

Review the live Apify pricing panel before running large collections.

Data retention

Your output is stored in the Apify dataset for the retention period of your plan.

Export or integrate records if you need longer-term history.

Use scrapedAt to distinguish repeated monitoring runs.

Support

Include the input, run ID, and a short description when reporting an issue.

Do not share credentials because this actor does not use them.

A sample output row helps diagnose public UI changes.

Changelog

See .actor/CHANGELOG.md for user-visible release notes.