How to get Facebook profile posts
GET request to /v1/facebook/profile-posts with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. Latest posts and Reels from a Facebook page — listingHits / timings.phase; 60s deadline, failures 0 credits.How to get Facebook profile posts (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the Facebook Profile Posts API
Send an authenticated GET request to /v1/facebook/profile-posts with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/facebook/profile-posts?url=https%3A%2F%2Fwww.facebook.com%2FNASA" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"url": "https://www.facebook.com/NASA",
"totalReturned": 2,
"posts": [
{
"platform": "facebook",
"url": "https://www.facebook.com/NASA/posts/pfbid0TBwRTPkxfaLhYBjfsK1xApVksSVHddNrpqUqcqNsKxVvKjqT6dAG8HnxWGA3odp5l",
"id": "1587644189397618",
"caption": "This is messy 😬\n \nA galaxy cluster is exactly what you'd think: a bunch of galaxies grouped together. This galaxy cluster is made of two sub-clusters with similar mass, locked in a messy process of interacting and separating. Eventually, they'll merge. Though their relationship is… complicated, it helps us study the region.\n \nThe cluster's extreme and concentrated mass curves light with its gravity. This is called gravitational lensing, and it works like a glass lens bending and focusing light. Objects are magnified and their brightness is enhanced, so if they lie in exactly the right place, background galaxies and even individual stars that would have been far too faint and distant to spot will be made visible.",
"description": "This is messy 😬\n \nA galaxy cluster is exactly what you'd think: a bunch of galaxies grouped together. This galaxy cluster is made of two sub-clusters with similar mass, locked in a messy process of interacting and separating. Eventually, they'll merge. Though their relationship is… complicated, it helps us study the region.\n \nThe cluster's extreme and concentrated mass curves light with its gravity. This is called gravitational lensing, and it works like a glass lens bending and focusing light. Objects are magnified and their brightness is enhanced, so if they lie in exactly the right place, background galaxies and even individual stars that would have been far too faint and distant to spot will be made visible.",
"publishedAt": "2026-07-27T15:33:07.000Z",
"thumbnailUrl": "https://scontent-dfw5-2.xx.fbcdn.net/v/t39.99422-6/758964186_1384158170473704_9008748322111971488_n.png?stp=dst-jpg_tt6&cstp=mx2047x1012&ctp=s1080x2048&_nc_cat=1&ccb=1-7&_nc_sid=12...",
"author": {
"username": "NASA",
"displayName": "NASA - National Aeronautics and Space Administration",
"url": "https://www.facebook.com/NASA"
},
"engagement": {
"likes": 1861,
"comments": 84,
"views": null,
"shares": null
},
"isVideo": false
},
{
"platform": "facebook",
"url": "https://www.facebook.com/reel/1380134307388381",
"id": "1584419709720066",
"caption": "During his eight months aboard the International Space Station, NASA astronaut Chris Williams conducted numerous experiments to improve life on Earth and prepare us for missions to the Moon and Mars.\n\nFrom cancer research to advancing technology, read about Williams’ work during his first time in space: https://go.nasa.gov/3RavGXj",
"description": "During his eight months aboard the International Space Station, NASA astronaut Chris Williams conducted numerous experiments to improve life on Earth and prepare us for missions to the Moon and Mars.\n\nFrom cancer research to advancing technology, read about Williams’ work during his first time in space: https://go.nasa.gov/3RavGXj",
"publishedAt": "2026-07-23T16:31:54.000Z",
"durationSeconds": 112.946,
"thumbnailUrl": "https://scontent-sea5-1.xx.fbcdn.net/v/t15.5256-10/754970839_803020196231197_5928609298551288000_n.jpg?stp=dst-jpg_tt6&cstp=mx720x405&ctp=s720x405&_nc_cat=102&ccb=1-7&_nc_sid=be830...",
"videoUrl": "https://video-sea1-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQNNFuni8clCeMB5VeV07ZDIzXWkhBI5ozM_78otCALjoD72HsRW7yvnWXM_b0WGcKAjPk-KGDhCqRkGsaoZ57noEirZQ7LpYHZZbTVu3jMMQg.mp4?_nc_cat=106&_nc...",
"author": {
"username": "NASA",
"displayName": "NASA - National Aeronautics and Space Administration",
"url": "https://www.facebook.com/NASA",
"profileImage": "https://scontent-sea5-1.xx.fbcdn.net/v/t39.30808-1/243095782_416661036495945_3843362260429099279_n.png?stp=cp0_dst-png&cstp=mx800x800&ctp=s80x80&_nc_cat=108&ccb=1-7&_nc_sid=2d3e12&...",
"verified": true
},
"engagement": {
"views": 411000,
"likes": 5594,
"comments": 170,
"shares": 240
},
"isVideo": true,
"link": "https://go.nasa.gov/3RavGXj"
}
],
"scrapedAt": "2026-08-03T11:00:00Z"
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Facebook profile/page URL, @handle, or page name. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| limit | integer | No | Max items to return (default 4, max 4). The logged-out listing hop is ~23–29s typical, hard-capped at 40s. Each hydrate is typically 6–10s (can be ~100ms when listing already carried the post) and is capped at 12s. The next-item fit check uses that 12s cap, not the typical 6–10s, so a call cannot exceed 60s. The loop stops when the next item would miss the 60s deadline and returns what it has (truncatedReason=hydrate-budget | deadline). Asking for 20 cannot return 20 inside that ceiling. Flat 2 credits per call. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Frequently asked questions
What does the Facebook Profile Posts API do?
The Facebook Profile Posts API lets you list items in bulk with metadata from a public Facebook post using one GET request to /v1/facebook/profile-posts. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Facebook Profile Posts API cost?
Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Facebook API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why did I get 1 post when I asked for 20?
limit max is 4 — 20 is a 422. requested is a cap, not a promise. truncatedReason is always keyed (listing-window | hydrate-budget | deadline | null). When hasMore is false: listingHits − hydrateFailures − hydrateSkipped = totalReturned. When hasMore is true: min(listingHits, requested) − hydrateFailures − hydrateSkipped = totalReturned. listingHits is how many distinct posts the logged-out HTML window held — on a large page that is often 1–3. hydrateSkipped were found but not hydrated because the next item would have missed the 60s deadline (NASA: 3 of 4, hydrate-budget). That thin window is expected from logged-out Facebook, not a silent miss.
What is the deadline, and why did retries take another 42 seconds?
Hard ceiling 60s (503 on hang with no posts, 502 when a live page yields nothing). Failures are 0 credits. A failed page is remembered for 60s so the next retry is an instant 502/503 with the same timings — the failure is cached, never data. The listing hop is ~23–29s typical and hard-capped at 40s — a 40 001 ms 503 is that cap, not a 53 s listing the docs used to quote from a failed call. Hydrates are typically 6–10s (sometimes ~100ms when listing already carried the post), sequential, and capped at 12s; the loop returns what fits (hydrate-budget) and finished posts still ship if the deadline fires (deadline).
Why did I get a 503 with no posts?
Read timings.phase. phase=listing means every listing hop missed (first-paint, optional scroll, light /posts tab) — hydrateMs is 0 on that path. A shop-heavy page (nike) used to die at the 40s scroll cap and skip /posts; that tab now still runs. phase=hydrate means listing finished and a detail fetch overran. listingMs + hydrateMs is never greater than totalMs. If a 6h last-good page exists, a miss is a stale 200 (0 credits) instead of a 503. If posts had already finished when the deadline fired, they ship as a 200 with truncatedReason=deadline.
Where is scrapedAt?
Removed. Use envelope fetchedAt. There is no scrapedAt twin — same as group-posts. Do not compare profile-posts to profile-reels by a shared scrapedAt; the two pages fetch independently.
Why is limit max 4?
A hydrate is typically 6–10s (sometimes ~100ms when listing already carried the post) and the listing hop is ~23–29s typical, hard-capped at 40s. The fit check uses the 12s cap, not the typical, so listing-at-40 plus one hydrate finishes by 52s and a second is not started. limit stays at 4 because the loop is a clock: it hydrates while elapsed + 12s still fits, then returns what it has (hydrate-budget). If the deadline fires after posts finished, those posts still ship (deadline). limit=20 cannot return 20 inside that ceiling. Asking above 4 is a 422 that names the field.
Is the Facebook Profile Posts API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get Facebook profile posts?
Start free with 100 credits — no credit card required.
Get your free API key