# Meta Branded Content Partnerships Scraper (`automation-lab/meta-branded-content-partnerships`) Actor

Export public Instagram creator-brand partnerships from Meta Branded Content Library by selected business or creator and date range, with handles, publication dates, content types and source links.

- **URL**: https://apify.com/automation-lab/meta-branded-content-partnerships.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 partnership records

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Meta Branded Content Partnerships Scraper

Export **meta branded content** partnerships for a selected Instagram business or creator from Meta Branded Content Library. Get creator and brand handles, publication dates, content types, Instagram links and the Library source URL in structured records for recurring sponsorship research.

### Who is it for?

Designed for influencer researchers, agency analysts and brand teams who already know which business or creator they want to monitor. This Actor exports public Library relationships, not inferred sponsors from hashtags or tagged posts.

### What does this Actor do?

You supply one selected-entity Library URL, optionally override publication dates, and set a run-wide result cap. The Actor returns deduplicated Instagram partnership records in the default dataset. Each content record retains every listed brand partner.

It does **not** support Facebook partnerships, ordinary Instagram profile URLs, keyword-only entity discovery, private accounts, follower metrics, media downloads or engagement enrichment. Choose the business or creator in Meta's Library before copying the URL.

### Why use this Actor?

- Keep explicit creator-to-brand relationships rather than guessing sponsorship from mentions.
- Preserve source links so an analyst can verify each record.
- Compare repeated exports by `contentId` in your own spreadsheet or database.
- Treat unavailable content and anonymous pagination limitations honestly instead of presenting the source header count as complete coverage.

There is no built-in schedule, database of past sponsorships, alert service or automatic change detector. Apify schedules and your downstream comparison logic can provide those workflows.

### Getting started

