Facebook Profile Viewer API: Pull Public Page and Profile Data
Pull public Facebook page and profile data as JSON: followers, categories, contact fields and ad status for one URL or a list, billed per result.

Get the public data of a Facebook page or profile as JSON in one prompt. Paste this into your agent:
Set up https://monid.ai/SKILL.md, and then use Monid to read the public Facebook page of Patagonia and give me its follower count, categories, website, rating and whether it is running ads.
One prompt reads a public page. 1 min setup · 15-30 hrs saved.
You typed "Facebook profile viewer" and want to look at a page or a public profile from code, or for a whole list of them, without opening a browser. This guide shows the quickest way to get that data into your agent or your spreadsheet, what a record contains (we ran it live on 2026-10-16), and four traps in the fields. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.
What is the easiest way to get Facebook profile data through an API?
Monid. Install it once, add a key, and your agent calls a Facebook page scraper and a Facebook profile scraper with no portal, no plan and no vendor account to set up.
- Pay per result. You are billed for each record that comes back, at $0.0054 per page or profile for the page scraper (Verified 2026-10-16 on the Facebook tools page). Buy credit as you need it: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
- One install, every tool. The same key and the same balance call Facebook and every other tool on Monid, so the next network is one more command and not a new account.
- Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tools are there whenever your agent needs them, with nothing to keep running. Your agent reads
SKILL.mdand learns the rest, so setup is about a minute.
Reading a hundred pages is a hundred results, about $0.54 (Verified 2026-10-16).
How do you get Facebook data for many pages or profiles at once?
Put the URLs in the input and you get one result per URL, so a list of fifty pages is one call with fifty results. The page scraper takes startUrls, an array of objects with a url. The same logic of one record per input is how a social media scraping API across several networks bills too.
For agents
Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:
set up https://monid.ai/SKILL.md
It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.
For humans
npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main
Read a page
monid run -p apify -e /apify/facebook-pages-scraper \
-i '{"startUrls": [{"url": "https://www.facebook.com/patagonia/"}]}'
The run on 2026-10-16 took about 17 seconds, returned one record and billed one result. The endpoint has no result limit parameter: the number of results equals the number of URLs, so you control the bill by controlling the list.
Read a profile
The profile scraper takes an endpoint mode and the targets one per line. Replace the placeholder with the profile you want:
monid run -p apify -e /cleansyntax/facebook-profile-posts-scraper \
-i '{"endpoint": "details_by_url", "urls_text": "https://www.facebook.com/<profile-name>"}'
The six modes are not interchangeable:
| Mode | What it returns |
|---|---|
details_by_url | Profile details from a profile URL |
details_by_id | The same from a numeric id |
profile_id_by_url | Just the id, for resolving |
profile_posts_by_url | Posts from a profile URL |
profile_posts | Posts from an id |
search_posts_by_keyword | Posts matching a keyword |
The posts modes bill per returned record and the cap applies to each target line, so set max_posts before you run them. Left at its default of 0 it fetches every available post.
Or hand the whole job to an agent
Give this to your agent![]()
Set up https://monid.ai/SKILL.md, and then use Monid to for each of these public Facebook page URLs, return follower count, categories, website, rating and whether the page is running ads, and flag any page where the followers field and the info text disagree.Can you scrape Facebook yourself with Python?
Yes, people do it with Playwright or Selenium, and it works until the page changes or the requests get blocked. A scraper you write is yours to keep alive: when the markup shifts, your job breaks, and the figures you collected last week no longer line up with this week's.
There is a rules side too. What you may collect from a social network, and what you may do with it, depends on the terms of the site and on the law where you operate, and the rules differ, so check yours before you build.
The DIY route means a browser or proxy setup, parsing code for a page with several layouts (a brand page, a profile and a public figure all render differently), retries, and a repair whenever it changes. That is hours before the first useful row. Through Monid a result costs $0.0054 (Verified 2026-10-16), the collection is maintained for you, and the output is typed JSON instead of HTML you parse. If you want the same trade-off for Facebook ad data, rolling your own against the Ad Library walks through where the DIY route stops being worth it.
What does a Facebook page or profile record contain?
A brand page came back with 29 top-level fields, and a public-figure profile on the same endpoint with 30, with different fields filled in. We ran both on 2026-10-16, so what follows is what came back and not what a spec promises.
The brand page
On a public clothing brand's page the record held:
title "Patagonia"
categories ["Page", "Clothing (Brand)"]
followers 1984859
likes 0
rating "54% recommend (4,274 reviews)"
ratingOverall 54
ratingCount 4274
creation_date "October 13, 2008"
ad_status "This Page isn't currently running ads."
confirmed_owner "PATAGONIA, INC. is responsible for this Page."
It also carried intro, website, a business phone, pageId, profilePictureUrl, coverPhotoUrl and a pageAdLibrary object with the id of the page in Meta's ad library. The ad fields are the underrated ones: ad_status tells you whether a page is running ads right now, a competitive signal you would otherwise collect separately.
The public-figure profile
We pointed the same page scraper at a public-figure profile. Its input description says it only works on pages, "not personal profiles (not even public ones)". It returned a record anyway, in about 8 seconds, with categories set to ["Profile", "Public figure"], a followers integer in the hundred-million range, and likes at 0. The page-only fields were absent: no rating, no phone, no website, and websites came back as an empty array. In their place sat profile fields: work, education, current_city, hometown and relationship.
The profile scraper
The profile scraper's details_by_url mode returned one record for the same profile, shaped as a profile object with 19 keys: name, profile_id, url, image, intro, cover_image, about_public, verified, influencer_category, education, current_city, hometown, relationship and a few more. It had a verified flag, which the page scraper did not, and no follower count, which the page scraper did. The two endpoints complement each other on a profile, and neither is a superset of the other.
What you can build with it
- A competitor page watch. Read the same list of pages every week and store
followers,ratingCountandad_status, so a jump in followers or a page that starts running ads shows up in a diff. - A lead list check. Given a list of company Facebook URLs, pull
websiteandcategoriesand use the site as the join key to the rest of your data. - A profile id resolver. Use
profile_id_by_urlto turn vanity URLs into numeric ids before you hand them to other tools. The same resolve-then-read pattern is covered in searching one username across platforms.
What goes wrong when you pull Facebook profile data?
Four things hide until you read the fields closely. Each one showed up in the runs of 2026-10-16.
Why does one response report two follower counts?
Because the figure appears twice in the record and the two copies can differ. On the public-figure profile, followers was 121496248 and the info text read "121,496,249 followers", one apart, in the same response. On the brand page both said 1,984,859. The info array is the page's own prose and the integer is the parsed field, and a live counter that is read in two places can be a follower apart.
Pick one and never mix. Store the integer from followers, ignore the number in the text, and do not diff across the two. Mixing them gives a history with a one-follower wobble that looks like movement. Other platforms hold the same figure in more than one place too; the Instagram API guide shows where Instagram keeps it.
Why do two copies of one field disagree?
The profile record carried each personal field twice, once in upper case and once in lower case, and the two work values did not match: one listed one employer and the other listed two. They come from different parts of the page. Read one key, use the lower-case ones, and treat the duplicates as noise rather than as a second source.
Why is likes zero when followers is populated?
Because the field survives as a zero. likes was 0 on the brand page with nearly two million followers and 0 on the profile. Read followers.
Why did the docs say profiles are refused when a profile came back?
Because a schema describes what a provider intends to support, and only a run shows what it does. The page scraper's own description says it refuses personal profiles, and it returned one. Do not rule out a shape on one sentence: run it once on your real target type and look at the fields. The reverse also holds, and a run on one profile does not tell you every profile will come back.
Which endpoint should I use for which job?
| Endpoint | What it does | Input | Output | Best for | Billing |
|---|---|---|---|---|---|
apify/apify/facebook-pages-scraper | Public page or profile details | startUrls array | 29 fields on a page, 30 on a profile | Brand pages, followers, rating, ad status | Per result, $0.0054 (Verified 2026-10-16) |
apify/cleansyntax/facebook-profile-posts-scraper | Profile details, id or posts | endpoint mode, targets | A profile object of 19 keys, or posts | Verified flag, id resolving, posts | Per result, $0.006 (Verified 2026-10-16) |
anyapi/facebook.profile | A page's public profile by URL or handle | url or handle, optional route | About, followers, likes, category, ad status | A second source for the same page | Per call, set by the route |
Prices verified with monid inspect on 2026-10-16. The first two rows were run that day. The third was inspected and not run, because its price changes with the route you pick, so check the route before you loop it. Current figures for every tool are on monid.ai/tools.
The page scraper is the better first call for a brand page or a public figure. The profile scraper is the one to use when you need the verified flag or posts. For the full catalogue see the Facebook tools page.
When is another route a better fit?
You want to see a private profile. There is no endpoint that returns one. These endpoints read what a logged-out visitor can see, and if a browser without a login cannot see it, no scraper can return it.
You want to know who viewed a profile. That list is not in the page the scraper reads, so no field carries it. Any tool selling it is not reading it from here.
You need your own account's data. Exporting your own posts and photos is a download in your account settings, not an API job, and it is the right tool for your own archive.
You need contact details for people. A business page publishes a phone number because the business chose to. Collecting personal details of individuals is a different matter where the rules differ by country, so check yours first.
You need history. Each call is a snapshot of today. To see change you have to store the snapshots yourself.
And the disclosure: this is Monid's blog and we resell the endpoints in the table. The pages we tested are public ones, and the approach in this post stops at what a logged-out visitor can see.
Conclusion
The quickest way to get the public data of a Facebook page or profile is one scraper call through Monid: $0.0054 per result (Verified 2026-10-16), one key for Facebook and everything else, about a minute to set up and ready inside your agent whenever you need it. On 2026-10-16 the page scraper returned 29 fields for a brand page and, despite its own description, a 30-field record for a public-figure profile.
Two things matter more than which endpoint you pick. Store the followers integer and nothing else: on the profile we read, the number in the info text was one higher than the field. And read the fields you were promised, because likes was 0 on both subjects and the personal fields were duplicated with different values.
How we estimated the time saved: building and maintaining your own parser for brand pages (8 to 15 hours) and another for profiles (8 to 15 hours) is roughly 16 to 30 hours, so we say 15 to 30. The 1 minute is the install, key and first call once you already have a Monid key.
Free next step: run monid inspect -p apify -e /apify/facebook-pages-scraper, read the line about personal profiles, then make one call on a page you know and compare followers with the number in info. Start at monid.ai.
FAQ
Can any API show me a private Facebook profile?
No. These endpoints read what a logged-out visitor can see, so a profile set to private returns nothing useful whichever vendor makes the call. If you cannot see it in a browser without logging in, an endpoint cannot return it either.
Can I find out who viewed my Facebook profile?
Not with a data endpoint. The list of visitors is not part of the public page the scraper reads, so there is no field to call and nothing to return. Be wary of anything that sells it.
How do I view a Facebook profile without an account?
Open the public URL in a browser that is not logged in, and what you see is the public part. To get that same view as data, send the URL to the page scraper: on 2026-10-16 it returned followers, categories and ad status for a brand page and a public-figure profile.
Is there a free Facebook profile API?
Not free, but close for small jobs: through Monid a page or profile costs $0.0054 per result (Verified 2026-10-16), with no monthly plan and no minimum top-up, and discovery and inspection cost nothing. A hundred pages is about $0.54.
Why was likes zero when followers was nearly two million?
Because the likes field came back as 0 on the brand page and on the profile, while followers held the real figure. Read followers, and do not compare likes with older data collected from a different source.
Published September 2026.


