Multi-Channel Ad Intelligence: Meta, Google, LinkedIn, TikTok
Pricing
from $0.90 / 1,000 ad scrapeds
Multi-Channel Ad Intelligence: Meta, Google, LinkedIn, TikTok
Search competitor ads across Meta Ad Library, Google Ads Transparency Center, LinkedIn Ad Library, and TikTok Commercial Content Library in one run, with a single normalized output schema across all platforms. If one platform fails or has no coverage for a query, the rest still return results.
Pricing
from $0.90 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
Capable Cauldron
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Scrape competitor ads from four ad libraries in one run: the Meta Ad Library (Facebook + Instagram), Google Ads Transparency Center, LinkedIn Ad Library and TikTok Commercial Content Library. Results come back in one normalized schema, so you never reconcile field names between platforms. Type a brand name or keyword, pick a country, and you get ad copy, creatives, CTAs, landing pages and run dates as one dataset. No login, cookies or API keys for any platform.
If one platform fails or has no coverage for a query, the other three still run and return their results. Built on Apify, so you can schedule a weekly sweep of your competitive set, trigger it from the API or a webhook, and push results to Google Sheets or your BI tool. Click Try for free to open it in Console. Apify's free plan includes $5 of monthly credit, which buys about 3,000 ads.
See it run in 21 seconds:
What can Multi-Channel Ad Intelligence do?
- 🎯 Search four ad libraries at once (Meta, Google, LinkedIn, TikTok) or any subset
- 📝 Ad copy and headlines, the actual text competitors are running (Meta, LinkedIn, TikTok headline)
- 🖼️ Creatives: direct image and video URLs, HD where available
- 🔗 CTAs and landing pages, what they ask for and where they send traffic (Meta, Google)
- 📅 Run dates and longevity, how long an ad has been live (Google, TikTok)
- 🏢 Advertiser profiles: page and advertiser IDs, follower counts, verification
- 🧩 One schema across platforms: fields a platform doesn't expose come back
null, never renamed - 🛡️ Partial-failure safe: a blocked platform reports its error in the run summary and the rest continue
- 📤 Export to CSV, Excel, JSON or XML, or pull results via API
What data can you extract from each ad library?
| Platform | Ad copy / CTA | Creative | Run dates | Coverage |
|---|---|---|---|---|
| Meta (Facebook + Instagram) | Yes | Yes | Rarely shown | Worldwide |
| Landing URL only | Yes | Yes | Worldwide, ~1 year history | |
| Yes | Yes | Not shown | Worldwide, B2B | |
| TikTok | Headline only | Yes | Yes | EEA + UK + Switzerland, last 30 days |
TikTok's Commercial Content Library exists to meet European transparency rules and has no US brand-ad coverage. A country outside the EEA returns zero TikTok ads. That is expected, not an error, and the other three platforms still run.
How to scrape competitor ads from Meta, Google, LinkedIn and TikTok
- Click Try for free to open the Actor in Apify Console.
- Enter one or more queries: brand names (
nike) or keywords (running shoes). - Pick platforms. Leave the default to search all four.
- Set country to an ISO-2 code such as
USorDE, orALLfor worldwide. For TikTok results choose an EEA/UK/CH country. - Set max ads per query. 50 per platform is enough to see what the data looks like.
- Keep residential proxy enabled (the default). Facebook throttles datacenter IPs and LinkedIn's library sits behind Cloudflare.
- Click Start. Ads stream into the dataset per platform. The Creatives view shows images and videos side by side.
- Export from the Storage tab as CSV, Excel or JSON, or fetch the dataset from the API.
How much does it cost to scrape Meta, Google, LinkedIn and TikTok ads?
Pricing is per event: each ad returned, plus a small fee per search. There is no charge for compute time.
| Event | When it fires | Price |
|---|---|---|
ad-scraped | Each ad added to your dataset | $0.0015 |
query-processed | Each query on each platform, even if it finds 0 ads | $0.02 |
| Actor start | Once per run | $0.02 |
Volume discounts on paid Apify plans bring the per-ad price down to $0.0009.
Worked examples
- 1 brand × 4 platforms × 50 ads = 200 ads + 4 searches, costs $0.40
- 5 brands × 4 platforms × 100 ads = 2,000 ads + 20 searches, costs $3.42
- 20 brands × Meta only × 200 ads = 4,000 ads + 20 searches, costs $6.42
Apify's free plan ($5/month) covers about 3,000 ads. Nothing is charged on top. To cap spend, lower maxAdsPerQuery or trim the platforms list. When your Apify spending limit is reached, each platform stops on its own.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
queries | array | yes | — | Brand names or keywords to search |
platforms | array | no | all four | Any of meta, google, linkedin, tiktok |
country | string | no | ALL | ISO-2 code (US, GB, DE) or ALL. TikTok needs an EEA/UK/CH code |
maxAdsPerQuery | integer | no | 50 | Ads to fetch per query, per platform |
activeStatus | string | no | ACTIVE | ACTIVE, INACTIVE or ALL. Meta only; the other libraries have no status filter |
proxyConfiguration | object | no | residential | Apify proxy settings. Keep residential for Meta, LinkedIn and TikTok; Google works from any IP |
includeRawData | boolean | no | false | Attach the unprocessed platform response under raw. Useful for debugging; increases dataset size |
metaOptions | object | no | {} | Meta overrides, e.g. {"publisherPlatforms": ["instagram"], "mediaType": "VIDEO"} |
tiktokOptions | object | no | {} | TikTok overrides, e.g. {"region": "FR"} to pick a library country when country is ALL |
googleOptions | object | no | {} | Reserved for future Google-specific filters |
linkedinOptions | object | no | {} | Reserved for future LinkedIn-specific filters |
{"queries": ["nike"],"platforms": ["meta", "google", "linkedin", "tiktok"],"country": "DE","maxAdsPerQuery": 50,"activeStatus": "ACTIVE","proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
One item per ad, identical field names on every platform. This is a Meta ad from the input above:
{"platform": "meta","adId": "1702938977100376","advertiserId": "15087023444","advertiserName": "Nike","format": "carousel","headline": "Just Do It","body": "Neue Kollektion. Jetzt entdecken.","ctaText": "Shop Now","landingUrls": ["https://www.nike.com/de/"],"imageUrls": ["https://scontent.xx.fbcdn.net/..."],"videoUrls": [],"thumbnailUrl": "https://scontent.xx.fbcdn.net/...","isActive": true,"firstShownDate": null,"lastShownDate": null,"daysActive": null,"libraryUrl": "https://www.facebook.com/ads/library/?id=1702938977100376","query": "nike","scrapedAt": "2026-08-05T12:00:00+00:00"}
Which fields each platform fills: Meta and LinkedIn provide ad copy; Google and TikTok provide firstShownDate, lastShownDate and daysActive; TikTok exposes the ad title as headline but no body, CTA or landing URL. Unavailable fields are null, so your schema stays stable.
A per-platform run summary is saved to the key-value store as OUTPUT:
{"status": "PARTIAL_SUCCESS","totalAds": 137,"platforms": {"meta": { "adsFound": 50, "advertisersFound": 3, "errors": [], "queries": { "nike": { "ads": 50, "totalAvailable": 1240 } } },"google": { "adsFound": 50, "advertisersFound": 1, "errors": [] },"linkedin": { "adsFound": 37, "advertisersFound": 1, "errors": [] },"tiktok": { "error": "Blocked after 3 attempts" }}}
status is SUCCESS, PARTIAL_SUCCESS (at least one platform had errors) or FAILED (every platform returned nothing).
Use cases
- Competitor ad monitoring. A scheduled weekly run per competitor, diffed against last week, tells you what they launched and what they killed.
- Creative research. Filter by
daysActiveon Google and TikTok to find long-running ads. An ad that has been live for months is one the advertiser keeps paying for, which is the best public evidence that it converts. - B2B demand-gen research. LinkedIn coverage shows the messaging and offers your ABM competitors are paying to put in front of the same accounts.
- Category research. Search a keyword instead of a brand to see every advertiser bidding on it, across all four platforms.
- Agency reporting. One dataset covering a client's whole competitive set, exported to Sheets or Looker.
- AI analysis. Feed normalized ad copy and creative URLs into an LLM pipeline without per-platform branching.
API and integrations
Run it from your own code with the Apify API. Swap in your token; the Actor id stays as written.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("capable_cauldron/multi-channel-ad-intelligence").call(run_input={"queries": ["nike", "adidas"],"platforms": ["meta", "google", "linkedin", "tiktok"],"country": "DE","maxAdsPerQuery": 50,})for ad in client.dataset(run["defaultDatasetId"]).iterate_items():print(ad["platform"], ad["advertiserName"], ad["headline"])
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "<YOUR_API_TOKEN>" });const run = await client.actor("capable_cauldron/multi-channel-ad-intelligence").call({queries: ["nike", "adidas"],country: "DE",maxAdsPerQuery: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
CLI
$echo '{"queries": ["nike"], "country": "DE"}' | apify call capable_cauldron/multi-channel-ad-intelligence --silent --output-dataset
Connect results to Google Sheets, Airtable, Slack, Make, Zapier or n8n from the Actor's Integrations tab, run it on a Schedule to monitor competitors weekly, or fire a webhook when a run finishes.
FAQ
Is it legal to scrape the Meta Ad Library and other ad transparency libraries?
All four libraries are published by the platforms as public ad-transparency tools, and the Actor reads them without logging in. You are responsible for how you use the data; review each platform's terms and the regulations that apply to you.
Do I need a login or API key for any platform?
No. Meta, Google, LinkedIn and TikTok all publish their ad libraries openly. The Actor needs no cookies, tokens or developer accounts.
Which countries are supported?
Meta, Google and LinkedIn cover any country their library covers: pass an ISO-2 code, or ALL for worldwide. TikTok's Commercial Content Library covers only the EEA, UK and Switzerland (DE, FR, GB, ...). That limit is TikTok's, and it applies to the library itself.
Why does Google return no ad copy?
Google's Ads Transparency Center shows the creative and the landing domain but not the ad text, so body and ctaText are null for Google ads. The creative image or video URL is always returned.
Why did TikTok return zero ads?
Either country is outside the EEA/UK/CH, or nothing in the last 30 days matched the query. TikTok search is a keyword match over ad text and advertiser names, so try the brand name rather than a product line.
What happens if one platform is blocked or down?
The run continues on the remaining platforms and reports PARTIAL_SUCCESS in OUTPUT, with the error next to that platform. The run only fails outright if every platform returns zero data, so schedules and webhooks can react.
Why am I seeing 403 errors from LinkedIn?
LinkedIn's Ad Library sits behind Cloudflare and blocks datacenter IPs after a handful of requests. Keep the default residential proxy setting.
Can I get ads for one specific brand?
Yes. Search the brand name; the Actor also returns the matching advertiser profiles in OUTPUT so you can confirm you have the right page, then filter the dataset by advertiserId.
Can I scrape ad libraries with Python?
Yes. See the Python snippet under API and integrations. The apify-client package is on PyPI; pass the same input you would use in Console.
Other Actors by capable_cauldron
| Actor | What it does |
|---|---|
| LinkedIn Profile Posts Scraper | Every post from any LinkedIn profile with 55 enriched fields, no cookies needed |
| LinkedIn Comment Scraper | Comments and replies from any LinkedIn post, with commenter name, headline and profile URL |
| Investor Database Search | 145,000+ VCs, angels and family offices with partner emails, filtered by stage, industry and geography |
Support
Found a bug or need a field that isn't here? Open an issue on the Actor's Issues tab. Issues are usually answered within 24 hours. If you need a custom version (another ad library, creative downloads, a private deployment), describe it in an issue and we will scope it.
