Meta Brand Finder — Resolve Brand Names to Page IDs
Pricing
from $25.00 / 1,000 results
Meta Brand Finder — Resolve Brand Names to Page IDs
Convert any brand name into deduplicated Meta advertiser Page ID candidates with category, followers, avatar, and page alias. Outputs map directly to the pageId input of Meta, Instagram, and WhatsApp Ad Library scrapers. First step in any Meta Ad Library automation pipeline.
Pricing
from $25.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapeify
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Meta Ad Library Brand Finder — Resolve Brand Names to Facebook Page IDs
Convert any brand name string into a curated list of Meta advertiser page candidates — complete with numeric Page IDs, categories, follower counts, avatar URLs, and page aliases — without touching the Meta Ad Library UI. The Scrapeify Brand Finder issues an automated keyword_unordered Ad Library search, fetches up to 150 source ads using a collated strategy, projects each result into a clean suggestion row, merges duplicates by preferring non-null fields, and outputs structured Dataset items plus SUMMARY and RESULTS key-value records.
Use it as the first step in any Meta Ad Library automation pipeline to resolve brand strings into the numeric page_id values required by the Meta, Instagram, and WhatsApp Ad Library scrapers.
Features
| Capability | Detail |
|---|---|
| Single-string input | Just pass brand_name — minimal configuration surface |
| Automated dedup + merge | Stable keys on page_id; merges duplicate candidates preferring non-null fields |
| Rich suggestion rows | adlibrary_url (Page ID), brand_name, category, avatar_url, likes, page_alias, timestamp |
| Operational metrics | source_ads_count, suggestions_count, pages_scraped, execution_time_seconds in every summary |
| Chain-ready output | adlibrary_url maps directly to pageId in all downstream Scrapeify Ad Library actors |
| Fail-fast monitoring | Hard errors trigger Actor.fail for PagerDuty/email alerts |
| Collated strategy | collated_strategy="all" widens fetch for broader page candidate recall |
| Timestamp metadata | Each suggestion row carries ISO timestamp for drift detection on periodic re-runs |
Use Cases
Page ID Discovery (Primary Use Case)
The most common use: find the numeric page_id for any Meta advertiser programmatically. Pass the result as pageId to the Meta, Instagram, or WhatsApp Ad Library scrapers for deep creative pulls — without manually hunting IDs in the browser UI.
Competitive Brand Mapping
Build a registry of competitor Page IDs keyed to your internal brand taxonomy. Automate quarterly refreshes to detect newly advertising pages, brand renames, or subsidiary accounts entering the paid social market.
Brand List Automation
Process a CSV of 100+ brand names through a fan-out orchestration. Each row gets a Brand Finder run, validated Page IDs, a subsequent creative pull, and dashboard ingestion — zero manual UI work at scale.
Disambiguation & Homonym Research
The same brand string can return multiple advertisers — regional entities, retailers, franchisees, licensees. Surface all candidates with category, likes, and avatar_url for human or LLM-assisted selection before triggering expensive creative pulls.
AI Agent Tool Registration
Register as an agent tool that converts natural-language brand mentions to structured (page_id, name, category) tuples. Downstream agents invoke Ad Library scrapers with exact Page IDs rather than keyword searches, improving result precision.
CRM Data Enrichment
Join marketing CRM brand strings to Meta social graph entities. Enrich contact and company records with category, likes, page_alias, and avatar_url for segmentation, lead scoring, or campaign targeting.
Market Landscape Research
Discover which advertiser entities are actively running ads for any brand or category keyword. Build a rapid competitive landscape map without manual browsing — output feeds directly into category analysis dashboards.
Periodic Monitoring
Run the finder on a schedule for your tracked brand list. Diff adlibrary_url sets between runs to detect new advertiser entrants, brands that stopped advertising, or renamed pages.
Why Choose This Actor
- Focused scope — discovery only, not creative dumps; keeps individual runs cheap and fast
- Schema alignment —
adlibrary_urlmaps directly topageIdacross all Scrapeify Ad Library actors - Explicit recall metrics —
source_ads_countandpages_scrapedon every run so you know when coverage is thin - Production failure handling —
Actor.failwith typed error KV keys surfaces to monitoring infrastructure
Quick Start
- Open the Scrapeify Brand Finder on Apify Console.
- Enter a
brand_namestring (e.g.NikeorGlossier). - Click Start and wait for completion (typically 20–40 seconds).
- Open the Dataset for deduplicated suggestion rows.
- Check
SUMMARYin the default KV store for counts and timing. - Pass the
adlibrary_urlvalue (numeric Page ID) aspageIdin a downstream Ad Library scraper.
Tip: Review
category,likes, andavatar_urlbefore passing a Page ID to a creative scraper — especially for common brand names with multiple candidate pages.
Input Schema
{"brand_name": "Nike"}
| Field | Type | Required | Description |
|---|---|---|---|
brand_name | string | Yes | Brand name or search string. Always pass explicitly — do not rely on internal actor defaults in production. |
Output Schema
Dataset Row (one row per unique advertiser page candidate)
{"adlibrary_url": "15087023444","brand_name": "Nike Global","category": "Sportswear","avatar_url": "https://scontent.xx.fbcdn.net/v/t39.30808-1/...","likes": 38000000,"verification": null,"page_alias": "nike","ig_username": null,"ig_followers": null,"ig_verification": null,"search_brand_name": "Nike","timestamp": "2026-05-07T12:34:56.789012"}
| Field | Type | Description |
|---|---|---|
adlibrary_url | string | Numeric Page ID — pass as pageId in downstream Ad Library scrapers |
brand_name | string | Page display name from Meta |
category | string | Meta page category (e.g. Sportswear, Financial Services, Health & Beauty) |
avatar_url | string | Page profile image URL for visual verification |
likes | integer | Page like count at time of scrape |
verification | string/null | Verification badge status if available |
page_alias | string | Vanity URL slug (e.g. nike → facebook.com/nike) |
ig_username | string/null | Linked Instagram username (placeholder — not actively enriched) |
ig_followers | integer/null | Instagram follower count (placeholder) |
ig_verification | boolean/null | Instagram verification (placeholder) |
search_brand_name | string | Input brand_name echoed for warehouse joins and audits |
timestamp | string | ISO 8601 UTC timestamp of extraction |
Important:
adlibrary_urlis a stringified numeric Page ID, not a URL. Pass it directly as the string value ofpageId.
Key-Value Store: SUMMARY
{"brand_name": "Nike","total_results": 12,"suggestions_count": 12,"source_ads_count": 150,"pages_scraped": 11,"execution_time_seconds": 28.4,"timestamp": "2026-05-07T12:34:56.789012"}
Key-Value Store: RESULTS
{"suggestions": [{"adlibrary_url": "15087023444","brand_name": "Nike Global","category": "Sportswear","avatar_url": "https://scontent.xx.fbcdn.net/...","likes": 38000000,"verification": null,"page_alias": "nike"}],"metadata": {"brand_name": "Nike","total_results": 12,"source_ads_count": 150,"execution_time_seconds": 28.4,"timestamp": "2026-05-07T12:34:56.789012"}}
| KV Key | Description |
|---|---|
SUMMARY | Run counts, timing, and brand name — ideal for dashboards and zero-result alerts |
RESULTS | Full suggestion array + metadata — download for pipeline ingestion |
ERROR | On failure: { error, timestamp, brand_name } — triggers Actor.fail |
API Examples
cURL
curl "https://api.apify.com/v2/acts/scrapeify~facebook-ad-library-suggestions/runs?token=$APIFY_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"brand_name": "Allbirds"}'
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("scrapeify/facebook-page-id-finder").call(run_input={"brand_name": "Allbirds"})pages = client.dataset(run["defaultDatasetId"]).list_items().itemsfor page in pages:print(f"Page ID: {page['adlibrary_url']} | Name: {page['brand_name']} | Category: {page['category']}")
JavaScript / Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("scrapeify/facebook-page-id-finder").call({brand_name: "Lululemon",});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Found ${items.length} advertiser candidates for Lululemon`);
Chain Example — Brand Finder → Meta Ad Scraper (JavaScript)
// Step 1: Resolve brand name to Page ID candidatesconst finderRun = await client.actor("scrapeify/facebook-page-id-finder").call({brand_name: "Glossier",});const { items } = await client.dataset(finderRun.defaultDatasetId).listItems();// Step 2: Select best candidate (validate category/likes before automating)const pageId = items[0]?.adlibrary_url;// Step 3: Deep ad creative pullconst adsRun = await client.actor("scrapeify/meta-ad-library-scraper").call({pageId: String(pageId),maxResults: 400,sortBy: "total_impressions",});
Chain Example — Brand Finder → Meta Ad Scraper (Python)
finder_run = client.actor("scrapeify/facebook-page-id-finder").call(run_input={"brand_name": "Glossier"})items = client.dataset(finder_run["defaultDatasetId"]).list_items().itemspage_id = str(items[0]["adlibrary_url"])ads_run = client.actor("scrapeify/meta-ad-library-scraper").call(run_input={"pageId": page_id, "maxResults": 400, "sortBy": "total_impressions"})
Integration Examples
LangChain
from langchain.tools import tool@tooldef find_meta_page_id(brand_name: str) -> list:"""Resolve a brand name to Meta advertiser Page ID candidates with category and likes."""run = client.actor("scrapeify/facebook-page-id-finder").call(run_input={"brand_name": brand_name})return client.dataset(run["defaultDatasetId"]).list_items().items
Chain: find_meta_page_id → get_meta_ads → analyze_creative_themes
CrewAI
BrandResearchAgent resolves brand names with this tool. AdStrategyAgent receives validated Page IDs and pulls creative data. BriefAgent generates competitive reports — no manual URL hunting in the workflow.
AutoGen
# UserProxyAgent: "Find Allbirds' Meta Page ID and pull their top 200 Instagram ads"# AssistantAgent calls brand_finder → validates candidates → calls instagram_scraper# AnalysisAgent clusters creative themes from structured JSON
Make.com / Zapier
Iterator over brand name list → HTTP POST to Brand Finder → collect Page ID per brand → batch-trigger Meta ad scraper → aggregate in Google Sheets competitive dashboard.
Claude / Gemini Tool Use
Feed multiple candidate rows as JSON context. Prompt the model: "Given these Meta page candidates for 'Nike', which best matches a global sportswear brand selling running shoes?" Ground final selection on numeric ID, not name alone.
n8n Workflow
- Cron trigger → Brand Finder run per brand
- Read
SUMMARY.suggestions_count - If 0 → Slack alert "No pages found for {brand_name}"
- If >0 → pass top
adlibrary_urlto Meta Ad Scraper → update Notion database
Vector Database
Embed brand_name + " " + category as semantic vector. Store adlibrary_url, likes, page_alias as metadata. Build a brand-to-page mapping retrieval system for disambiguation at scale.
Frequently Asked Questions
1. What exactly is adlibrary_url?
A stringified numeric Meta Page ID — despite the field name, it is not a URL. Pass it directly as the string value of pageId in downstream scrapers.
2. Why is the internal fetch capped at 150 source ads? Balances cost, speed, and coverage. The collated strategy maximizes page candidate diversity within this window. Fork to increase the cap if wider recall is required.
3. How do I handle multiple candidates for one brand?
Review category, likes, and avatar_url for each row. Use a disambiguation heuristic or an LLM prompt to select the correct entity before triggering expensive creative pulls.
4. Why are ig_username and ig_followers null?
These are placeholder fields. Instagram graph enrichment is not performed by this actor. Enrich externally using page_alias.
5. What does search_brand_name contain?
Your exact input brand_name echoed on every row. Preserves audit trail when processing lists of brands in batch pipelines.
6. What happens if no results are returned?
SUMMARY.total_results = 0 — a clean completion, not an error. The brand may not have active ads in the Ad Library.
7. Does this verify business ownership or registration? No — outputs are derived from public Meta Ad Library data only. Association between brand string and page is probabilistic.
8. Can I run this for 500 brands simultaneously? Use a fan-out orchestrator with controlled concurrency. Avoid thousands of simultaneous identical queries from a single IP — add request jitter.
9. What triggers Actor.fail?
Unhandled exceptions during the scrape. A typed ERROR key is written to the KV store with { error, timestamp, brand_name } for debugging.
10. Can I filter results by country or language?
Base search uses country=ALL. Country-specific filtering requires a downstream Ad Library scraper with geo-filtered URL parameters.
11. How long does a typical run take? 20–40 seconds for common brand names. Niche strings with few matching ads may complete faster.
12. Are re-runs idempotent? Results reflect the Ad Library state at execution time. Re-runs may return slightly different candidates as advertisers enter or exit the platform.
13. Is category always accurate?
Category comes from Meta's public page data. It may be null, generic (Brand, Company), or miscategorized by the page owner.
14. Can I find Instagram-only advertisers with this? This finder discovers Meta page candidates globally. Use the resulting Page ID with the Instagram Ad Scraper for Instagram-specific data.
15. What is collated_strategy="all" internally?
Instructs the underlying fetch to aggregate all available ad format types — still bounded by Meta's API responses. More comprehensive than a single-pass approach.
16. Are timestamps in UTC? Yes — ISO 8601 format in UTC across all timestamp fields.
17. How do I set up zero-result alerts?
After each run, compare SUMMARY.suggestions_count to 0. If zero, route to a Slack or email alert in your orchestrator.
18. What encoding are brand name and page name fields in? UTF-8. Non-Latin brand names (Arabic, Chinese, Korean, etc.) pass through unchanged.
19. Is this suitable for political advertiser research? Political pages appear in the Ad Library. Apply appropriate data governance and privacy obligations to this use case.
20. What does a "collided" brand name mean? Multiple distinct advertisers bidding on the same search term. Expect multiple rows; do not auto-select the first result for high-stakes automation.
21. Can I get a page's website URL from this actor?
Website URL is not a primary output field. Use page_alias to construct the Facebook URL, or enrich via downstream scraper fields.
22. How should I handle brand names with special characters? Pass UTF-8 strings as users would type them. The actor passes the string to Meta's search API without sanitization issues for standard UTF-8 input.
23. What is verification in the output?
Meta's page verification badge status, when available. null for most non-verified pages.
24. Can I use this to monitor a competitor's advertising presence?
Yes — schedule periodic runs and diff adlibrary_url sets to detect new advertiser entities entering a category.
25. What does a run with source_ads_count = 0 indicate?
No ads were fetched from the Ad Library for the brand string. Usually means the brand has no active or archived Meta ads, or the string matches nothing in the index.
Best Practices
- Always validate candidates before passing Page IDs to creative scrapers — use
category+likesas signal - Store
search_brand_namein your warehouse for audit trails when brand naming conventions evolve - Version your orchestration when internal actor constants change in forks
- Use exponential backoff at scheduler level for transient Meta errors
- Tag Apify runs with
{ brand_name, source_list, run_date }metadata for traceability in batch jobs - Test with niche brands first — validates pipeline before processing large brand registries
- Archive
SUMMARYwith each run for week-over-week coverage trend monitoring
Performance & Scalability
| Factor | Guidance |
|---|---|
| Single-run scope | ≤150 internal ads; typically 20–40 seconds |
| Fan-out capacity | 500+ brands/hour at moderate concurrency with orchestrator |
| Memory | Lightweight HTTP — no browser required |
| Dedup efficiency | Stable key merging prevents duplicate rows across collated results |
AI & Automation Workflows
LLM disambiguation: Pass all candidate rows to Claude or GPT. Include CRM context fields (industry, country, known products). Ask for the best match. Ground the decision on the numeric adlibrary_url, not brand name.
Brand registry pipeline: Product team exports brand spreadsheet → fan-out Brand Finder → store Page ID mappings → weekly ad creative refresh → competitive intelligence digest in Slack.
Entity graph construction: Join brand strings from Google News Scraper press mentions with Meta page candidates from this actor. Build a linked-entity graph enriched with advertising presence signals for market intelligence platforms.
Error Handling
| Scenario | Behavior |
|---|---|
Missing brand_name | Actor runs with internal default — always pass explicitly in production |
| Unhandled exception | Error row in Dataset + ERROR KV key + Actor.fail for monitoring |
| Meta API error | Typed error propagation; partial Dataset results may still be present |
| Zero results | Clean completion — SUMMARY.total_results = 0, not a failure state |
| Duplicate pages | Merged by stable page_id key — one row per unique page |
Trust & Reliability
Scrapeify positions the Brand Finder as the lightweight discovery gateway to the broader Ad Library ecosystem. Explicit metrics on every run — source_ads_count, pages_scraped, execution_time_seconds — ensure teams know when coverage is thin and can adjust strategy before committing to expensive downstream creative pulls.
Related Scrapeify Actors
Explore the full Scrapeify suite — chain these actors together for end-to-end automation pipelines:
| Actor | What it does |
|---|---|
| Amazon Scraper | ASINs, prices, sponsored flags across 23 marketplaces |
| Instagram Ad Library Scraper | Instagram-only ads from Meta Ad Library |
| Meta Ad Library Scraper | Facebook & Instagram ads with sort options |
| WhatsApp Ad Scraper | Click-to-WhatsApp ad creatives |
| YouTube Video Downloader | Videos & audio to Apify Key-Value Store |
| Google Maps Scraper | Local business leads, reviews, emails, contacts |
| Google News Scraper | Headlines, sources, article URLs (up to 2K) |
Meta and Facebook are trademarks of Meta Platforms, Inc. This actor is not affiliated with or endorsed by Meta.