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.
curl "https://api.adlibapi.com/v1/ads/meta:1435611275210253/features" \
-H "X-API-Key: $ADLIB_API_KEY"{
"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.