Facebook User Posts Scraper avatar

Facebook User Posts Scraper

Pricing

$3.15 / 1,000 public posts

Go to Apify Store
Facebook User Posts Scraper

Facebook User Posts Scraper

Collect public posts from Facebook profiles, Pages, and known post URLs. Get post text, URLs, author details, dates, engagement counts, reactions, media, and links when Facebook exposes them.

Pricing

$3.15 / 1,000 public posts

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

1

Bookmarked

67

Total users

29

Monthly active users

9 days ago

Last modified

Share

📘 Facebook user posts for public profile and Page research

Researchers, social media teams, and developers can collect public Facebook posts from profiles and Pages in one run. The Actor returns structured rows with the submitted target, post text and URL, plus profile and author details, dates, engagement counts, reactions, media, attachments, and links when Facebook exposes them. This gives you structured data for research and reporting, so you can review public posts without copying them by hand.

📦 Facebook post data

What you get

Each successful public post is one dataset row. Fields Facebook does not expose are omitted. Empty arrays and objects are omitted when they have no source-backed values. Meaningful numeric zero and boolean false values stay in the row. If the same post is found through another submitted target or URL, the Actor keeps the first eligible saved match and ignores later matches.

  • Source trace: matchedInput, postId, and postUrl show which submitted value first found the post and identify the source post.
  • Post details: postType, text, transcript, and createdAt describe the public post when Facebook exposes them.
  • People and pages: profile and author hold public IDs, names, URLs, and picture URLs when available.
  • Engagement: engagement holds public comment, reaction, share, and video view counts; reactions holds the visible reaction breakdown.
  • Media and links: media, attachments, externalLinks, and textReferences hold source-visible media, attachment, link, and referenced profile or Page data.
  • Extra labels: paidPartnership and adLibraryId are returned when Facebook exposes them.

🚀 Run Facebook timeline and post exports

How to run

  1. Open the Actor input tab.
  2. Choose Profile or Page timeline in Find posts by, then add public profile or Page targets in Profile or Page targets.
  3. Or choose Known post URLs in Find posts by, then add known public post URLs in Known post URLs.
  4. Set Maximum posts per profile or Page for each timeline. If you leave it empty, the Actor returns all available posts until Facebook has no more public posts.
  5. Add optional Start date and End date values in YYYY-MM-DD format.
  6. Turn on Request video transcripts only when you need spoken captions or transcripts. This can make the run slower.
  7. Start the Actor and open the dataset.

For a first run, keep the prefilled public target and default settings. Replace it after you confirm the output shape.

⚙️ Input

Input fields

Choose one source method in Find posts by. Timeline limits and dates apply only to profile or Page targets. Direct post URLs use the links you submit.

FieldTypeWhat it does
findPostsBystringChooses Profile or Page timeline for profile or Page feeds, or Known post URLs for direct public post links.
targetsarray of stringsAccepts handles, @handles, full profile or Page URLs, or numeric IDs for profile or Page timelines.
postUrlsarray of stringsAccepts direct public Facebook post, reel, photo, video, or supported permalink URLs.
maxPostsPerTargetintegerSets an optional limit for each profile or Page timeline. If left empty, the Actor returns all available posts until Facebook has no more public posts.
startDatestringKeeps timeline posts on or after this YYYY-MM-DD date when Facebook shows a publish date.
endDatestringKeeps timeline posts on or before this YYYY-MM-DD date when Facebook shows a publish date.
includeTranscriptsbooleanRequests spoken captions or transcripts for video and reel posts when available. This can make the run slower.

Successful run input

This example is copied from the successful current-beta default-input run:

{
"targets": [
"NASA"
],
"maxPostsPerTarget": 1
}

🧾 Output

Output shape

The default dataset has one successful-post shape. The table includes every public field in the dataset schema. Fields Facebook does not expose are omitted from the row. Empty arrays are omitted when no source items are available, while meaningful numeric zero and boolean false values are kept.

The results output field is a string link to the default dataset overview. Each item in it is one successful public post row.

Run output link

