Apify actor · whoareyouanas/creative-intelligence
Creative Intelligence - AI Ad Creative Analysis
Analyze existing ad creative assets using your own AI-provider key. Supply JSON, CSV, or a scraper dataset to produce structured creative observations, scoring fields, and improvement suggestions.
Documentation checked 2026-10-29 · deployed build 0.2.1 · run through your Apify account
01 / Overview
Match the actor to the job.
Use your own creative inputs
Provide public image or video URLs, CSV rows, or an existing Apify dataset.
Choose an AI provider
Use supported OpenAI, xAI, or Anthropic settings with your own provider credentials.
Batch or agent workflow
Run a bounded batch or use the documented MCP tools for asynchronous creative analysis.
02 / Input
Start with a clear, bounded input.
The deployed schema requires provider. Analysis also needs a matching provider key or configured provider environment credentials, plus creative assets. Replace the example asset URL and key; example.com is a placeholder, not a working creative.
{
"provider": "openai",
"apiKey": "YOUR_OPENAI_API_KEY",
"creatives": [
{
"id": "creative-1",
"brand": "Example Brand",
"body": "Turn ad creatives into measurable insights.",
"cta": "Learn More",
"assetUrl": "https://example.com/ad.jpg",
"assetType": "image"
}
]
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| mode | string | "batch" | Batch analyzes the supplied creatives and exits. MCP serves agent tools at /mcp; Standby automatically selects MCP regardless of this setting. Options: batch, mcp |
| provider | stringRequired | "openai" | The AI provider to use for creative analysis. Options: openai, xai, anthropic |
| apiKey | string | Your credential | Required for analysis unless CREATIVE_API_KEY or a provider-specific API key environment variable is configured. Stored encrypted by Apify. For MCP, configure this once in a task; keys are not tool arguments. |
| model | string | Not specified | Optional model name. Leave empty to use a provider-specific vision-capable default. |
| creatives | array | [] | Simple JSON rows for anyone who has ad copy and creative assets. Each row needs at least an assetUrl, assetUrls, imageUrl, videoUrl, or mediaUrl. Common fields: id, brand, body, cta, assetUrl, assetType. |
All other input controls (11)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| csvInput | string | Not specified | Paste CSV from a spreadsheet. Supported headers include id, brand, body, cta, assetUrl, assetUrls, mediaUrl, imageUrl, videoUrl, assetType, format, active, runTimeDays, multipleVersions, similarAdCount, totalPlatforms, platforms. Use semicolon, pipe, or new lines inside assetUrls for multiple assets. |
| sourceDatasetId | string | Not specified | Optional Apify dataset ID/name from a previous ads scraper run. If set, the actor reads ads from this dataset. |
| ads | array | [] | Backward-compatible ad objects from scraper output. Each item can contain libraryID, brand, body, ctaText, format, images, videos, active, runTimeDays, multipleVersions, similarAdCount, and totalPlatforms. |
| maxAds | integer | 100 | Maximum number of creatives to analyze from all source inputs. Set to 0 for all available creatives, capped at 10000 per run. Minimum: 0 · Maximum: 10000 |
| maxConcurrency | integer | 2 | Number of ads to analyze in parallel. Provider rate limits and image/video size affect reliability; 1-3 is recommended. Minimum: 1 · Maximum: 10 |
| analyzeVideos | boolean | true | If enabled, video ads are downloaded and sampled into frames for multimodal analysis. Disable to skip video ads. |
| maxVideoFrames | integer | 8 | Maximum frames extracted from each video. More frames improve context but increase cost and latency. Minimum: 1 · Maximum: 20 |
| videoFrameIntervalSeconds | integer | 2 | Sample one frame every N seconds until max video frames is reached. Minimum: 1 · Maximum: 30 |
| imageInputMode | string | "url" | Use URL mode for public images. Use download mode if the provider cannot fetch image URLs directly. Options: url, download |
| imageDetail | string | "low" | Vision detail level. Higher detail can improve OCR and layout reasoning but usually costs more. Options: low, high, auto |
| includeRawResponse | boolean | false | If enabled, saves the parsed raw provider response in each dataset item for debugging. Leave off for cleaner output. |
03 / Output
Know what each returned row represents.
- Rows include analysis_status, provider/model context, observed creative attributes, scores, and suggestions. Failed rows are saved with an error.
- A successful run can contain failed creatives. Exclude failed rows from ranking, and treat scores as model judgments rather than measured campaign performance.
{
"analysis_status": "failed",
"provider": "openai",
"libraryID": "example-creative",
"error": "Illustrative asset or provider error"
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
libraryID
Library ID
brand
Brand
analysis_status
Status
analysis_type
Type
provider
Provider
model
Model
ai_score
AI Score
performance_score.total
performance_score.total
total_weighted_score
Final Score
theme
Theme
tone
Tone
visual_style
Visual Style
hook
hook
product_display
product_display
human_display
human_display
offer_display
offer_display
improvement_suggestions
improvement_suggestions
error
error
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (3)
- Batch Summary
- Batch totals: total, succeeded, failed. Run SUCCEEDED does not imply every creative completed.
- Overview
- Table view of analyzed ads with core scoring and classifications.
- All Results
- Full dataset items with metrics, extracted text, and suggestions.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Actor Start apify-actor-start | $0.00005 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
result apify-default-dataset-item | $0.005 / event | Single result in the default dataset. $5.00 per 1,000 of this event. Other events and separate services are additional. |
- AI-provider usage is billed separately to your provider account, in addition to Apify actor events.
- Video frames, higher image detail, and larger batches can increase provider cost and runtime. Inspect failed rows and run charges.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~creative-intelligence/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- This actor does not discover or scrape ads itself; provide assets or an existing dataset first.
- Private, expired, or blocked media can fail. Scoring does not predict verified sales, conversions, or ROAS.
Questions
Before you build an integration.
What do I need to provide?
The deployed schema requires provider. Analysis also needs a matching provider key or configured provider environment credentials, plus creative assets. Replace the example asset URL and key; example.com is a placeholder, not a working creative.
What should I check in the output?
- Rows include analysis_status, provider/model context, observed creative attributes, scores, and suggestions. Failed rows are saved with an error.
- A successful run can contain failed creatives. Exclude failed rows from ranking, and treat scores as model judgments rather than measured campaign performance.
How do I budget the run?
- AI-provider usage is billed separately to your provider account, in addition to Apify actor events.
- Video frames, higher image detail, and larger batches can increase provider cost and runtime. Inspect failed rows and run charges.
Keep exploring
Practical guides for the next step.
Turn Scraped Ads into an AI Creative Review You Can Check
Analyze a small ad dataset, keep model judgments separate from campaign results, and turn structured feedback into a creative test brief.
Read the guideHow to Build an AI Creative Intelligence Workflow from Ad Libraries
Build a creative intelligence workflow using Meta, Google, and TikTok ad libraries, scraper exports, tagging, and AI-assisted brief generation.
Read the guideHow to Turn Scraped Ads Into Creative Briefs With AI
A practical workflow for turning scraped competitor ads into structured creative intelligence, then using Seercraft to save winning concepts and generate better briefs.
Read the guideTop 5 Apify Scrapers to Automate Marketing Research
A practical stack of Apify scrapers for automating marketing research across Meta ads, Google ads, TikTok ads, Facebook Groups, and Reddit.
Read the guide