EU Ad Library Monitor: Meta & Google Competitor Ads avatar

EU Ad Library Monitor: Meta & Google Competitor Ads

Pricing

from $1.50 / 1,000 ads

Go to Apify Store
EU Ad Library Monitor: Meta & Google Competitor Ads

EU Ad Library Monitor: Meta & Google Competitor Ads

Track Facebook, Instagram and Google competitor ads in one dataset. Monitor new creatives and observed changes, skip unchanged ads for free, and add an AI summary. EU country filters, clear coverage reports, no login.

Pricing

from $1.50 / 1,000 ads

Rating

0.0

(0)

Developer

Tom J

Tom J

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Follow competitor ads in one dataset. This public-route Facebook Ad Library scraper collects Facebook and Instagram ads alongside Google Ads Transparency observations, compares them with your previous run, and returns new or changed records. No Facebook or Google login, account cookies, developer account or identity verification.

Built for bounded competitor monitoring. Choose a country and an ad limit, then inspect the source-coverage report. A successful run can contain a useful partial sample; it is not a promise that every advertisement on the internet was found.

Facebook Ad Library monitoring for EU competitors

  • Agencies following a named list of EU competitors.
  • Brands comparing public Meta and Google advertising observations.
  • Analysts who want new creative observations and explicit changes instead of repeated dumps.
  • Workflows in Google Sheets, Make, n8n or an internal reporting tool.

The first monitor run establishes a baseline from the ads actually retrieved. Later runs omit unchanged ads. New means newly observed by this monitor, not necessarily a campaign launched this week. A larger limit can reveal older advertisements that the monitor has never seen before.

Quick start: a Benelux competitor watchlist

{
"watchlist": [
{
"name": "Coolblue BE",
"metaPageId": "1809566712696587",
"googleDomain": "coolblue.be"
}
],
"country": "BE",
"mode": "monitor",
"stateName": "benelux-competitors",
"maxAdsPerSource": 20,
"maxPagesPerSource": 3,
"includeEuDetails": false,
"includeDigest": false
}
  1. Enter a competitor label, its numeric Meta advertiser page ID and/or its Google advertiser domain.
  2. Select the EU country where you want to observe advertising.
  3. Start with a small cap. Inspect both the dataset and OUTPUT.
  4. Reuse the same monitor name for subsequent comparisons. Schedule the saved task weekly in Europe/Brussels if you want weekly observations.

Each platform identifier is optional, but every competitor needs at least one. The Actor deliberately uses exact advertiser identifiers rather than guessing which same-name Facebook page belongs to a business. A domain can match multiple Google advertiser entities; their IDs remain separate in the output. A watchlist label groups the identifiers you supplied; it is not independently verified corporate ownership.

Changing the country or source identifier creates a separate baseline. Changing the display label does not. Use separate monitor names for separate projects. Avoid overlapping runs with the same name.

How changes work

OutputMeaningResult event
ad / newThis ad ID has not been delivered in this monitor scopead
change / changedAn observed ad's creative fields or explicit active status changedchange
change / stoppedMeta explicitly reports a previously active known ad as inactivechange
No rowThe retrieved ad is unchangedNone
digestA successfully generated summary of delivered observations, if enabled and configureddigest

Missing does not mean stopped. Partial pages, result caps, changed rankings, rate limits and source delays can all hide ads. The monitor never creates a stop event solely because an ad disappears from a search. For previously active Meta ads not in the current sample, it can check one public inactive-results page and report up to 20 explicit inactive matches. This is a bounded check, not a guarantee of detecting every stopped advertisement.

Google's lastShown is an observation date, not a reliable live campaign switch. Google ads therefore have isActive: null; this Actor does not infer Google stop events from an old date or missing search result.

Measurement growth and last-seen dates do not create creative-change events. Expiring media query signatures and CDN host changes are excluded from the creative comparison. Image paths can still change when the source republishes a file.

Use mode: "snapshot" when you want each run's retrieved observations, including known ads. Snapshot mode charges for delivered ads again; monitor mode skips unchanged ones.

Input controls