FieldTypeWhat it does
resultsstringLinks to the default dataset overview with saved public post rows.
FieldTypeWhat it does
matchedInputstringShows the submitted target or known post URL that first found this row.
profileobject (optional)Holds the public profile or Page linked to the post.
profile.idstring (optional)Gives the Facebook profile or Page ID when shown.
profile.namestring (optional)Gives the public profile or Page name when shown.
profile.urlstring (optional)Gives the public profile or Page URL when shown.
profile.pictureUrlstring (optional)Gives the profile picture URL when shown.
postIdstringGives the stable Facebook ID for the post, reel, video, photo, or story.
postUrlstringGives the Facebook URL for opening the post.
postTypestring (optional)Gives the post kind, such as a photo, video, or reel, when shown.
textstring (optional)Gives the post text or caption when available.
transcriptstring (optional)Gives spoken captions or a transcript when requested and available for a video or reel.
createdAtstring (optional)Gives the post time as an ISO timestamp when Facebook shows it.
authorobject (optional)Holds public author details for the post.
author.idstring (optional)Gives the Facebook author ID when shown.
author.namestring (optional)Gives the public author name when shown.
author.urlstring (optional)Gives the public author URL when shown.
author.pictureUrlstring (optional)Gives the author's profile picture URL when shown.
engagementobject (optional)Holds public comment, reaction, share, and video view counts when shown.
engagement.commentCountinteger (optional)Gives the public comment count when shown.
engagement.reactionCountinteger (optional)Gives the total public reaction count when shown.
engagement.shareCountinteger (optional)Gives the public share count when shown.
engagement.viewCountinteger (optional)Gives the public video or reel view count when shown.
reactionsobject of integer countsGives the count for each reaction type when Facebook shows the breakdown.
mediaarray of objects (optional)Lists images, thumbnails, and direct video URLs found in the post.
media[].typestring (optional)Gives the media kind, such as image or video, when known.
media[].urlstringGives the direct URL for the media item.
media[].thumbnailUrlstring (optional)Gives the media thumbnail URL when available.
media[].widthinteger (optional)Gives the media width in pixels when known.
media[].heightinteger (optional)Gives the media height in pixels when known.
attachmentsarray of objects (optional)Lists links and other attachments found with the post.
attachments[].typestring (optional)Gives the attachment kind when known.
attachments[].urlstring (optional)Gives the attachment URL when available.
attachments[].titlestring (optional)Gives the attachment title when shown.
externalLinksarray of strings (optional)Lists non-Facebook links found in the post.
textReferencesarray of objects (optional)Lists public profiles, Pages, or links named in the post text.
textReferences[].idstring (optional)Gives the reference ID when shown.
textReferences[].namestring (optional)Gives the referenced profile, Page, or link name when shown.
textReferences[].urlstring (optional)Gives the URL for the referenced profile, Page, or link when shown.
textReferences[].verifiedboolean (optional)Says whether Facebook marks the referenced profile or Page as verified.
paidPartnershipboolean (optional)Says whether Facebook marks the post as a paid partnership.
adLibraryIdstring (optional)Gives the Facebook Ad Library Page ID when shown for the post or Page.

Example Facebook post

This row is genuine output from the successful current-beta run with the default input. Fields that Facebook did not expose are omitted.

