{"name":"ad-library-scraper","id":"sfoln/ad-library-scraper","title":"Ad Library Scraper – Meta, Google & TikTok","description":"One brand in, its ads across the Meta (Facebook, Instagram), Google Ads Transparency, TikTok and LinkedIn ad libraries out: ad counts, active and new ads, running time, top creatives, CTAs, landing domains and offers per platform. $12 per 1,000 platform snapshots.","version":"0.1","status":"ready","family":{"id":"ad-intelligence","name":"Ad intelligence","description":"Ads and advertisers from the Meta Ad Library, Google Ads Transparency Center, and the TikTok and LinkedIn ad libraries.","actors":6},"categories":["SOCIAL_MEDIA","LEAD_GENERATION","ECOMMERCE"],"availability":"on_request","seoTitle":"Ad Library Scraper API – Meta, Google, TikTok & LinkedIn","seoDescription":"Competitor ads across the Meta, Google, TikTok and LinkedIn ad libraries in one run: counts, active ads, creatives, CTAs and landing pages. $0.012 per library.","summary":"See what a brand advertises across the Meta (Facebook and Instagram), Google Ads Transparency, TikTok and LinkedIn ad libraries in one run: for each library you get one snapshot with the number of ads and how many are running, new ads in the last 7 and 30 days, first and last seen, the longest and median running time, formats, calls to action, landing domains, countries, offer phrases and the top creatives with their text and media URLs; plus a cross-platform summary with the landing domains the brand pushes everywhere. Built for performance marketers, agencies preparing pitches and AI agents doing competitor research. $0.012 per library snapshot, so all four libraries cost $0.048 per brand.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":5,"events":[{"name":"platform-snapshot","title":"Ad platform snapshot","description":"Charged once per brand and ad library (Meta, Google Ads Transparency, TikTok or LinkedIn) whose snapshot was delivered: the first page of the brand's ads summarized into counts, activity, running time, formats, CTAs, landing domains, offers and top creatives. A library that fails, or answers 'no ads' without the provider billing it, is not charged.","priceUsd":0.012},{"name":"extra-page","title":"Extra ad library page","description":"Paid plans only. Charged once per additional page of ads fetched for a platform snapshot (pagesPerPlatform above 1), and once for the Google advertiser lookup of a brand given without a website domain. A page that fails, or comes back empty without the provider billing it, is not charged.","priceUsd":0.007,"paidPlanOnly":true}]},"input":{"description":"Brands or advertisers to look up in the Meta, Google Ads Transparency, TikTok and LinkedIn ad libraries. Each brand gets one snapshot record per library plus one cross-platform summary record.","required":["brands"],"fields":[{"name":"brands","title":"Brands","type":"array","required":true,"description":"One brand per line: a name (\"Nike\"), its website domain (\"nike.com\") or both (\"Nike | nike.com\"). Optional ids after more \"|\": facebook:<page ID>, linkedin:<company ID or name>, tiktok:<advertiser name>, google:<AR… advertiser ID>. API callers can pass objects { name, domain, facebookPageId, linkedinCompanyId, tiktokAdvertiser, googleAdvertiserId }. Accounts on the Apify free plan can process up to 5 brands per run (one page per library).","prefill":["Nike | nike.com"],"editor":"stringList"},{"name":"platforms","title":"Ad libraries","type":"array","required":false,"description":"Which ad libraries to search. Each one is a separate snapshot (and charge). Default: all four.","default":["meta","google","tiktok","linkedin"],"editor":"select"},{"name":"country","title":"Country","type":"string","required":false,"description":"2-letter country code (US, GB, DE …) to restrict Meta, Google and LinkedIn to ads shown there. Empty = all countries. The TikTok library is always searched as a whole.","editor":"textfield"},{"name":"activeOnly","title":"Active ads only","type":"boolean","required":false,"description":"Meta: request only ads that are running now. Google, TikTok and LinkedIn have no status filter: ads last shown more than 7 days ago are left out of their snapshots.","default":false},{"name":"pagesPerPlatform","title":"Pages per library","type":"integer","required":false,"description":"Pages of ads to read per library (about 20–30 ads per page). The first page is part of the snapshot; every further page is charged as extra-page. Paid plans only above 1.","default":1,"minimum":1,"maximum":5},{"name":"maxCreativesPerPlatform","title":"Top creatives per library","type":"integer","required":false,"description":"How many creatives each snapshot lists in topCreatives (running ads first, then the longest running).","default":5,"minimum":1,"maximum":25},{"name":"includeAllAds","title":"Include every ad","type":"boolean","required":false,"description":"Also list every ad of the fetched pages in each snapshot (field ads). No extra charge; larger records.","default":false},{"name":"maxBrands","title":"Max brands","type":"integer","required":false,"description":"Safety cap on the number of brands processed in this run; brands beyond it are ignored and counted as inputItemsDropped in the OUTPUT record.","default":100,"minimum":1,"maximum":1000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"How many brands are processed in parallel (the libraries of one brand are always searched in parallel).","default":3,"minimum":1,"maximum":8},{"name":"itemTimeoutSecs","title":"Per-brand timeout (seconds)","type":"integer","required":false,"description":"Time limit per brand. No new page is started in its last 90 seconds.","default":600,"minimum":120,"maximum":3600},{"name":"includeRaw","title":"Include raw upstream response","type":"boolean","required":false,"description":"Attach the unmodified ad library pages to each snapshot record (much larger output).","default":false}]},"exampleInput":{"brands":["Nike | nike.com"]},"outputFields":[{"name":"input","type":"object | string","title":"Input","description":"The brand as parsed: { name, domain?, facebookPageId?, linkedinCompanyId?, linkedinCompany?, tiktokAdvertiser?, googleAdvertiserId? }."},{"name":"recordType","type":"string","title":"Record type","description":"platform = one ad library's snapshot (charged platform-snapshot); summary = the brand's cross-platform summary (not charged).","example":"platform"},{"name":"brand","type":"string","title":"Brand","description":"Brand name.","example":"Nike"},{"name":"platform","type":"string","title":"Ad library","description":"meta | google | tiktok | linkedin (platform records)."},{"name":"platformName","type":"string","title":"Library name","description":"Meta (Facebook, Instagram) | Google Ads Transparency | TikTok | LinkedIn."},{"name":"query","type":"object","title":"Query","description":"{ by, value }: what the library was asked (pageId, companyName, advertiserId, domain, advertiserName, companyId or company)."},{"name":"resolvedAdvertisers","type":"array","title":"Google advertisers","description":"Google only, for a brand given by name: the advertisers the lookup found ({ advertiserId, name, region, adsEstimate })."},{"name":"advertiser","type":"string | null","title":"Advertiser","description":"Advertiser name as the library shows it on the ads."},{"name":"advertiserId","type":"string | null","title":"Advertiser ID","description":"Facebook page ID, Google advertiser ID or LinkedIn company ID when the snapshot was fetched by ID."},{"name":"adsFetched","type":"integer","title":"Ads fetched","description":"Distinct ads on the fetched pages."},{"name":"totalAdsEstimate","type":"integer | null","title":"Total ads (library)","description":"The library's own total for the query, when it reports one."},{"name":"adsFound","type":"integer","title":"Ads in snapshot","description":"Ads the snapshot covers (adsFetched minus ads known to be over when activeOnly is on)."},{"name":"activeAds","type":"integer","title":"Active ads","description":"Meta: the library's active flag. Google, TikTok, LinkedIn: last shown within 7 days."},{"name":"newAds7d","type":"integer","title":"New ads (7 days)","description":"Ads first seen in the last 7 days."},{"name":"newAds30d","type":"integer","title":"New ads (30 days)","description":"Ads first seen in the last 30 days."},{"name":"firstSeen","type":"string | null","title":"First seen","description":"Earliest start date among the ads (ISO)."},{"name":"lastSeen","type":"string | null","title":"Last seen","description":"Latest date an ad was shown (ISO; now for ads Meta marks active)."},{"name":"longestRunningDays","type":"integer | null","title":"Longest running (days)","description":"Platform records: the longest an ad has run, in days."},{"name":"medianDaysRunning","type":"integer | null","title":"Median running (days)","description":"Median running time of the ads, in days."},{"name":"formats","type":"object","title":"Formats","description":"Ads per format: image, video, carousel, text, dynamic, other, unknown."},{"name":"ctas","type":"object","title":"Calls to action","description":"Ads per call-to-action text (Meta, LinkedIn)."},{"name":"landingDomains","type":"array","title":"Landing domains","description":"[{ domain, ads }]: the registrable domains the ads link to, most used first."},{"name":"countries","type":"array","title":"Countries","description":"Countries as the library reports them (ISO codes on Meta and Google, names on LinkedIn)."},{"name":"publisherPlatforms","type":"array","title":"Placements","description":"Meta placements: facebook, instagram, messenger, audience_network."},{"name":"offers","type":"array","title":"Offers","description":"[{ offer, ads }]: offer phrases found in the ad copy (e.g. 30% off, free shipping, free trial, sale, price mention)."},{"name":"topCreatives","type":"array","title":"Top creatives","description":"Running ads first, then the longest running: { adId, url, advertiser, format, text, headline, cta, landingUrl, landingDomain, imageUrls, videoUrls, thumbnailUrl, firstSeen, lastSeen, isActive, daysRunning, countries, publisherPlatforms, reach }."},{"name":"ads","type":"array","title":"All ads","description":"Every ad of the fetched pages, same shape as topCreatives (only with includeAllAds)."},{"name":"pagesFetched","type":"integer","title":"Pages fetched","description":"Library pages read for this snapshot."},{"name":"extraPagesCharged","type":"integer","title":"Extra pages charged","description":"extra-page events charged for this library (further pages and the Google advertiser lookup)."},{"name":"domain","type":"string | null","title":"Domain","description":"Summary records: the brand's website domain."},{"name":"platformsRequested","type":"array","title":"Libraries requested","description":"Summary records."},{"name":"platformsWithAds","type":"array","title":"Libraries with ads","description":"Summary records: libraries where the brand has ads."},{"name":"platformsFailed","type":"array","title":"Libraries failed","description":"Summary records: libraries without a snapshot (error or budget; not charged)."},{"name":"totalAdsFound","type":"integer","title":"Total ads","description":"Summary records: ads across all snapshots."},{"name":"totalActiveAds","type":"integer","title":"Total active ads","description":"Summary records."},{"name":"longestRunning","type":"object | null","title":"Longest running","description":"Summary records: { platform, days } of the longest-running ad."},{"name":"sharedLandingDomains","type":"array","title":"Shared landing domains","description":"Summary records: [{ domain, ads, platforms }] for domains the brand advertises on more than one library."},{"name":"topLandingDomains","type":"array","title":"Top landing domains","description":"Summary records: [{ domain, ads }] across all libraries."},{"name":"platforms","type":"object","title":"Per library","description":"Summary records: { <library>: { status, adsFound, activeAds, charged } }."},{"name":"snapshotsCharged","type":"integer","title":"Snapshots charged","description":"Summary records: platform-snapshot events charged for the brand."},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Whether this record incurred a pay-per-event charge."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"platform-snapshot (or extra-page when only the Google lookup was charged); present only when charged."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when a charge came back short (present only then)."},{"name":"source","type":"string","title":"Source","description":"scrapecreators"},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ code, message, provider?, status? } when status is not ok: no_ads, no_advertiser, not_found, budget_exhausted, aborted; upstream codes: auth, insufficient_credits, rate_limit, timeout, network, server, client, invalid_response; runtime codes: free_plan_limit, unmetered, charge_failed, record_too_large, invalid_record, dataset_push_failed."},{"name":"warnings","type":"array","title":"Warnings","description":"E.g. a library skipped for the budget, paging stopped by the time limit, the free-plan page limit."},{"name":"raw","type":"string","title":"Raw pages","description":"The unmodified library pages (only with includeRaw)."}],"outputExample":{"input":{"name":"Nike","domain":"nike.com"},"recordType":"platform","brand":"Nike","platform":"meta","platformName":"Meta (Facebook, Instagram)","query":{"by":"companyName","value":"Nike"},"advertiser":"Nike","advertiserId":null,"adsFetched":30,"totalAdsEstimate":1200,"adsFound":30,"activeAds":22,"newAds7d":4,"newAds30d":11,"firstSeen":"2026-01-15T08:00:00.000Z","lastSeen":"2026-10-14T10:00:00.000Z","longestRunningDays":272,"medianDaysRunning":46,"formats":{"image":14,"video":11,"carousel":5},"ctas":{"Shop now":21,"Learn more":9},"landingDomains":[{"domain":"nike.com","ads":27},{"domain":"fb.com","ads":3}],"countries":[],"publisherPlatforms":["facebook","instagram"],"offers":[{"offer":"free shipping","ads":6},{"offer":"30% off","ads":2}],"topCreatives":[{"adId":"1001","url":"https://www.facebook.com/ads/library?id=1001","advertiser":"Nike","format":"image","text":"Up to 30% off running shoes. Free shipping on orders over $50.","headline":"Nike","cta":"Shop now","landingUrl":"https://www.nike.com/running","landingDomain":"nike.com","imageUrls":["https://scontent.xx.fbcdn.net/1001.jpg"],"videoUrls":[],"thumbnailUrl":"https://scontent.xx.fbcdn.net/r_1001.jpg","firstSeen":"2026-07-01T00:00:00.000Z","lastSeen":"2026-10-14T00:00:00.000Z","isActive":true,"daysRunning":106,"countries":[],"publisherPlatforms":["facebook","instagram"],"reach":null}],"pagesFetched":1,"extraPagesCharged":0,"status":"ok","charged":true,"chargedEvent":"platform-snapshot","source":"scrapecreators","fetchedAt":"2026-10-14T10:00:00.000Z"},"faq":[{"question":"What does one snapshot contain, and how many ads does it cover?","answer":"A snapshot summarizes the first page of the brand's ads in one library (about 20–30 ads): how many ads and how many are active, new ads in the last 7 and 30 days, first and last seen, the longest and median running time, formats, calls to action, landing domains, countries, Meta placements, offer phrases and the top creatives with text and media URLs. Set pagesPerPlatform to read up to 5 pages per library (extra-page, paid plans)."},{"question":"Am I charged when a library has no ads for the brand?","answer":"Only when the data provider billed that empty answer; otherwise the platform record has status not_found and charged false. A library that errors or times out is never charged, and the other libraries of the brand are not affected."},{"question":"Why add the website domain?","answer":"Google's Ads Transparency Center is searched by the advertiser's website domain. Without one, the Actor first looks the advertiser up by name, which is one more upstream request (charged as extra-page on paid plans) and can pick a namesake."}],"mcpExamplePrompt":"Which ad libraries is Nike (nike.com) advertising in right now? Compare its ads on Meta, Google, TikTok and LinkedIn: how many are running, since when, and which landing pages and offers they push.","related":["facebook-ads-search","google-ads-transparency","tiktok-ads-search","linkedin-ads-search","facebook-ad-lookup"],"urls":{"site":"https://www.sfoln.com/actors/ad-library-scraper/","siteJson":"https://www.sfoln.com/actors/ad-library-scraper.json","siteMarkdown":"https://www.sfoln.com/actors/ad-library-scraper.md","runSync":"https://api.apify.com/v2/actors/sfoln~ad-library-scraper/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~ad-library-scraper/runs","mcp":"https://mcp.apify.com?tools=sfoln/ad-library-scraper","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20Ad%20Library%20Scraper%20%E2%80%93%20Meta%2C%20Google%20%26%20TikTok%20(sfoln%2Fad-library-scraper)&body=Please%20publish%20ad-library-scraper.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}