Track what ads a competitor is running on Google
Pull a competitor's ads from the Google Ads Transparency Center as JSON: format, text, dates shown and regions, so you can track their campaigns over time.
Competitors change their Google ads constantly, and the only public record is the Ads Transparency Center, which you read one advertiser and one ad at a time. That does not scale past a quick look. Lovely Router reads it for you. Send the Transparency Center link of an advertiser, get one JSON object per ad, pay per ad from a prepaid balance. Call it from a script, a weekly report or an AI agent with one API key.
Hand it to your AI agent
Copy this prompt into Claude Code, Cursor, Codex or any coding agent. It tells the agent where the docs are and how to use your API key.
Track what ads a competitor is running on Google. Use the Lovely Router data tools: each returns JSON and is billed per result.
- Docs (read first): https://lovelyrouter.com/docs/tools/find.md and https://lovelyrouter.com/docs/tools/run.md
- Plan first: POST https://lovelyrouter.com/v1/tools/suggest with `{"task": "<my task in plain words>"}` (free). It returns the tools to run in order, each with an example `input`, the `input_required` fields, an estimated cost and a ready-made `run` request. Replace the example values with my task's; if a field is unclear, read the tool with GET https://lovelyrouter.com/v1/tools/<id>. To browse instead, POST https://lovelyrouter.com/v1/tools/discover searches the catalog.
- Show me the plan and its estimated cost (`total_est_cost_usd`) before running anything large.
- Run: POST https://lovelyrouter.com/v1/tools/<id>/run with `{"input": {...}, "max_results": N}`. A 200 has the finished run with `items`; a 202 means it is still running, so poll the `poll` path until `status` is `succeeded`, `failed`, `timed_out` or `stopped`.
- Only delivered results are billed. Keep max_results small on the first run, check the output, then scale up.
- If you support MCP, connect https://lovelyrouter.com/mcp instead (Streamable HTTP, same key; https://lovelyrouter.com/docs/tools/mcp.md) and use suggest_tools, get_tool and run_tool.
- Auth: read my API key from the LOVELY_API_KEY environment variable and send it as `Authorization: Bearer $LOVELY_API_KEY`. Never print or commit the key. If it is not set, ask me to create one at https://lovelyrouter.com/app/keys.
- Billing is prepaid: every call is charged to my balance, so test with a small request before running anything large.
- Every docs page is plain Markdown; the full index is https://lovelyrouter.com/llms.txt.
My task: <the inputs (links, keywords or accounts) and how many results you need>How it works
Open the advertiser in the Transparency Center
Search for the competitor or its domain at adstransparency.google.com, pick your region, and copy the URL of the results page. That link is the input.
Run the tool with a cap
Send the link to
POST /v1/tools/google-ads-transparency/runwithresultsLimitandmax_results. The run holds its maximum cost from your balance and returns the ads as JSON.Store and diff
Save each run with a date. Compare with the previous run to see which ads are new, which stopped, and where the messaging changed.
Get a competitor's ads with one request
Google Ads Transparency takes a list of Transparency Center links in startUrls. resultsLimit caps the ads read per link, and max_results caps the whole run:
curl https://lovelyrouter.com/v1/tools/google-ads-transparency/run \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{
"input": {
"startUrls": [{"url": "https://adstransparency.google.com/?region=US&domain=nike.com"}],
"resultsLimit": 3
},
"max_results": 3
}'A run still going after 60 seconds returns 202; Run a tool shows how to poll. Set skipDetails to true for a faster run that only scrolls the list; every ad is included, but each one may carry less detail.
What each ad holds
| Field group | What you get |
|---|---|
| Format | The ad format (text, image, video) |
| Content | The ad text |
| Timing | The dates the ad was shown |
| Reach | The regions it ran in |
The tool reads what the Transparency Center publishes for an advertiser. It does not show budgets or performance.
Recipes
Every Monday, run the tool for your three closest competitors. Diff against last week and send a short list of new and stopped ads to the marketing channel.
Alert when a competitor suddenly has many ads with a first-shown date inside the last seven days. That usually means a product launch or a seasonal push.
Run the same advertiser with the region in the link changed, and see which offers run in which markets.
Collect the text of every ad a competitor has run for a product line, then ask a model to group them by angle: price, speed, trust, features.
When a rival appears in your search results, paste its domain into the Transparency Center, run the tool, and see how long it has been advertising and in which regions.
Prefer plain words? Connect the MCP server and tell Claude Code or Cursor: "Read the ads for this Transparency Center link, group them by message, and tell me which started in the last 30 days. Set max_results to 100."
Pair it with other ad sources
Google is one channel. Competitors usually buy on several, and you want their site traffic for context:
An advertiser's ads from the Google Ads Transparency Center: format, text, dates shown, regions.
Ads from the Meta Ad Library for a search URL: creative, copy, start date, advertiser.
Ads from the LinkedIn Ad Library for an advertiser or keyword search URL: copy, format, dates.
Estimated traffic for websites from Similarweb: monthly visits, ranks, traffic sources, top countries, engagement.
Google results pages for a query: organic results (position, title, URL, snippet, date, sitelinks) and related searches. One result = one results page (~10 links).
facebook-adsreturns Meta Ad Library ads with creative, copy, start date and advertiser.linkedin-adsreturns LinkedIn Ad Library ads with copy, format and dates, useful for B2B rivals.website-trafficshows estimated visits and traffic sources, to see whether the ad activity matches growth.google-searchshows the organic results and ads a searcher sees for a keyword.
For the wider picture, see ad intelligence.
What you pay
You pay per ad: starting a run holds its maximum cost, the per-call fee plus the per-ad fee times max_results, and the run settles to what it returned. The rest of the hold goes back to your balance. A run that fails or times out pays only for the ads it delivered, and a run refused at the start costs nothing.
Reading 200 ads a week is billed as 200 ads a week. There is no subscription and no monthly minimum: top up from $5, and one balance pays for tools and models. The card above shows today's price; pricing lists every tool.
Frequently asked questions
How do I find the link to put in startUrls?+
Go to the Google Ads Transparency Center, search for the advertiser or its domain, and copy the address of the results page. Each link must start with https://adstransparency.google.com/.
How many ads can one run return?+
max_results can go up to 500 ads. resultsLimit caps the ads per link, so with several links the total is bounded by max_results.
Can I see how much a competitor spends?+
No. The tool returns the format, text, dates shown and regions of each ad. Budgets and results are not part of what it returns.
What does skipDetails do?+
It makes the run faster by not opening each ad's details page. All ads are still included, but the information for each one may be less complete.
Do I need a subscription?+
No. You add credit to a prepaid balance and each run draws it down. Failed runs pay only for the results they delivered, and nothing renews automatically.
Comparing ads across channels? See ad intelligence, the tool catalog, and the pricing page.