FieldDefaultPurpose
watchlistOne Coolblue BE example1–10 competitors, with explicit source identifiers
countryBEOne EU country per run
modemonitorChange-only observations or a fresh snapshot
stateNameeu-ad-watchPersistent comparison namespace
maxAdsPerSource201–200 active/search observations per competitor per platform
maxPagesPerSource3At most 20 pages per connection attempt; automatic recovery can make a second bounded attempt
maxRunSeconds150Internal processing limit, 30–240 seconds
connectionautoDatacenter first, at most one residential recovery session; or choose either route explicitly
includeEuDetailsfalseOptional public transparency details; availability varies
includeDigestfalseOptional AI summary, billed only when delivered; no customer AI key needed

The standard memory is 1 GB. Meta uses an anonymous browser and the same public requests as its website. With connection: "auto", a blocked or rate-limited datacenter read may trigger one residential session for the whole run, reused for the remaining competitors. There is no third session or repeated IP rotation. Successful partial observations are retained if recovery fails. connectionAttempts and recoveryEvents show what happened. Residential recovery has no separate customer surcharge at the listed event prices.

Google uses public website requests and may make one datacenter fallback after a direct 302/403 response. The Actor never recovers a login or CAPTCHA by signing in or solving it. A failed Meta source does not make successful Google observations complete for both platforms.

A shared output format

Both platforms use platform, advertiserId, creativeId, advertiserName, domain, format, firstShown, lastShown, previewUrl and imageUrl, matching the core names of our Google Ads Transparency Actor. Additional monitoring fields include:

  • recordType, changeType, competitor, country, observedAt, previousObservedAt.
  • isActive, when explicitly available, and adUrl.
  • title, text, cta, landingPage, creative cards and media links where the source provides them.
  • publisherPlatforms, tags, euDetails and euDetailsStatus.
  • sourceComplete, which describes the source scan rather than the entire real-world advertising account.

Google does not provide all the creative-text fields through this adapter; missing values remain null. Media are links, not archived copies, and can expire. No image or video files are downloaded or rehosted.

EU data: keep the metrics separate

With includeEuDetails: true, Meta detail rows can contain euTotalReach, ageCountryGenderReach, beneficiaryPayers and audienceSelection. The public browser route returned all of these for three Belgian test ads. They are source-reported metrics, not our estimates of campaign performance. Audience-selection age/gender describes the advertised audience criteria; the country/age/gender reach breakdown describes reported reach. Do not treat them as the same measurement.

Availability differs by ad and source. Missing details remain null with an explicit status. Language labels are not provided by the current Meta adapter and remain an empty list. No guarantee that every ad exposes every transparency field.

Google can expose country-specific times-shown intervals and audience-selection categories. Those are not the same as Meta's reach or a breakdown of actual viewers. Google platform codes are retained where their meaning is not verified. The source country's presence in a search does not prove the ad was targeted exclusively there.

This product does not estimate advertising spend, clicks, conversions, profitability or return on advertising spend. It does not invent missing impressions or infer campaign success from an ad's age.

Pricing: pay for delivered observations and changes

Pay-per-event prices:

EventPriceCharged when
ad$0.0015 — $1.50 per 1,000One new delivered observation in monitor mode, or one delivered ad in snapshot mode
change$0.003One delivered changed/stopped record for a known ad
digest$0.05One successful delivered AI digest

A newly observed ad receives only the ad event, not an additional change event. Unchanged ads, duplicates, failed pages, unavailable detail lookups and failed digests receive no result event. There is no automatic dataset-item event. A standard start event costs $0.00005 per allocated GB, minimum one, including failed runs. At the default 1 GB this is $0.00005 per run. Confirm the live Pricing tab before running.

Examples at the default 1 GB, including the $0.00005 start event:

  • First baseline with 100 delivered ads: $0.15005.
  • Later run with 10 new ads and 3 changes: $0.02405.
  • The same run plus one successful digest: $0.07405.
  • A monitor run containing only unchanged observations: $0.00005 start only; no ad or change charges.