1. Open [Meta Branded Content Library](https://www.facebook.com/ads/library/branded_content/).
2. Choose Instagram, select a business or creator, and set a date range.
3. Copy the URL. It must contain a numeric `id`, `target=instagram`, `start_date` and `end_date`, unless dates are supplied as overrides.
4. Paste it into `libraryUrl`, choose `maxItems`, and start the Actor.
5. Download the default dataset as JSON, CSV, Excel or another Apify-supported format.

The source URL's `query` is a display label; its numeric `id` identifies the selected entity. Changing only the label does not select a new business.

### Input example

```json
{
  "libraryUrl": "https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01",
  "maxItems": 5
}
```

This requests records published in March 2026 for the selected Library entity. Meta's URL `end_date` is **exclusive**. If you instead set `endDate: "2026-03-31"`, the Actor treats that override as inclusive, requesting the same interval.

### Input parameters

| Parameter | Meaning |
| --- | --- |
| `libraryUrl` | Required HTTPS selected-entity Library URL. Numeric `id` and Instagram target are required. |
| `startDate` | Optional inclusive YYYY-MM-DD override for URL `start_date`. |
| `endDate` | Optional inclusive YYYY-MM-DD override; the URL's own `end_date` remains exclusive when no override is supplied. |
| `maxItems` | Global accepted-record cap, default 100, minimum 1, maximum 1,000. Zero/unlimited are rejected. |

Dates must be real calendar dates and span no more than 366 days. Override precedence is applied before extraction and all returned records are checked against the effective range. Missing dates, reversed dates and unsupported URLs fail before the start event.

The Actor uses company-paid Apify datacenter proxies automatically. No proxy credentials, Facebook account or cookies are requested from you. US residential access was evaluated during development but is not enabled as an automatic fallback.

### Extracted data

| Field | Meaning |
| --- | --- |
| `contentId` | Source content ID; stable key for deduplication and comparisons. |
| `publicationDate` | Library publication date, YYYY-MM-DD. |
| `creator` | Instagram handle and canonical profile URL. |
| `brandPartners` | Array of Instagram brand handles and profile URLs. |
| `contentType` | `post`, `reel` or `story` as reported by the source. |
| `contentUrl` | Instagram post, Reel or Story link. |
| `platform` | Always `instagram`. |
| `sourceUrl` | Selected Library entity and effective date range. |

These are source-reported relationships, not estimates of contract value, paid-ad spend, audience size or campaign effectiveness.

### Output example

A public record observed in the Library during development:

```json
{
  "contentId": "18574970662003190",
  "publicationDate": "2026-03-27",
  "creator": {"handle": "oemerpa", "profileUrl": "https://www.instagram.com/oemerpa/"},
  "brandPartners": [{"handle": "nike", "profileUrl": "https://www.instagram.com/nike/"}],
  "contentType": "reel",
  "contentUrl": "https://www.instagram.com/reel/DWZOqqYgBf2/",
  "platform": "instagram",
  "sourceUrl": "https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01"
}
```

The `SUMMARY` key-value record reports count, date boundaries and whether the cap was reached. A successful export has fewer records than `maxItems` when the available Library pages are exhausted. Historical content links may expire.

### How much does it cost to export Instagram branded content partnerships?

Pay-per-event pricing includes a one-time **$0.002 start fee** per valid run and a per-record event. The BRONZE rate is **$0.004 per partnership record**. One record with multiple partners still has one item event. Duplicates, excluded Facebook records and unsuccessful extraction attempts do not produce item charges.

| Useful records | Estimated BRONZE Actor charge |
| --- | --- |
| 1 | 0.006 USD estimated total |
| 5 | 0.022 USD estimated total |
| 25 | 0.102 USD estimated total |
| 100 | 0.402 USD estimated total |

Spend-tier discounts depend on your qualifying aggregate monthly Apify Store spend, not the number of records in this Actor alone. See the Pricing tab for active tier rates. These are estimated Actor charges, not guarantees of invoices or earnings; billing corrections, refunds, disputes and taxes may affect final amounts. Required runtime/proxy services are paid by the company, not an undisclosed external API subscription.

A valid no-result run still incurs the start event. A failed upstream run may retain that start charge; no item event is emitted unless extraction finishes with accepted records.

### Coverage and limits

Meta sometimes displays a header count larger than the accessible records. For example, the tested March window displayed 16 while its complete public items page returned 14. Do not equate that header with an export guarantee.

Anonymous GraphQL pagination may be unauthorized. This Actor reads structured server-rendered results and splits date windows when necessary, reusing its anonymous browser session. It allows at most 64 windows and one fresh-session retry only for an immediate network failure within five seconds, before any records are collected. Long timeouts and schema/coverage errors fail without an automatic restart. It does not silently claim completeness when a single day has more than one page and the requested cap cannot be met: that case fails with guidance to narrow the job or lower the cap.

Meta can mix Facebook links into an Instagram-target result page; these are excluded. No inference is made to replace a missing partnership. The output is sorted by publication date after extraction, but a capped run is not a guarantee of the globally newest N records across every inaccessible source page.

### Integrations

- **Google Sheets / Excel:** append exports keyed by `contentId`; compare creator and partner handles between runs.
- **CRM / research database:** store source URLs alongside relationships for analyst review; one record can reference multiple partners.
- **Apify schedules:** rerun a recent date window and deduplicate in your destination; the Actor itself does not maintain cross-run state.
- **Webhooks / Make / Zapier:** process successful runs, then retrieve the default dataset. Handle failed coverage jobs separately instead of treating them as empty sponsorship activity.

### API usage

Replace `APIFY_TOKEN` with an environment variable containing your own Apify API token. Never paste credentials into input or published datasets.

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~meta-branded-content-partnerships/run-sync-get-dataset-items' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"libraryUrl":"https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01","maxItems":5}'
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/meta-branded-content-partnerships').call({
  libraryUrl: 'https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01',
  maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/meta-branded-content-partnerships').call(run_input={
    'libraryUrl': 'https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01',
    'maxItems': 5,
})
print(client.dataset(run['defaultDatasetId']).list_items().items)
```

### MCP and AI clients

The Actor does not use AI or send input/output to a model provider. You may separately choose to connect it to your own AI client through Apify MCP once it is available to your account.

#### Claude Code

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/meta-branded-content-partnerships"
```

#### Claude Desktop, Cursor, and VS Code

