# How do I see all the ads a competitor is running on Meta, Google and TikTok?

> Pull one competitor's ads from the Meta Ad Library, Google Ads Transparency Center and TikTok's Ads Library into one weekly table: steps, cost, code and blind spots.

Canonical page: https://okdata.online/answers/competitor-ads-meta-google-tiktok/

**Short answer: **Query each public ad library under the name the competitor has there (its Facebook page on Meta, its website domain on Google, its advertiser name in TikTok's library) and merge the results into one table. With okdata a weekly sweep of one competitor costs $0.028, and ten competitors every week for a month cost $1.12.

The head of growth at a drinkware brand has three competitors that matter. Every Monday she wants to know what each of them launched last week: new offers, new hooks, new landing pages. The answers sit in three public ad libraries with three interfaces, and each library files the same company under a different name. Done by hand, that is a morning. Done as a script, it is a table in her inbox with the new ads marked.

## One competitor, three names

| Library | How the competitor is filed | Endpoint |
|---|---|---|
| Meta Ad Library (Facebook, Instagram, Messenger) | its Facebook page, by ID or name | [Meta advertiser ads](/apis/meta/advertisers/ads/list/) |
| Google Ads Transparency Center (Search, YouTube, Display, Shopping) | a verified advertiser, often the legal entity, or the website domain | [Google advertiser search](/apis/google/advertisers/search/), then [Google advertiser ads](/apis/google/advertisers/ads/list/) |
| TikTok Ads Library | the advertiser's name, ads shown in Europe | [TikTok Ads Library search](/apis/tiktok/ads/search/) |

Resolve the names once and save the IDs: the Meta page ID, the Google advertiser ID or domain, the TikTok advertiser name. From then on each week is only the list calls.

## What it costs

| Weekly, per competitor | Calls | Cost |
|---|---|---|
| Meta, 3 pages of 30 | 3 | $0.012 |
| Google, 2 pages of 40 | 2 | $0.008 |
| TikTok, 2 pages of 12 | 2 | $0.008 |
| One competitor, one week | 7 | $0.028 |
| 10 competitors, 4 weeks | 280 | $1.12 |

The one-off Google name lookup adds $0.004 per competitor.

## Code: one table, new ads flagged

```python
import json, os, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def items(path, **params):
    body = requests.get(API + path, headers=H, params=params, timeout=60).json()
    if body["code"] != "ok":
        raise RuntimeError(f"{body['code']}: {body['message']}")
    return body["data"]["items"]       # first page; loop on page.next_cursor for more

rival = {"meta_page": "<facebook page id>", "domain": "example.com", "tiktok": "Example Brand"}
ads = ([("meta", a) for a in items("/v1/meta/advertisers/ads/list", id=rival["meta_page"], country="US")]
     + [("google", a) for a in items("/v1/google/advertisers/ads/list", domain=rival["domain"], country="US")]
     + [("tiktok", a) for a in items("/v1/tiktok/ads/search", advertiser=rival["tiktok"])])

rows = [{"platform": p, "id": a["id"], "format": a["format"], "text": (a["text"] or "")[:120],
         "landing": a["landing_url"], "since": a["first_shown_at"], "url": a["url"]} for p, a in ads]
try:
    seen = set(json.load(open("seen_ids.json")))
except FileNotFoundError:
    seen = set()
new = [r for r in rows if r["id"] not in seen]
json.dump(sorted(seen | {r["id"] for r in rows}), open("seen_ids.json", "w"))
print(len(rows), "ads,", len(new), "new since the last run")
```

## Blind spots

- **TikTok's library covers ads shown in Europe.** A competitor that only advertises in the US may show nothing there. [Creative Center top ads](/apis/tiktok/creative_center/ads/search/) shows what performs in a category, though not by advertiser.
- **Google rarely shows landing pages,** and copy often sits inside the preview image.
- **Meta drops stopped commercial ads** outside the EU, so a weekly run is also how you keep your own history.
- **No library publishes spend** for commercial ads. Count new ads and how long they run instead; ads that run for months are usually the ones that work.
- **Sub-brands and second pages.** Big advertisers run several Facebook pages and Google accounts. Check the advertiser on each row.

## Other ways

Each library's website is free for a look at one brand. Paid ad-intelligence suites cover more networks, keep years of history and estimate spend, which matters if media budgets are the question. An agency may already have all of this. okdata suits the weekly scripted sweep, or handing an agent a week of competitor ads to summarise. Per-library details: [the Meta Ad Library API and its limits](/answers/meta-ad-library-api-price-limits/) and [exporting Google Transparency Center ads](/answers/export-google-ads-transparency-center/). The full job is in [ad intelligence](/solutions/ad-intelligence/) and [competitor monitoring](/solutions/competitor-monitoring/).

## Endpoints used

- [Meta advertiser ads](https://okdata.online/apis/meta/advertisers/ads/list/) `meta.advertisers.ads.list`: $0.004 per call · about 30 ads per page
- [Google Ads Transparency advertiser search](https://okdata.online/apis/google/advertisers/search/) `google.advertisers.search`: $0.004 per call · about 10 advertisers per page
- [Google advertiser ads](https://okdata.online/apis/google/advertisers/ads/list/) `google.advertisers.ads.list`: $0.004 per call · about 40 ads per page
- [TikTok Ads Library search](https://okdata.online/apis/tiktok/ads/search/) `tiktok.ads.search`: $0.004 per call · about 12 ads per page

Updated 2026-11-12
