Docs

Creative features

Hook, offers, urgency, social proof, format, video length, cuts and on-image text of any ad, rule-based and measured, with the evidence for every tag.

GET /v1/ads/{id}/features breaks an ad down into the parts creative strategists compare. No AI model guesses anything: text tags come from fixed rules and quote the exact text they matched, media properties are measured, and on-image text is read with OCR.

Shell
curl "https://api.adlibapi.com/v1/ads/meta:1435611275210253/features" \
  -H "X-API-Key: $ADLIB_API_KEY"
JSON
{
  "data": {
    "version": "rules-1",
    "method": "rules+measurement+ocr",
    "format": "vertical_image",
    "text": {
      "hook": "Get Netflix starting at ₹149/month.",
      "hook_is_question": false,
      "prices": ["₹149"],
      "discounts": [],
      "urgency": [],
      "social_proof": [],
      "free_shipping": []
    },
    "media": [
      { "kind": "image", "aspect": "9:16", "orientation": "vertical", "width": 1080, "height": 1920,
        "ocr": { "text": "STORIES YOU CAN'T MISS PLANS START ?149/MONTH", "confidence": 0.89 } }
    ],
    "ocr_text": "STORIES YOU CAN'T MISS PLANS START ?149/MONTH"
  },
  "meta": { "ad_id": "meta:1435611275210253", "cached": false, "analyzed_at": "2026-10-28T06:20:44Z" }
}

What you get

Field How it is made
text.hook The first sentence of the primary text
text.prices, text.discounts, text.numbers Patterns for currencies, percentages and "save" phrases
text.urgency, social_proof, guarantee, free_offer, free_shipping, novelty Phrase lists in English, German, French, Spanish, Italian, Dutch and Polish; each hit has rule and the exact text, e.g. {"rule": "today only", "text": "Today only"}
text.emojis, hashtags, mentions, uppercase_ratio Counted
media[].aspect, orientation, width, height Measured with ffprobe
media[].duration_s, has_audio Measured (videos)
media[].scene_cuts, cuts_per_minute Hard cuts detected with ffmpeg (scene change above 0.4)
media[].ocr Text on the image, or on the video at 0.5 s and 3 s, read with tesseract
format From the measured media: vertical_video, square_image, carousel, text_only, …
landing Domain, path and UTM parameters of the landing URL

OCR keeps only words read with at least 75% confidence and drops an image's text when fewer than two such words remain, so you get no text rather than wrong text. When a video link has expired upstream, the media is measured from its poster image and says so in error.

Cost and caching

Each call costs 2 credits. Results are stored per ad version: a repeat call for the same creative answers from storage, and a changed creative is analysed again. Calls where nothing could be analysed (no text, no reachable media) are not billed.