Use the client's HTTP MCP configuration; configure your own authentication separately:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/meta-branded-content-partnerships"
    }
  }
}
```

Example prompt: “Export five Instagram partnerships from this selected Meta Library URL for March 2026, then show creator handles and partner links.” Supply the selected Library URL explicitly. Do not ask the tool to discover entities from an ordinary profile URL or infer missing sponsorships.

### Legality and data handling

Only public Library content IDs, publication dates, creator/brand handles and public URLs are exported. No account passwords, user cookies, private messages or sensitive profile attributes are requested. Browser sessions and cookies are ephemeral and discarded when the browser closes; no cross-run cache is written.

Apify processes and stores your input, dataset, summary and operational logs under your account's storage settings. The Actor does not impose a separate retention timer or delete stored results automatically. Delete run datasets, key-value records and logs through Apify when no longer needed; downstream exports require separate deletion. Company-paid Apify proxy infrastructure receives source requests. Meta receives the selected public entity/date query. No AI provider receives runtime data.

Use public records responsibly, comply with applicable privacy and platform rules, and retain only information needed for your legitimate research. Public availability does not waive privacy obligations. This is an independent automation-lab tool, not endorsed by or affiliated with Meta, Instagram, Facebook or Apify. It uses Apify's standard user terms, without additional custom restrictions.

### FAQ and troubleshooting

**Why is a normal Instagram profile URL rejected?**
The current input contract requires Meta's selected-entity numeric ID. Select the profile or business in the Library and copy that URL.

**Why do I get fewer rows than Meta's count?**
The header can include unavailable content. Only recognized accessible Instagram records are exported. Facebook links in mixed pages are excluded.

**Why did the run fail instead of returning some rows?**
A challenge timeout, changed source schema, overfull single-day page or 64-window ceiling is not a verified empty result. Retry a narrower range when coverage is the problem. Contact us through the Actor's Apify Issues tab with a run link and sanitized input when the problem persists.

**Does an empty export mean no sponsorships happened?**
No. It means no accessible matching Library records were returned for that entity and period. It does not prove that offline or undisclosed partnerships did not exist.

### Related Actors

- [Instagram Profile Posts Scraper](https://apify.com/automation-lab/instagram-profile-posts-scraper): inspect public content separately; a post mention is not itself proof of a Library partnership.
- [Facebook Ads Library Scraper](https://apify.com/automation-lab/facebook-ads-library): research paid ad creatives, a distinct record type from creator-brand partnerships.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/meta-branded-content-partnerships/changelog.md

# Actor input Schema

## `libraryUrl` (type: `string`):

Copy the URL after selecting a business or creator in Meta Branded Content Library. It must use www.facebook.com/ads/library/branded\_content/ with a numeric id and target=instagram. The id selects the exact Library entity; query is a display label, not a substring filter. URL dates apply unless overridden below. Ordinary profile URLs and Facebook results are rejected.

## `startDate` (type: `string`):

Optional valid YYYY-MM-DD date. Overrides the URL start\_date. Records before this date are excluded. A start date must exist either here or in the URL. The combined date range cannot exceed 366 days.

## `endDate` (type: `string`):

Optional valid YYYY-MM-DD date, inclusive. Overrides the URL end\_date, which Meta treats as exclusive. If absent, the URL end\_date remains exclusive. A date must exist either here or in the URL. Dates are publication calendar dates, not a promise that Meta retains all historical content.

## `maxItems` (type: `integer`):

Global run cap after date filtering and deduplication by content id. Default 100; range 1–1000; zero and unlimited are not supported. The Actor may return fewer when the Library is exhausted. It splits dated pages to bypass unavailable anonymous pagination, up to 64 windows. If a single day has more than one page and your cap cannot be fulfilled, the run fails rather than claiming complete coverage. Source header counts can include unavailable records.

## Actor input object example

```json
{
  "libraryUrl": "https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01",
  "maxItems": 5
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset of deduplicated Instagram records.

## `summary` (type: `string`):

Export count, date boundaries and coverage limitations.

# 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 = {
    "libraryUrl": "https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01",
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/meta-branded-content-partnerships").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 = {
    "libraryUrl": "https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01",
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/meta-branded-content-partnerships").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 '{
  "libraryUrl": "https://www.facebook.com/ads/library/branded_content/?id=17841400602400210&query=Nike&target=instagram&start_date=2026-03-01&end_date=2026-04-01",
  "maxItems": 5
}' |
apify call automation-lab/meta-branded-content-partnerships --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/meta-branded-content-partnerships"
        }
    }
}
```

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/wPu1zmnKCcN1rojQ2/builds/Wh3HcwPxfHsEVxTMP/openapi.json
