Advertisers and agencies need to show that a campaign ran where it was booked: a sponsorship banner on a publisher's homepage, a takeover on launch day, an ad next to the right content. Publishers need the same captures for their own reports. For screenshot proof of placement, render the page as a target visitor would, with ads left on, and keep the image.
Capture with ads on
Ad blocking is off by default, so ads load as for any visitor. Remove the cookie banner, which otherwise covers the page, and give ads time to load:
curl -X POST "https://shotkit.net/api/take" \
-H "X-Access-Key: YOUR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://publisher.example.com","viewport_width":1440,"viewport_height":900,"full_page":true,"block_cookie_banners":true,"wait_for_selector":"iframe[id^=google_ads_iframe]","delay":3,"format":"jpg"}' \
--fail-with-body -o shot.jpgfull_page scrolls through the page before capturing, which triggers lazy-loaded ad slots below the fold. wait_for_selector waits for the first Google Ad Manager slot to render; adjust it for other ad servers.
Focus on one placement
Scroll an ad slot into view and capture the screen around it, as a visitor would see it:
curl -X POST "https://shotkit.net/api/take" \
-H "X-Access-Key: YOUR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://publisher.example.com/article/123","scroll_into_view":"#div-gpt-ad-sidebar","scroll_into_view_adjust_top":-120,"viewport_width":1440,"viewport_height":900,"block_cookie_banners":true,"delay":3,"format":"jpg"}' \
--fail-with-body -o shot.jpgTarget the right audience
Ad servers target by country, device and time of day. Match the campaign's targeting:
- Country: route through a
proxyin the target country. See geolocation and localization. - Device: set
viewport_deviceto a phone preset for mobile placements. - Time:
time_zonefor dayparted campaigns.
What screenshots can and can't prove
Ad servers rotate creatives, so a screenshot shows one visit, not every impression. Take several captures over the flight of a campaign for a fair sample. For viewability, brand safety and fraud measurement across all impressions, use a verification vendor such as IAS or DoubleVerify; screenshots are the visual proof that complements their numbers.
Frequently asked questions
Do I need to turn anything off to see ads?
No. block_ads is off unless you turn it on. Just leave it out.
Why is the ad slot empty in my screenshot?
The ad hadn't loaded yet, or no ad was served for that visit. Wait longer with wait_for_selector on the slot's iframe or a larger delay, and try again; targeting may also exclude the request's location.
Can I capture a whole campaign automatically?
Yes. Schedule captures of each placement several times a day during the flight, and store each image with its time and URL for the report.