# Adobe Stock Analyzer & Download Checker: Views, Keywords (`quarra/adobe-stock-analyzer`) Actor

Look up Adobe Stock assets by ID or URL: downloads, views, the full keyword list, contributor, category, upload date, AI label, size and preview links. For contributors tracking their portfolio and studying competitors. Up to 100,000 assets per run.

- **URL**: https://apify.com/quarra/adobe-stock-analyzer.md
- **Developed by:** [Quarra Labs](https://apify.com/quarra) (community)
- **Categories:** SEO tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 assets

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Adobe Stock Analyzer: Downloads, Views & Keywords by Asset

Look up Adobe Stock assets by ID or URL, without an account or API key: photos, illustrations, vectors, videos,
templates and 3D. Each asset comes back with its number of downloads and views, its full keyword list, the
contributor, the category, the upload date, size, format, AI label and preview links. Export as JSON, CSV or Excel,
or read it through the Apify API.

**$0.30 per 1,000 assets**, plus a small start fee per run. Assets that no longer exist and inputs that fail are not
charged.

### Quick start

1. Paste asset links or IDs into **Asset URLs or IDs**, one per line.
2. Click **Start** and read the assets in the run's **Output** tab.

Run it every day or week on the same list (Apify schedules) to follow how downloads and views move. Like any Apify
Actor, it can also be run through the Apify API and connected to webhooks, Make, Zapier, n8n or Apify's MCP server for
AI agents.

### What it is used for

- **Tracking your own portfolio**: downloads and views of each of your assets, run after run.
- **Studying competitors**: the keywords, category and downloads of the assets that sell in your niche.
- **Bulk metadata export**: titles, keywords and sizes of a list of assets, in one table.

To find assets by keywords, by contributor or by similar image, use
[Adobe Stock Scraper](https://apify.com/quarra/adobe-stock-scraper).

### What you get

| | |
|---|---|
| Asset ID, URL, title, type (photo, illustration, vector, video, template, 3D) | yes |
| Downloads and views, as counted by Adobe Stock | yes |
| Keywords and their number | yes |
| Contributor: name, ID, portfolio URL, country | yes |
| Category, its ID and full path | yes |
| Upload date | yes |
| Generative AI label, premium collection, model release | yes |
| Width, height, orientation, file format, file size | yes |
| Videos: duration, frame rate, preview video links | yes |
| Thumbnails (500 and 1,000 px) and the watermarked preview | yes |

### Inputs

- **Asset URLs or IDs**: `https://stock.adobe.com/images/barista-making-coffee/300428267`, any language and asset
  type, or just `300428267` (several IDs on one line, separated by commas, work too). Thumbnail
  links (`ftcdn.net`) are read too. Up to 100,000 per run; each asset is
  delivered once, even if it is in the list several times.
- **Language**: keywords come in that language (20 languages). Titles stay as written by the contributor.

Example, through the API:

```json
{
  "assetUrls": ["300428267", "https://stock.adobe.com/fr/images/business-people/488529472"],
  "language": "en"
}
```

### Output

One record per asset in the dataset. A shortened asset:

```json
{
  "type": "asset",
  "status": "ok",
  "assetId": 300428267,
  "url": "https://stock.adobe.com/300428267",
  "title": "Barista making coffee in coffee shop, hands holding cup of coffee.",
  "assetType": "photo",
  "keywords": ["people", "bar", "machine", "hot drink", "hand", "eatery", "…"],
  "keywordCount": 43,
  "downloads": 1797,
  "views": 0,
  "creatorName": "Aleksandrs Muiznieks",
  "creatorId": 206684585,
  "creatorUrl": "https://stock.adobe.com/contributor/206684585",
  "creatorCountry": "Latvia",
  "uploadedAt": "2019-11-04T20:15:00",
  "category": "Drinks",
  "isAIGenerated": false,
  "width": 4800,
  "height": 3200,
  "fileFormat": "image/jpeg",
  "thumbnailUrl": "https://as1.ftcdn.net/v2/jpg/03/00/42/82/500_F_300428267_QndUXocKZb92jE1RKf5fBoQUIo8bxeME.jpg",
  "previewUrl": "https://stock.adobe.com/Rest/Libraries/Watermarked/Download/300428267/2",
  "input": "300428267",
  "inputType": "asset",
  "scrapedAt": "2026-10-12T03:59:20.090Z"
}
```

Fields that need a word of explanation:

- `status`: `ok` (delivered, charged), `unavailable` (free: an asset ID that Adobe Stock no longer shows), `error`
  (free; `error` says why, `retryable` says if a later run may work).
- `views`: Adobe Stock shows 0 for many assets (about 4 in 5 in our sample of 8,817), even assets with downloads.
- `durationSeconds` and `frameRate` are set for videos only; `vectorFormat` for vectors.
- `previewUrl` is Adobe Stock's watermarked preview. Licensed files are not downloaded.

The run summary (counts, why the run stopped) is the `OUTPUT` record of the run's key-value store.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Asset | $0.30 per 1,000 |
| Run start | $0.0005 per GB of memory (1 GB minimum; $0.0005 at the default 256 MB) |

Higher Apify plans pay less per asset. Never charged: assets that no longer exist, error records, an asset listed
more than once. Set **Maximum cost per run** in the run options and the run stops before going over it.

### Limits

- Asset descriptions are not available, and neither are license prices (they depend on your Adobe plan).

### FAQ

**Do I need an Adobe account?** No.

**What if the run is restarted by the platform (migration or reboot)?** It resumes where it was: assets already in the
dataset are not delivered or charged again.

**Can I get the full-resolution files?** No. You get the data and the watermarked previews; files are licensed from
Adobe Stock.

**Is it legal?** It collects public data shown to any visitor of Adobe Stock. Check the rules that apply to your use of
the data, and remember that the images themselves belong to their contributors.

**Does the Actor send anything to Quarra?** Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

# Actor input Schema

## `assetUrls` (type: `array`):

One per line: Adobe Stock asset URLs (photos, vectors, videos, templates, 3D; any language) or asset IDs. Each gets its keywords, downloads, views and details. Assets that no longer exist get a free record.

## `language` (type: `string`):

Language of keywords and of how search keywords are read. Titles stay as written by the contributor.

## `maxItems` (type: `integer`):

Total number of assets delivered by the run, counted exactly. Free records (errors, assets that no longer exist) are not counted.

## `proxyConfiguration` (type: `object`):

Connection. Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "assetUrls": [
    "https://stock.adobe.com/images/barista-making-coffee/300428267",
    "488529472"
  ],
  "language": "en",
  "maxItems": 100000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every asset with all its fields, and free records with the reason.

## `overview` (type: `string`):

One line per asset: downloads, views, keywords, contributor.

## `summary` (type: `string`):

Counts per input, total results on Adobe Stock, why the run stopped, errors.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "assetUrls": [
        "https://stock.adobe.com/images/barista-making-coffee/300428267",
        "488529472"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/adobe-stock-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "assetUrls": [
        "https://stock.adobe.com/images/barista-making-coffee/300428267",
        "488529472",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/adobe-stock-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "assetUrls": [
    "https://stock.adobe.com/images/barista-making-coffee/300428267",
    "488529472"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quarra/adobe-stock-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quarra/adobe-stock-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bXAMlcLuY5wu61Q9O/builds/oJm0dUeryGF1gug00/openapi.json