Set a maximum charge per run in Apify Console. The Actor checks affordability before storing a billable row. If a delivery is interrupted between storage, charging and checkpointing, it stops for review on resurrection rather than blindly replaying a possibly charged event. Exactly-once delivery across every crash or concurrent run is not guaranteed.

Optional digest and tags

Offer and CTA tags are simple rules, not an AI judgment of performance. An optional AI digest summarizes the observations delivered in that run, with supporting ad IDs. Exact counts and coverage are supplied separately by the application. Schedule the task weekly for a weekly digest; it does not independently reconstruct a full calendar week's unseen activity.

The AI feature is disabled by default. AI processing is included in the digest price; customers do not need their own AI API key. It passed a small live Apify test with three public Meta ads and one delivered summary; this does not establish reliability across every advertiser. No digest is charged when configuration is missing or generation fails. If enabled, selected public ad text is processed by Cloudflare Workers AI. Treat summaries as analytical assistance, not verified statements about a competitor's strategy.

Check coverage, not just the green run status

OUTPUT includes adsDelivered, changesDelivered, digestsDelivered, unchangedAds, sources, partial, stopped, uncheckedSources, warnings and chargedEvents.

For each source, check complete, status, warnings, adsObserved, pagesFetched and sourceTotalEstimate. Meta detail diagnostics separately count detailsRequested, detailsAvailable, detailsUnavailable and detailsNotChecked; complete ad-list coverage does not imply complete transparency details. The source total can be approximate. A partial run may contain useful ads while still being unsuitable as a complete inventory. A blocked response is never interpreted as zero advertising activity.

Monitoring stores bounded identifiers, fingerprints and timestamps in a named Apify key-value store. It retains at most 10,000 known ads per source scope, then reports a capacity stop instead of silently forgetting IDs. Run-level rows stay in your Apify dataset according to your storage settings.

Privacy and scope

This Actor collects public advertiser and advertisement data. It does not collect viewer identities, user profiles, comments, likes, profile photos, administrator contact details, email lists or telephone lists. Known contact patterns in ad text are redacted and landing-page tracking queries are stripped.

Public advertiser/payer names may identify a sole trader, and ad copy or creative media can contain people or names. This is not guaranteed anonymization. Review the public content before sharing or combining it with other data. Historic private probe runs can contain raw source responses; the production monitor does not store raw HTML or full profile objects.

API and integrations

Run olliolli/meta-ad-library-eu with the Apify API or save the input as an Apify task. Export the default dataset as JSON, CSV or Excel; read the OUTPUT key-value record alongside it. Connect the dataset to Make, n8n, Zapier or Google Sheets using Apify integrations.

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("olliolli/meta-ad-library-eu").call(run_input={
"watchlist": [{"name": "Coolblue BE", "metaPageId": "1809566712696587",
"googleDomain": "coolblue.be"}],
"country": "BE", "mode": "monitor", "stateName": "benelux-weekly",
"maxAdsPerSource": 20
})
coverage = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")
rows = client.dataset(run["defaultDatasetId"]).list_items().items

Frequently asked questions

Do I need Facebook login, cookies or identity verification? No. Those inputs are not supported. If the public route is blocked, the source is reported as unavailable.

Does this monitor all of a competitor's ads? Only the ads available through the selected public sources, country, limits and successful pages. No complete-account guarantee.

Why did I get no new rows? The retrieved ads may be unchanged, or a source may have failed. Check unchangedAds and the source reports to distinguish them.

Can I compare Meta and Google reach directly? No. They report different metrics and coverage. Preserve platform and metric labels.

Can a missing ad be reported as stopped? Not from absence alone. Meta stop events require explicit inactive status; Google stop detection is not inferred.

Is this an official Meta or Google API? No. It is an independent tool using public website responses, with no affiliation or endorsement. Public website availability and structure can change.

For support, provide the Apify run ID, the source identifier, country and expected outcome. Do not send passwords, login cookies or account access tokens.

Use Google Ads Transparency: EU Reach & Ads for a dedicated Google advertising workflow, or Review Digest for customer-review summaries and reply drafts. Review Digest analyzes reviews; this Actor summarizes advertising observations.

Public source interfaces: Meta Ad Library and Google Ads Transparency Center.