# Facebook Page Following Scraper – Profile Export (`scrapingmonkey/facebook-page-following-scraper`) Actor

Export publicly visible profiles followed by Facebook Pages. Collect names, IDs, URLs, profile labels and source Page context with page-based pagination.

- **URL**: https://apify.com/scrapingmonkey/facebook-page-following-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

See which profiles a public Facebook Page visibly follows. **Facebook Page Following Scraper** collects the accessible outgoing following list, with profile names, IDs, URLs and source-Page context in each result.

Use Page usernames or URLs to build a record of visible connections across selected Pages. Pagination follows the collection Facebook exposes; it does not guarantee a complete relationship graph. No Facebook login or cookies are required.

| At a glance | Details |
|---|---|
| 📥 Input | Page usernames, numeric IDs as strings, or Page URLs |
| 📤 Output | Visible followed profiles, their public labels and the Page that follows them |
| 🔐 Login required | No Facebook credentials or cookies |
| 📄 Collection | Pagination; `pagesPerProfile` defaults to 1 |
| 💾 Delivery | One row per distinct followed-profile returned for each source Page; JSON, CSV, Excel or API |

### What the Facebook Page Following Scraper extracts 🔎

The Actor separates each publicly listed followed profile into its own row, while retaining the Page that supplied the relationship.

- Followed profile ID, username, name, URL and profile picture
- Available profile subtitle, type and verification flag
- Source Page identifiers, username, name, URL and picture
- Public following-collection total and any supplied notice
- Further pages of the visible Following collection when available

### How to scrape Facebook Page following 🚀

1. Add Page usernames or URLs to inspect the public profiles listed in their Following sections.
2. Set `pagesPerProfile`; start with `1` to inspect the available collection.
3. Start the Actor and inspect the dataset’s `status` column.
4. Export successful rows or connect the results to your workflow.

```json
{
  "inputList": [
    "Meta"
  ],
  "pagesPerProfile": 1
}
```

### Facebook Page following data fields and output 📦

| Field group | Included data |
|---|---|
| Followed profile | ID, username, name, URL and profile picture |
| Public labels | Subtitle, profile type and verification |
| Source Page | `source_profile.*` identity and profile columns |
| Collection summary | Source total and any notice |
| Result status | Submitted input and success or failed status |

Complete representative success item. All names, counts and media addresses below are illustrative, not a live result; every current output field is included.

```json
{
  "input": "HarborCoffee",
  "status": "success",
  "id": "104567890123789",
  "username": "CityRoasters",
  "name": "City Roasters",
  "url": "https://www.facebook.com/CityRoasters/",
  "profile_picture_url": "https://media.example.com/city-roasters.jpg",
  "subtitle": "Coffee roaster",
  "type": "page",
  "is_verified": false,
  "source_profile.id": "100091234567890",
  "source_profile.page_id": "104567890123456",
  "source_profile.username": "HarborCoffee",
  "source_profile.name": "Harbor Coffee",
  "source_profile.url": "https://www.facebook.com/HarborCoffee/",
  "source_profile.profile_picture_url": "https://media.example.com/harbor-coffee-profile.jpg",
  "source_profile.is_verified": false,
  "source_total": 34,
  "notice": ""
}
```

The table and JSON use the same flat keys and values, with one row per result. Dots in keys such as `source_profile.name` are literal parts of the field name.

The `source_profile.*` fields describe the Page you submitted; the ordinary `id`, `name` and `url` fields describe a profile that Page follows. `source_total` is the source’s collection figure, not a promised row count.

Successful rows may contain empty strings, zeroes, false flags, empty lists or nulls when optional information is unavailable. Do not interpret a default count or flag as a confirmed source fact. Failed rows retain `input`, set `status` to `failed`, and use null result fields.

### Input requirements and coverage ⚙️

| Parameter | Type | Required | Rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | At least one Page username, numeric ID as a string, or supported Page URL; no default target. |
| `pagesPerProfile` | integer | No | Default `1`; minimum `1`, maximum `100`. Maximum result pages to attempt per input. |

