Ad API Guide

Field guide

What ad-library data can and cannot tell you

Field by field, what came back on 1,600 ads across ten routes and four platforms: creatives, dates, placements, status, landing pages, and the fields people assume exist and do not, such as spend, targeting and performance.

By Shirley Lou, Research, TregPublished 2026-09-15Facts re-checked 2026-09-15Last material change 2026-09-15

Written for people asking: Can I get competitor ad spend from the Meta ad library API?What data does the Google Ads Transparency Center actually show?Do ad library APIs show impressions or targeting?

Across 1,600 ads returned by ten ad-library routes on 15 September 2026, every route returned the creative and the platform, and most returned start and end dates and a landing page. No route on any platform returned spend for ordinary commercial ads: 0 of 200 on Apify Meta, 0 of 594 on ScrapeCreators Meta, 0 of 754 on Google, 0 of 240 on LinkedIn, 0 of 176 on TikTok. Impressions exist only as ranges, on 20% of LinkedIn ads (EU delivery) and on TikTok as an audience-size bucket. Google returns first and last shown dates and format but no active status; LinkedIn returns dates on 20% of ads. Anything a vendor sells as competitor spend, targeting or performance from a public library is inferred, not read.

How the fields were measured

Each ad returned in the cohort run was checked for nine canonical fields, mapped from each provider’s own field names: the creative asset (image, video or card), start and end dates, the platform or placement, an active status, spend, reach or impressions, a landing page, and the ad text. A field counts as present when it is non-empty for that ad. The table shows, per route, the share of returned ads carrying each field.

Share of returned ads carrying each field, per route, cohort v1, 2026-09-15. 10 rows. Download CSV ↓
RouteAdsCreativeStart dateEnd datePlacementStatusSpendReach / impressionsLanding pageAd text
ScrapeCreators · Google ads by domain377100%100%100%100%0%0%0%100%0%
ScrapeCreators · Google advertiser lookup620%0%0%0%0%0%100%0%100%
SerpApi · Google Ads Transparency377100%100%100%100%0%0%0%100%0%
ScrapeCreators · LinkedIn ad library24094%20%20%100%0%0%20%7%100%
Apify · Meta Ads Scraper200100%100%100%100%100%0%0%98%99%
ScrapeCreators · Meta, by page name298100%100%100%100%100%0%0%100%99%
ScrapeCreators · Meta, keyword search296100%100%100%100%100%0%0%99%99%
Apify · TikTok Ads Library10297%0%0%100%100%0%100%0%0%
ScrapeCreators · TikTok ad library74100%100%100%100%100%0%100%100%100%
TikHub · TikTok Creative Center top ads0

What you can rely on

  • The creative itself. Every route returned it, as an image or video URL on the platform’s CDN. Those URLs expire, so a monitoring job should store the asset, not the link.
  • When the ad ran. Meta and Google return first and last seen dates on every ad. TikTok returns them through ScrapeCreators but not through Apify’s actor. LinkedIn returned dates on only a fifth of ads.
  • Where it ran. Meta returns publisher platforms (Facebook, Instagram, Audience Network, Messenger) per ad. Google returns the format (text, image, video) and, on request, the surface (Search, YouTube, Display, Maps, Play). TikTok and LinkedIn are single-platform.
  • Whether it is live. Meta and TikTok return an active flag. Google does not; you infer it from the last shown date. LinkedIn does not.
  • Where it points. Landing page on every Meta and Google ad, on every TikTok ad through ScrapeCreators, and on only 7% of LinkedIn ads, which return a destination URL only for some formats.
  • The copy. Meta, TikTok and LinkedIn return body text or headline. Google returns none: the Transparency Center shows a rendered creative, not the text.

What you cannot get

  • Spend. Zero ads out of 1,600 carried a spend value. Meta publishes spend and impressions for political and issue ads and, under EU rules, reach for ads delivered in the EU; commercial ads elsewhere carry neither. Google shows none for commercial ads. TikTok’s spent field came back empty on every ad. LinkedIn returns no spend. Any “competitor spend” figure built on a public library is a model, and it should be labelled as one.
  • Impressions. LinkedIn returned a range such as “1k-5k” on 20% of ads, those with EU delivery, with a per-country breakdown. TikTok returned an audience-size bucket such as “0-1K”, which is an estimate of audience, not impressions, and an impression count of 0 on every ad. Meta and Google returned nothing.
  • Targeting. Not returned by any route on any platform for commercial ads. Meta exposes EU targeting criteria only through per-ad detail calls on EU-delivered ads; none of the cohort’s first-page ads had it.
  • Performance. No clicks, conversions or results anywhere. TikHub’s Creative Center route ranks ads by TikTok’s own performance tiers, but it is a curated showcase you search by keyword, and it returned nothing for any of the ten brand names.
  • A complete list. Every route paginates. First pages are 20 to 40 ads; monday.com had 667 active Meta ads and Shopify 4,986 on the run date, and Google estimated 80,000 for Shopify. “All of a competitor’s ads” is a paginated job, not a call.

Field names by provider

For anyone mapping these into a schema, the source fields behind the canonical ones above:

Canonical ScrapeCreators Meta Apify Meta ScrapeCreators Google SerpApi Google ScrapeCreators TikTok ScrapeCreators LinkedIn
Creative snapshot.images / videos / cards snapshot.images / videos imageUrl, adUrl image, details_link videos, image_urls image, video, carouselImages
Dates start_date, end_date startDate, endDate firstShown, lastShown first_shown, last_shown first_shown_date, last_shown_date startDate, endDate
Placement publisher_platform publisherPlatform format format
Status is_active isActive audit_status
Spend spend (null) spend (null) spent (empty)
Reach reach_estimate (null) impressionsWithIndex.impressionsText (null) estimated_audience totalImpressions, impressionsByCountry
Landing snapshot.link_url snapshot.link_url domain target_domain url destinationUrl, landingPage
Text snapshot.body snapshot.body title headline, description

What this run cannot tell you

Ten advertisers, first page each, mostly US-targeted. A cohort of EU advertisers would show Meta’s EU reach and targeting fields populated on more ads, and LinkedIn’s impression ranges on more than a fifth. The absence of spend is structural, not a sample effect: the platforms do not publish it for commercial ads through any route.

Next step

  • Raw responses for every ad in the table are on the evidence page, one file per call.
  • The choose an API page compares the routes on cost and coverage; the Meta and Google pages cover the official access routes.

Spotted an error or a changed price? Email corrections@adapiguide.com with the page URL and a source. Corrections are logged on the corrections page.