# Adobe Stock Scraper (`automly/adobe-stock-scraper`) Actor

Adobe Stock Scraper: Scrape Adobe Stock search results, contributor portfolios and asset IDs: title, keywords, contributor, size, category, downloads, AI flag, license prices and previews for photos, vectors, illustrations, videos, templates, 3D and audio.

- **URL**: https://apify.com/automly/adobe-stock-scraper.md
- **Developed by:** [Automly](https://apify.com/automly) (community)
- **Categories:** Videos, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.25 / 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 Scraper

### What is Adobe Stock Scraper?

**Adobe Stock Scraper** is a tool that lets you **scrape Adobe Stock search results, contributor portfolios and single assets**: title, keywords, contributor, size, category, download count, upload date, AI-generated flag, license level and prices, thumbnails and previews, for photos, illustrations, vectors, videos, templates, 3D and audio. Type a search, pick filters, click **Start**, and download the assets as Excel, CSV or JSON.

- ⚡ **Fast:** 1,000 assets in about 15 seconds (our tests)
- 🔎 **Deep searches:** up to 10,000 results per search, and more for broad searches, which are split into smaller ones automatically
- 🎨 **Every content type:** photos, illustrations, vectors, videos, templates, 3D and audio in one tool
- 🏷️ **Full keyword lists:** every keyword the contributor added, plus category, downloads and upload date
- 🔓 **No login:** no Adobe account, API key or cookies needed

### What can Adobe Stock Scraper do?

- **Scrape Adobe Stock search results** for any keyword, like `mountain lake`, `business meeting` or `christmas background`
- **Use Adobe Stock's filters:** content type, orientation, free / standard / premium, AI-generated or not, people, color, transparent background, isolated, copy space, commercial or editorial use
- **Sort** by relevance, newest, most downloaded, featured, undiscovered or popular now
- **Scrape a contributor's portfolio** from its ID or link, or search inside it
- **Look up assets by ID or link** to get their full record: keywords, downloads, license prices
- **Research keywords and trends** for your own uploads: what sells, what is new, what is AI-made
- Export to Excel, CSV, JSON, HTML or XML, or send the data to Google Sheets, Make, Zapier and more

### What data can you extract from Adobe Stock?

| | | |
|---|---|---|
| 🏷️ Title and asset link | 🔑 Keywords (tags) | 👤 Contributor name, ID and portfolio link |
| 🖼️ Thumbnails (240, 500, 1000 px) | 🎬 Video, template and audio previews | 📐 Width, height and orientation |
| 🗂️ Category and category path | 📥 Download count | 📅 Upload date |
| 🤖 AI-generated flag | 💳 License level and license prices | 📄 File type |
| 🌍 Country | ⏱️ Duration and frame rate | 🎵 Tempo, moods, genres, album |

### How to scrape Adobe Stock

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **Adobe Stock Scraper**.
3. Enter search words, one per line, or paste contributor IDs and asset IDs.
4. Pick a content type, a sort order and any filters, and set how many results you want per search.
5. Click **Start**, then download the assets as Excel, CSV, JSON or HTML.

### How much does it cost to scrape Adobe Stock?

You pay per asset saved, plus $0.0005 when a run starts.

| Apify plan | Assets per 1,000 |
|---|---|
| Free | $0.50 |
| Starter (Bronze) | $0.45 |
| Scale (Silver) | $0.40 |
| Business (Gold) and higher | $0.25 |

Platform usage is included in these prices, so you pay nothing else for the run.

Example: 10,000 assets cost $5.00 on the Free plan and $2.50 on Business.

Every Apify account gets **$5 of free usage each month**, which is plenty to try the scraper on real searches. **Max results per search or contributor** keeps the cost of a run under control, and you can also set a maximum cost per run.

### ⬇️ Input

| Setting | What it does |
|---|---|
| **Search words** | What to search for, like `mountain lake`, one search per line |
| **Content type** | All, images (photos, illustrations and vectors), photos, illustrations, vectors, videos, templates, 3D or audio |
| **Sort by** | Relevance (default), newest, most downloaded, featured, undiscovered or popular now |
| **Max results per search or contributor** | How many assets to save for each search and contributor (default 100). Set 0 for everything |
| **Orientation** | Horizontal, vertical, square or panoramic |
| **License level** | Free, standard or premium |
| **Generative AI** | Include, only AI-generated, or exclude AI-generated |
| **People** | With or without people |
| **Usage** | Commercial use or editorial use only |
| **Color** | A main color as a hex code, like `#1e90ff` |
| **Transparent background / Isolated / Copy space** | Only assets with that feature |
| **Contributors** | Contributor IDs or portfolio links, like `206104132` |
| **Search within portfolios** | Optional words to search for inside each portfolio |
| **Asset IDs or links** | Single assets, like `180500644` or an asset link |
| **Proxy configuration** | Leave the default |

Free vertical vectors without AI, newest first:

```json
{
  "searchQueries": ["christmas background"],
  "contentType": "vectors",
  "sortBy": "newest",
  "orientation": "vertical",
  "priceLevel": "free",
  "generativeAi": "exclude",
  "maxItems": 500
}
```

A contributor's most downloaded assets and two single assets:

```json
{
  "contributors": ["https://stock.adobe.com/contributor/206104132/john-wijsman"],
  "sortBy": "downloads",
  "assetIds": ["180500644", "https://stock.adobe.com/video/kayak-at-sunset/359620028"],
  "maxItems": 200
}
```

### ⬆️ Output

Every asset is one row:

```json
{
  "id": "180500644",
  "url": "https://stock.adobe.com/images/trees-on-the-shore-of-a-blue-lake-in-late-summer/180500644",
  "title": "Trees on the shore of a blue lake in late summer",
  "assetType": "photo",
  "contributorId": "206104132",
  "contributorName": "John Wijsman",
  "contributorUrl": "https://stock.adobe.com/contributor/206104132/john-wijsman",
  "keywords": ["lake", "landscape", "nature", "sky", "shore", "outdoors", "beautiful", "nobody", "blue", "calm"],
  "category": "Lakes and Ponds",
  "categoryPath": ["Landscapes", "Water", "Lakes and Ponds"],
  "width": 5867,
  "height": 3300,
  "orientation": "horizontal",
  "fileType": "jpg",
  "mimeType": "image/jpeg",
  "thumbnailUrl": "https://as1.ftcdn.net/jpg/01/80/50/06/500_F_180500644_CkFAK3iQDghYFqEqSEwTjIJuCkqqwtWz.jpg",
  "thumbnailSmallUrl": "https://t3.ftcdn.net/jpg/01/80/50/06/240_F_180500644_CkFAK3iQDghYFqEqSEwTjIJuCkqqwtWz.jpg",
  "thumbnailLargeUrl": "https://as1.ftcdn.net/jpg/01/80/50/06/1000_F_180500644_CkFAK3iQDghYFqEqSEwTjIJuCkqqwtWz.jpg",
  "previewUrl": null,
  "downloads": 501,
  "createdAt": "2017-11-12T21:18:40Z",
  "isAiGenerated": false,
  "isEditorial": false,
  "hasReleases": false,
  "isTransparent": null,
  "priceLevel": "standard",
  "licenses": [
    {"type": "Standard", "price": null},
    {"type": "Extended", "price": "US$79.99"}
  ],
  "country": "United States of America",
  "durationSeconds": null,
  "frameRate": null,
  "subtype": null,
  "description": null,
  "tempo": null,
  "moods": null,
  "genres": null,
  "album": null,
  "isInstrumental": null,
  "isLoop": null,
  "source": "lake",
  "scrapedAt": "2026-10-22T14:03:41Z"
}
```

Videos add `durationSeconds`, `frameRate` and a short watermarked `previewUrl` clip; templates and 3D add `subtype` and `description`; sound tracks add tempo, moods, genres, album and a sample in `previewUrl`. The **Overview** and **Details** tabs show the main fields as tables; every field is in the downloads. The run report lists, for each search, how many results Adobe Stock has and how many were saved, and names any contributor or asset that does not exist.

### How can I use Adobe Stock data?

- **Keyword research for contributors:** see which keywords, titles and categories the best-selling assets use
- **Trend research:** what is new, what is popular now and how much of a topic is AI-generated
- **Competitor analysis:** a contributor's whole portfolio with downloads and upload dates
- **Mood boards and creative briefs:** titles, thumbnails and previews for a theme, without browsing page by page
- **Catalog and price checks:** license levels and prices for a list of assets
- **Datasets for analysis:** keywords, categories, sizes and download counts at scale

### How many results can I get from one search?

Adobe Stock shows up to 10,000 results for one search. When you ask for more and a search has more, the scraper splits it into smaller searches that do not overlap (by content type, kind of image, AI-generated or not, license level and people) and reads each one, so broad searches go well past 10,000. Each asset is saved once per run, even when several searches find it.

### Use with AI agents (MCP)

AI agents can run this scraper through the Apify MCP server. Ask for example "Find 50 free vertical photos of mountain lakes on Adobe Stock, no AI images" and the agent sends:

```json
{
  "searchQueries": ["mountain lake"],
  "contentType": "photos",
  "orientation": "vertical",
  "priceLevel": "free",
  "generativeAi": "exclude",
  "maxItems": 50
}
```

### Integrations and API

Run the scraper from your own code with the [Apify API](https://docs.apify.com/api/v2), or connect it to Make, Zapier, n8n, Google Sheets, Airtable, Slack and webhooks from the **Integrations** tab. Schedules run it every hour, day or week, for example to follow the newest uploads for a keyword.

### ❓FAQ

#### How much does it cost to scrape Adobe Stock?

See the **Pricing** tab for the price per 1,000 assets on your plan. You only pay for assets saved, and free accounts get $5 of usage every month.

#### Do I need an Adobe account or API key?

No. The scraper reads only what anyone can see on Adobe Stock without logging in.

#### Does it download the full-size files?

No. You get the asset records with thumbnails and the watermarked previews Adobe Stock shows to everyone. Licensing an asset is done on Adobe Stock.

#### What do the license prices mean?

`priceLevel` says whether an asset is free, standard or premium. `licenses` lists each license the asset is sold under with the price Adobe Stock shows in US dollars; standard licenses are paid with plan credits, so they show no price.

#### Which filters work with contributor portfolios?

Content type, license level, AI-generated, orientation and transparent background. The other filters apply to keyword searches.

#### What happens with a contributor or asset that does not exist?

It is listed in the run report as not found, and the run still succeeds with everything else.

#### Is it legal to scrape Adobe Stock?

The scraper collects public listing information that anyone can see without logging in, and no personal data beyond contributors' public names. The assets themselves remain under their licenses: you are responsible for how you use the data. Adobe Stock Scraper is not affiliated with or endorsed by Adobe.

#### Something does not work. What can I do?

Open the **Issues** tab and tell us the input you used.

If the scraper saves you time, a short review on the Store helps other people find it.

# Actor input Schema

## `searchQueries` (type: `array`):

What to search Adobe Stock for, one search per line, e.g. mountain lake, business meeting, christmas background. Each search uses the content type, sort order and filters below.

## `contentType` (type: `string`):

Which kind of assets to get, e.g. Vectors. All gives every kind the chosen filters apply to.

## `sortBy` (type: `string`):

The order Adobe Stock lists the results in, e.g. Newest.

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

How many assets to save for each search and each contributor, e.g. 500. Set 0 for everything: up to 10,000 per search as Adobe Stock shows them, and more for broad searches, which are split into smaller ones automatically.

## `orientation` (type: `string`):

Shape of the asset, e.g. Vertical. Applies to images, videos and templates.

## `priceLevel` (type: `string`):

Free assets, standard ones (paid with plan credits) or premium ones, e.g. Free.

## `generativeAi` (type: `string`):

Keep or leave out assets made with generative AI, e.g. Exclude AI-generated. Applies to images and videos.

## `people` (type: `string`):

Assets that show people or none, e.g. Without people. Applies to images and videos.

## `usageRights` (type: `string`):

Commercial or editorial-only assets, e.g. Commercial use. Applies to images.

## `color` (type: `string`):

A main color as a hex code, e.g. #1e90ff. Applies to images and videos.

## `transparentOnly` (type: `boolean`):

Only images and vectors with a transparent background.

## `isolatedOnly` (type: `boolean`):

Only cut-out subjects on a plain background (images and videos).

## `copySpaceOnly` (type: `boolean`):

Only images with empty space for your text.

## `contributors` (type: `array`):

Contributor IDs or portfolio links, one per line, e.g. 206104132 or https://stock.adobe.com/contributor/206104132/john-wijsman. Gets the contributor's assets (content type, license level, AI, orientation and transparency apply).

## `portfolioQuery` (type: `string`):

Optional words to search for inside each contributor's portfolio, e.g. lake.

## `assetIds` (type: `array`):

Adobe Stock asset IDs or links, one per line, e.g. 180500644 or https://stock.adobe.com/images/trees-on-the-shore-of-a-blue-lake/180500644. Gets each asset's full record.

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

Leave the default.

## Actor input object example

```json
{
  "searchQueries": [
    "mountain lake"
  ],
  "contentType": "all",
  "sortBy": "relevance",
  "maxItems": 100,
  "orientation": "all",
  "priceLevel": "all",
  "generativeAi": "all",
  "people": "all",
  "usageRights": "all",
  "transparentOnly": false,
  "isolatedOnly": false,
  "copySpaceOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `assets` (type: `string`):

No description

## `details` (type: `string`):

No description

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

No description

## `report` (type: `string`):

No description

# 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 = {
    "searchQueries": [
        "mountain lake"
    ],
    "contentType": "all",
    "sortBy": "relevance",
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/adobe-stock-scraper").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 = {
    "searchQueries": ["mountain lake"],
    "contentType": "all",
    "sortBy": "relevance",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/adobe-stock-scraper").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 '{
  "searchQueries": [
    "mountain lake"
  ],
  "contentType": "all",
  "sortBy": "relevance",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/adobe-stock-scraper --silent --output-dataset

```

## MCP server setup

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

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/1Nbq0mtPvRLiYEbNw/builds/xbaT6SU0sewdJJRQc/openapi.json
