Call the Facebook Ad Library Scraper from Node.js with the official apify-client.
npm install apify-clientimport { 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);
}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`);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));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.