Get Ad Creative
curl --request GET \
--url https://scrapebadger.com/v1/google/ads/creative \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://scrapebadger.com/v1/google/ads/creative"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://scrapebadger.com/v1/google/ads/creative', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/google/ads/creative",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/google/ads/creative"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/google/ads/creative")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/google/ads/creative")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"creative_id": "<string>",
"advertiser_id": "<string>",
"advertiser_name": "<string>",
"target_domain": "<string>",
"region": "<string>",
"format": "<string>",
"media_url": "<string>",
"first_shown_utc": 123,
"first_shown_at": "<string>",
"last_shown_utc": 123,
"last_shown_at": "<string>",
"days_shown": 123,
"details_link": "<string>",
"variations": [
{
"media_url": "<string>",
"preview_html": "<string>",
"width": 123,
"height": 123
}
],
"political": {
"currency": "<string>",
"spend": 123,
"spend_min": 123,
"spend_max": 123,
"impressions_min": 123,
"impressions_max": 123,
"ads_count": 123,
"regions": [
{}
]
}
}Ads Transparency
Get Ad Creative
Full detail for one Ads Transparency Center creative — media, every rendered size variation, run dates and optional political disclosure.
GET
/
v1
/
google
/
ads
/
creative
Get Ad Creative
curl --request GET \
--url https://scrapebadger.com/v1/google/ads/creative \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://scrapebadger.com/v1/google/ads/creative"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://scrapebadger.com/v1/google/ads/creative', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/google/ads/creative",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/google/ads/creative"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/google/ads/creative")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/google/ads/creative")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"creative_id": "<string>",
"advertiser_id": "<string>",
"advertiser_name": "<string>",
"target_domain": "<string>",
"region": "<string>",
"format": "<string>",
"media_url": "<string>",
"first_shown_utc": 123,
"first_shown_at": "<string>",
"last_shown_utc": 123,
"last_shown_at": "<string>",
"days_shown": 123,
"details_link": "<string>",
"variations": [
{
"media_url": "<string>",
"preview_html": "<string>",
"width": 123,
"height": 123
}
],
"political": {
"currency": "<string>",
"spend": 123,
"spend_min": 123,
"spend_max": 123,
"impressions_min": 123,
"impressions_max": 123,
"ads_count": 123,
"regions": [
{}
]
}
}Full detail for a single creative: media, rendered size variations, first- and
last-shown dates and the target domain. Optionally attaches the advertiser’s
political-ad spend disclosure for the region.
Credits: 5
Authorization
string
required
Your ScrapeBadger API key.
Query Parameters
string
required
Advertiser ID, e.g.
AR01614014350098432001.string
required
Creative ID, e.g.
CR10484731423840108545. Take both ids from
/ads/search.string
default:"US"
ISO 3166-1 alpha-2 region, or
anywhere.boolean
default:"false"
Also fetch the advertiser’s political-ad spend disclosure for
region. Costs
one extra upstream call and is empty for non-political advertisers.Response
string
string
string
string
string
string
TEXT, IMAGE or VIDEO.string
integer
string
integer
string
integer
string
CreativeVariation[]
PoliticalDisclosure
Present only with
political=true and a disclosing advertiser.Example
curl "https://scrapebadger.com/v1/google/ads/creative?advertiser_id=AR01614014350098432001&creative_id=CR10484731423840108545®ion=US" \
-H "X-API-Key: YOUR_API_KEY"
const res = await fetch(
"https://scrapebadger.com/v1/google/ads/creative?" +
new URLSearchParams({
advertiser_id: "AR01614014350098432001",
creative_id: "CR10484731423840108545",
region: "US",
}),
{ headers: { "X-API-Key": process.env.SCRAPEBADGER_API_KEY } },
);
const creative = await res.json();
import requests
res = requests.get(
"https://scrapebadger.com/v1/google/ads/creative",
headers={"X-API-Key": "YOUR_API_KEY"},
params={
"advertiser_id": "AR01614014350098432001",
"creative_id": "CR10484731423840108545",
"region": "US",
},
)
creative = res.json()
Response
{
"creative_id": "CR10484731423840108545",
"advertiser_id": "AR01614014350098432001",
"advertiser_name": "Nike, Inc.",
"target_domain": "nike.com",
"region": "US",
"format": "IMAGE",
"media_url": "https://tpc.googlesyndication.com/simgad/example",
"first_shown_utc": 1749513600,
"first_shown_at": "2026-06-10T00:00:00Z",
"last_shown_utc": 1754870400,
"last_shown_at": "2026-08-11T00:00:00Z",
"days_shown": 63,
"details_link": "https://adstransparency.google.com/advertiser/AR01614014350098432001/creative/CR10484731423840108545",
"variations": [
{
"media_url": "https://tpc.googlesyndication.com/simgad/example-300x250",
"preview_html": "<div class=\"ad\">…</div>",
"width": 300,
"height": 250
},
{
"media_url": "https://tpc.googlesyndication.com/simgad/example-728x90",
"width": 728,
"height": 90
}
],
"political": null
}
A missing political disclosure never fails the lookup — the creative parsed
fine, so
political simply comes back null.Errors
| Status | Meaning |
|---|---|
400 | Unknown region. |
404 | No such creative for that advertiser. |
502 | Upstream Transparency Center failure — not billed. |

