Facebook Public Video Search Results Scraper
Pricing
from $2.40 / 1,000 video result extracteds
Facebook Public Video Search Results Scraper
Search Facebook public videos by keyword and export ranked titles, captions, creators, dates, durations, thumbnails, views, IDs, and canonical URLs.
Pricing
from $2.40 / 1,000 video result extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Search Facebook public videos by keyword and export ranked video metadata for trend research, media monitoring, and brand listening.
This Actor opens Facebook's anonymous Watch search experience in a real browser. It turns the rendered result cards into structured records with video IDs, titles or captions, creators, publication labels, durations, thumbnails, visible engagement, and canonical URLs. No Facebook account, cookies, or login credentials are required. The Actor does not use AI or send inputs or output to an AI model provider. It is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta or Facebook.
Use it when you need repeatable Facebook search data rather than a one-off manual scan. Results go to the default Apify dataset and can be downloaded as JSON, CSV, Excel, XML, or RSS.
What does this Facebook search Actor do?
For each supplied keyword, the Actor:
- Opens the public Facebook Watch search page.
- Waits for rendered public video cards.
- Scrolls through a bounded number of result batches.
- Extracts stable IDs and visible metadata.
- Deduplicates videos across queries.
- Saves typed records to the default dataset.
It searches videos by keyword. It does not download media files, transcribe speech, scrape private posts, or log in to Facebook.
Who is this Actor for?
Brand teams can monitor public videos that mention a brand, product, executive, or campaign.
Media analysts can collect ranked video results around a developing topic and compare scheduled runs.
Trend researchers can follow how creators and publishers cover themes such as artificial intelligence or renewable energy.
Journalists can build a source list from public videos returned for a specific phrase.
Data teams can feed structured search results into warehouses, spreadsheets, dashboards, or review queues.
Why use it instead of manual Facebook search?
Manual search is useful for browsing but difficult to repeat and compare. This Actor provides:
- multiple keyword searches in one run;
- deterministic output fields;
- bounded deep scrolling;
- stable video-ID deduplication;
- scheduled execution on Apify;
- JSON, CSV, and spreadsheet exports;
- API and webhook integration;
- one coherent anonymous browser session per run;
- bounded fresh-session recovery for transient navigation, challenge, or incomplete-render failures.
The Actor preserves Facebook's displayed publication text instead of inventing an exact timestamp from an ambiguous label.
What Facebook video data is extracted?
| Field | Meaning |
|---|---|
query | Search phrase that produced the record |
rank | Position among accepted results for that query |
videoId | Stable numeric video or Reel identifier |
postId | Visible post identifier when Facebook exposes one |
canonicalUrl | Clean Facebook video or Reel URL |
title | Rendered video title or primary descriptive text |
caption | Additional rendered description when separately available |
creatorName | Public creator, Page, or publisher name |
creatorUrl | Public Facebook creator or Page URL |
publishedAtText | Publication label displayed by Facebook |
durationText | Displayed video duration |
thumbnailUrl | Rendered thumbnail URL |
viewCount | Parsed visible views, or null |
reactionCount | Parsed visible reactions or likes, or null |
commentCount | Parsed visible comments, or null |
shareCount | Parsed visible shares, or null |
scrapedAt | UTC time when the card was extracted |
Facebook does not display every metric on every search card.
Nullable fields remain null; they are not replaced with zero.
How to search Facebook public videos
- Open the Actor in Apify Console.
- Add one or more phrases under Search queries.
- Choose the maximum number of unique records.
- Keep the default scroll depth for an ordinary search.
- Keep the default Apify Proxy configuration unless you have a specific routing need.
- Click Start.
- Open the Dataset tab to inspect or export results.
A practical first run is:
{"searchQueries": ["artificial intelligence"],"maxItems": 10,"maxScrolls": 4}
Input parameters
searchQueries
Required array of one to 20 non-empty phrases. Queries are trimmed and exact duplicates are removed. Use the wording you would enter into Facebook video search.
maxItems
Maximum unique records across all queries. The default is 50 and the allowed range is 1 to 1,000. The Actor stops accepting records once this limit is reached.
maxScrolls
Maximum scroll rounds for each query. The default is 8 and the allowed range is 1 to 50. The Actor also stops after two scroll rounds add no new videos.
proxyConfiguration
Uses Apify Proxy by default. Datacenter proxy sessions are normally sufficient. The browser keeps proxy identity and Facebook cookies coherent across queries. After two default datacenter sessions fail, the Actor can make one final direct-transport attempt. Explicit custom or residential proxy choices are opt-in and are never bypassed by that fallback.
Example output
A representative result looks like this:
{"query": "artificial intelligence","rank": 1,"videoId": "1017554081331805","postId": null,"canonicalUrl": "https://www.facebook.com/reel/1017554081331805/","title": "AI experts discuss the speed of recent advances","caption": null,"creatorName": "Today Show","creatorUrl": "https://www.facebook.com/today","publishedAtText": "Sep 14","durationText": "1:25","thumbnailUrl": "https://scontent.example.fbcdn.net/example.jpg","viewCount": 1900000,"reactionCount": null,"commentCount": null,"shareCount": null,"scrapedAt": "2026-09-19T03:37:15.361Z"}
The thumbnail host and signed query string vary by run. The example shortens that transient URL for readability.
How much does it cost to search Facebook videos?
Pricing has a one-time $0.005 run-start event plus a tiered charge for each unique video-result saved.
At the BRONZE tier, a result costs $0.004.
Your active subscription tier is shown in Apify Console before the run starts.
BRONZE examples:
- A one-result run charges one $0.005 start event and one $0.004 result event.
- A ten-result run charges one start event and ten result events.
- A hundred-result run charges one start event and one hundred result events.
Multiply the displayed tier's result price by the number of unique saved records, then add the single run-start event. Failed, rejected, or duplicate cards are not charged as results. Apify compute and proxy usage are covered by the Actor's PPE pricing rather than billed as separate result events.
Monitoring brand and topic trends
Create one task per stable monitoring theme. For example:
{"searchQueries": ["renewable energy", "solar power"],"maxItems": 100,"maxScrolls": 10}
Schedule the task daily or weekly.
Store each run's dataset ID and compare videoId values to identify newly surfaced results.
Use rank, viewCount, and publishedAtText as source-visible signals, not as guarantees of platform-wide popularity.
Export and integration workflows
Common workflows include:
- export CSV to Google Sheets for editorial review;
- send dataset items to Make or Zapier;
- write JSON records into a warehouse;
- trigger a webhook after each scheduled run;
- compare video IDs against a prior run;
- pass selected canonical URLs to a separate authorized downloader or transcript Actor;
- enrich creator URLs in a later, purpose-specific workflow.
The default dataset remains the canonical output for all integrations.
Run from the Apify API with cURL
Replace APIFY_TOKEN with your token:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~facebook-public-video-search-results/runs?token=APIFY_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"searchQueries":["Nike"],"maxItems":10,"maxScrolls":4}'
Use the returned dataset ID to fetch items from the dataset API.
Run from JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/facebook-public-video-search-results').call({searchQueries: ['artificial intelligence'],maxItems: 25,maxScrolls: 6,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Run from Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/facebook-public-video-search-results').call(run_input={'searchQueries': ['renewable energy'],'maxItems': 25,'maxScrolls': 6,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/facebook-public-video-search-results"
Claude Desktop
Add this server object to Claude Desktop's MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/facebook-public-video-search-results"}}}
Cursor
Open Settings → Tools & MCP → New MCP Server and use the same Apify MCP URL shown above.
VS Code
Add the same HTTP server URL to your workspace or user MCP configuration, then enable the automation-lab/facebook-public-video-search-results tool.
Example prompts:
- “Search public Facebook videos for
artificial intelligenceand return ten creator and URL records.” - “Collect Facebook video results for
Nikeand format the titles, publication labels, and view counts as a table.” - “Run the renewable-energy monitoring task and highlight video IDs not present in my previous dataset.”
Reliability and retry behavior
The Actor waits for a rendered video link inside a result card rather than treating an early page shell as complete. It uses bounded scrolling and stops when results become stagnant. One browser context preserves cookies and proxy identity across queries.
In the default mode, a failed navigation, explicit challenge, or unrecognized empty render first rotates to a fresh datacenter browser session and can then try one direct connection. Explicit proxy configurations get one fresh-session retry and are never bypassed. Exhausting the bounded attempts ends the run with a non-zero status instead of returning a misleading empty success. Malformed input is rejected without retrying Facebook.
Limits and responsible expectations
Only anonymously visible public search cards are supported. Facebook can vary results by time, geography, experiments, and public availability. Rank is the observed order in that run, not a permanent search position.
Some cards omit title, caption, date, duration, thumbnail, or engagement fields. Signed thumbnail URLs can expire. Publication text may be relative or omit a year. The Actor intentionally preserves that text instead of guessing an ISO date.
The maximum is 1,000 accepted records per run and 20 queries per run. Search depth also depends on what Facebook renders for the phrase.
Legal and responsible use
Scrape only public data you are permitted to collect and process. Follow Facebook's terms, applicable privacy and database laws, and your organization's policies. Do not use the Actor to profile people, evade access controls, collect private content, or make automated high-impact decisions.
Minimize retained personal data. Define a legitimate purpose and retention period. Honor deletion and access requests where applicable. You are responsible for your inputs and downstream use.
The Actor creates no external cache or company-operated copy of results. Run datasets, input, and logs remain in Apify storage under your account's retention settings and can be deleted with Apify storage controls. Search phrases are sent to Facebook through the selected network route; public result metadata is returned to your Apify dataset.
Troubleshooting
Why did a query return fewer records than maxItems?
maxItems is a ceiling, not a promise.
Facebook may expose fewer cards, or scrolling may stop after two stagnant rounds.
Try a broader phrase or increase maxScrolls gradually.
Why are engagement fields null?
Facebook does not render every metric on every search card.
null means the value was not visible; it does not mean zero.
Why did the run fail with a challenge message?
The Actor already rotates to a fresh coherent session and, for the default route, can make one final direct attempt. If those bounded attempts are challenged or incomplete, the run fails explicitly. Retry later or review your selected proxy configuration rather than treating an empty dataset as success.
Why does a thumbnail URL stop working later?
Facebook CDN URLs can be signed and temporary. Use them for immediate review or download permitted thumbnails during your own retention window.
FAQ
Does this Actor need a Facebook account?
No. It uses anonymous public Watch search pages and accepts no login credentials.
Does it download videos?
No. It exports result metadata and canonical Facebook URLs. Use a separate authorized media workflow when you have rights to download content.
Can I search multiple keywords?
Yes. Supply up to 20 queries. Videos repeated across queries are saved once, under the first query that accepts them.
Can I schedule recurring searches?
Yes.
Create an Apify Task and schedule it in Console.
Compare stable videoId values across run datasets.
Are the results real time?
They reflect the public search cards rendered during the run. The Actor does not claim an exhaustive or real-time index of all Facebook videos.
Related automation-lab Actors
- Facebook Public Video Downloader downloads authorized media from already-known public URLs.
- Facebook Video Transcript Extractor turns supplied public Facebook video URLs into transcript records.
- Facebook Pages Posts Scraper extracts public posts from supplied Page targets rather than keyword video search.
Use this Actor for discovery, then pass only selected, authorized URLs to a purpose-specific downstream Actor.