Facebook Posts Scraper: Content Strategy Insights
Pricing
Pay per usage
Facebook Posts Scraper: Content Strategy Insights
Monitor Facebook posts effortlessly. Scrape content, images, videos, engagement data, and post-level insights from public pages. Perfect for marketing teams, researchers, and developers building analytics dashboards or datasets.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Facebook Posts Scraper — Extract Posts & Content Strategy Insights
Facebook Posts Scraper: Content Strategy Insights pulls recent posts from any public Facebook Page and returns two structured entity types: enriched post rows (content type, hashtags, mentions, CTA flags, topic keywords, full engagement data) and one run-level content-strategy summary row (content-type mix, top hashtags, average caption length). Every response is typed, normalized JSON — no HTML, no selectors, no parsing required. After a run you can reverse-engineer any Page's posting playbook, feed captions straight into an LLM, or track a competitor's content mix over time.
What is Facebook Posts Scraper: Content Strategy Insights?
Facebook Posts Scraper: Content Strategy Insights is an Apify Actor that scrapes a public Facebook Page's timeline and analyzes each post's content strategy in pure Python — no separate analytics step required. It works on public Pages and public profiles without needing a Facebook account or login; you only supply a Page URL or username. Alongside per-post output it produces one aggregate row per run summarizing the Page's overall content mix.
- Scrape recent posts with full engagement data (likes, comments, shares, per-reaction counts)
- Classify each post's content type as video, photo, link, or text
- Extract hashtags, @mentions, and stopword-filtered topic keywords from captions
- Detect call-to-action phrases and measure caption length
- Get a run-level content-strategy summary: content-type mix, top hashtags, average caption length
- Export as JSON, CSV, or Excel — no proxy management, no browser required
What data does Facebook Posts Scraper: Content Strategy Insights collect?
The Actor returns two distinct row types from the same run, plus rich engagement data embedded in every post.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Post content & metadata | caption text, content type, hashtags, mentions, topic keywords, timestamp | text, contentType, hashtags, mentions, topicKeywords, time, timestamp |
| Engagement analytics | likes, comments, shares, per-reaction breakdown | likes, comments, shares, reactionLikeCount, reactionLoveCount, reactionHahaCount, topReactionsCount |
| Content strategy summary | content-type mix, top hashtags, average caption length, posts analyzed | contentTypeMix, topHashtags, avgCaptionLength, postsAnalyzed |
Need more Facebook data?
If you also need to discover posts by keyword rather than by Page, Facebook Posts Search Scraper: Content Calendar Analysis covers search-driven content-calendar research. If you need the people commenting on a Page's posts, Facebook Comments Scraper With Author Lead Enrichment extracts comment authors as leads — this Actor intentionally stays focused on the Page's own posting behavior.
How does Facebook Posts Scraper: Content Strategy Insights differ from the official Facebook API?
The Facebook Graph API requires a registered Meta developer app and, for most Page-content permissions, an App Review process before you can pull posts programmatically — and it is designed around Pages and accounts you administer, not arbitrary public Pages. Facebook Posts Scraper: Content Strategy Insights needs none of that: you give it a public Page URL and it returns structured data immediately.
| Feature | Facebook Graph API | Facebook Posts Scraper: Content Strategy Insights |
|---|---|---|
| Access requirement | Meta developer app + App Review for page-content permissions | Public Page URL only — no Facebook account, no app review |
| Data scope | Primarily Pages you administer | Any public Facebook Page or public profile |
| Setup time | App registration, permission requests, review wait | Paste URLs and run |
| Content-strategy analysis | Not provided — raw post data only | Content type, hashtags, CTAs, and topic keywords computed automatically |
| Output shape | Endpoint-specific JSON per data type | One dataset with post rows and a run-level summary row |
| Schema stability | Versioned by Meta on its own timeline | Actor maintained independently; field names stay stable for users |
The official API is the right choice when you already manage the Page and need write access or Page-owner-only data. Facebook Posts Scraper: Content Strategy Insights is the right choice when you need read-only content-strategy data from any public Page, including competitors, without an approval process.
Why do developers and teams scrape Facebook?
For marketers and brand teams
Marketers use this Actor to reverse-engineer a competitor's content playbook: run it against a rival Page's pageUrls, then read the summary row's contentTypeMix to see whether they lean on video, photo, or link posts, and topHashtags to see which hashtags they lean on most. Combined with hasCTA and topicKeywords on each post row, a team can benchmark how often a competitor pushes calls-to-action and around which topics, then shape their own content calendar to match or differentiate from what's working.
For AI engineers and agent builders
The text, captionText (when video transcripts are enabled), and topicKeywords fields give an agent clean, pre-classified text to index. A RAG pipeline can chunk text per post, tag each chunk with contentType and hashtags as metadata filters, and let an LLM answer questions like "what topics does this Page post about most" directly from the structured fields — no HTML parsing or manual labeling step in the ingestion pipeline.
For researchers and analysts
Academic and market researchers use the Actor to study public posting patterns at scale — content-type distribution, caption length trends, and hashtag usage — across public Pages, without touching any private or login-gated content. Because postsNewerThan and postsOlderThan accept both absolute and relative dates, a researcher can pull a fixed historical window (e.g., all posts from a specific quarter) and compare avgCaptionLength and contentTypeMix across Pages or time periods.
For developers building data products
Developers building content-monitoring or competitive-intelligence products can schedule this Actor against a list of Pages and store each run's summary row over time to chart how a brand's content mix shifts. Because every post and summary row shares a stable JSON schema, the output can be piped directly into a database or dashboard without a custom parsing layer per Page.
How to scrape Facebook (step by step)
- Open Facebook Posts Scraper: Content Strategy Insights on the Apify Store and click Try for free (or Run) to open the input form.
- Add one or more targets in
pageUrls— full Page URLs or plain usernames (e.g.nytimes). - Set
postsPerPagefor how many recent posts to analyze per Page, and optionallypostsNewerThan/postsOlderThanto bound the date range. - Start the run. The Actor discovers each Page's ID and GraphQL timeline query, then paginates the feed automatically.
- Download results as JSON, CSV, or Excel from the run's dataset, or read them via the Apify API.
What to do when Facebook changes its structure
The Actor is actively maintained against Facebook's GraphQL bundle — its request payloads are updated whenever Facebook changes the relay variables its timeline queries require. The output schema (field names and types) stays stable on the user's end even when the underlying scraping logic changes, so downstream integrations keep working without changes.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
pageUrls | No | array | One or more Facebook Page targets to analyze. Full URLs or plain usernames — usernames are turned into full URLs automatically. | ["nytimes", "https://www.facebook.com/Cristiano/"] |
postsPerPage | No | integer | How many recent posts to pull and analyze per page. Minimum 1, maximum 1,000,000, default 10. | 15 |
topKeywords | No | integer | How many stopword-filtered topic keywords to extract per post caption. Minimum 1, maximum 50, default 8. | 8 |
includeVideoTranscript | No | boolean | When on, also captures spoken transcripts of video/reel posts as extra keyword-analysis text. Default false. | false |
timeoutMode | No | string | auto scales the per-page time budget from the requested post count; manual uses targetTimeoutSecs. Default auto. | "auto" |
targetTimeoutSecs | No | integer | Used only when timeoutMode is manual. Stops a page once this time limit is reached. Minimum 60, maximum 72000, default 1200. | 1200 |
postsNewerThan | No | string | Only analyze posts after this date. Absolute (2024-01-01) or relative (7 days, 2 months, 1 year). Leave empty for no lower bound. | "2024-01-01" |
postsOlderThan | No | string | Only analyze posts before this date. Absolute or relative. Leave empty for no upper bound. | "2024-12-31" |
proxyConfiguration | No | object | Anti-block proxy settings. Prefers Apify Residential proxy, falls back to Datacenter, then to custom proxy URLs supplied here. | {"useApifyProxy": true} |
No parameter is required — but running with an empty input does nothing useful, since pageUrls is then empty and the Actor logs an error and exits, so always supply at least one target.
Example input
{"pageUrls": ["https://www.facebook.com/nytimes"],"postsPerPage": 15,"topKeywords": 8,"includeVideoTranscript": false,"timeoutMode": "auto","targetTimeoutSecs": 1200,"postsNewerThan": "2024-01-01","postsOlderThan": "","proxyConfiguration": { "useApifyProxy": true }}
The most common input mistake is putting a date in postsNewerThan / postsOlderThan that isn't YYYY-MM-DD or an N days|months|years string — anything else fails to parse silently and the date filter is simply not applied, so double-check the format if a run returns older posts than expected.
⬆️ Output
Every response is typed, normalized JSON with a stable schema across runs, exportable as JSON, CSV, or Excel, or readable directly via the Apify API. Rows are distinguished by rowType: "post" for each individual post, and one "summary" row per run. Both row types are billed under the same row_result charged event — there is no separate uncharged row to filter out.
Scraped post
{"rowType": "post","pageName": "nytimes","postId": "1234567890123456","url": "https://www.facebook.com/nytimes/posts/1234567890123456","time": "2024-11-12T14:03:00.000Z","timestamp": 1731420180,"contentType": "link","hashtags": ["climate"],"mentions": ["nasa"],"topicKeywords": ["study", "emissions", "report", "climate", "scientists"],"captionLength": 118,"hasCTA": true,"text": "A new study finds emissions are rising faster than expected. Read the full report — link in bio. #climate @nasa","likes": 512,"comments": 88,"shares": 40,"topReactionsCount": 560,"facebookUrl": "https://www.facebook.com/nytimes/","user": {"id": "5281959998","name": "The New York Times","profileUrl": "https://www.facebook.com/5281959998","profilePic": "https://scontent.xx.fbcdn.net/v/....jpg"},"collaborators": [],"captionText": null,"reactionLikeCount": 400,"reactionLoveCount": 60,"reactionHahaCount": 10,"reactionCareCount": 30,"reactionSadCount": 40,"reactionWowCount": 15,"reactionAngryCount": 5,"media": [{"thumbnail": "https://scontent.xx.fbcdn.net/v/....jpg","__typename": "Photo","__isMedia": "Photo","url": "https://www.nytimes.com/climate-report","id": "987654321"}],"feedbackId": "ZmVlZGJhY2s6MTIzNDU2Nzg5MA==","topLevelUrl": "https://www.facebook.com/5281959998/posts/1234567890123456","facebookId": "5281959998","pageAdLibrary": { "id": "5281959998" },"inputUrl": "https://www.facebook.com/nytimes/"}
Content strategy summary
{"rowType": "summary","pageName": "nytimes","postsAnalyzed": 15,"contentTypeMix": {"video": { "count": 4, "pct": 26.7 },"photo": { "count": 6, "pct": 40.0 },"link": { "count": 3, "pct": 20.0 },"text": { "count": 2, "pct": 13.3 }},"topHashtags": [{ "tag": "news", "count": 5 },{ "tag": "climate", "count": 3 }],"avgCaptionLength": 96.4,"contentType": null,"hashtags": null,"mentions": null,"topicKeywords": null,"captionLength": null,"hasCTA": null,"inputUrl": "https://www.facebook.com/nytimes/"}
How many results can you scrape with Facebook Posts Scraper: Content Strategy Insights?
postsPerPage accepts up to 1,000,000 per Page in the input schema, with no separate hard cap in the Actor's own logic beyond that. In practice, each Page run is bounded by a time budget: in auto timeout mode this scales with the requested post count (roughly 6 minutes minimum up to 90 minutes), and in manual mode it's whatever you set in targetTimeoutSecs (60 to 7,200 seconds). The Actor paginates the Facebook GraphQL timeline in batches of up to 20 posts per request via a cursor, and stops once it reaches your requested count, its internal request cap, or the time budget — whichever comes first. For very large postsPerPage values, this means the run may return fewer posts than requested if the Page's feed can't be paginated fully within the time budget; lowering postsPerPage or using manual mode with a larger targetTimeoutSecs gives more headroom.
Integrate Facebook Posts Scraper: Content Strategy Insights and automate your workflow
Facebook Posts Scraper: Content Strategy Insights works with any language or tool that can send an HTTP request.
REST API integration
import requestsTOKEN = "YOUR_APIFY_TOKEN"ACTOR = "API-Empire~facebook-posts-scraper-content-strategy-insights"run = requests.post(f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",params={"token": TOKEN},json={"pageUrls": ["nytimes"], "postsPerPage": 15},)for row in run.json():print(row["rowType"], row.get("contentType"), row.get("likes"))
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make)
In n8n, use an HTTP Request node (or the community Apify node) to call the run-sync-get-dataset-items endpoint and pass the response straight into downstream nodes. In Make, the Apify app's "Run an Actor" module can trigger this Actor and its "Get Dataset Items" module retrieves the post and summary rows for use in a scenario, such as posting a content-mix summary to Slack after each run.
Is it legal to scrape Facebook?
Scraping publicly available data is generally legal; Facebook Posts Scraper: Content Strategy Insights only returns content from public Facebook Pages and public profiles that don't require a login to view — it does not access private or login-gated content. Post output includes some personal-data-adjacent fields (a Page or profile's public name, ID, and profile picture URL), so GDPR/CCPA principles around lawful basis for storage and use can still apply when the target is a natural person's public profile rather than a brand Page. Consult legal counsel for commercial use cases involving bulk personal data.
Frequently asked questions
Does Facebook Posts Scraper: Content Strategy Insights work without a Facebook account?
Yes. It scrapes public Page and profile timelines directly and does not require you to log in or provide Facebook credentials.
How often is the scraped data updated?
Every run fetches live data directly from Facebook's GraphQL timeline endpoint at run time — results are not served from a cache.
What happens if a Page has no accessible posts or the target is invalid?
If the Page can't be reached or yields no posts within the time budget, the Actor logs "No posts collected for this target" for that Page and moves on to the next target (or finishes with zero rows if it was the only target) rather than failing the whole run.
Can I scrape private Facebook profiles or Pages?
No. Only Pages and profiles that are publicly viewable without logging in are supported; private or login-gated content is out of scope.
Does Facebook Posts Scraper: Content Strategy Insights work for AI agent workflows and LLM pipelines?
Yes. It's callable as an HTTP endpoint by any agent framework via the Apify API. Every response is typed JSON with stable field names — no HTML and no parsing step before passing it to an LLM.
How does Facebook Posts Scraper: Content Strategy Insights handle Facebook's anti-bot system?
It uses browser-fingerprint impersonation (Chrome TLS/HTTP fingerprints) for its requests, rotates through Apify Residential and Datacenter proxies (with your own proxy URLs as a further fallback), and retries with exponential backoff on blocked or empty responses.
Is "content strategy insights" a real computed analysis, or just a label?
It's a real computed analysis, not just a name. Every post is classified for content type from its actual media attachments, hashtags and mentions are parsed with regex from the caption text, call-to-action detection matches caption text against a list of common CTA phrases, and topic keywords are extracted by stopword-filtered word-frequency counting. The run-level summary row then aggregates all of that into a content-type mix, top hashtags, and average caption length.
Does Facebook Posts Scraper: Content Strategy Insights return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with stable field names, ready to pass directly into an LLM context window, index into a vector store, or route through an agent tool.
Can I use Facebook Posts Scraper: Content Strategy Insights without managing proxies?
Yes. It defaults to Apify's Residential proxy, falling back to Datacenter proxy automatically, so you don't need to supply your own proxies to run it.
What happens when Facebook changes its structure or blocks the scraper?
The Actor is maintained to track Facebook's GraphQL query changes, and the output schema stays stable on the user's end — field names and types don't change even when the underlying request logic is updated to keep up with Facebook.
Your feedback
Found a bug or a field that doesn't match what's documented here? We want to know. Reach out through the Actor's page on the Apify Store or open an issue with the API-Empire support channel — feedback like this is how the Actor stays accurate and up to date.
