Google Ads Transparency Center Scraper: Spy on Competitor Ads
Everyone in marketing knows the Facebook Ad Library. Far fewer use the one Google quietly shipped: the Google Ads Transparency Center. Search any verified advertiser and you can see the ads they're running right now — search text ads, display banners, and YouTube video ads — along with rough date ranges and the regions they're shown in.
For anyone running paid search, that's gold. If you can see the headlines a competitor is testing, you can write sharper ones. If you can see where their ads point, you can pull apart their funnel. The only problem is the same one Facebook's library has: it's built for clicking around one ad at a time, not for analysis. So let's pull it with code instead.
This guide uses SociaVault's Google Ad Library endpoints to find an advertiser and export their ads, then turn that into a quick competitive read. Code in JavaScript and Python.
What you can actually learn from it
Before the code, be clear on what this data is good for — and what it isn't.
- Messaging pillars. Scrape 50–100 of a competitor's ads and the same phrases keep showing up: "free trial," "for small business," "cancel anytime." That repetition is their positioning, stated plainly.
- Offers and promotions. A new "50% off" or "first month free" creative appearing across their ads tells you a campaign just launched.
- Landing-page strategy. The destinations show you which pages they trust to convert paid traffic.
What it won't give you: exact spend, impressions, keywords they bid on, or performance. The transparency center shows what is running, not how well it's doing or how much it costs. Anyone selling you "competitor keyword spend from the transparency center" is guessing. You can infer intent from headlines; you can't read their account.
Step 1: Find the advertiser
You start from a name or domain and resolve it to a verified advertiser.
const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = "https://api.sociavault.com/v1";
async function findAdvertiser(query) {
const res = await fetch(
`${BASE}/scrape/google-ad-library/search-advertisers?query=${encodeURIComponent(query)}`,
{ headers: { "x-api-key": API_KEY } },
);
const json = await res.json();
if (!json.success) throw new Error(json.error);
return json.data; // list of matching advertisers — pick the right one
}
findAdvertiser("monday.com").then((r) => console.log(r));
Log the result and pick the advertiser that matches (there's often a near-duplicate or a regional entity). You'll use either the resolved advertiser ID or the domain in the next step.
Step 2: Pull their ads
The company-ads endpoint accepts either an advertiser_id or a domain, plus an optional region and a cursor for pagination.
async function getCompanyAds({ advertiserId, domain, region = "US", cursor }) {
const params = new URLSearchParams();
if (advertiserId) params.set("advertiser_id", advertiserId);
if (domain) params.set("domain", domain);
if (region) params.set("region", region);
if (cursor) params.set("cursor", cursor);
const res = await fetch(
`${BASE}/scrape/google-ad-library/company-ads?${params}`,
{ headers: { "x-api-key": API_KEY } },
);
const json = await res.json();
if (!json.success) throw new Error(json.error);
return json.data;
}
Each request is one credit and returns a page of ads. Log the response once to see the exact shape (creative format, text, dates, destination) — field names can shift as Google changes its data, so read what's actually there rather than hard-coding assumptions. For a single ad's full detail, the ad-details endpoint takes the ad's url.
Step 3: Find the messaging pillars
Once you've got a stack of ad text, a quick word-frequency pass surfaces the themes a competitor leans on. Here it is in Python:
import os, re, requests
from collections import Counter
API_KEY = os.environ["SOCIAVAULT_API_KEY"]
BASE = "https://api.sociavault.com/v1"
HEADERS = {"x-api-key": API_KEY}
def get_company_ads(domain, region="US"):
r = requests.get(f"{BASE}/scrape/google-ad-library/company-ads",
params={"domain": domain, "region": region},
headers=HEADERS).json()
return r.get("data", {})
STOP = {"the","a","an","to","for","of","and","in","on","your","with","you","is","this"}
def top_phrases(texts, n=15):
words = []
for t in texts:
words += [w for w in re.findall(r"[a-z']+", t.lower()) if w not in STOP and len(w) > 2]
return Counter(words).most_common(n)
# Collect the ad headline/body text into a list called `ad_texts`,
# then:
# print(top_phrases(ad_texts))
Run that across a competitor's ads and the output reads like their marketing brief: the words they keep paying to put in front of customers.
Putting it to work
A practical workflow looks like this. Pick your three closest competitors. Pull their ads weekly. Watch for three things: a new creative theme (they're testing a new angle), a new offer (a promo is live), and a new landing page (a funnel changed). Each is an early signal you can react to before it shows up anywhere else.
Pair it with the Facebook and other ad libraries for a fuller picture — we cover the cross-platform approach in ad library scraping across Facebook, Google, and LinkedIn.
Frequently Asked Questions
What is the Google Ads Transparency Center?
It's Google's public directory of ads from verified advertisers. You can look up an advertiser and see the ads they're currently running across Search, Display, and YouTube, along with rough date and region information. It's Google's equivalent of the Facebook Ad Library.
Can you see a competitor's Google Ads keywords?
No. The transparency center shows the ad creatives (headlines, body, format, destination), not the keywords an advertiser bids on or their spend. You can infer likely keywords from the headline copy, but the actual keyword list and budget are private to the advertiser's account.
How do I scrape Google ads programmatically?
Resolve the advertiser with the search-advertisers endpoint, then pull their ads with the company-ads endpoint (by advertiser ID or domain), paginating with the cursor. Each call returns a page of ad creatives as JSON. The code above shows the full flow.
Is scraping the Google Ads Transparency Center legal?
You're reading a public transparency tool that Google built specifically to make ads visible to everyone. That's public information. As always, stick to public data, respect rate limits, and use the insight for legitimate competitive research.
How much does it cost?
With SociaVault, the advertiser search and each page of company ads are one credit each. Mapping a competitor's full ad set is typically a handful of credits, depending on how many ads they run and how many pages you page through.
How often should I check competitor ads?
Weekly is a good cadence for most markets — frequent enough to catch new offers and creative tests, infrequent enough to keep costs trivial. In fast-moving categories or during big retail seasons, tighten it to a couple of times a week.
The bottom line
The Google Ads Transparency Center turns your competitors' paid strategy into a readable signal — their messaging, offers, and funnel destinations, all public. Pull it with a few API calls, watch for changes, and you'll rarely be surprised by a competitor's campaign again.
Want to map a competitor's ads? Start free with SociaVault with 50 credits and run your first advertiser search.
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.