---
title: "Google Ads Transparency Center + Meta Ad Library | Scrape.ly"
description: "What the Google Ads Transparency Center and Meta Ad Library show, and how to export a rival's Google and Meta ads to one dataset. Real run, code, costs."
url: https://scrape.ly/blog/ad-intelligence-scraping
markdown: https://scrape.ly/blog/ad-intelligence-scraping.md
---

[Use cases](https://scrape.ly/blog/category/use-cases.md)

# Google Ads Transparency Center and Meta Ad Library: Competitor Ad Intelligence

The Google Ads Transparency Center and the Meta Ad Library show the ads any brand runs. Learn what each library shows and hides, then collect a competitor's Google and Meta ads into one dataset with Scrape.ly, with a real run, Python code and costs under a cent per brand.

[Querystone Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/querystone.md)

- Published

  Oct 27, 2026

- Reading time

  10 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls an ad card with an image and a blue button out of a monitor showing the Google Ads and Meta logos above two more ad cards, and drops it into a crate](https://scrape.ly/media/ad-intelligence-scraping.png?w=1080)

The Google Ads Transparency Center is Google's public library of the ads advertisers run on Search, YouTube, Display and its other surfaces, searchable by advertiser or website. Together with Meta's Ad Library, the Google Ads Transparency Center is the free, official starting point for competitor ad intelligence: what a brand advertises, where, since when, and with which offer.

Both libraries are built for looking up one ad at a time in a browser. This guide explains what each one shows and hides, then collects a competitor's ads from both into one dataset with two Scrape.ly Actors. Our real run on 27 October 2026 pulled Duolingo's Google ads and its active Meta ads in under 35 seconds for about a cent, and the two channels told very different stories.

## What the Google Ads Transparency Center shows

Google [announced the Ads Transparency Center](https://blog.google/innovation-and-ai/technology/ads/announcing-the-launch-of-the-new-ads-transparency-center/) on March 29, 2023 as "a searchable hub of all ads served from verified advertisers," where you can see "the ads an advertiser has run," "which ads were shown in a certain region" and "the last date an ad ran, and the format of the ad." Google's [ads transparency help page](https://support.google.com/adspolicy/answer/13733850) describes it as "a searchable repository of advertisers and the ads they've served on Google platforms like Search, Display, Gmail, and YouTube," searchable "using the advertiser or website name," with filters "like date and targeted location."

For a verified advertiser, Google shows "the advertiser's legal name, or trademark name and location" and labels it with a "verified" badge. The same page notes that "to comply with applicable laws, Google may also be required to disclose certain additional information," depending on the country. Our run shows what that means in practice: for ads served in European countries and Türkiye the records carried a first-shown date and impression ranges per surface, while the United States, Canada, the UK and Australia had only a last-shown date.

What it doesn't give you: spend, clicks, or the keywords an ad was bought on. Impressions, where published, are ranges such as 8,000 to 9,000, not counts.

## What the Meta Ad Library shows

Meta's [Ad Library](https://www.facebook.com/help/259468828226154) is "a place where you can search for ads that are running across Meta Products." For all ads, "you can search for ads that are currently active." For ads about issues, elections or politics you can also search inactive ones, with "who funded the ad, a range of how much they spent, and the reach of the ad across multiple demographics," and Meta stores those "for 7 years." The library's own page adds ads that have run anywhere in the EU in the past year.

So for an ordinary commercial advertiser in the US, you see the ads running today: copy, creative, call to action, landing page, start date and the platforms (Facebook, Instagram, Messenger, Audience Network, Threads). There's no spend or reach for those ads. Meta's own Ad Library API has a narrower scope still: its documentation says ads "that did not reach any location in the EU will only return if they are about social issues, elections or politics." Our [Facebook Ads Library API](https://scrape.ly/api/facebook-ads-library-api.md) page shows a REST route that returns what the public library shows.

|            | Google Ads Transparency Center                                                              | Meta Ad Library                                                          |
| ---------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| Covers     | Search, Display, Gmail, YouTube and other Google platforms                                  | Facebook, Instagram, Messenger, Audience Network, Threads                |
| Look up by | Advertiser name or website domain                                                           | Page, page name or keyword                                               |
| Ads shown  | Ads served in the chosen region and dates                                                   | Active ads; plus EU ads from the past year and political ads for 7 years |
| Dates      | Last shown; first shown and impression ranges for European countries and Türkiye in our run | Start date and active flag                                               |
| Spend      | Not for commercial ads                                                                      | Ranges for political and issue ads only                                  |
| Built for  | Looking up one advertiser in a browser                                                      | Looking up one page or keyword in a browser                              |

## What teams use ad intelligence for

- **Messaging and offers.** Which headline a competitor tests, and whether it leads with a free trial, a discount or a feature.
- **Market expansion.** `creativeRegions` on Google and the country filter on Meta show which countries a rival advertises in.
- **Longevity.** An ad that has served for 160 days is one the advertiser keeps paying for. New ones show what they're testing now.
- **Channel strategy.** The same brand often says different things on Search, where people are already looking, and in a social feed.
- **Agency reporting.** A weekly export of a client's competitors, with the library link for every ad, beats screenshots in a deck.

All of these need many ads over time in a table, not one ad in a browser tab. That's the job the two Actors below do.

## How to collect Google ads without code

Open the [Google Ads Scraper](https://scrape.ly/store/querystone/google-ads-scraper.md) in the Scrape.ly Store. It takes advertiser or domain URLs straight from `adstransparency.google.com`, so you set the region and date range there and paste the address bar:

```json
{
  "startUrls": [
    { "url": "https://adstransparency.google.com/?region=US&domain=duolingo.com&preset-date=Last+30+days" }
  ],
  "resultsLimit": 5
}
```

The key fields:

- **`startUrls`**: advertiser pages (`/advertiser/AR…`) or domain searches (`?domain=…`). A domain search can return more than one advertiser account pointing ads at that site.
- **`resultsLimit`**: ads per URL; raise it to take an advertiser's whole library.
- **`startDate`** **/&#x20;**__`endDate`__: override the URL's dates.
- **`skipDetails`**: skip creative variations when you only need regions and dates for a long list.
- **`ocr`**: on by default. Many search text ads exist in the library only as a picture; a model reads their headline and description so you get the copy as text.

Each row has the advertiser, format (text, image or video), first and last shown, days served, countries, per-country stats, targeting categories, headline, description, click URL and every variation. It costs $1.05 per 1,000 ads, platform usage included, as listed on the Store page on 27 October 2026; reading text-ad images adds a small model charge, well under $0.001 per ad.

Scrape.ly Store Export ads from the Google Ads Transparency Center Any advertiser or domain: text, image and video ads with headline, description, countries, first and last shown, impression ranges and variations. $1.05 per 1,000 ads.

[Try it free](https://scrape.ly/store/querystone/google-ads-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to collect Meta ads

The [Facebook Ad Library Scraper](https://scrape.ly/store/echofield/facebook-ads-scraper.md) takes a Facebook page URL, a page name or any filtered Ad Library link, and keeps the link's country, status and media filters:

```json
{
  "startUrls": [
    { "url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&is_targeted_country=false&media_type=all&search_type=page&view_all_page_id=141935472517297" }
  ],
  "resultsLimit": 10
}
```

Each row has the page, archive ID, active flag, start and end dates, platforms, and the creative under `snapshot`: title, body, call to action, cards, images, videos and the link. Options add page transparency, a per-ad detail view and product data from landing pages. Ads cost $0.41 per 1,000, platform usage included. Our [Facebook Ads Library tutorial](https://scrape.ly/blog/scrape-facebook-ads-library.md) covers every input in depth.

## Collect both channels with the API

The Google run took 9 seconds, so a synchronous call works:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/querystone~google-ads-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"startUrls": [{"url": "https://adstransparency.google.com/?region=US&domain=duolingo.com&preset-date=Last+30+days"}], "resultsLimit": 5}'
```

In Python (`pip install scrapely-client-python`), run both Actors and merge the ads into one CSV with a common set of columns:

```python
import csv
import os
from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

google = client.actor("querystone/google-ads-scraper").call(run_input={
    "startUrls": [{"url": "https://adstransparency.google.com/?region=US&domain=duolingo.com&preset-date=Last+30+days"}],
    "resultsLimit": 5,
})
meta = client.actor("echofield/facebook-ads-scraper").call(run_input={
    "startUrls": [{"url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&is_targeted_country=false&media_type=all&search_type=page&view_all_page_id=141935472517297"}],
    "resultsLimit": 10,
})

rows = []
for ad in client.dataset(google.default_dataset_id).iterate_items():
    rows.append({"channel": "Google", "headline": ad.get("headline"), "format": ad.get("format"),
                 "first_shown": ad.get("firstShown"), "landing": ad.get("clickUrl")})
for ad in client.dataset(meta.default_dataset_id).iterate_items():
    snap = ad.get("snapshot", {})
    rows.append({"channel": "Meta", "headline": snap.get("title"), "format": snap.get("displayFormat"),
                 "first_shown": ad.get("startDateFormatted"), "landing": snap.get("linkUrl")})

with open("competitor-ads.csv", "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=rows[0].keys())
    writer.writeheader()
    writer.writerows(rows)
```

The merge step is plain Python; run on the datasets below, it wrote 15 rows. An AI agent can do the same through the Scrape.ly MCP server, as in our [Facebook MCP](https://scrape.ly/blog/facebook-mcp.md) walkthrough, which found the Meta page ID used here in a post's `pageAdLibrary` field.

## A real run: Duolingo on Google and Meta

Both runs are from 27 October 2026, with the inputs above. Duolingo is a business, so everything below is advertiser data.

**Google** returned five text ads from the advertiser "Duolingo Inc" in 9 seconds. The log line "Read the text of 11 text-ad images (0 could not be read)" is the OCR step at work.

| Headline                                                 | Description, first words                              | First shown  | Days served | Countries |
| -------------------------------------------------------- | ----------------------------------------------------- | ------------ | ----------- | --------- |
| Learn Spanish With Duolingo - Yes, You Can Learn Spanish | Try 1 month of Super Duolingo for $0.                 | Oct 15, 2026 | 14          | 6         |
| Free Language Learning - Speak German                    | The Free, Fun, And Effective Way To Learn A Language. | May 17, 2026 | 164         | 10        |
| Duolingo Learning App - Free Language Learning           | The Free, Fun, And Effective Way To Learn A Language. | May 13, 2026 | 168         | 23        |
| Start Your Free Month - Try 1 Month For $0               | $0 for 1 Month of Super Duolingo.                     | Aug 3, 2026  | 87          | 16        |
| Free Language Learning - Learn a language for free       | The Free, Fun, And Effective Way To Learn A Language. | May 13, 2026 | 168         | 10        |

All five were last shown on the day of the run and pointed to duolingo.com. In Ireland, one ad carried an impression range of 8,000 to 9,000 on Google Search; most European rows showed 0 to 1,000, and the US rows had no range at all.

**Meta** returned ten active US ads in 25 seconds, after the Actor retried one failed request by itself ("Search attempt 1 did not return ads (SSLError)"). All ten ran on Facebook, Instagram, Audience Network and Threads, used dynamic creative with an "Install now" button and linked to the app on Google Play:

| Headline                           | Language | Ads | Started           |
| ---------------------------------- | -------- | --- | ----------------- |
| Free Language Learning             | English  | 4   | Oct 14 and Oct 21 |
| Speak Confidently on Duolingo      | English  | 1   | Oct 14            |
| Aprende idiomas jugando ¡y gratis! | Spanish  | 3   | Oct 14            |
| Aprende inglés gratis              | Spanish  | 2   | Oct 14            |

**What the two channels say together.** On Google Search, two of the five ads sold the paid Super Duolingo trial at $0 for a month, and three had run for over five months, in up to 23 countries. On Meta, all ten sold the free app and none mentioned Super; half were in Spanish, aimed at US users, and nine started on the same day. Our read: one brand, two jobs. Search converts people who are already looking into subscribers, the feed recruits new app users. That's a finding you only get with both libraries in one table.

## What it costs

| Run           | Calculation at list price                                             | Total    | Billed   |
| ------------- | --------------------------------------------------------------------- | -------- | -------- |
| Google, 5 ads | 5 × $0.00105, plus $0.00088 of model usage for reading text-ad images | $0.00613 | $0.00508 |
| Meta, 10 ads  | 10 × $0.000406                                                        | $0.00406 | $0.00325 |

Platform usage is included in both Actors' prices; our account's billed amounts reflect its plan's Store discount. To watch five competitors every week, with 30 Google and 30 Meta ads each, you'd pay 150 × $0.00105 + 150 × $0.000406 = $0.2184 a week in ad fees, plus the small OCR charge. That's under $1 for four weeks, well inside the free plan's $5 of monthly usage credit. Schedule both runs in the console, as in our guide to [scheduling web scraping](https://scrape.ly/blog/schedule-web-scraping.md).

## What to watch out for

- **Search by domain, not brand name.** On Google, a verified advertiser appears under its legal or trademark name, which may not be the brand you know. A domain URL finds its ads either way.
- **Impression ranges are regional.** Expect first-shown dates and ranges in Europe and Türkiye and only last-shown dates elsewhere, as in our run. Missing ranges are left out, not set to zero.
- **OCR can misread a character.** Text ads kept as images are read by a model; `imageUrl` always links the original picture so you can check. Text inside image and video creatives isn't read.
- **Age-restricted ads are missing** from the Google results because the library hides them from signed-out visitors.
- **Meta lists about 30 ads quickly, then slows down.** Further result pages arrive about 10 ads at a time, roughly 1,000 ads in seven minutes, per the Actor's README.
- **Template copy in catalog ads.** Dynamic and catalog ads on Meta store text such as `{{product.name}}`; that's what the library holds.
- **Failed inputs cost nothing.** An unknown advertiser or bad URL returns no rows, and the Meta Actor lists failed URLs under `failedInputs` without charging them.

## Is it legal to scrape ad libraries?

Both libraries exist so the public can see who advertises and what they run, and both Actors read them without logging in. That's a strong position, not a blanket permission. Meta's [Terms of Service](https://www.facebook.com/terms.php) say "You may not access or collect data from our Products using automated means (without our prior permission)," including when logged out; in Meta v. Bright Data (N.D. Cal., January 2024) a court held that Meta's terms at issue didn't prohibit logged-off scraping of public data, as our guide to [whether web scraping is legal](https://scrape.ly/blog/is-web-scraping-legal.md) explains. Ad creatives can show people, and political ads name funders, so handle any personal data under the GDPR and CCPA, keep creatives for analysis rather than republishing them, and get legal advice for a commercial product. This isn't legal advice.

## Why Scrape.ly for ad intelligence

- **Both big libraries, one workflow.** Google and Meta ads come out as rows from the same API, client and MCP server, ready to merge; for B2B there's also a [LinkedIn Ad Library Scraper](https://scrape.ly/store/echofield/linkedin-ads-scraper.md).
- **Commercial ads in the US, too.** The Actors read what the public libraries show for any region, including US commercial ads that Meta's API scopes out.
- **Text you can analyze.** OCR turns image-only search ads into headlines and descriptions.
- **Cents, not subscriptions.** $1.05 per 1,000 Google ads and $0.41 per 1,000 Meta ads, with a dollar cap per run.

For the wider picture of public social data, see [social media scraping](https://scrape.ly/blog/social-media-scraping.md).

## FAQ

### Is the Google Ads Transparency Center free?

Yes. Anyone can search it at adstransparency.google.com without an account. Exporting many ads is where a tool helps: the Google Ads Scraper turns an advertiser or domain URL into rows at $1.05 per 1,000 ads.

### Can you see a competitor's ad spend on Google or Meta?

Not for ordinary commercial ads. Google shows impression ranges for some regions, mostly in Europe, and Meta shows spend ranges only for ads about social issues, elections or politics. What both show is the ads themselves, their dates and where they ran.

### How do I find a competitor's ads in the Google Ads Transparency Center?

Search by their website domain rather than the brand name, set the region and date range, and open the ads. To collect them, copy that URL into the Google Ads Scraper's `startUrls`.

### How long does the Meta Ad Library keep ads?

Active ads are always searchable. Ads about social issues, elections or politics stay for seven years, including inactive ones, and the library also lists ads that ran anywhere in the EU in the past year. Ordinary commercial ads outside the EU drop out once they stop running, so collect them while they're live.

### Can I see TikTok or LinkedIn competitor ads the same way?

For LinkedIn, yes: the LinkedIn Ad Library Scraper reads its public Ad Library by company, keyword or URL. For TikTok, our [TikTok MCP](https://scrape.ly/blog/tiktok-mcp.md) post shows how to analyze a brand's organic videos.

Scrape.ly Store Add a competitor's Meta ads Public ads from the Meta Ad Library by page, page name or search link: copy, CTA, landing page, dates and platforms, no login. $0.41 per 1,000 ads.

[Try it free](https://scrape.ly/store/echofield/facebook-ads-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Querystone](https://scrape.ly/blog/author/querystone.md) Actor publisher on the Scrape.ly Store

Search results, AI answers, web pages and market feeds as structured data. For SEO teams, developers and AI builders, plus finance, crypto and sports data for analysts. A Scrapely studio.

- [Website](https://scrape.ly/users/querystone.md)

Keep reading

## More in Use cases

- [![Pixel-art robot with an orange >\_ on its terminal head pushes a data card into a monitor showing a rising candlestick price chart, fed by cables from a job card, a review slip with gold stars and a filing with a red seal](https://scrape.ly/media/alternative-data-finance.png?w=750)](https://scrape.ly/blog/alternative-data-finance.md)
  ### [Alternative Data: What It Is and How Investors Collect It From the Web](https://scrape.ly/blog/alternative-data-finance.md)
  [Alternative data is information about companies that doesn't come from the companies themselves: web prices, job posts, reviews, sentiment, filings and politicians' trades. The main types, their public web sources, two real runs joined in Python, costs and compliance rules.](https://scrape.ly/blog/alternative-data-finance.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a rank slip with an amber up arrow out of a monitor showing the Google G logo above a rising bar chart whose last bar is orange and topped with a gold star, and drops it into a crate](https://scrape.ly/media/seo-rank-tracking-scraping.png?w=750)](https://scrape.ly/blog/seo-rank-tracking-scraping.md)
  ### [Rank Tracking API: Build Your Own SEO Rank Tracker for $3.30 per 1,000 Checks](https://scrape.ly/blog/seo-rank-tracking-scraping.md)
  [Skip the per-keyword subscription: use Google results as a rank tracking API, check positions by country on a schedule, and land them in a CSV or Google Sheet. A real run in the US and UK, tested Python code and the cost against SerpApi, ScraperAPI and SE Ranking.](https://scrape.ly/blog/seo-rank-tracking-scraping.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a blue house icon off two houses at night, beside a yard sign with the blue Zillow logo over a red rider and a green bush, and drops it into a crate](https://scrape.ly/media/real-estate-data-scraping.png?w=750)](https://scrape.ly/blog/real-estate-data-scraping.md)
  ### [Web Scraping Real Estate Data: Listings, Prices and Market Signals](https://scrape.ly/blog/real-estate-data-scraping.md)
  [How to collect real estate data from Zillow, Redfin, Realtor.com and dozens of other portals: which fields each source gives you, two real runs from 26 October 2026 (Las Vegas listings and Seattle sold comps), a Python script that merges the sources, and the cost per 1,000 homes.](https://scrape.ly/blog/real-estate-data-scraping.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