{
"matchedInput": "NASA",
"profile": {
"id": "100044561550831",
"name": "NASA - National Aeronautics and Space Administration",
"url": "https://www.facebook.com/NASA/",
"pictureUrl": "https://scontent.fsxv4-1.fna.fbcdn.net/v/t39.30808-1/243095782_416661036495945_3843362260429099279_n.png?stp=cp0_dst-png&cstp=mx800x800&ctp=s50x50&_nc_cat=1&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=ZCdtd1j44_kQ7kNvwHqh7vY&_nc_oc=Adrm4xdVAQyPnixpDsnxmePnitcDTHjm4rvIWwAjbW2qMNAeugChaWsuDAuncimmN8NcBUFXeXqX7_bHD9GOZoWb&_nc_zt=24&_nc_ht=scontent.fsxv4-1.fna&_nc_gid=5hFoktmNY6PL4-d2YEvpLw&_nc_ss=70180&oh=00_AQJ7UFKRq0Asf4ODc2AAOBXHI1K1SDAzIl2CuMYM3D5Chw&oe=6ABC6415"
},
"postId": "1638200251008678",
"postUrl": "https://www.facebook.com/NASA/posts/pfbid06dQ3AbwtMVtGMtsaKjTBYgMpdP4KbXapkTPFCuQwVYLeVoCRSgzd3vnfZzR3nkwAl",
"postType": "story",
"text": "Welcome to the Artemis Accords, Côte d'Ivoire 🇨🇮\n \nCôte d'Ivoire is the 75th country to sign the Artemis Accords. In doing so, they commit to a common set of principles for a safe, peaceful, and prosperous future in space. https://go.nasa.gov/4hqBFjw",
"createdAt": "2026-09-24T22:00:52.000Z",
"author": {
"id": "100044561550831",
"name": "NASA - National Aeronautics and Space Administration",
"url": "https://www.facebook.com/NASA",
"pictureUrl": "https://scontent.fsxv4-1.fna.fbcdn.net/v/t39.30808-1/243095782_416661036495945_3843362260429099279_n.png?stp=cp0_dst-png&cstp=mx800x800&ctp=s50x50&_nc_cat=1&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=ZCdtd1j44_kQ7kNvwHqh7vY&_nc_oc=Adrm4xdVAQyPnixpDsnxmePnitcDTHjm4rvIWwAjbW2qMNAeugChaWsuDAuncimmN8NcBUFXeXqX7_bHD9GOZoWb&_nc_zt=24&_nc_ht=scontent.fsxv4-1.fna&_nc_gid=5hFoktmNY6PL4-d2YEvpLw&_nc_ss=70180&oh=00_AQJ7UFKRq0Asf4ODc2AAOBXHI1K1SDAzIl2CuMYM3D5Chw&oe=6ABC6415"
},
"engagement": {
"commentCount": 126,
"reactionCount": 2283,
"shareCount": 150
},
"reactions": {
"like": 1581,
"love": 635,
"care": 49,
"angry": 6,
"haha": 5,
"wow": 5,
"sad": 2
},
"media": [
{
"type": "image",
"url": "https://scontent.fsxv4-1.fna.fbcdn.net/v/t39.99422-6/821656476_1125871713709126_4518785347627209846_n.png?stp=dst-jpg_tt6&cstp=mx2048x1152&ctp=s960x960&_nc_cat=1&ccb=1-7&_nc_sid=127cfc&_nc_ohc=PM-vkcX0DYUQ7kNvwEd8WQU&_nc_oc=Adoe5hJhgZGXHSD3XmmDI7k2_zvlnW6vcIB9i1_2bNl5gwLxmpoWqkXtoWp313pgU7m7Hmn8ZO3MeC-gB5vJD3Yw&_nc_zt=14&_nc_ht=scontent.fsxv4-1.fna&_nc_gid=5hFoktmNY6PL4-d2YEvpLw&_nc_ss=70180&oh=00_AQI36jNDxJld4GT1ObkdQm9mYYo0ftMtxq3bD59tbK501g&oe=6ABC3953",
"width": 960,
"height": 540
},
{
"type": "image",
"url": "https://scontent.fsxv4-1.fna.fbcdn.net/v/t39.30808-1/243095782_416661036495945_3843362260429099279_n.png?stp=cp0_dst-png&cstp=mx800x800&ctp=s50x50&_nc_cat=1&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=ZCdtd1j44_kQ7kNvwHqh7vY&_nc_oc=Adrm4xdVAQyPnixpDsnxmePnitcDTHjm4rvIWwAjbW2qMNAeugChaWsuDAuncimmN8NcBUFXeXqX7_bHD9GOZoWb&_nc_zt=24&_nc_ht=scontent.fsxv4-1.fna&_nc_gid=5hFoktmNY6PL4-d2YEvpLw&_nc_ss=70180&oh=00_AQJ7UFKRq0Asf4ODc2AAOBXHI1K1SDAzIl2CuMYM3D5Chw&oe=6ABC6415"
}
],
"attachments": [
{
"type": "StoryAttachment",
"url": "https://www.facebook.com/NASA/posts/pfbid06dQ3AbwtMVtGMtsaKjTBYgMpdP4KbXapkTPFCuQwVYLeVoCRSgzd3vnfZzR3nkwAl"
}
],
"externalLinks": [
"https://go.nasa.gov/4hqBFjw"
],
"textReferences": [
{
"id": "UzpfSTEwMDA0NDU2MTU1MDgzMToxNjM4MjAwMjUxMDA4Njc4OjE2MzgyMDAyNTEwMDg2Nzg=",
"url": "https://www.facebook.com/NASA/posts/pfbid06dQ3AbwtMVtGMtsaKjTBYgMpdP4KbXapkTPFCuQwVYLeVoCRSgzd3vnfZzR3nkwAl"
},
{
"id": "NjQyMTgzOTU5MjA4MTA3Omh0dHBzXGEvL2dvLm5hc2EuZ292LzRocUJGanc6OkRlZmF1bHQ6OjoxNjM4MjAwMjUxMDA4Njc4Og==",
"url": "https://lm.facebook.com/l.php?u=https%3A%2F%2Fgo.nasa.gov%2F4hqBFjw&h=AUBln5Lst2xdN_1hP6PlSDLPl7ETRo8LskHVQhs1ctwChD5T8UfLxp05JibfsMPbrZc25DeOn43qLlsNLgyzVYS9DgBnY3yzQKihw046l39oowwHo4HZkoBUYfUA-U3Ezddbn8B5eSb4z7WMGUpmzUMggGwvXWBGM2a2mdO5oZQCb8cn&s=1"
},
{
"id": "1638200237675346",
"url": "https://www.facebook.com/photo/?fbid=1638200237675346&set=a.416661013162614"
},
{
"id": "100044561550831",
"name": "NASA - National Aeronautics and Space Administration",
"url": "https://www.facebook.com/NASA"
}
],
"adLibraryId": "54971236771"
}

