Nimbryxo Studio

Use Facebook Public Follower & Following Snapshot Tool with Python

Get the public preview of a Facebook Page or Profile's followers, following, or friends, plus aggregate follower/following counts and parsed location, workplace, or school details.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "deduplicateRows": false,
  "includeProfileDetails": false,
  "maxItems": 8,
  "maxItemsPerTarget": 0,
  "mode": "followers",
  "searchQuery": "",
  "startUrls": [
    {
      "url": "https://www.facebook.com/nike"
    }
  ]
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
startUrlsarrayrequiredOne or more Facebook Page or Profile targets. Accepts full URLs, profile.php?id=..., /people/<name>/<id>/ (plus /followers, /following, /friends, or /both suffixes), /p/..., and URLs already ending in /followers, /following, or ?sk=... . The m/mobile/touch hosts are normalized to www. mbasic is rejected because it is login-gated, and groups/events/marketplace/media pages are not supported. Bare usernames are accepted by the actor; the Console URL-list editor expects a full URL.
modestringoptionalWhich public list(s) to collect. 'both' collects Followers and Following. 'friends' is a legacy alias: Facebook does not expose Friends to logged-out visitors, so it returns the Followers collection with isFallback=true.
maxItemsintegeroptionalHard cap on row records across all targets. The default is 50; the daily prefill uses 8. Set 8 to reproduce the old 8-row preview behavior.
maxItemsPerTargetintegeroptionalOptional cap per target (0 = no per-target cap). Use it to stop one large account from using the whole maxItems budget.
searchQuerystringoptionalKeep only accounts whose name contains this text (Facebook's own in-list search, case-insensitive substring). Empty means no filter; one-character queries are treated as no filter because Facebook ignores them.
includeProfileDetailsbooleanoptionalAdds row-level follower/following counts, category, email, phone, website, address, work, education, current city, and hometown when Facebook exposes them. Uses two opt-in GraphQL requests per row (header + light About) plus a profile-HTML fallback, all capped by maxItems. Off by default; absent fields are omitted, never fabricated.
deduplicateRowsbooleanoptionalWhen enabled, each profileId/profileUrl is emitted once across all targets and modes (first occurrence wins). Per-target pagination duplicates are always removed.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/ki8WyzulpUxTuJFkV/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Facebook Page/Profile follower and following rows collected through public cursor pagination, plus per-target summaries with the actual collection name, reported list size, pagination completeness, access state, and follower/following counts. Optional includeProfileDetails enrichment adds row-level counts and About contact/category fields when Facebook exposes them.

Questions before you run

Which inputs are required?

The published required fields are startUrls

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build Cd6CD1dQVf90O4egD and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.