Accepted inputs include Page usernames, numeric IDs as strings, standard Facebook Page URLs, `profile.php?id=...` links and legacy `/pages/NAME/ID` links. This actor reads outgoing following relationships; it does not read the Page’s Followers collection.

The initial results count as page 1. Further pages are requested only while Facebook supplies a usable continuation. Page size is controlled by the source, so this is not an exact record limit.

Provide an array of strings, not URL objects. An invalid overall input structure stops processing without dataset rows; an invalid target within a valid list is recorded as a failed result. The input schema does not set a maximum list length; choose batch sizes appropriate to your run limits.

### Facebook Page following use cases 🎯

#### Public connection mapping

Build a source-to-followed-profile table for selected Pages using stable IDs and public URLs.

#### Brand ecosystem research

Inspect visible connections to partner organizations, local businesses and other public profiles without inferring a formal business relationship.

#### Following-list monitoring

Compare scheduled snapshots of the accessible Following collection to identify visible changes.

### Pricing and billable followed-profile rows 💰

Check the Actor’s **Pricing** tab for the current model and rate. That configuration is authoritative.

Under dataset-item pricing, saved success and failed rows can count toward charges. Each distinct returned followed-profile saves a success row. Invalid inputs, an empty first collection or a persistently unavailable result page can save failed rows; a later failure does not remove earlier results. Retries do not independently add dataset rows. All details remain in their result row.

### Facebook Page Following Scraper API and integrations 🔌

Replace `$ACTOR_ID` with the ID shown in the Actor’s API tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["Meta"],"pagesPerProfile":1}'
```

Start runs through the Apify API, schedules or client libraries. Use webhooks for completion events and export the dataset to spreadsheets, Make, Zapier, storage or your own application.

### Reliability and limits ⚠️

Following lists can be hidden, limited or unavailable to public requests. A visible connection indicates only that the profile appears in that Page’s public Following collection; it does not establish ownership, endorsement or a commercial relationship.

Available rows are saved page by page, and repeated IDs within one source collection are skipped. Pagination stops when the source provides no further accessible results. An empty initial collection or persistent request failure can produce a failed row.

### Frequently asked questions ❓

#### Is this the same as collecting a Page’s followers?

No. Following is the outgoing list of profiles the Page follows. Followers are the people or Pages that follow it.

#### Will the result contain every followed profile?

Only profiles exposed in the accessible public collection can be returned. Visibility and pagination may limit the result.

#### How do I identify the source Page?

Use the `source_profile.*` columns. The unprefixed profile fields describe the followed profile.

#### Can I request an exact number of profiles?

No. `pagesPerProfile` limits pages to attempt, and Facebook controls how many profiles each page exposes.

#### Does the Actor require Facebook credentials?

No. It uses publicly accessible responses without asking for a Facebook login or cookies.

### Support, responsible use, and related actors 🛟

For help with missing or unexpected results, open an Issue on this Actor’s Apify page with the run link, a public example input and the fields you expected. Keep tokens and credentials out of support messages.

Use public data only for purposes you are authorized to pursue, respecting privacy, platform terms and content rights.

# Actor input Schema

## `inputList` (type: `array`):

Add one Facebook Page username or full Page URL per item. Every input produces success or failed output.

## `pagesPerProfile` (type: `integer`):

Maximum number of result pages to request for each input.

## Actor input object example

```json
{
  "inputList": [
    "Meta"
  ],
  "pagesPerProfile": 1
}
```

# Actor output Schema

## `results` (type: `string`):

Actor dataset results with input and status columns.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "inputList": [
        "Meta"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/facebook-page-following-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "inputList": ["Meta"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/facebook-page-following-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "inputList": [
    "Meta"
  ]
}' |
apify call scrapingmonkey/facebook-page-following-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/facebook-page-following-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qD6jcG23Kj7UkOdtH/builds/b6tGL3ehRM70pQL22/openapi.json
