100 free credits on signup · no card required

Facebook Stats API

One URL in. Clean JSON out.

Give this endpoint the URL of a public Facebook post and it returns the engagement counts, the post text, the timestamp and the page that published it, as JSON. Nothing to register, nothing to get approved, and no admin rights on the page you are asking about. 5 credits per post.

Credits 5 / post
Input ?url=
Cache 15m–7d
GET · BEARER
Request composing…
Fresh when it matters
age-aware cache
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="x1yztbdb x1n2onr6 xh8yej3" data-visualcompletion="ignore"><div class="x78zum5 xdt5ytf"><div dir="auto" class="xdj266r x11i5rnm x1mh8g0r">Weekend build: three settings we changed after your feedback</div></div><div class="x9f619 x1ja2u2z x78zum5"><span class="xt0b8zv x1jx94hy" aria-label="5.2K reactions"><i data-visualcompletion="css-img"></i></span><span class="x193iq5w">331 comments</span><span class="x1s688f">128 shares</span></div><abbr data-utime="1751630400" class="x1i10hfl">3d</abbr><script>requireLazy(["CometResourceScheduler"],function(f){f().schedule({"__bbox":{"require":[["adp_Comet...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 10 typed fields
{
"data": {
"platform": "facebook",
"entity_id": "1093831344793765",
"url": "https://www.facebook.com/watch/?v=1093831344793765",
"author": {
"handle": "facebook",
"name": "Example Creator"
},
"posted_at": "2026-06-30T14:05:00Z",
"metrics": {
"views": 1204593,
"likes": 88410,
"comments": 2314,
"shares": 10092
}
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 One object per post

One object per post. You get the reaction, comment and share counts, the video view count when the post carries video, the post body text, an ISO publish timestamp, the publishing page's id and name, and a thumbnail URL when Facebook attaches media to the post.

02 Public counters, not Insights

The counters are the public figures Facebook renders on the post itself. That is a meaningful distinction on this platform: Facebook's own Insights, which only the page owner can see, reports reach, impressions and paid versus organic breakdowns. None of that is public and none of it appears here. What you get is what a logged-out visitor sees.

03 Likes means all reactions

One more Facebook-specific quirk worth stating up front. The `likes` field carries the total reaction count, not strictly the thumbs-up count. Facebook has folded love, care, haha, wow, sad and angry into one visible tally in most surfaces, and that combined number is what lands in `likes`. There is no per-reaction breakdown in this response.

Field explorer Pick a key to see its type and the caveats.
number|null Nullable Sortable metric
likes

Total reactions on the post, all reaction types combined. Not broken out by type.

{
"id": "…",
"url": "https://www.facebook.com/watch/?v=1093831344793765",
"caption": "…",
"views": 1204593,
"likes": 88410,
"comments": 2314,
"shares": 10092,
"posted_at": "2026-06-30T14:05:00Z",
"author": { … },
"thumbnail": "…"
}
Good fit

Reach for this when

  • Benchmarking a competitor's Facebook output — feed in a list of their post URLs and get comparable reaction, comment and share counts in one pass.
  • Reporting on posts you do not own, where Insights is unavailable to you: agency pitches, brand audits, partner-page reviews.
  • Measuring how far a specific post travelled after it was picked up somewhere — poll the same URL daily and store the counters with a timestamp.
  • Enriching a media-monitoring pipeline, where a crawler has already found a Facebook URL and you need engagement numbers attached to it.
  • Verifying a screenshot. Someone shows you a post with big numbers; one call tells you what the post actually reads today.
Different job?

There's an endpoint for that

  • You want reach, impressions or paid-versus-organic splits. Those are owner-only Insights metrics and no public endpoint returns them, including this one.
  • You want the comments, not the count — use the Facebook Comments API, which returns the text, author and like count per comment.
  • You want a page's follower count, category and bio rather than one post's numbers — that is the Facebook Page Stats API.
  • You have a page and want its recent posts. Start with the Facebook Page Posts API to get the list, then pass individual URLs here if you need them refreshed.

Pricing

Start free, pay for what comes back

One post is 5 credits — about 2.5¢ on the monthly plan. $5 covers roughly 200 posts, and calls that fail on a private or deleted post are never charged.

Estimate your bill
$15/ month
30 posts/day × 5 credits × 365 days = 54,750 credits/yr, or $183/yr on the annual plan plus 43 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 54,750
Plan Annual $54/yr
Per post

Estimate only, on a full-year basis. 5 credits per returned post. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Facebook exposes the same post under several shapes: /permalink.php?story_fbid=…, /{page}/posts/{id}, /photo.php?fbid=…, /watch/?v=… and the /share/p/… links the mobile app copies. Pass the URL as you got it. If a call fails on a share link, open it once in a browser and pass the permalink it lands on.

Group and event posts are inconsistent. Public groups sometimes resolve, closed groups never do. Do not build a pipeline that assumes group URLs will work.

Facebook renders different counters depending on post type and page settings. A photo post has no `views`. A page can suppress its share count. A link post may have no `thumbnail`. Treat every field except `id` as optional and your code will survive.

The one hard failure mode is visibility: a post that requires a login, a friends-only profile post, or a deleted post returns an error rather than a half-filled object. Failed calls are not charged.

If your analysis depends on distinguishing an angry reaction from a love reaction — sentiment work, crisis monitoring — this endpoint will not give you that. It returns the combined total. Comment text is usually the better sentiment signal on Facebook anyway, and that lives on the Facebook Comments API.

This endpoint uses the fast cache class. Ask for the same post twice inside that window and the second response arrives in milliseconds carrying x-cache: hit — at the full 5 credits, because the cache is there for speed and not as a discount. fresh=true forces a live fetch; it earns its keep on the first read of a polling cycle and rarely anywhere else.

We read Facebook logged out, the same way any visitor does. No credentials, no session, no private data. If a human without an account cannot see the post in a browser, this endpoint cannot see it either. That is a design constraint, not a bug to route around.

Questions

Frequently asked

Send a GET to /v1/facebook/stats with the post URL and your API key. The Graph API requires a Facebook app, a page access token and App Review for most permissions, and even then it only reads pages you administer. This endpoint reads the public post page instead, so it works on any post you can open in a logged-out browser, including competitors' pages.

Because Facebook displays them as one figure. The `likes` field carries the total reaction count across all six reaction types plus thumbs-up. There is no public per-reaction breakdown on a post page, so we do not invent one. If you need reaction sentiment specifically, the comment text from the Facebook Comments API is a more honest source.

No. Reach and impressions are Insights metrics, visible only to the page owner inside Meta Business Suite or through the Graph API with an admin token. They are not rendered on the public post, so no public-data endpoint can return them. This endpoint returns reactions, comments, shares and video views — the counters anyone can see.

5 credits per post. At $0.005 per credit on the monthly plan that is 2.5 cents a call, or $0.0225 on annual. Cached responses cost the same as fresh ones. Calls that fail — private post, deleted post, unreachable URL — are not charged at all.

It works on any post that is publicly visible, which in practice means most page posts and the subset of profile posts set to Public. Friends-only and private posts return an error. Group posts are unreliable: some public groups resolve, closed groups never do. If you are working with pages specifically, the Facebook Page Posts API is the better starting point.

Because the post has no video. Facebook only shows a view counter on video and Reel posts, so photo, link, status and album posts return null there. That is the platform's behaviour, not a gap in the data. Check for null rather than defaulting to zero, or your averages will be wrong.

One URL per call. Run them in parallel — the calls are independent and the API is built for concurrent traffic. If you are starting from a page rather than a list of URLs, the Facebook Page Posts API returns up to `limit` recent posts in one call, which is cheaper per post than fetching each one here.

Next

Pairs well with

Full Facebook API reference →
/v1/facebook/comments
Facebook Comments API Paginated comments on a Facebook post; charged per comment returned. 3 cr / comment
/v1/facebook/page-stats
Facebook Page Stats API Followers, likes and metadata for a Facebook page. 10 cr / page
/v1/facebook/channel-posts
Facebook Channel Posts API Latest posts from a Facebook page with per-post metrics. 3 cr / post
/v1/instagram/stats
Instagram Stats API Likes, comments and view counts for an Instagram post or reel. 1 cr / post

More Facebook endpoints

/v1/facebook/transcript Full transcript of a Facebook video with timestamped segments. 15 credits / video /v1/facebook/summary Short AI summary of a Facebook video, built on its transcript. 17 credits / video /v1/facebook/comments Paginated comments on a Facebook post; charged per comment returned. 3 credits / comment /v1/facebook/page-stats Followers, likes and metadata for a Facebook page. 10 credits / page /v1/facebook/channel-posts Latest posts from a Facebook page with per-post metrics. 3 credits / post /v1/facebook/download Resolves a downloadable media URL for a Facebook video (URL expires within 1h). 10 credits / video

Try the Facebook Stats endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/facebook/stats
Get your free API key