Skip to content
Back to skills

Ads Parser

ASecurity

Collect and analyze a company's advertising from public ad-transparency libraries — LinkedIn Ad Library, Google Ads Transparency Center, Meta Ad Library — with exact ad texts, run dates, disclosed impressions and links to every ad. Use when someone asks what ads a company runs, how a competitor advertises, or wants a creative teardown from the libraries. Triggers: "what ads does X run", "competitor ads", "ad library", "collect X's creatives".

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 12, 2026
content-marketingpythongobashapi

Works with

  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 12, 2026

npx -y skills add tymoshenko-dmytro/claude-marketing-skills --skill ads-parser --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ads Parser?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ads Parser
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tymoshenko-dmytro-ads-parser/badge)](https://www.skillsdirectory.com/skills/tymoshenko-dmytro-ads-parser)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ads-parser
description: >-
  Collect and analyze a company's advertising from public ad-transparency libraries — LinkedIn Ad Library, Google Ads Transparency Center, Meta Ad Library — with exact ad texts, run dates, disclosed impressions and links to every ad. Use when someone asks what ads a company runs, how a competitor advertises, or wants a creative teardown from the libraries. Triggers: "what ads does X run", "competitor ads", "ad library", "collect X's creatives".
---

# Ads parser

Collects a company's ads from three transparency libraries through [SearchApi.io](https://www.searchapi.io), plus direct fetches of public LinkedIn Ad Library pages (no login needed).


**Key:** `SEARCHAPI_KEY`, from the environment or `~/.config/marketing-agent-kit/.env`. Setup: `connections/searchapi.md`, or run the `connect` skill.

Engine docs: `https://www.searchapi.io/docs/<engine-name-with-dashes>`. Check an engine's parameters before using it for the first time. Only successful (HTTP 200) requests are billed; new accounts get 100 free requests.

## Workflow

Create `raw/ads/` in the working folder. Save every response as JSON with a meaningful name. Write the analysis from the raw files only — never from memory of what a response said.

### 1. LinkedIn Ad Library — the richest source, with traps

Read `references/linkedin-ad-library.md` **before starting**. It covers the `companyIds` trick, why a name search returns impostors, and when impressions are disclosed. Short version:

```bash
# keyword search — also returns ads BY OTHERS that mention the brand:
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine linkedin_ad_library --out raw/ads/li-q.json q=<company>

# detail page for each ad id you found — public, no login. Save the HTML right away:
curl -s -A "Mozilla/5.0" "https://www.linkedin.com/ad-library/detail/<AD_ID>" -o raw/ads/li-detail-<AD_ID>.html
# or the structured version through SearchApi:
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine linkedin_ad_library_ad_details --out raw/ads/li-ad-<AD_ID>.json ad_id=<AD_ID>
```

### 2. Google Ads Transparency Center

```bash
# find the advertiser id first:
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine google_ads_transparency_center_advertiser_search --out raw/ads/g-adv.json q=<company>
# then the creatives:
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine google_ads_transparency_center --out raw/ads/g-1.json advertiser_id=AR...
```

Creative previews are images that carry the exact ad texts. Save them and transcribe the texts verbatim in the analysis. Link each creative to its page: `https://adstransparency.google.com/advertiser/<ADVERTISER_ID>/creative/<CREATIVE_ID>`.

### 3. Meta Ad Library

```bash
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine meta_ad_library --out raw/ads/meta-q.json q=<company>
# find the page id by name, if you don't have it:
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine meta_ad_library_page_search --out raw/ads/meta-pages.json q=<company>
# confirm the page is really theirs before attributing ads (same-name pages are common):
python3 ${CLAUDE_SKILL_DIR}/scripts/searchapi.py --engine meta_ad_library_page_info --out raw/ads/meta-page.json page_id=<ID>
```

Meta sorts by impressions by default, not by date — pass `sort_by` if you need the newest first. Zero ads is a finding, not a failure. State it explicitly — it tells you where the company does *not* look for its audience.

## Reporting rules

- Every ad in the report links to its library page. Every date is labelled ("Ran from … to …").
- Impressions only where the library actually discloses them; otherwise write "the library does not disclose this". LinkedIn discloses impressions, run dates and targeting **only for ads shown in the EU** — outside the EU those fields are simply missing.
- **No budget or spend estimates.** Libraries don't disclose spend for ordinary commercial ads (Meta's spend fields are filled for political and social-issue ads), and third-party dollar estimates (including Ahrefs paid-traffic cost) are unreliable. Quote a spend figure only if the library itself shows it; otherwise say it isn't disclosed.
- No comparisons of ad volume between competitors unless explicitly requested.
- Job ads are a hiring signal, not demand generation — analyse them separately.
- Separate the company's own ads from third-party ads that merely mention the brand. A keyword search returns both; the third-party ones are a separate signal (who compares themselves to the brand, who rides on it).

## Adapt it

- If you track the same competitors every month, keep their LinkedIn `companyIds`, Google advertiser ids and Meta page ids in a small `competitors.json` next to your reports. Lookups are the slow, error-prone part.
- Video ads: libraries give the cover image and text, not the file. If you need what is said in the video, download what the library exposes and transcribe it with Whisper.

Files in this skill

  • SKILL.md4.9 KB
  • references/linkedin-ad-library.md3.6 KB
  • scripts/searchapi.py2.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.