All notable changes to this Actor will be documented here.
[1.4] — 2026-06-07
Improved — audience metrics fallback
When Facebook hides the follower count for logged-out requests (common on
some large pages), audienceSize and the activity score now fall back to
page likes, so big pages are no longer mis-classified as unknown size.
Found via a 25-profile stress test (100% success rate).
[1.3] — 2026-06-07
Removed
Cookies mode (posts / people-search / private profiles) was removed. The
actor stays strictly no-login: public profile & page metadata only.
Recon confirmed posts and people-search are login-gated on Facebook, so they
are out of scope for a cookie-free scraper.
[1.1] — 2026-06-07
Added — competitor-parity fields (no login, from the same fetch)
facebookId — numeric page/profile ID (from app-link meta / JSON-LD).
Numeric ID input — accepts bare IDs and /profile.php?id=... (URL↔ID),
fixing a bug where the id query was dropped on normalize.
coverPhoto, alternateName, gender (best-effort).
priceRange — business price band ($/$$/$$$) for pages.
isComplete / wasBlocked transparency flags on every record.
These close the data gaps versus curious_coder (price/cover/ID),
devwithbobby (engagement/audience/flags) and lazyscraper (numeric ID).
[2.0] — 2026-05-22
Fixed — actor was returning errors for all 19 paying users
The previous data pipeline stopped working after Facebook tightened its
anti-bot protection in early 2026, leaving every run failing with
Failed to fetch website content. v2.0 replaces the entire backend with
direct Facebook scraping.
Changed
Direct fetch — no third-party scraping API
Multi-strategy fallback — cycles through mbasic, mobile, desktop,
Googlebot UA, and embed iframe until one succeeds
Apify residential proxy by default — datacenter IPs are heavily
rate-limited by Facebook
apify SDK instead of legacy apify-client async pattern
Title now reads "Facebook Profile Scraper | $4/1K | No Login (Real-Time)"
with v2.0 features in description
Added — major intelligence upgrade
profileType detection — page / profile / group / unknown
verified — blue verification badge boolean
emails[] + primaryEmail — public emails scraped from page text,
JSON-LD, and Open Graph meta. Filtered through 30+ Facebook CDN blacklist
phones[] + primaryPhone — public phones with regex normalisation
activityScoreReasons[] — every contributing signal in plain English
activityTier — small (<30) / growing (30-49) / established (50-69)
/ major (70+)
locale — Open Graph language tag for international segmentation
fetchStrategy — diagnostic field showing which endpoint succeeded
fetchStatus — HTTP status of the successful fetch
Removed
All "extract*" boolean toggles from input schema — every field is now always
computed because they're free (single HTML fetch). Reduces input complexity
from 14 fields to 5.
Legacy ALL_COLUMNS / extractColumns payload construction
Direct requests / ThreadPoolExecutor runtime — replaced with httpx +
asyncio for proper async fetch with proxy rotation
Migration
v1 callers continue to work — profileUrls is the only required input.
The new fields are additive. Old fields like username, fullName, bio,
followerCount, profileUrl, email, website, category are still
present (some renamed: email → emails[0] / primaryEmail,
website → websites[0] / primaryWebsite).
[1.0] — 2026-04-XX
Added
Initial release
Multi-field configurable extraction (now superseded — all fields free in v2)