💳 Pricing

How charges work

This Actor uses pay-per-event pricing. The buyer-facing event is one public post saved to the dataset. Skipped, private, unavailable, and duplicate posts are not saved as public post rows.

🔌 Integrations

Connect your results

Use the Apify API to start runs and read dataset items. Schedule recurring runs, send finished runs to webhooks, or connect the dataset to supported Apify integrations. Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.

Limits and caveats

This Actor only collects public Facebook data that is visible without a user-provided Facebook account. It does not bypass privacy controls, collect private profile content, scrape groups, scrape Marketplace, or import your Facebook session. Private, unavailable, or unsupported targets are skipped without creating placeholder rows.

Facebook may expose fewer timeline posts than your requested limit for some public profiles or Pages. Date filters apply to the rows that Facebook exposes to the Actor. If a profile has no public posts available, the Actor skips that target and continues with the rest of your input list.

Use the exported data responsibly and follow Facebook's terms, Apify's terms, and applicable privacy, data protection, and platform rules.

❓ FAQ

Do I need Facebook cookies, a login, or a Meta API key?

No. The Actor reads public Facebook post data and does not ask for user-provided cookies, login details, or a Meta API key.

Can I collect posts from profiles and Pages in one run?

Yes. Add multiple profile or Page handles, full URLs, or numeric IDs when you choose Profile or Page timeline. To collect direct post links, choose Known post URLs and add the URLs you submit.

Can I use a direct Facebook post URL without a timeline target?

Yes. Add known public post, reel, photo, video, or supported permalink URLs in Known post URLs. Timeline limits and dates do not change those direct URLs.

What happens when the same post is found through two inputs?

The Actor saves the first eligible occurrence and ignores later matches for that source post. The row shows the first submitted value that found it; it does not combine later matches into that row.

Why did I get fewer posts than my limit?

The limit is a maximum, not a promise. Facebook may expose fewer public posts for a profile or Page, or a date filter may remove posts after they are found.

Are comments returned as separate dataset rows?

No. The Actor returns post rows. It can include public comment counts in engagement when Facebook exposes them, but comments or replies are not separate records.

Can I request transcripts for video and reel posts?

Yes. Turn on Request video transcripts. A transcript is returned only when it is requested and Facebook exposes spoken captions or transcript text, and this option can make the run slower.

Does the Actor download Facebook media files?

No. It returns media and thumbnail URLs when Facebook exposes them. It does not mirror or download the source files.

Can it collect private profiles, groups, or Marketplace content?

No. It collects public posts from profiles, Pages, and supported direct post URLs. Private, friends-only, login-only, deleted, unavailable, group, and Marketplace content is outside its scope.

📝 Changelog

v1.2 (25-09-2026)

  • Added support for Facebook profile ID inputs such as profile.php?id=....
  • Unavailable post fields are now left out of saved rows, while real zero and false values stay available.

v1.1

  • Added optional video transcript enrichment for video and reel posts when Facebook exposes them.
  • Added transcript results and a readable table view for researching saved posts.

v1.0

  • Added the stable public post row format with profile, author, engagement, reactions, media, attachment, link, and reference data.

v0.1

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré