List the ads an advertiser is running on Google
Run job:ads.google.advertiser.ads through the looot API: 1 provider, from $0.00642 per call. Inputs, prices, output shape and code for curl, JavaScript and Python.
List the ads an advertiser is running on Google.
Job id ads.google.advertiser.ads, in Ads intelligence (Ad libraries). As of 2026-10-01, 1 provider serve it through 2 tools. Run job:ads.google.advertiser.ads and looot picks one of them; with fallback on, a miss moves on to the next. See Jobs.
Inputs
Fields the job’s tools take, most shared first. Any key you send passes through unchanged.
| Name | Type | Taken by | Required by | Description |
|---|---|---|---|---|
company_domain |
string | 2 of 2 | 2 | Company website |
all_ads |
boolean | 1 of 2 | 0 | This will automatically use the continuation_token and scrape all the pages, returning all available ads. Works only with a webhook_url as it needs a place to send each page, one by one. Warning: use this cautiously because there is no way of stopping it. If you use this on a domain that runs 10000 ads, it will try to scrape all the ads and it will use the credits (one page = one credit) |
continuation_token |
string | 1 of 2 | 0 | Token used to grab the next set of ads |
data_provider |
string | 1 of 2 | 0 | Data provider to use |
extract_text |
boolean | 1 of 2 | 0 | Extract text content from ad creatives |
media_type |
string | 1 of 2 | 0 | Filter results based on media type. Possible values: text, image, video. |
shopping |
boolean | 1 of 2 | 1 | Always true: Adyntel returns the Google Shopping ads in this same call. (false switches Adyntel to an async job id that this tool does not poll.). Example: true |
webhook_url |
string | 1 of 2 | 0 | Webhook URL for async delivery |
Providers and prices
| Provider | Tool | Price |
|---|---|---|
| Adyntel | adyntel-google |
$0.00642 per call |
| Adyntel | adyntel-google-shopping |
$0.00642 per call |
A call that fails at the provider costs $0. See What’s free.
Output
Each provider answers in its own shape. Shape of the run’s result from adyntel-google, checked against 4 real answers:
{ ads: { start, format, variants: { width, height, content }[], last_seen, creative_id, original_url, advertiser_id, advertiser_name }[], country_code, total_ad_count, continuation_token }
Run it
Every call needs your API token in LOOOT_TOKEN; Sign in shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With wait: 30 the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll GET /v1/runs/<runId>.
Example input with placeholder values:
curl -X POST "https://api.looot.ai/v1/runs" \
-H "Authorization: Bearer $LOOOT_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"endpointId":"job:ads.google.advertiser.ads","input":{"company_domain":"example.com"},"wait":30}'const response = await fetch("https://api.looot.ai/v1/runs", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
endpointId: "job:ads.google.advertiser.ads",
input: {
company_domain: "example.com",
},
wait: 30,
}),
});
const run = await response.json();
console.log(run.status, run.result);import os
import uuid
import requests
response = requests.post(
"https://api.looot.ai/v1/runs",
headers={
"Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"endpointId": "job:ads.google.advertiser.ads",
"input": {
"company_domain": "example.com",
},
"wait": 30,
},
timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))To pin one provider, send its tool id as endpointId instead of job:ads.google.advertiser.ads.