API reference

The Ad record

Every platform's ads come back in one shape, with the same keys, ISO dates and ranges. What a platform does not have is null, never a missing key.

Ad (a Meta ad)
{
  "id": "meta_900000000000001",
  "platform": "meta",
  "platform_ad_id": "900000000000001",
  "library_url": "https://www.facebook.com/ads/library/?id=900000000000001",
  "advertiser": {
    "id": "100000000000001",
    "name": "Northwind Running Co",
    "domain": null,
    "library_url": "https://www.facebook.com/ads/library/?view_all_page_id=100000000000001"
  },
  "status": "active",
  "first_shown": "2026-08-04T07:00:00Z",
  "last_shown": "2026-10-18T07:00:00Z",
  "format": "image",
  "text": {
    "headline": "Trail shoes, half price this week",
    "body": "Grip that holds on wet rock. Free returns for 60 days.",
    "description": null,
    "cta": "Shop now"
  },
  "text_source": "platform",
  "link_url": "https://northwind-running.example/trail",
  "media": [
    {
      "type": "image",
      "url": "https://example.com/sandbox-media/meta-trail.jpg",
      "preview_url": null,
      "width": 1080,
      "height": 1080
    }
  ],
  "placements": [
    "facebook",
    "instagram",
    "audience_network",
    "messenger"
  ],
  "regions": null,
  "metrics": {
    "impressions": null,
    "reach": null,
    "spend": null
  },
  "variants": 1
}

Fields

FieldTypeWhat it is
idstringOurs, unique across platforms: <platform>_<the platform's id>, e.g. meta_900000000000001. Google's carries the advertiser too: google_<AR id>_<CR id>.
platformstringmeta, google, tiktok or linkedin.
platform_ad_idstringThe platform's own id for the ad (Google's creative id, CR…).
library_urlstringThe ad's page in the platform's library.
advertiser.idstring or nullA Meta page id, Google's AR… id, TikTok's business id or LinkedIn's company id: pass it back to that platform's search.
advertiser.namestring or nullAs the platform shows it.
advertiser.domainstring or nullThe advertiser's domain, where the platform gives one (Google's verified domain).
advertiser.library_urlstring or nullThe advertiser's page in the platform's library.
statusstringactive, inactive, or unknown where the platform does not say (Google, TikTok, LinkedIn).
first_shown, last_shownstring or nullISO 8601 in UTC: the first and last days the platform says the ad was shown.
formatstringtext, image, video, carousel, dynamic (catalogue ads) or unknown.
text.headline, text.body, text.description, text.ctastring or nullThe ad's words. headline is Meta's title, Google's and LinkedIn's headline, TikTok's title.
text_sourcestringplatform, or ocr where the text was read from the ad's image (Google text ads).
link_urlstring or nullWhere the ad sends people.
media[]arraytype (image or video), url, preview_url (a still for a video), width, height.
placementsarray of stringsWhere on the platform it ran, e.g. facebook, instagram, search, youtube.
regionsarray of strings or nullISO 3166 alpha-2 codes of the countries it ran in, where the platform says.
metrics.impressions, metrics.reachrange or null{ "min", "max" }, as the platform gives a range: TikTok's "1K-10K" is 1000 and 10000.
metrics.spendrange or null{ "min", "max", "currency" }, ISO 4217 currency. Political and issue ads on Meta.
variantsinteger or nullHow many versions of the ad the platform groups under it, where it says.
rawanyOnly with include=raw: the platform's own record.

Nulls and empty lists

Every key is always there. A value the platform doesn't give is null (a single value or object) or [] (a list where none is the answer, such as media for a text ad). null means the platform doesn't say, never zero.

Media addresses expire

media[].url and preview_url are the platform's own addresses, as its library serves them. They expire, Meta's within days, so download the files you want to keep when you get them. We don't host copies.

Ids

id is stable: the same ad has the same id in every search, so you can store it and spot ads you have seen before. Pass it to GET /v1/ads/{id} for the detail. platform_ad_id is the platform's own, for its library's links.

The platform's own record

include=raw adds raw to each ad: the platform's record as we read it, for anything we don't map. Its shape is the platform's and can change without notice; the rest of the record doesn't.

Detail

GET /v1/ads/{id} returns this record plus detail: versions, countries, targeting, EU reach and payer. See One ad.