Skip to content

Latest commit

 

History

History
85 lines (64 loc) · 2.17 KB

javascript.md

File metadata and controls

85 lines (64 loc) · 2.17 KB

JavaScript — Facebook Ad Library Scraper

Call the Facebook Ad Library Scraper from Node.js with the official apify-client.

Install

npm install apify-client

Run the Actor and read the dataset

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('logiover/meta-ad-library-scraper').call({
    searchTerms: ['nike', 'running shoes'],
    country: 'US',
    activeStatus: 'active',
    maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

for (const ad of items) {
    console.log(ad.pageName, '—', ad.status, '—', ad.adLibraryUrl);
}

Pull one advertiser's full ad set by Page ID

const run = await client.actor('logiover/meta-ad-library-scraper').call({
    pageIds: ['15087023444'],
    country: 'US',
    activeStatus: 'all',
    maxResults: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} ads`);

Extract just the fields you need (creative swipe file)

const swipe = items.map((ad) => ({
    advertiser: ad.pageName,
    text: ad.bodyText,
    cta: ad.ctaText,
    landingPage: ad.linkUrl,
    platforms: ad.publisherPlatform,
    media: ad.media,
    started: ad.startDate,
}));

console.table(swipe.slice(0, 20));

Political-ad spend tracking

const run = await client.actor('logiover/meta-ad-library-scraper').call({
    searchTerms: ['climate'],
    country: 'US',
    adType: 'political_and_issue_ads',
    maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

const withSpend = items
    .filter((a) => a.spendLowerBound != null)
    .map((a) => ({
        advertiser: a.pageName,
        spend: `${a.spendLowerBound}–${a.spendUpperBound} ${a.currency}`,
        impressions: a.impressions,
    }));

console.log(withSpend);

The client resolves your token, runs the hosted Actor, and streams back structured results. Nothing is scraped on your machine.